GitHub
GitHub’s official server lets AI read and manage code, issues and pull requests in your account. Use GitHub’s hosted version or run it locally with Docker.
Description from the maker (original English)
GitHub tools for coding agents: issues, project boards, pull requests, releases and Actions.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"github-tools": {
"command": "npx",
"args": [
"-y",
"@craftsamo/github-tools"
]
}
}
}Run this in your terminal
claude mcp add github-tools -- npx -y @craftsamo/github-toolsPaste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"github-tools": {
"command": "npx",
"args": [
"-y",
"@craftsamo/github-tools"
]
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"github-tools": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@craftsamo/github-tools"
]
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026
The registry name was verified with the GitHub account craft-agent, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
The registry does not list a required key, though some servers ask you to sign in on first use.
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.7.0) reached the registry today.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: GitHub, Desktop Commander, Cloudflare MCP
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
GitHub’s official server lets AI read and manage code, issues and pull requests in your account. Use GitHub’s hosted version or run it locally with Docker.
MCP server for terminal commands, file operations, and process management
Cloudflare MCP servers
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
GitHub tools for coding agents: issues, project boards, pull requests, repositories, releases and Actions. One implementation, delivered to each agent harness in the form that suits it best.
| Harness | Delivery | Pinned by |
|---|---|---|
| OpenCode V2 | native plugin (npm package, with skills) | the version in the package |
| OpenCode V1 | native plugin (npm package, no skills) | the version in the package |
| Claude Code | plugin: MCP server and skills | the release tag, as the ref |
| Codex | plugin: MCP server and skills | the release tag, as the ref |
| Grok Build | plugin: MCP server and skills | the release tag, as @ref |
| Antigravity | plugin: MCP server and skills | the release tag's tree URL |
| Hermes Agent | native plugin (Python, calls the command line) | the release commit, as the SHA |
| other MCP host | MCP server from npm | the version in the package |
0.3.0 moved the package from craftsamo/agent-github to craft-agent/github-tools and renamed it: npm @craftsamo/github-tools (was @craftsamo/agent-github, now removed from npm), plugin and MCP server github-tools, programs github-tools and github-tools-cli, settings GITHUB_TOOLS_*. Allow rules, plugin installs and MCP configurations written for 0.2.0 change; the tool IDs do not.
The tools need Node.js 24 or later and the GitHub CLI, authenticated as you. docs/conventions.md describes how the tools are named and how they behave.
Install from a release, never from the default branch: a release is a tag whose commit carries the built dist/, and the default branch does not. In the commands below, is a release's version (1.2.3) and is the commit its tag names:
gh api repos/craft-agent/github-tools/commits/v<version> --jq .sha
OpenCode V2 takes the package and its options in opencode.json:
{
"plugins": [ { "package": "@craftsamo/github-tools@ ", "options": { "toolsets": ["issues", "pull_requests", "projects"] } } ], "permissions": [{ "action": "github_*", "resource": "*", "effect": "ask" }] }
OpenCode V1 takes the package as a string, or as a pair with its options:
{
"plugin": [["@craftsamo/github-tools@ ", { "toolsets": ["issues", "pull_requests", "projects"] }]], "permission": { "github_*": "ask" } }
OpenCode allows any action no rule names, so the plugin's request is granted silently unless a rule says ask. Read tools never ask, so the github_* glob is safe.
V1 registers no skills. Unpack the package and copy its skills/* folders into ~/.config/opencode/skills/:
npm pack @craftsamo/github-tools@<version>
tar -xzf craftsamo-github-tools- .tgz mkdir -p ~/.config/opencode/skills cp -r package/skills/* ~/.config/opencode/skills/ rm -rf package craftsamo-github-tools- .tgz
claude plugin marketplace add craft-agent/github-tools#v<version>
claude plugin install github-tools@craft-agent
codex plugin marketplace add craft-agent/github-tools --ref v<version>
codex plugin add github-tools@craft-agent
Codex turns - into _ in server names, so it shows the tools as mcp__github_tools__github_issue_*. It starts the MCP server in the plugin's install directory, so name issues as owner/repo#N or pass repo (a bare number fails there with a message saying so).
grok plugin install craft-agent/github-tools@v<version> --trust
Grok starts the MCP server in the session's working directory, so inside a clone a bare issue number names an issue of that repository.
Install from the tree of the release tag, never from the default branch, which has no built dist/; Antigravity clones the tag into ~/.gemini/config/plugins/github-tools.
agy plugin install https://github.com/craft-agent/github-tools/tree/v<version>
Hermes installs a commit, not a tag, and the plugin installs disabled:
hermes plugins install craft-agent/github-tools --ref <sha>
hermes plugins enable github-tools
If a Hermes gateway is already running, restart it (hermes gateway restart) to load the plugin.
Add the server to the host's MCP configuration. Flags go in args:
{
"mcpServers": { "github-tools": { "command": "npx", "args": ["-y", "@craftsamo/github-tools@ ", "--toolsets", "issues,pull_requests,projects"] } } }
Each toolset comes with a skill that tells an agent how to use its tools. A toolset with no tools yet registers none (so far issues and projects have tools).
issues)| Tool | What it does | Class |
|---|---|---|
github_issue_read | view one issue in full, or list a repository's issues or a parent's sub-issues | read |
github_issue_create | create an issue with its kind, labels, assignees, milestone, parent and blocked-by issues | add |
github_issue_edit | change the title, body (or append to it), kind, labels, assignees or milestone | overwrite |
github_issue_comment | comment on an issue | add |
github_issue_close | close with a reason (completed, not_planned, duplicate) | overwrite |
github_issue_reopen | reopen a closed issue | overwrite |
github_issue_relate | set the parent, sub-issues, blocked-by and blocking issues, sending only what differs | idempotent |
github_issue_develop | create a branch on GitHub linked to the issue, or return the one already linked | idempotent |
The skill is github-issues, shown as github-tools:github-issues in Claude Code and github-tools:issues in Hermes. An issue's kind is the organization's Issue Type of that name when it defines one, otherwise a type: label.
projects)| Tool | What it does | Class |
|---|---|---|
github_project_read | view a board with its fields and views, list boards, or item_list a board's items | read |
github_project_create | create a board, or reuse the one of that title, with the standard fields and views | idempotent |
github_project_field_ensure | add a field, or the missing options of a single select | idempotent |
github_project_view_ensure | add a saved view with its fields, columns, grouping and sort | idempotent |
github_project_link | link a board to a repository of the same owner | idempotent |
github_project_unlink | unlink a board from a repository | idempotent |
github_project_item_add | put an issue or pull request on a board, or return its item, with field values | idempotent |
github_project_item_create | create a draft item with field values | add |
github_project_item_edit | set or clear field values, and change a draft's title and body | overwrite |
github_project_item_archive | archive an item | overwrite |
github_project_item_unarchive | bring an archived item back | overwrite |
github_project_item_convert | turn a draft into an issue, with its kind, labels and milestone | add |
The skill is github-projects, shown as github-tools:github-projects in Claude Code and github-tools:projects in Hermes. A board is named by its number, owner/N, URL or title (Roadmap when none is given), and found among the boards linked to the repository, then its organization's, then the viewer's. The token needs the project scope (gh auth refresh -s project). No API sets a roadmap view's date fields, so after github_project_create set the Roadmap view's "Date fields" to Start and Target in the web UI.
Every read tool is named github_ _read. Reads can run unasked; writes are confirmed by the harness.
| Harness | Reads without asking |
|---|---|
| OpenCode | always; the plugin asks only before a write |
| Claude Code | the rule mcp__plugin_github-tools_github-tools__*_read in permissions.allow of ~/.claude/settings.json or a project |
| Codex | always; Codex runs tools that declare readOnlyHint unasked, as the read tools do |
| Grok Build | grok --allow 'MCPTool(github-tools__*_read)' --allow 'MCPTool(github_*_read)' (both rules; see below) |
| Antigravity | the rule mcp(github-tools_github-tools/github_issue_read) in permissions.allow of ~/.gemini/antigravity-cli/settings.json, one for each read tool |
| Hermes | always; the plugin asks only before a write |
Where a write is asked about, and where it is not:
github_* rule shown under OpenCode.codex exec, and Grok Build under grok -p, refuse a write they cannot ask about, unless it is allowed beforehand.use_tool tool, and the agent often names a tool without its server first (github_project_read). Grok checks the rules against the name as given, so the server-qualified rule alone does not match that first call, and grok -p refuses it and stops instead of letting the agent retry with github-tools__github_project_read. The second rule matches the short name; a write still matches neither.github-tools_github-tools (plugin, then server). agy -p refuses a tool it cannot ask about; --dangerously-skip-permissions runs every tool unasked.hermes chat -q refuses a write it cannot ask about; hermes -z and --yolo skip approval, so writes then run unasked.Every entry point
Only the beginning is shown; read the rest in the repo