Skip to main content
Glama
FerhatDundar

github-mcp-connector

by FerhatDundar

πŸ”Œ github-mcp-connector

Talk to GitHub from an MCP-speaking agent.

CI CodeQL Latest release MCP Registry Go Reference License: MIT MCP Conventional Commits PRs Welcome


A single static Go binary that speaks the Model Context Protocol and exposes 18 tools for working with GitHub: repositories, branches, commits, file contents, issues, pull requests, and search.

No Python, no uv, no runtime dependency to install β€” just a binary and an .mcp.json.

✨ Why this exists

An agent that can only talk about your GitHub repos isn't that useful. This gives it hands: it can read and write files in a repo, open and triage issues, push a branch and open a PR, and merge it β€” all against the real GitHub API, with the same guardrails (size caps, friendly errors, destructive-action annotations) as the sibling connectors.

Related MCP server: epik-gh

🧰 Tools

Tool

What it does

Write?

github_whoami

Get the user authenticated by GITHUB_TOKEN

github_list_repos

List repos for a user/org, or the authenticated user

github_get_repo

Get one repository's details

github_create_repo

Create a new repository

✍️

github_list_branches

List branches in a repository

github_list_commits

List commits, optionally filtered by branch/path

github_get_file_contents

Read a file's content, or list a directory

github_create_or_update_file

Create/update a file via a commit (≀ 5 MB)

✍️

github_list_issues

List issues in a repository

github_get_issue

Get one issue's full details

github_create_issue

Create a new issue

✍️

github_update_issue

Update an issue's title/body/state/labels

✍️

github_add_issue_comment

Comment on an issue or PR

✍️

github_list_pull_requests

List pull requests

github_get_pull_request

Get one PR's full details, incl. diff stats

github_create_pull_request

Open a pull request

✍️

github_merge_pull_request

Merge a pull request

πŸ—‘οΈ destructive

github_search_repositories

Search repositories with GitHub search qualifiers

Every tool accepts an optional response_format: markdown (default, pretty tables for a chat UI) or json (for programmatic use).

πŸš€ Quickstart

Fastest path: grab a prebuilt bundle from the latest release β€” download github-mcp-connector-plugin-<version>-<os>-<arch>.zip, unzip it, and point Cowork/Claude at the plugin/ folder inside (see step 4 of SETUP.md). No Go toolchain required.

From source:

# 1. Build
cd go-server
go mod tidy
go build -o github-connector-server .
cp github-connector-server ../plugin/servers/go/

# 2. Set up auth β€” a personal access token, see SETUP.md
export GITHUB_TOKEN=ghp_...

# 3. Run
./go-server/github-connector-server   # serves MCP over stdio

Or make build β€” see the Makefile for every shortcut (test, vet, fmt, lint, tidy).

Full walkthrough β€” including wiring this up as a Claude/Cowork plugin β€” is in SETUP.md.

πŸ” Configuration

Everything is environment variables, passed through by the plugin's .mcp.json:

Variable

Purpose

Default

GITHUB_TOKEN

Personal access token (classic or fine-grained). Needs repo/public_repo and read:org scopes depending on what you use it for.

β€” (required)

GITHUB_API_URL

GitHub Enterprise Server API base URL, e.g. https://github.example.com/api/v3.

(unset β€” github.com)

πŸ§ͺ Quality bar

This isn't a toy script β€” it's got the same checks you'd expect from a production Go service:

  • βœ… Unit tests for every input-validation path (go test ./...)

  • βœ… go vet + gofmt clean

  • βœ… golangci-lint (govet, staticcheck, errcheck, gosec, and more)

  • βœ… govulncheck β€” no known vulnerabilities in the dependency graph

  • βœ… CodeQL static security analysis on every push

  • βœ… End-to-end verified β€” every tool (repos, branches, commits, file read/write, issues, comments, PRs, merge, search) was exercised against a real, dedicated GitHub sandbox repo, not mocks

  • βœ… Dependabot keeps Go modules and Actions current

All of it runs in CI on every push and PR.

🏷️ Releases & versioning

Versions follow semver and are cut automatically by release-please from Conventional Commits on main:

  • fix: ... β†’ patch (v0.1.0 β†’ v0.1.1)

  • feat: ... β†’ minor (v0.1.1 β†’ v0.2.0)

  • feat!: ... / BREAKING CHANGE: footer β†’ major (v0.2.0 β†’ v1.0.0)

