
Ghcli Mcp Connector
io.github.FerhatDundarPublished by GitHub account FerhatDundarv0.1.1Updated Oct 24, 2026
MCP server for the GitHub CLI (gh). Read-only by default; single Go binary.
Overview
A local MCP server that lets an assistant run GitHub CLI (gh) commands, read-only by default, with writes gated behind an opt-in and per-call confirmation.
- What you can do
- Run any gh command or subcommand through a single exec tool, covering repos, issues, pull requests, releases, gists, workflows, runs, secrets, variables, projects, rulesets, codespaces, extensions and the raw API endpoint, with markdown or JSON output. Look up gh help text for a command or subcommand to check exact syntax before running it. Show the GitHub identity the configured authentication resolves to. State-changing commands are blocked unless the server is set to allow writes and the individual call confirms.
- When to use it
- Useful when an assistant needs broad GitHub coverage beyond a fixed set of curated tools, such as listing pull requests, creating issues, triggering workflows or calling the GitHub API. Good for read-only exploration of repositories out of the box, with writes enabled only when needed.
- Requirements
- Runs as a local process over stdio; prebuilt bundles exist for macOS, Linux and Windows, or build from source with Go. The gh CLI must be installed and authenticated on the host (gh auth login or a token), and repo-scoped commands need an explicit owner/repo flag. Optional environment variables: GH_TOKEN or GITHUB_TOKEN, GH_HOST for GitHub Enterprise, GHCLI_MCP_ALLOW_WRITE, GHCLI_MCP_ALLOWED_REPOS and GHCLI_MCP_CLI_PATH.
Installation
In SourceWeft
- Open Ghcli Mcp Connector in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
🔌 ghcli-mcp-connector
Talk to the GitHub CLI (gh) 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 lets an agent run GitHub CLI commands: any gh <command> <subcommand>
invocation — repo, issue, pr, release, gist, workflow, run,
secret, variable, project, ruleset, codespace, extension, api,
and more — with a read-only-by-default safety gate on anything that
changes state on GitHub.
No Python, no uv, no runtime dependency to install — just a binary and
an .mcp.json. It shells out to the gh binary already installed and
authenticated on the host (gh auth login, stored in the OS keychain, or
GH_TOKEN/GITHUB_TOKEN) instead of reimplementing a GitHub API client,
so it gets the full breadth of the CLI for free rather than a hand-curated
subset of endpoints.
Note: this is a sibling of github-mcp-connector, not a replacement. That one talks to the GitHub REST API directly via
google/go-githubwith a curated set of 18 tools. This one shells out to theghCLI itself — same trade-off asaws-mcp-connectorvs. a hand-written AWS SDK client: broader coverage (gh extensions, gh's own filters/formatting, workflow/run/codespace/project/ruleset management) through a singleghcli_execescape hatch, instead of a curated surface.
✨ Why this exists
An agent that only has a narrow, hand-picked set of GitHub tools hits a wall the moment you need something outside that set. This connector instead wraps the
ghCLI itself, so an agent can rungh pr list,gh issue create,gh workflow run,gh api repos/owner/repo/issues— anything the CLI can do — without waiting on a new tool to be written for it. State-changing commands are blocked by default and require both a server-level opt-in and a per-callconfirm=true, so exploring/ reading is safe out of the box.
🧰 Tools
Every tool accepts an optional response_format: markdown (default,
readable for a chat UI) or json (for programmatic use).
This server has no working-directory git repo, so repo-scoped commands
need an explicit -R/--repo owner/repo rather than relying on gh's
cwd-based repo detection.
🚀 Quickstart
Fastest path: grab a prebuilt bundle from the latest release —
download ghcli-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:
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:
🧪 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+gofmtclean - ✅ 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 against real GitHub during development — 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:
- tags the release and publishes it on GitHub
- builds and attaches zipped, ready-to-install plugin bundles for linux/darwin/windows × amd64/arm64
- regenerates
server.jsonfrom those exact assets (fresh version + SHA-256 hashes) and publishes it to the official MCP Registry viamcp-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
🤝 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
Source: README.md at commit 14b9c4f
Tools
0Version history
1- v0.1.1LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
