@sumirati/mcp-github
Summary: A lean 5-tool GitHub MCP server that pairs 3 eager read-only daily drivers with dynamic discovery/execution of a 75-action catalog spanning 13 domains — all on a ~450-token prompt surface.
Read files & directories (
get_file_contents): fetch any file or listing at a branch/tag/SHA without cloning, with automatic Base64→UTF-8 decoding.Inspect repositories (
get_repository): metadata, visibility, description, default branch, clone URLs, stars, and topics.Review commits (
get_commit): author, message, and unified diffs, token-capped viamax_diff_lines(default 400) with optional single-file filter.Discover capabilities (
github_find_actions): keyword or domain search across all 75 actions, returning names, mutating flags, descriptions, and full parameter schemas.Execute anything (
github_execute_action): run any catalog action by name with a params dictionary.Covered domains: repositories & branches, commits & statuses, pull requests & reviews, issues & labels, milestones, collaborators & roles, Actions variables/secrets, CI/CD workflows, releases & tags, webhooks, gists, Dependabot security alerts, and user/org context.
Token economy: recursive output projection strips links/avatars/node_ids (70%+ savings) and truncates diffs and CI logs.
Safety & ergonomics: mutating actions are blocked in
GITHUB_READ_ONLYmode; outputs available asjsonormarkdown; strict input validation on every action.
Provides tools for interacting with the GitHub REST API, enabling AI agents to manage repositories, files, branches, pull requests, issues, labels, comments, releases, and tags, as well as retrieve user and organization information.
Provides tools for interacting with GitHub Actions, enabling AI agents to list and inspect CI/CD workflows, workflow runs, and jobs, fetch job logs, and trigger, cancel, or rerun workflows.
Click on "Deploy 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., "@@sumirati/mcp-githublist open pull requests in sumirati/mcp-github"
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 Server (@sumirati/mcp-github)
A modern, 2026 AI-native Model Context Protocol (MCP) server for GitHub REST API, engineered for autonomous AI agents and developer workflows.
What makes v2 Unique: The 2026 5-Tool Hybrid Standard
In early MCP servers, exposing 50–100+ eager tool definitions flooded every LLM turn with thousands of redundant schema tokens ("System Prompt Tax") and degraded reasoning coherence.
Architecturally aligned with @sumirati/mcp-gitlab, @sumirati/mcp-github solves this with a 5-Tool Hybrid Surface:
Glama TDQS Coherence Tier A (5/5): By exposing exactly 5 tools to the client, the server sits in the ideal 3–15 tool coherence sweet spot.
Ultra-Lean System Prompt Tax: Drops schema overhead from ~14.7k tokens down to ~450 tokens (97% reduction), preserving context windows and maximizing LLM prompt-cache hits.
Zero-Hop Hourly Drivers: The 3 operations developers and agents use constantly (
get_file_contents,get_repository,get_commit) remain eager tools for instant zero-hop execution.100% Platform Access on Demand: The entire platform surface of 79 actions across 13 domains is accessible on-demand via dynamic action discovery (
github_find_actions$\rightarrow$github_execute_action), supporting both JSON and Markdown output (format: "json" | "markdown").Resilient Fallback: If an agent directly invokes any catalog action name (e.g.
list_pull_requests), the server dynamically executes it with full input validation and projection.
LLM Prompt Context (~450 tokens total):
├── 1. github_find_actions(query, [domain], [format]) [Meta Discovery]
├── 2. github_execute_action(action, params, [format]) [Meta Dynamic Execution]
├── 3. get_file_contents(owner, repo, path) [Eager Daily Driver #1]
├── 4. get_repository(owner, repo) [Eager Daily Driver #2]
└── 5. get_commit(owner, repo, ref) [Eager Daily Driver #3]
Under the hood (Dynamic Registry):
└── 79 Curated Actions across 13 Domains (with 70%+ token reduction projections)Related MCP server: GitHub Dev Copilot
Core Capabilities Across 13 Domains
Enterprise Observability & Diagnostics: End-to-end API latency, authentication verification, remaining rate limits, and read-only status (
system_health_check).Repositories & Governance: Full repository lifecycle, branch management, branch protection rules (
get_branch_protection), file reading (auto Base64-decoded), atomic multi-file commits, and repository topics.Pull Requests & Code Reviews: PR lifecycle (
create,update,merge), review comments, inline diff reviews, and two-stage diff inspection with lockfile filtering.Issues & Milestones: Issue tracking, milestone assignment, progress notes, and label management.
CI/CD & GitHub Actions: Workflow inspection, workflow runs, job status, build artifacts (
list_workflow_run_artifacts,get_workflow_run_artifact), log tailing, run cancel/retry, and action triggers.Releases & Tags: Release publishing, tag creation, asset inspection, and release notes management.
Actions Variables & Secrets: Manage repository and environment variables for automated CI/CD pipelines.
Collaborators & Permissions: Audit and manage repository collaborators and permission levels.
Security & Dependabot: Audit Dependabot security alerts and vulnerability reports.
Gists & Snippets: Full gist lifecycle for sharing code templates and configurations.
Webhooks & Integrations: Audit repository webhooks and subscribed event triggers.
Quickstart & Installation
Option 1: Run with npx (No installation needed)
npx -y @sumirati/mcp-githubOption 2: Install Globally
npm install -g @sumirati/mcp-github
mcp-githubOption 3: Local Clone
git clone https://github.com/sumirati/mcp-github.git
cd mcp-github
npm install
npm test
npm startEnvironment Configuration
Variable | Required | Default | Description |
| Yes | — | GitHub Personal Access Token (classic or fine-grained) |
| No | — | Alternative token variable name |
| No |
| Base API URL (or GitHub Enterprise Server) |
| No |
| Enable 3-tier read-only mode ( |
| No |
| Set to |
Client Configuration
Google Antigravity / Claude Desktop / Cursor
Add to your MCP configuration file (mcp_config.json or claude_desktop_config.json):
Using npm / npx (Recommended):
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@sumirati/mcp-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "<your-github-token>",
"GITHUB_READ_ONLY": "false"
}
}
}
}Using local clone:
{
"mcpServers": {
"github": {
"command": "node",
"args": ["/path/to/mcp-github/index.js"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "<your-github-token>",
"GITHUB_READ_ONLY": "false"
}
}
}
}Complete Action Catalog Reference (75 Actions)
All 75 actions feature strict input validation and 2-tier field-mask projections:
1. The 5 Client-Exposed Tools (Hybrid Mode)
Tool | Type | Description |
| Meta | Search and discover available GitHub operations across all 13 domains with compact parameter schemas |
| Meta | Execute any discovered GitHub platform action with input validation and token-optimized projection |
| Eager | Read raw file contents (auto Base64 decoded) or directory listings at any ref without cloning |
| Eager | Retrieve repository metadata, visibility, description, default branch, clone URLs, and topics |
| Eager | Inspect Git commit details, author info, and token-capped file diffs |
2. Repositories & Branches (11 actions)
Action | Description | Mutating? |
| Search public or accessible GitHub repositories by query | No |
| Create a new repository for the authenticated user or organization | Yes |
| Fork a repository to your account or specified organization | Yes |
| List branches with commit SHAs and protection status | No |
| Get detailed branch metadata, protection rules, and head commit | No |
| Create a new git branch from an existing branch or SHA | Yes |
| Delete a git branch (destructive) | Yes |
| Create or update a single file with a commit | Yes |
| Delete a file from a repository with a commit | Yes |
| Atomically commit multiple file additions, edits, or deletions | Yes |
3. Commits & Statuses (4 actions)
Action | Description | Mutating? |
| List chronological commit history filtered by branch, date, or author | No |
| Get combined CI status checks and commit statuses for a ref | No |
| Post a status check result to a specific commit SHA | Yes |
4. Pull Requests & Reviews (11 actions)
Action | Description | Mutating? |
| List PRs filtered by state ( | No |
| Get detailed PR metadata, mergeability status, head, and base refs | No |
| Get token-capped unified diff of PR changes with max line limits | No |
| Create a new pull request with head, base, title, and body | Yes |
| Update title, body, state, or base branch of an existing PR | Yes |
| Merge a pull request with merge, squash, or rebase strategy | Yes |
| List inline review comments on a pull request | No |
| Create an inline review comment on a specific diff line | Yes |
| Reply directly to an existing inline review comment thread | Yes |
| List formal reviews submitted on a pull request | No |
| Submit an | Yes |
5. Issues & Labels (8 actions)
Action | Description | Mutating? |
| List repository issues filtered by state, labels, assignee, or milestone | No |
| Get detailed issue description, assignees, labels, and state | No |
| Create a new issue with title, body, labels, and assignees | Yes |
| Modify title, body, state ( | Yes |
| List conversation comments on an issue | No |
| Post a comment note to an issue | Yes |
| List all repository labels with names and color hex codes | No |
| Create a new label with name, color, and description | Yes |
6. Milestones (4 actions)
Action | Description | Mutating? |
| List repository milestones with open/closed counts and due dates | No |
| Get milestone metadata and progress statistics | No |
| Create a new milestone with title, description, and due date | Yes |
| Update milestone title, description, state, or due date | Yes |
7. Collaborators & Roles (4 actions)
Action | Description | Mutating? |
| List collaborators with role names ( | No |
| Check permission level of a specific user on a repository | No |
| Invite or add a collaborator with designated permission | Yes |
| Remove collaborator access from a repository | Yes |
8. Actions Variables & Secrets (6 actions)
Action | Description | Mutating? |
| List repository Actions variables | No |
| Get variable value and metadata | No |
| Create a new Actions variable | Yes |
| Update existing Actions variable value | Yes |
| Delete an Actions variable | Yes |
| List repository Actions secrets names (values redacted) | No |
9. GitHub Actions & CI (8 actions)
Action | Description | Mutating? |
| List GitHub Actions workflows defined in | No |
| List workflow execution runs filtered by branch, event, or status | No |
| Get detailed execution status, conclusion, and timing | No |
| List individual jobs in a workflow run with step conclusions | No |
| Safely tail failure logs from a workflow job with line truncation | No |
| Dispatch a manual | Yes |
| Cancel an in-progress workflow run | Yes |
| Re-run a failed or completed workflow | Yes |
10. Releases & Git Tags (5 actions)
Action | Description | Mutating? |
| List project releases with changelogs and asset metadata | No |
| Get specific release notes and downloadable assets | No |
| Publish a release tied to a git tag with markdown release notes | Yes |
| List git tags with commit hashes | No |
| Create an annotated git tag pointing to a SHA | Yes |
11. Webhooks, Gists, Security & User Context (18 actions)
Webhooks & Topics (4 actions):
list_repository_topics,set_repository_topics,list_webhooks,create_webhook.Gists (5 actions):
list_gists,get_gist,create_gist,update_gist,delete_gist.Security (1 action):
list_dependabot_alerts.User & Orgs (4 actions):
get_authenticated_user,get_user,list_user_organizations,list_accessible_repositories.
Token Economy & Output Projection Filters
Raw GitHub REST API responses are notoriously heavy (often 30KB–100KB per Issue or PR). @sumirati/mcp-github enforces strict token economy:
System Prompt Tax Reduction (>93% savings): Shrinks MCP tool definition footprint from ~14.7k tokens down to ~450 tokens.
Recursive Output Projection Filter (
projectOutput): Automatically strips redundant metadata fields (_links,avatar_url,gravatar_id,node_id,site_admin, user navigation URLs, internal API links, and null/empty fields) before payloads reach the LLM, guaranteeing 70%+ output token savings.Unified Diff Truncation: PR and commit diffs are capped by line count (
max_diff_lines, default: 400).Safe Log Tailing: CI workflow job logs extract the failure tail (
tail_lines, default: 200) instead of megabyte log dumps.
Acknowledgements & Lineage
This project incorporates architectural concepts, schemas, and patterns from:
@modelcontextprotocol/sdk(MIT License) — Copyright (c) Anthropic, PBC.zod(MIT License) — Colin McDonnell.GitHub REST API Specifications — GitHub, Inc.
jmrplens/gitlab-mcp-server— Dynamic action discovery and meta-dispatcher pattern concepts.@sumirati/mcp-gitlab— Sibling project architecture, 3-tier read-only mode, and token projection standards.
See NOTICE for complete third-party attribution details.
License
This project is licensed under the MIT License — Copyright (c) 2026 sumirati@buggycode.net.
Available Tools
5 toolsget_commitGet CommitARead-onlyIdempotent
Get detailed commit metadata, author information, message, and unified git diffs for a specific commit SHA or reference. Eager daily driver tool for reviewing code modifications, patches, or investigating regressions. Output diffs are token-optimized and automatically truncated to max_diff_lines (default: 400 lines).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Commit SHA, branch name, or tag reference to inspect | |
| repo | Yes | Repository name (e.g. 'Hello-World' or 'mcp-github') | |
| owner | Yes | Repository owner (user or organization, e.g. 'octocat' or 'buggycode') | |
| file_path | No | Optional file path filter: only include diff and stats for this single file | |
| max_diff_lines | Yes | Maximum unified diff lines to return across files to conserve LLM context tokens (default: 400) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior, so the safety profile is covered. The description adds genuinely useful context beyond that: diffs are token-optimized and automatically truncated to max_diff_lines (default 400). It stops short of saying whether truncation is signaled in the output, which is the one open behavioral question.
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?
Three sentences, no redundancy, and the core capability is front-loaded ahead of the usage hint and the truncation caveat. Every sentence carries distinct 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?
With no output schema, the description carries the return-value burden and does so (metadata, author, message, diffs). Annotations cover safety. The remaining gap is behavior under truncation for very large commits, but nothing essential for correct invocation is missing.
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 earns an extra point by explaining the intent behind max_diff_lines (context-token conservation) and reinforcing that ref accepts SHA, branch, or tag. It doesn't describe the optional file_path filter, but the schema covers that fully.
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?
States a specific verb and resource ('Get detailed commit metadata... and unified git diffs') scoped by 'a specific commit SHA or reference'. This clearly separates it from siblings like get_file_contents and get_repository, which target files and repositories rather than a commit ref.
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?
Gives clear usage context ('reviewing code modifications, patches, or investigating regressions'), which tells the agent when this tool is appropriate. However, it names no alternatives or when-not conditions, so routing versus siblings such as get_file_contents is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_contentsGet File ContentsARead-onlyIdempotent
Read current file contents or list directory entries from a repository at a specified git ref without cloning. Automatically decodes Base64 file contents into plain text UTF-8 in 'decoded_content'. Eager daily driver tool for inspecting source code, configuration files, and directory layouts.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Git reference (branch name, tag, or commit SHA) to read from (default: default branch / HEAD) | |
| path | Yes | Relative path to file or directory in repository (e.g. 'README.md', 'src/index.js', or '' for root) | |
| repo | Yes | Repository name (e.g. 'Hello-World' or 'mcp-github') | |
| owner | Yes | Repository owner (user or organization, e.g. 'octocat' or 'buggycode') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only, idempotent, non-destructive profile, so the bar is lower. The description still adds real value by disclosing that no clone is required and that Base64 payloads are auto-decoded into a 'decoded_content' field, which materially affects how the agent consumes the result.
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?
Three dense sentences that are front-loaded with the core capability before the decoding detail and usage framing. 'Eager daily driver tool' is mildly promotional filler, but everything else earns its place.
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?
With no output schema, the description partially compensates by naming the 'decoded_content' return field and the directory-listing mode. Combined with the annotations and full schema coverage, an agent has enough to call it correctly, though pagination and error behavior are unmentioned.
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 all four parameters (owner, repo, path, ref) are already documented with examples and defaults. The description reinforces the dual file/directory semantics of 'path' and the ref concept but adds no syntax or format detail beyond the schema, so the baseline 3 applies.
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?
States a specific verb (read/list) and resource (repository file or directory) at a git ref, and covers both operating modes explicitly. An agent can immediately distinguish it from get_repository (metadata) and get_commit (history) without opening any 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?
Gives concrete usage context ('inspecting source code, configuration files, and directory layouts') and labels itself a frequent 'daily driver' tool, which tells the agent this is the default choice for reading repo content. It stops short of naming when NOT to use it or pointing at a sibling alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_repositoryGet RepositoryARead-onlyIdempotent
Get comprehensive repository metadata, visibility, description, default branch, clone URLs, star count, and topics for an owner/repo. Eager daily driver tool for verifying repository configuration and existence.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository name (e.g. 'Hello-World' or 'mcp-github') | |
| owner | Yes | Repository owner (user or organization, e.g. 'octocat' or 'buggycode') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds the useful behavioral note that this is intended as a frequent, cheap verification call, but says nothing about authentication requirements, rate limits, or failure behavior for nonexistent repos.
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 compact sentences with the returned payload front-loaded before the usage note. The phrase "Eager daily driver tool" is mildly promotional filler, but the rest is dense and earns its space.
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?
With no output schema, the description carries the burden of describing return values and does so by enumerating the metadata fields. For a two-parameter, fully-annotated read tool this is essentially complete; only the error behavior for a missing repo is unaddressed.
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% — both owner and repo are documented with concrete examples in the schema itself. The description only restates "for an owner/repo" and adds no format, casing, or validation detail beyond what the schema provides, so the baseline of 3 applies.
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 gives a specific verb (get) and resource (repository) and enumerates the returned fields — metadata, visibility, description, default branch, clone URLs, star count, topics — so the agent knows exactly what comes back. It does not explicitly contrast itself with siblings like get_file_contents or get_commit, but the resource is distinct enough that confusion is unlikely.
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?
"Eager daily driver tool for verifying repository configuration and existence" implies the usage context (existence/configuration checks) but names no alternatives and states no when-not conditions. Usage is implied rather than prescribed, which is the definition of a 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_execute_actionExecute GitHub ActionA
Execute any supported GitHub action from the 75-action catalog by action name with parameters. Requires the exact action name (discovered via github_find_actions) and its corresponding argument dictionary. Output is automatically compressed with strict token projection filters (stripping URLs, avatar links, empty hashes, node_ids) to guarantee 70%+ token savings. Mutating actions are blocked when running in read-only mode (GITHUB_READ_ONLY=true).
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Exact name of the GitHub action to execute (e.g. 'create_pull_request', 'list_issues', 'trigger_workflow', 'create_branch') | |
| format | Yes | Output format: 'json' (default) or 'markdown' (compact human/LLM-readable text) | json |
| params | No | Parameters dictionary for the action matching its parameter schema | |
| parameters | No | Alias for params (for cross-client compatibility) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that output is lossily compressed via strict token projection filters (URLs, avatar links, empty hashes, node_ids stripped) with a claimed 70%+ token saving, and that mutation is environment-gated. That output-truncation disclosure is exactly the kind of behavior an agent cannot infer from readOnlyHint/destructiveHint alone.
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?
Three dense sentences that are front-loaded with the execution contract before moving to prerequisites and output behavior; little waste. The '70%+ token savings' claim borders on promotional but still conveys expected output shrinkage.
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?
With no output schema, the description carries the return-value burden and does so adequately via the format enum and compression note, and it covers the dynamic-parameter discovery path. It leaves error behavior for blocked mutating actions and partial-schema mismatches unstated, which is a minor gap.
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, but the description adds real meaning for the polymorphic 'params' object by framing it as the argument dictionary matching the selected action's own schema and pointing to github_find_actions as the way to learn that schema. The static schema cannot express that per-action contract, so the description earns above baseline.
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?
States a specific verb (execute) and resource (a named action from the 75-action catalog) with the dispatch mechanism spelled out: action name plus argument dictionary. It is clearly separable from github_find_actions, which is named as the discovery step rather than the executor.
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?
Gives an explicit prerequisite (the exact action name must come from github_find_actions) and an explicit environmental exclusion (mutating actions blocked under GITHUB_READ_ONLY=true). It does not clarify when to prefer this generic dispatcher over typed siblings like get_file_contents or get_repository, which overlap with catalog actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_find_actionsFind GitHub ActionsARead-onlyIdempotent
Search and discover available GitHub actions in the 75-action catalog by keyword query or domain filter. Use this discovery tool first whenever you need to perform an action outside the 3 eager daily drivers (e.g. managing PRs, issues, releases, workflows, collaborators, webhooks, variables, security alerts). Returns matching action names, domain categories, mutating flags, descriptions, and complete parameter schemas so you can construct the call for github_execute_action.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Search keyword query to match against action names, domains, or descriptions (e.g. 'pull request', 'issue comment', 'webhook', 'deploy', 'dependabot') | |
| domain | No | Optional domain filter to restrict discovery to a specific functional category | |
| format | Yes | Output format: 'json' (default, structured object) or 'markdown' (compact human/LLM-readable text table) | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds real value beyond that: catalog size (75 actions), the existence of 3 eager daily drivers, and the fact that results include mutating flags plus complete parameter schemas for building the follow-up call.
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, zero waste, front-loaded with the core purpose and then the usage rule. The dense second sentence is entirely load-bearing (scope, trigger condition, examples, return shape).
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?
There is no output schema, but the description enumerates what is returned (action names, domain categories, mutating flags, descriptions, full parameter schemas), so an agent knows exactly what it gets back. Combined with the annotations, nothing needed to call this correctly is missing.
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 the schema already documents query, domain, and format in detail. The description restates the two filtering modes but adds no syntax, matching behavior, or edge-case guidance beyond what the enum and parameter descriptions provide; baseline 3 applies.
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?
States a specific verb+resource ('Search and discover available GitHub actions in the 75-action catalog') with the two selection axes (keyword query or domain filter). It clearly distinguishes itself from the sibling github_execute_action by being the discovery step that feeds it.
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 says 'Use this discovery tool first whenever you need to perform an action outside the 3 eager daily drivers' and lists the domains that qualify (PRs, issues, releases, workflows, collaborators, webhooks, variables, security alerts). It also names the downstream tool to construct the call for, github_execute_action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
45 tool updates
v2.1.0- Removed
cancel_workflow_run - Removed
create_branch - Removed
create_issue - Removed
create_issue_comment - Removed
create_label - Removed
create_or_update_file - Removed
create_pull_request - Removed
create_pull_request_comment - Removed
create_pull_request_reply - Removed
create_release - Removed
create_repository - Removed
create_tag - Removed
delete_file - Removed
fork_repository - Removed
get_authenticated_user - Added
get_commit - Changed
get_file_contents2 fields changed- changed
Input schema / properties / path / descriptionPrevious value: -"Path to the file or directory in repository (e.g. 'README.md' or 'src/index.js')"New value: +"Relative path to file or directory in repository (e.g. 'README.md', 'src/index.js', or '' for root)" - changed
Input schema / properties / ref / descriptionPrevious value: -"Branch name, tag, or commit SHA (default: default branch / HEAD)"New value: +"Git reference (branch name, tag, or commit SHA) to read from (default: default branch / HEAD)"
- Removed
get_issue - Removed
get_job_logs - Removed
get_pull_request - Removed
get_pull_request_diff - Removed
get_release - Removed
get_user - Removed
get_workflow_run - Added
github_execute_action - Added
github_find_actions - Removed
list_accessible_repositories - Removed
list_branches - Removed
list_issue_comments - Removed
list_issues - Removed
list_labels - Removed
list_pull_request_comments - Removed
list_pull_requests - Removed
list_releases - Removed
list_tags - Removed
list_user_organizations - Removed
list_workflow_run_jobs - Removed
list_workflow_runs - Removed
list_workflows - Removed
merge_pull_request - Removed
rerun_workflow - Removed
search_repositories - Removed
trigger_workflow - Removed
update_issue - Removed
update_pull_request
43 tool updates
v1.0.0- First observed
cancel_workflow_run - First observed
create_branch - First observed
create_issue - First observed
create_issue_comment - First observed
create_label - First observed
create_or_update_file - First observed
create_pull_request - First observed
create_pull_request_comment - First observed
create_pull_request_reply - First observed
create_release - First observed
create_repository - First observed
create_tag - First observed
delete_file - First observed
fork_repository - First observed
get_authenticated_user - First observed
get_file_contents - First observed
get_issue - First observed
get_job_logs - First observed
get_pull_request - First observed
get_pull_request_diff - First observed
get_release - First observed
get_repository - First observed
get_user - First observed
get_workflow_run - First observed
list_accessible_repositories - First observed
list_branches - First observed
list_issue_comments - First observed
list_issues - First observed
list_labels - First observed
list_pull_request_comments - First observed
list_pull_requests - First observed
list_releases - First observed
list_tags - First observed
list_user_organizations - First observed
list_workflow_run_jobs - First observed
list_workflow_runs - First observed
list_workflows - First observed
merge_pull_request - First observed
rerun_workflow - First observed
search_repositories - First observed
trigger_workflow - First observed
update_issue - First observed
update_pull_request
TDQS
Scored across 5 tools
The discover/execute pair is clearly distinct from each other, and the three get_* tools are distinct among themselves. However, github_execute_action can perform any of the 75 catalog actions, which likely includes the read operations covered by get_file_contents, get_repository, and get_commit, creating overlap. The 'eager daily driver' framing helps, but an agent must still decide between the direct tool and the generic executor.
All names use snake_case, but two conventions coexist: the meta tools use a github_ namespace prefix (github_find_actions, github_execute_action) while the direct tools use bare get_* verbs (get_file_contents, get_repository, get_commit). The get_* trio is internally consistent, but the mixed prefixing and differing verb styles make the set only partially predictable.
Five tools is a compact, well-scoped surface for what is effectively a 75-action GitHub catalog, avoiding the bloat of exposing every action individually. The three eager tools are somewhat redundant given execute_action, but they justify themselves as high-frequency shortcuts. The count is reasonable and no tool feels extraneous.
The catalog-plus-executor design claims coverage of PRs, issues, releases, workflows, collaborators, webhooks, variables, and security alerts, which is broad lifecycle coverage for a GitHub server. Discovery via github_find_actions fills the gap of not knowing action names. Minor gaps exist in that nothing is eager for write operations and catalog completeness depends entirely on the advertised 75 actions being real and correct.
Maintenance
Related MCP Connectors
Access the GitHub API, enabling file operations, repository management, search functionality, and…
GitHub MCP — wraps the GitHub public REST API (no auth required for public endpoints)
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Manage repositories, users, releases, and automate GitHub workflows
Related MCP Servers
- AlicenseAqualityNot gradedmaintenanceEnables AI agents to interact with GitHub repositories through the GitHub REST API for managing files, issues, and repository metadata. It supports both read operations like searching code and write operations such as creating repositories and updating issue comments.9-
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to interact with GitHub via MCP, managing repositories, issues, PRs, and analyzing repository health through tools like list_repositories, read_issues, create_issue, comment_on_pr, and analyze_repo_health.-
- FlicenseNot gradedqualityCmaintenanceEnables read-only browsing and querying of GitHub repositories, including listing repos, reading files, fetching READMEs, searching code, and viewing commit history via MCP.-
- FlicenseNot gradedqualityBmaintenanceEnables AI applications to retrieve GitHub repository information, manage issues, and monitor workflow statuses through the GitHub REST API.-