Every merged PR updates a standing "chore(main): release vX.Y.Z" PR with an auto-generated CHANGELOG.md. Merging that PR:

  1. tags the release and publishes it on GitHub

  2. builds and attaches zipped, ready-to-install plugin bundles for linux/darwin/windows Γ— amd64/arm64

  3. regenerates server.json from those exact assets (fresh version + SHA-256 hashes) and publishes it to the official MCP Registry via mcp-publisher, authenticated with GitHub OIDC β€” no stored secrets

See .github/workflows/release-please.yml and .github/workflows/publish-mcp-registry.yml (also runnable by hand for an existing tag via workflow_dispatch).

πŸ“ Layout

github-mcp-connector/
β”œβ”€β”€ README.md                  ← you are here
β”œβ”€β”€ SETUP.md                   ← step-by-step setup guide
β”œβ”€β”€ CONTRIBUTING.md             ← how to contribute
β”œβ”€β”€ CODE_OF_CONDUCT.md
β”œβ”€β”€ SECURITY.md                 ← vulnerability reporting
β”œβ”€β”€ CODEOWNERS
β”œβ”€β”€ LICENSE                     ← MIT
β”œβ”€β”€ Makefile                    ← build / test / lint shortcuts
β”œβ”€β”€ .golangci.yml                ← lint rules
β”œβ”€β”€ release-please-config.json  ← semver/changelog automation config
β”œβ”€β”€ .release-please-manifest.json
β”œβ”€β”€ server.json                  ← MCP Registry manifest (regenerated fresh per release by CI)
β”œβ”€β”€ scripts/
β”‚   └── render-server-json.sh    ← rebuilds server.json from a release's zip assets
β”œβ”€β”€ .github/
β”‚   β”œβ”€β”€ workflows/
β”‚   β”‚   β”œβ”€β”€ ci.yml                     ← build, vet, test, lint, govulncheck
β”‚   β”‚   β”œβ”€β”€ codeql.yml                 ← security scanning
β”‚   β”‚   β”œβ”€β”€ pr-title.yml               ← Conventional Commits PR title check
β”‚   β”‚   β”œβ”€β”€ release-please.yml         ← version PRs, tagging, GitHub releases
β”‚   β”‚   β”œβ”€β”€ publish-mcp-registry.yml   ← publishes server.json to the MCP Registry
β”‚   β”‚   └── rebuild-release-assets.yml ← manual re-attach fallback
β”‚   β”œβ”€β”€ ISSUE_TEMPLATE/
β”‚   β”œβ”€β”€ PULL_REQUEST_TEMPLATE.md
β”‚   └── dependabot.yml
β”œβ”€β”€ go-server/                  ← the MCP server source
β”‚   β”œβ”€β”€ main.go
β”‚   β”œβ”€β”€ main_test.go
β”‚   β”œβ”€β”€ go.mod / go.sum
β”‚   └── README.md
└── plugin/                     ← installable Cowork/Claude plugin
    β”œβ”€β”€ .claude-plugin/plugin.json
    β”œβ”€β”€ .mcp.json                ← holds credentials locally β€” never commit real ones
    └── servers/go/              ← compiled binary goes here

🀝 Contributing

PRs and issues are very welcome β€” see CONTRIBUTING.md for the full guide (setup, coding conventions, how to add a new tool) and the Code of Conduct.

main is protected: every change, including the maintainer's, lands via pull request with CI green. PR titles must follow Conventional Commits β€” that's what drives the automatic versioning above.

Found a security issue? Please follow SECURITY.md instead of opening a public issue.

πŸ“„ License

MIT Β© FerhatDundar

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    A
    maintenance
    A GitHub MCP server that wraps the gh CLI to expose GitHub operations like issues, pull requests, branches, labels, repositories, CI actions, and Projects V2 as tools for MCP clients.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    ghcli-mcp-connector is an MCP server that lets agents run any GitHub CLI (gh) commandβ€”repos, issues, PRs, releases, workflows, gists, and moreβ€”as a single static Go binary with a read-only-by-default safety gate on state-changing operations.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server that wraps the GitHub REST API into tools for repo queries, issue/PR management, code review, search, and authentication, letting coding agents operate GitHub directly in conversations.
    1 npm
    MIT