Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitHub MCP Server (Streamable HTTP, stateless)

TypeScript MCP server that exposes 5 GitHub tools over stateless Streamable HTTP.
No sessions / no mcp-session-id — each POST is independent (good for gateways and multi-instance deploy).
The GitHub access-token header is required only for tools/call.
initialize, tools/list, and other discovery methods work without a token.

Tools

Tool Description
get_me Authenticated user for the token
get_repository Repository metadata (owner, repo)
get_file_contents File or directory contents (owner, repo, path, optional ref)
list_issues List issues (PRs filtered out)
create_issue Create an issue (title, optional body, labels, assignees)

Requirements

  • Node.js 18+
  • A GitHub personal access token (classic or fine-grained) with the scopes your tools need
    • Read tools: repo (or public-only fine-grained read)
    • create_issue: issues write on the target repo

Setup

npm install
npm run build
npm start

Dev (no build step):

npm run dev

Docker

docker build -t github-mcp .
docker run --rm -p 3000:3000 github-mcp

MCP endpoint: http://localhost:3000/mcp.

Server listens on http://localhost:3000/mcp (override with PORT).

Authentication

MCP method access-token required?
initialize, tools/list, ping, notifications No
tools/call Yes

On tool calls, send a GitHub personal access token:

access-token: ghp_your_token_here

Alternatively:

Authorization: Bearer ghp_your_token_here

Missing token on tools/call401 JSON-RPC error.

Client configuration

Point any Streamable HTTP MCP client at:

http://localhost:3000/mcp

Send the GitHub token on tool-call requests (many clients set it for all requests to the server):

{
  "mcpServers": {
    "github": {
      "url": "http://localhost:3000/mcp",
      "headers": {
        "access-token": "ghp_your_token_here"
      }
    }
  }
}

(Exact client config shape depends on the client.)

Health check

curl http://localhost:3000/health

Project layout

src/
  index.ts    # Express + stateless Streamable HTTP (POST only), access-token middleware
  server.ts   # McpServer factory
  tools.ts    # 5 tool registrations
  github.ts   # GitHub REST client
  context.ts  # AsyncLocalStorage for per-request token

License

MIT

About

GitHub MCP server (TypeScript, Streamable HTTP) — pass access-token header to call 5 GitHub tools

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages