5 min read

GitHub MCP Server: Let Your AI Assistant Work in GitHub (GitHub, Scanned)

GitHub's official MCP server: let AI assistants read code and manage issues, PRs and Actions.

GitHub MCP Server logo
✅
Scan: safe. Nothing malicious, and a well-run repository. The note is about use: the assistant acts with your token's permissions, so scope the token and consider read-only or lockdown mode. Scanned Oct 26, 2026; the full report is below.

The GitHub MCP Server is GitHub's own bridge between AI assistants and GitHub. Connect it to Claude, VS Code's Copilot agent mode, Cursor, Windsurf or any client that speaks the Model Context Protocol, and the assistant can browse and search code, read commits, open and update issues and pull requests, check Actions runs and failed builds, manage releases, and read security and Dependabot alerts, all from a chat.

There are two ways to run it. GitHub hosts a remote version at api.githubcopilot.com/mcp that you sign in to with OAuth or a personal access token; or you run the open-source server yourself from a Docker image or a Go binary. Either way you choose which toolsets are exposed, and a read-only mode removes every tool that can change anything.

It is MIT-licensed, written in Go, and maintained by GitHub with about 34,000 stars. The thing to understand before using it is that the assistant acts with whatever your token allows, and reads content that strangers can write.

Who it is for

Developers who already use an AI assistant and want it to handle GitHub chores, such as triaging issues, summarizing pull requests or chasing a failing workflow, without copying and pasting between tabs.

Getting started

1. Add the local server to Claude Code with a personal access token (needs Docker)

claude mcp add github -e GITHUB_PERSONAL_ACCESS_TOKEN=$GITHUB_PAT -- docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN ghcr.io/github/github-mcp-server

2. Run it read-only, so the assistant can look but not change anything

docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN=<your-token> -e GITHUB_READ_ONLY=1 ghcr.io/github/github-mcp-server

VS Code 1.101 and later, Cursor and other hosts with remote MCP support can skip Docker and point at https://api.githubcopilot.com/mcp/ instead. Use --toolsets (or GITHUB_TOOLSETS) to expose only what you need, such as repos,issues.

Safety scan

We cloned github/github-mcp-server at commit f385262 on Oct 26, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • The 29 token hits are all placeholders made of x's in two test files, pkg/http/middleware/pat_scope_test.go and token_test.go, which check how the server recognizes and scopes different GitHub token formats. No real token is present.
  • The one pattern hit is script/lint, a developer script that pipes the golangci-lint installer to sh. It is not part of the server.
  • 13 known advisories: 7 in ui/package-lock.json, the Vite and Zod build tooling for the server's small UI, and 6 in go.mod, including a moderate one in the chi router about trusting X-Forwarded-For for client IPs, which matters only if you run the HTTP mode behind a proxy and rely on client IPs.
  • Every tool runs with your token. Content in public repositories, such as issue text or pull request comments, can contain instructions aimed at the AI; the server's lockdown mode hides content from authors without push access, but the project says plainly that it is a filter, not a permission boundary. A fine-grained token limited to the repositories you need is the real control.
  • 13 workflows, none using pull_request_target, and all 10 third-party actions pinned to commits. Security policy, Dependabot, CodeQL, contributing guide and code of conduct all present.

What the scanner counted

CheckResult
Secrets29 candidates found and read; see the notes above.
Suspicious code1 pattern hit found and read; every one is listed under the raw findings.
Install-time codeNone: nothing runs at install beyond the package manager itself.
Committed binariesNone.
CI workflows13 workflows. None use pull_request_target. 0 of 10 third-party actions pinned to a tag rather than a commit.
Network hosts40 distinct hosts referenced from source; most often github.com, api.github.com, api.example.com, gist.github.com. No URLs to bare IP addresses.
Known vulnerabilities13 advisories across 254 pinned packages: 0 critical, 2 high, 5 moderate, 1 low, 5 unrated. go.mod: 37 packages, 6 advisories; ui/package-lock.json: 217 packages, 7 advisories.
Project hygieneHas security policy, automated dependency updates, CodeQL, licence file, contributing guide.
OpenSSF ScorecardNot scored: the project is not in Scorecard's weekly index.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

Secret candidates (29, redacted)
WhereRuleMatch
pkg/http/middleware/pat_scope_test.go:49github-tokengho_xx…xxx (40 chars)
pkg/http/middleware/pat_scope_test.go:59github-tokengithub…xxx (34 chars)
pkg/http/middleware/pat_scope_test.go:69github-tokenghp_xx…xxx (40 chars)
pkg/http/middleware/pat_scope_test.go:80github-tokenghp_xx…xxx (40 chars)
pkg/http/middleware/pat_scope_test.go:91github-tokenghp_xx…xxx (40 chars)
pkg/http/middleware/pat_scope_test.go:171github-tokenghp_xx…xxx (40 chars)
pkg/http/middleware/token_test.go:42github-tokenghp_xx…xxx (40 chars)
pkg/http/middleware/token_test.go:45github-tokenghp_xx…xxx (40 chars)
pkg/http/middleware/token_test.go:50github-tokenghp_xx…xxx (40 chars)
pkg/http/middleware/token_test.go:53github-tokenghp_xx…xxx (40 chars)
pkg/http/middleware/token_test.go:58github-tokenghp_xx…xxx (40 chars)
pkg/http/middleware/token_test.go:61github-tokenghp_xx…xxx (40 chars)
pkg/http/middleware/token_test.go:67github-tokengithub…xxx (34 chars)
pkg/http/middleware/token_test.go:70github-tokengithub…xxx (34 chars)
pkg/http/middleware/token_test.go:75github-tokengithub…xxx (34 chars)
pkg/http/middleware/token_test.go:78github-tokengithub…xxx (34 chars)
pkg/http/middleware/token_test.go:84github-tokengho_xx…xxx (40 chars)
pkg/http/middleware/token_test.go:87github-tokengho_xx…xxx (40 chars)
pkg/http/middleware/token_test.go:92github-tokengho_xx…xxx (40 chars)
pkg/http/middleware/token_test.go:95github-tokengho_xx…xxx (40 chars)
pkg/http/middleware/token_test.go:101github-tokenghu_xx…xxx (40 chars)
pkg/http/middleware/token_test.go:104github-tokenghu_xx…xxx (40 chars)
pkg/http/middleware/token_test.go:109github-tokenghu_xx…xxx (40 chars)
pkg/http/middleware/token_test.go:112github-tokenghu_xx…xxx (40 chars)
and 5 more
Pattern hits (1)
WhereRuleMatch
script/lint:12download-piped-to-shellcurl -sSfL https://golangci-lint.run/install.sh | sh -s -- -b "$BINDIR" "$GOLANGCI_LINT_VERSION"
Worst known vulnerabilities (13 of 13)
AdvisorySeverityPackageSummary
GHSA-587h-7wmj-h5pmhighvite@8.3.2launch-editor: `fs.existsSync()` existence check can be bypassed on Windows
GHSA-mrhx-c7xc-m3w5highzod@4.6.5Zod can exhaust memory while validating oversized constrained collections
GHSA-j6qf-3m9c-vwj3moderategithub.com/go-chi/chi/v5@5.3.2chi: Client IP spoofing in ClientIPFromXFF via X-Forwarded-For
GHSA-698v-4r3x-3vcvmoderatevite@8.3.2launch-editor: escapeCmdArgs() omits % escaping on Windows
GHSA-r825-w8mm-5pxwmoderatevite@8.3.2launch-editor: Editor CLI flag misinterpretation causing arbitrary command execution for some editors
GHSA-rq7h-c2jc-7f22moderatevite@8.3.2Vite: Files outside `server.fs.allow` could be served when project paths match system paths on non-Windows machine
GHSA-vfpm-58rq-9qcgmoderatevite@8.3.2Vite: First 4 bytes of files outside of `server.fs` setting is exposed by `?vite-wasm-instance`
GHSA-9jrq-w75r-8gcwlowvite@8.3.2Vite: Cross origin script execution through Vite custom middleware
CVE-2026-78659unknowngolang.org/x/net@0.59.0HTTP/2 server memory exhaustion due to Trailer headers in net/http
CVE-2026-78660unknowngolang.org/x/net@0.59.0HTTP/2 transport accepts malformed framing-related headers in net/http
CVE-2026-78669unknowngolang.org/x/net@0.59.0Excessive CPU consumption from repeated initial window changes in net/http
CVE-2026-78663unknowngolang.org/x/net@0.59.0Double flow control refund on HTTP/2 server streams in net/http
CVE-2026-97032unknowngolang.org/x/net@0.59.0HTTP/2 server crash due to HPACK encoder race in net/http

By the numbers

Stars34K
Forks5,231
Contributors173
Commits1,193
Open issues209
Open pull requests200
Releases86
Latest releasev2.0.3
LicenceMIT
Main languageGo
Project age1 year
Last pushOct 23, 2026
Tracked files660
Lines of code155.2K
Checkout size7 MB

Lines by language: Go 140.5K, Markdown 8,154, TypeScript 4,861, YAML 1,152, JSON 197, HTML 176.

Questions

Is the GitHub MCP Server free?

Yes. The server is MIT-licensed and free to run yourself, and the remote server hosted by GitHub is available to GitHub accounts. Your AI client may have its own costs, and some organizations need a policy enabled before members can use the remote server.

Is it safe to give an AI assistant access to my GitHub?

It is as safe as the token you hand it. Use a fine-grained personal access token limited to specific repositories and permissions, start with --read-only, enable only the toolsets you use, and turn on lockdown mode if the assistant will read issues and comments from public repositories, where anyone can plant instructions.

What is the difference between the remote and the local server?

The remote server is hosted by GitHub at api.githubcopilot.com/mcp and supports OAuth sign-in, so there is nothing to install. The local server runs on your machine from Docker or a Go binary with a personal access token, works with any MCP client that launches local servers, and can point at GitHub Enterprise Server.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.