github-mcp
A self-hosted GitHub MCP server that provides tools for managing pull requests, repository files, and Dependabot alerts using a personal access token.
Health Check (
health_check): Verify your GitHub PAT is valid and inspect current rate-limit status, authenticated login, and token scopes.List Pull Requests (
list_prs): List pull requests for any repository, filterable by state (open,closed, orall) with configurable page size.Get Pull Request (
get_pr): Fetch details for a single PR including its check-run status and mergeable state.Merge Pull Request (
merge_pr): Merge a PR using squash, merge, or rebase strategy, with an option to automatically delete the head branch after merging.List Dependabot Alerts (
list_dependabot_alerts): Retrieve Dependabot security alerts for a repository, filterable by state, with a severity-grouped summary.Get File (
get_file): Read the contents of any file in a repository via the GitHub Contents API, optionally targeting a specific branch, tag, or commit SHA.Put File (
put_file): Create or update a file in a repository via the Contents API with a commit message; idempotent when the current blob SHA is supplied for updates.
Allows listing Dependabot alerts with severity-grouped counts.
Allows AI agents to manage pull requests, repository files, and Dependabot alerts through the GitHub API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@github-mcplist my open pull requests"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
github-mcp
Self-hosted GitHub MCP server. Personal-access-token auth, stdio transport, transport-agnostic so it works with Claude Code (any account), Codex CLI, Cursor, or any MCP-compliant client. No claude.ai OAuth dependency.
Written in Python on top of FastMCP. Slots into the same install pattern as other community Python MCP servers.
Why this exists
The official github/github-mcp-server (Go, 60+ tools) is excellent if you want a kitchen-sink server tied to a single agent platform's auth flow. This one is scoped for operators who:
Switch between multiple Claude accounts, Codex CLI, Cursor, or other MCP clients and want the same GitHub auth across all of them.
Prefer a small, audited tool surface scoped to PR + repo file + Dependabot operations.
Want a Python install that lives alongside their other MCP servers.
If neither applies, run github/github-mcp-server instead — that's the right call.
Related MCP server: GitHub MCP Agent Server
Tool surface (v0.1.0)
Tool | Purpose |
| Verify the PAT is valid + report rate-limit headroom. First call when wiring up. |
| List pull requests with state filter. |
| Single PR with check-run status + mergeable state. |
| Squash/merge/rebase with optional branch delete. |
| Alert sweep with severity-grouped counts. |
| Read a file via the Contents API. |
| Create or update a file via the Contents API (idempotent with SHA). |
Future versions expand: workflows, releases, issues, rulesets, secret-scan alerts, branch protection, repo settings.
Secret hygiene (read this first)
v0.1.1+ reads the PAT from macOS Keychain by default. Env-var fallback is still supported for non-macOS / CI, but the Keychain path is the recommended setup because the secret never enters argv or process env — safe from ps aux, pgrep -fl, lsof, /proc/<pid>/environ, panic dumps, CI logs, debuggers, or any LLM agent running an introspection command.
# One-time setup (macOS):
security add-generic-password -s github-mcp -a "$USER" -w "<your-fine-grained-PAT>"
# Update later (e.g. after rotation):
security delete-generic-password -s github-mcp -a "$USER" 2>/dev/null
security add-generic-password -s github-mcp -a "$USER" -w "<new-PAT>"Do NOT install with an inline --env:
# BAD — bakes the PAT into ~/.claude.json + every Claude child spawn's --mcp-config argv.
# Any pgrep / ps aux dumps it.
claude mcp add github --scope user --env GITHUB_TOKEN=github_pat_... -- <command>
# GOOD — no --env block. The server reads from Keychain at call time.
claude mcp add github --scope user -- <command>PR/incident lineage: this hygiene path was added 2026-05-19 after a pgrep -fl chrome-devtools-mcp dumped a PAT-bearing claude process into a session transcript. See adelaidasofia/github-mcp Keychain migration (TODO: link PR once merged).
For non-macOS environments, fall back to env:
export GITHUB_TOKEN=<your-PAT> # set in shell rc, NOT in argvMinimum scopes for the v0.1 tool surface: Contents R/W, Pull requests R/W, Dependabot R.
Install
Open Claude Code, paste:
/plugin marketplace add adelaidasofia/github-mcp
/plugin install github-mcp@github-mcpgit clone https://github.com/adelaidasofia/github-mcp ~/.claude/github-mcp
cd ~/.claude/github-mcp
uv tool install --editable .Or as a one-off without persistent install:
cd ~/.claude/github-mcp
uv run github-mcpAuth
The server reads the GitHub PAT from environment, in this precedence:
GITHUB_TOKENGH_TOKEN
Fine-grained tokens recommended.
Scope matrix
Permission | Access | Unlocks |
Metadata | Read | Baseline (auto-required when any other repo permission is set) |
Contents | Read and write |
|
Pull requests | Read and write |
|
Dependabot alerts | Read |
|
Administration | Read and write | Future: rulesets, branch protection, |
Workflows | Read and write | Future: read/update |
Actions | Read and write | Future: trigger and inspect workflow runs |
Secret scanning alerts | Read | Future: fleet-wide secret-scan sweep |
Code scanning alerts | Read | Future: CodeQL fleet sweep |
v0.1 floor: Metadata + Contents (R/W) + Pull requests (R/W) + Dependabot alerts (R) is enough to use every tool in this release.
Future-proof: granting the full table now means new MCP tools can ship without rotating the PAT. Equivalent to checking "all repository permissions" in the fine-grained PAT UI. Trade-off: broader blast radius if the token leaks. Reasonable for a personal-dev token on an encrypted laptop with FileVault; reconsider for shared or production deployments.
The MCP introspects scopes via health_check — call it after wiring up to confirm what your token actually has.
Optional: GITHUB_API_BASE for GitHub Enterprise Server. Defaults to https://api.github.com.
Wire into an MCP client
Claude Code
Add to ~/.claude/.mcp.json (or any .mcp.json in the project root):
{
"mcpServers": {
"github": {
"command": "uv",
"args": ["run", "--project", "/Users/<you>/.claude/github-mcp", "github-mcp"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}Codex CLI
Add to ~/.codex/config.toml:
[mcp_servers.github]
command = "uv"
args = ["run", "--project", "/Users/<you>/.claude/github-mcp", "github-mcp"]
[mcp_servers.github.env]
GITHUB_TOKEN = "${GITHUB_TOKEN}"Cursor
~/.cursor/mcp.json follows the Claude Code shape. Same env block.
Any other MCP-compliant client
Configure it to spawn the github-mcp command and pipe stdio. The server speaks standard MCP over stdio.
Verify
GITHUB_TOKEN=ghp_yourpat uv run github-mcpThe server will wait on stdin for MCP traffic. In another shell, exercise health_check via your client.
Test
uv pip install -e ".[dev]"
uv run pytest tests/ -vTelemetry
This plugin sends a single anonymous install signal to myceliumai.co the first time it loads in a Claude Code session on a given machine.
What is sent:
Plugin name (e.g.
slack-mcp)Plugin version (e.g.
0.1.0)
What is NOT sent:
No user identifiers, names, emails, tokens, or API keys
No file paths, message content, or anything from your work
No IP address is stored after dedup processing
Why: Helps the maintainer know which plugins people actually install, so attention goes to the ones that get used.
Opt out: Set the environment variable MYCELIUM_NO_PING=1 before launching Claude Code. The hook will skip the network call entirely. Already-pinged installs leave a sentinel at ~/.mycelium/onboarded-<plugin> — delete it if you want to reset state.
License
MIT.
Available Tools
7 toolsget_fileB
Read a file from a repo via the Contents API.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub owner/org name. | |
| repo | Yes | Repository name. | |
| path | Yes | File path within the repo, no leading slash. | |
| ref | No | Branch, tag, or SHA. Default: the default branch. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only adds 'via the Contents API', which is minor context. It omits details like error behavior, file size limits, authentication needs, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, perfectly concise sentence with no wasted words. It front-loads the purpose and fits the principle of minimal but complete specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While an output schema exists, the description lacks behavioral context such as usage guidelines, error handling, or prerequisites. For a simple read tool, this may be acceptable but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% coverage with descriptions for all 4 parameters. The description adds no extra meaning beyond what the schema provides, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read' and the resource 'file from a repo', making the tool's purpose immediately obvious. It distinguishes from siblings like put_file (write) and list_prs (list PRs).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use or avoid this tool. It does not mention alternatives like get_pr or put_file, leaving the agent to infer context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_prA
Fetch a single PR with its check-run status and mergeable state.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub owner/org name. | |
| repo | Yes | Repository name. | |
| number | Yes | PR number. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses that the tool returns check-run status and mergeable state, which is helpful. However, it does not explicitly state that it is a read-only operation or mention any constraints like rate limits or authentication needs. It is mostly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the purpose. No wasted words; it is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a provided output schema (as indicated by context), so return values are documented elsewhere. The description sufficiently explains what the tool does and includes key output fields (check-run status, mergeable state), making it complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all three parameters have descriptions in the schema). The tool description does not add any additional parameter semantics beyond what the schema already provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it 'Fetches a single PR with its check-run status and mergeable state,' using a specific verb and resource. It clearly distinguishes itself from sibling tools like list_prs (which lists multiple PRs) and merge_pr (which merges a PR).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fetching a single PR with status details, but provides no explicit guidance on when to use this tool vs alternatives (e.g., list_prs or merge_pr). No 'when not to use' or comparison to siblings is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkA
Verify the GitHub PAT is valid and report current rate-limit state.
Returns the authenticated login, token scopes (when discoverable), the rate-limit ceiling, remaining requests, and the reset timestamp. Use this as the first call when wiring github-mcp into a new client.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It describes the returned data but does not explicitly state it is read-only or mention error behavior (e.g., if PAT is invalid). Adequate but could be more explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first states purpose and return values, the second provides usage guidance. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an output schema (implied), the description covers all needed info for a health check tool. It mentions key return fields and proper use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the schema coverage is 100%. The description adds no param details, which is fine. Baseline of 4 for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it verifies PAT validity and reports rate-limit state, listing specific returned fields. It is distinct from sibling tools that focus on file, PR, or alert operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends using this as the first call when setting up the client. It does not specify when not to use, but the context makes it clear this is a setup/validation tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dependabot_alertsA
List Dependabot alerts for a repo with a severity-grouped summary.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub owner/org name. | |
| repo | Yes | Repository name. | |
| state | No | "open" | "fixed" | "dismissed" | "auto_dismissed" | "all". Default "open" — the operational case. | open |
| per_page | No | Page size, capped at 100. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It adds the 'severity-grouped summary' behavior beyond the schema, but does not disclose pagination details, rate limits, or what happens with empty results. The description is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose. It could be slightly more structured (e.g., separating the summary feature), but it is concise and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema, the description does not need to explain return values. It adequately covers the key aspect of severity-grouped summary. For a list tool with well-documented parameters, the description is sufficient and leaves no major gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add any additional meaning to parameters beyond what the schema already provides (e.g., owner, repo, state, per_page).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List Dependabot alerts for a repo with a severity-grouped summary,' specifying the verb (list), resource (Dependabot alerts), and a unique output feature (severity-grouped summary), which distinguishes it from sibling tools like list_prs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as when filtering by alert state or needing pagination behavior. There is no mention of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_prsC
List pull requests for a repo.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub owner/org name (e.g. "adelaidasofia"). | |
| repo | Yes | Repository name. | |
| state | No | "open" | "closed" | "all". Default "open". | open |
| per_page | No | Page size, capped at 100 server-side. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose any behavioral traits like pagination (despite per_page parameter), authentication requirements, or rate limits. The bare description offers no safety or performance insights.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise at 5 words, but the brevity sacrifices informativeness. Every word earns its place, yet the description could be more structured (e.g., adding a note about pagination).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 4 parameters, no annotations, and an output schema not referenced, the description omits critical context like pagination behavior or typical response size. It is incomplete for an agent to fully understand invocation effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 4 parameters with descriptions, so the description adds minimal extra meaning beyond the schema. Baseline 3 is appropriate as the description does not enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and resource ('pull requests') and implies a repository context via the 'for a repo' phrasing. It distinguishes from sibling tools like 'get_pr' (single PR) and 'merge_pr' by its plural nature, but does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., 'get_pr' for a single PR). No exclusions or prerequisites mentioned, leaving the agent to infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_prC
Merge a pull request.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub owner/org name. | |
| repo | Yes | Repository name. | |
| number | Yes | PR number. | |
| method | No | "squash" | "merge" | "rebase". Default "squash". | squash |
| delete_branch | No | Whether to delete the head branch after merge. Default true. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It only says 'Merge a pull request,' omitting side effects like branch deletion, authorization needs, rate limits, or non-idempotent nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is excessively concise (4 words) and lacks substance, missing the opportunity to provide useful context. It is not earned conciseness but under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the minimal description, the input schema and output schema (present) provide adequate information for an agent to use the tool, though additional context on merge behavior would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for all parameters, so the description adds no additional meaning; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Merge a pull request.' clearly states the action and resource, distinguishing it from siblings like get_pr and list_prs, though it doesn't specify the context (GitHub) which is inferred from the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, prerequisites for merging (e.g., review status, no conflicts), or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
put_fileA
Create or update a file via the Contents API. Idempotent when sha is correctly supplied for updates.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub owner/org name. | |
| repo | Yes | Repository name. | |
| path | Yes | File path within the repo, no leading slash. | |
| content | Yes | UTF-8 file content. Will be base64-encoded for transport. | |
| message | Yes | Commit message. | |
| branch | No | Target branch. Default: the default branch. | |
| sha | No | Required when updating; the current blob SHA from get_file. Omit for create. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions idempotency for updates when sha is supplied, which is useful. However, it does not disclose authentication needs, rate limits, side effects, or behavior on conflicts. The description adds some context beyond the schema but is not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence (13 words) that front-loads the core action and key trait (idempotency). There is no redundancy or unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters (5 required) and an output schema, the description is minimal. It does not explain prerequisites (e.g., repo existence, access permissions) or error conditions. While output schema exists, more context on the tool's place in workflows would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds marginal value by explaining that sha is 'required when updating' and idempotent behavior, but the schema already describes most parameters adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create or update a file via the Contents API.' It uses specific verbs (create/update) and resource (file via Contents API). Among siblings like get_file (read-only) and merge_pr (PR merging), it unambiguously identifies this as the write tool for files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating or updating files, and the idempotency condition when sha is supplied. However, it does not explicitly state when to use this tool versus alternatives like get_file for reading or merge_pr for pull requests. No exclusions or when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct GitHub resource or action: file read/write, PR operations (single fetch, list, merge), health check, and Dependabot alerts. No overlapping functionality.
Most tools follow a verb_noun pattern (get_file, get_pr, list_prs, merge_pr, put_file), but 'health_check' deviates slightly as a noun_verb compound, and 'list_dependabot_alerts' uses a longer but still consistent verb_noun format.
Seven tools is well-scoped for a focused GitHub MCP server, covering key areas without being overwhelming or trivial.
The tool set lacks essential GitHub operations like creating PRs, managing issues, branches, or repository settings, leaving significant gaps for common workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Create, deploy, and operate MCP servers directly from your GitHub repositories.
A MCP server built for developers enabling Git based project management with project and personal…
GitHub MCP — wraps the GitHub public REST API (no auth required for public endpoints)
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceStandalone MCP server for GitHub that enables repository management, branch operations, pull request handling, and commit retrieval via tools listed in the README.1
- AlicenseBqualityBmaintenanceMCP server that exposes GitHub operations as tools for AI agents, enabling code search, issue management, and PR review.12MIT
- AlicenseAqualityBmaintenanceAn MCP server that provides operational tooling over the GitHub API — issue triage, PR review monitoring, repo health audits, and team access reviews.111MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for the GitHub API, enabling file operations, repository management, search functionality, issues, pull requests, and more.118MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/adelaidasofia/github-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server