GithubMCP
GithubMCP
一个生产级个人开发者助手 MCP 服务器
将 AI 模型(Claude、Cursor 等)无缝连接到你的 GitHub 工作流、CI/CD 流水线、本地工作区上下文和代码分析工具。
概述
GithubMCP 是一个面向开发者的 Model Context Protocol(MCP)服务器。它将 AI 助手直接与你的开发环境连接,使其能够:
检查公共和私有仓库中的 GitHub 仓库、Pull Request、Issue、提交及代码。
直接通过对话管理仓库的隐私与可见性(公开/私有)。
监控 CI/CD 工作流的运行状态,并解析 GitHub Actions 中失败构建的步骤。
在用户定义的允许路径范围内,安全地检查本地文件系统工作区。
分析代码质量、评估复杂度指标、查找 TODO 注释,并检测安全隐患(如硬编码密钥)。
支持 STDIO(Claude Desktop、Cursor)和 SSE(Server-Sent Events,供 Web 客户端使用)两种传输模式。
Related MCP server: Git MCP Server
工具套件参考
GithubMCP 提供 13 个专用工具:
Category | Tool Name | Description |
GitHub |
| 搜索用户/组织的公共与私有仓库,支持语言和排序过滤。 |
GitHub |
| 获取 PR 详情、变更文件、增删统计和审查评论。 |
GitHub |
| 查看 issue 状态、指派对象、关联的 PR 标签和近期评论。 |
GitHub |
| 跨仓库搜索代码模式,并支持文件扩展名过滤。 |
GitHub |
| 获取最近提交历史,附带 diff 统计和提交者信息。 |
GitHub |
| 将仓库可见性在私有与公开之间切换。 |
CI/CD |
| 监控 GitHub Actions 状态(成功/失败/进行中)并获取失败步骤的日志。 |
文件系统 |
| 安全读取本地文件内容,包含 MIME 类型检测和大小校验。 |
文件系统 |
| 列出目录树结构,包含文件大小、修改时间和 glob 过滤。 |
文件系统 |
| 异步对文件执行 grep 正则/模式匹配,并返回上下行内容。 |
文件系统 |
| 检测项目技术栈(Node、Python、Rust、Go、Docker)及开发命令。 |
分析 |
| 比较 git refs,并将提交归类为 Feature、Fix、Breaking Change 等。 |
分析 |
| 计算代码行数、复杂度估算、TODO 注释,并识别可疑密钥等安全威胁。 |
快速开始
1. 环境要求
Python 3.11+
uv(更快的 Python 包管理器)
安装 uv(如果尚未安装):
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh2. 克隆与配置
git clone https://github.com/Dhananjayrbiraris/github-mcp.git
cd github-mcp
# Install dependencies and sync virtual environment
uv sync3. 环境变量配置
将 .env.example 模板复制为 .env:
cp .env.example .env在 .env 中填入你的 GitHub Personal Access Token:
# GitHub Personal Access Token (Classic PAT with 'repo', 'workflow', 'read:user' scopes)
GITHUB_TOKEN=ghp_your_github_token_here
# Default GitHub Username (Optional)
GITHUB_USERNAME=your_username
# Sandboxed directories allowed for local filesystem operations
ALLOWED_PATHS=["~/projects", "~/workspace", "."]
# Max file size limit in MB for reading files
MAX_FILE_SIZE_MB=10
# Default Transport mode: "stdio" or "sse"
TRANSPORT=stdio生成你的 GitHub Token: 前往 GitHub Settings -> Developer Settings -> Personal access tokens (classic) 生成一个具备
repo、workflow与read:user权限范围的 token。
客户端配置指南
A. Claude Desktop
1. 打开 Claude Desktop 配置文件:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
2. 添加 github-mcp 服务器:
{
"mcpServers": {
"github-mcp": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/github-mcp",
"run",
"python",
"-m",
"github_mcp.main",
"--transport",
"stdio"
],
"env": {
"GITHUB_TOKEN": "ghp_your_personal_access_token_here"
}
}
}
}(在 Windows 上,请使用反斜杠,如 C:\Users\yourname\path\to\github-mcp,或使用正斜杠。)
3. 重启 Claude Desktop
启动 Claude Desktop — 点击提示框右下角的 Tools 图标,即可查看所有已连接的 GithubMCP 工具。
B. Cursor IDE
在 Cursor 中:
进入 Cursor Settings -> Features -> MCP。
点击 + Add New MCP Server。
填写以下内容:
Name:
github-mcpType:
commandCommand:
uv --directory /path/to/github-mcp run python -m github_mcp.main --transport stdio
C. Server-Sent Events(SSE)模式 / Web 客户端
以 HTTP / Server-Sent Events 方式运行 MCP 服务器:
uv run python -m github_mcp.main --transport sse --host 0.0.0.0 --port 8000SSE 端点地址为:http://localhost:8000/sse
安全与沙箱
路径沙箱: 本地文件系统工具(
read_file、list_directory、search_local_files、get_project_context)会严格按照ALLOWED_PATHS强制进行路径穿越校验。访问范围之外的路径会抛出SecurityError。密钥管理: Token 与前缀密钥不会被记录或暴露到日志。
限流容错: 面对 GitHub API 触发限流时,会自动指数退避重试。
开发与测试
运行完整的测试与质量检查套件:
# Run pytest unit tests
uv run pytest
# Run linter
uv run ruff check .
# Check code formatting
uv run ruff format --check .
# Run strict type checking
uv run mypy src/仓库结构
github-mcp/
├── .github/workflows/ci.yml # GitHub Actions CI workflow
├── src/github_mcp/
│ ├── __init__.py
│ ├── main.py # Server entrypoint & MCP tool registrations
│ ├── config.py # Pydantic Settings model
│ ├── github_tools.py # GitHub API integrations & visibility controls
│ ├── file_tools.py # Sandboxed local filesystem operations
│ ├── ci_tools.py # GitHub Actions CI/CD monitoring
│ ├── analysis_tools.py # Diff categorization & code quality analyzer
│ └── utils.py # Path safety, error handling, rate limiting
├── tests/
│ ├── conftest.py # Pytest fixtures and mocks
│ ├── test_github.py # GitHub tools unit tests
│ ├── test_files.py # Filesystem tools unit tests
│ └── test_ci.py # CI status tools unit tests
├── docs/
│ ├── architecture.md # System architecture & data flow
│ └── tools_reference.md # Complete API schemas for all 13 tools
├── pyproject.toml # Project dependencies & tool configurations
├── .env.example # Environment variable template
├── CONTRIBUTING.md # Open-source contribution guidelines
├── SECURITY.md # Security policy & vulnerability reporting
└── LICENSE # MIT License许可证
本项目基于 MIT License 许可 — 允许个人与商业免费使用。
Available Tools
13 toolsanalyze_code_qualityA
Analyze file metrics (line counts, comment ratio, complexity estimate), TODO/FIXME comments, and potential security smells (hardcoded secrets).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
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 full burden of behavioral transparency. It does disclose what the tool scans for, including potential security smells, but it does not explicitly state that the operation is read-only, how the complexity estimate is calculated, or whether the path is limited to the current repository.
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?
One clean sentence front-loads the main action and uses parentheticals to scope the analysis. No filler, no repeated schema content, and each phrase contributes useful 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 a single required parameter and an existing output schema, the description is nearly sufficient for correct tool invocation. The main gap is broader path-semantics documentation, but this is minor for a one-parameter analysis tool.
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 schema only describes a 'path' string with no schema-level description (0% coverage). The description adds that a file's metrics will be analyzed, so path clearly suggests a file target, but it doesn't specify path format, relative-to-root ambiguity, or directory compatibility.
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 names a specific verb ('Analyze') and enumerates concrete analysis targets: line counts, comment ratio, complexity estimate, TODO/FIXME comments, and hardcoded secrets. This makes the tool's purpose clear and distinguishes it from siblings like read_file and search_code.
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?
Usage is implied: call this tool when code-quality metrics or potential issues in a file are needed. However, that description provides no explicit when-to-use/when-not-to-use guidance and does not compare it with sibling tools such as inspect_pr or check_ci_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_ci_statusA
Check current build status (success/failure/in_progress), duration, log URL, and summary of failed steps for GitHub Actions.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | ||
| branch | No | main | |
| platform | No | github_actions |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the transparency burden. It conveys that this is a status-checking operation and lists useful informational outputs, but it does not state read-only behavior, credential needs, platform expectations, or behavior when no build exists.
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, well-structured sentence that front-loads the core action and then enumerates the relevant output details. There is no redundancy or wasted phrasing.
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?
An output schema exists, so return values are covered outside the description, and the branch/platform defaults are represented in the input schema. However, with no annotations and no parameter descriptions, the definition lacks some behavioral and selection context that would make it fully self-sufficient.
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 0%, so the description must compensate for missing parameter documentation. It only clarifies the platform via 'GitHub Actions' but does not explain repo format, branch usage, or the role of the platform parameter beyond its default. The parameter names are self-explanatory, but the description adds little semantic value.
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 defines a concrete action, 'Check current build status', and a clear resource: GitHub Actions CI status. It also names the exact outputs returned: status, duration, log URL, and failed-step summary. None of the sibling tools covers CI status, so it is easily distinguishable.
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 text makes it clear the tool applies when checking current build status for GitHub Actions on a branch. It does not explicitly list exclusions or alternatives, but no sibling tool handles CI build status, so the usage context is still clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_change_summaryA
Compare base and head git refs for a repository and generate a human-readable summary categorized by Features, Fixes, Breaking Changes, and Config Updates.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | ||
| base_ref | Yes | ||
| head_ref | Yes |
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 full burden of behavior disclosure. It discloses that the result is a human-readable summary with categories, but it does not explicitly state whether the tool is read-only or whether there are side effects/prerequisites. For a compare-and-summarize tool this is adequate but not fully 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 one front-loaded sentence that states the operation, the inputs, and the output categories without waste. It is efficiently structured and easy to parse.
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 an output schema present, return values are presumably covered by the schema. The input roles are stated, but the lack of repo and ref format details combined with zero schema coverage leaves real ambiguity for an agent about which strings are valid.
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 0%, so the description is responsible for clarifying all three parameters. It clearly maps base_ref and head_ref to git refs, but it does not explain repo identifier formats, ref formats, branch/SHA/tag handling, or any constraints. The description adds partial meaning beyond the bare parameter names, but it is not sufficient.
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 identifies a clear verb and resource: it compares base and head git refs for a repository and produces a categorized summary. It is distinguishable from siblings like recent_commits or inspect_pr because it is about generating a diff-based summary, not about PRs, issues, or raw commit listings.
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 use case is clear: an agent should call this when it needs a categorized summary of changes between two refs. It does not explicitly name alternatives or exclusion cases, but the trigger condition is stated directly in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_contextB
Detect project type (Node, Python, Rust, Go, Docker), key config files, sample dependencies, and suggested dev commands.
| Name | Required | Description | Default |
|---|---|---|---|
| root_path | Yes |
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 full burden of behavioral disclosure. 'Detect' weakly implies a read-only operation, but the description fails to state that it scans a directory recursively, whether it modifies anything, whether root_path must exist, or what side effects may occur.
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, front-loaded sentence with a clear verb and a short list of what will be detected. Every word adds useful information, with no redundancy or filler.
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?
For a single-parameter tool, the description covers main output categories and makes its scope broadly understandable. It falls slightly short by not clarifying the input parameter and not mentioning any operational limitations, but the output-schema presence reduces the need for return-value documentation.
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 schema has a single required parameter 'root_path' with zero description coverage, and the tool description never mentions root_path or explains that it is the directory to analyze. The title 'Root Path' gives a general hint, but the description does not compensate for the low schema coverage.
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 uses a specific verb, 'Detect', and names the concrete resources it examines: project type, key config files, sample dependencies, and suggested dev commands. This clearly differentiates it from sibling tools like read_file or list_directory in function, though it never explicitly names a sibling to distinguish itself from.
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?
Context is implied: the tool should be used when an agent needs an overview of a project's stack, config files, dependencies, and dev commands. However, the description says nothing about when not to use it or which sibling alternatives might be better suited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_issueA
Fetch issue details including assignees, state, labels, linked PRs, and recent comments.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | ||
| issue_number | Yes |
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 itself must convey the tool's behavior. It indicates this is a read-only fetch operation by listing the data returned, but it doesn't mention any auth requirements, rate handling, or exactly how the output is structured. For a simple inspect tool with no annotation support, this is adequate but not rich.
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 verb and resource, then compactly lists the key detail categories. No word is wasted.
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?
For a simple two-parameter tool with an output schema, the description's enumerated result categories give enough detail about what to expect. It does not explain repo naming conventions, but the self-explanatory parameter titles and output schema reduce the risk of incorrect invocation.
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 0%, so the description should compensate by explaining the parameters. The description does not define what 'repo' should look like (e.g., owner/name) or the required format of 'issue_number'. The parameter names are self-explanatory, but the description adds no semantic detail beyond what the schema already shows.
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 uses the specific verb 'Fetch' with a clear resource: 'issue details', and enumerates the included content (assignees, state, labels, linked PRs, recent comments). This distinguishes it from sibling tools like inspect_pr even though the description itself doesn't name the alternative.
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 makes the use case clear: when you need details about a given issue. It doesn't explicitly mention when not to use it or recommend alternatives, but the context of sibling tools plus the direct 'issue details' phrasing provides clear guidance for typical selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_prA
Fetch pull request details including changed files, diff stats, additions/deletions, and review comments.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | ||
| pr_number | Yes |
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 bears the full burden of communicating behavioral characteristics. The verb 'Fetch' implies a read-only operation, and the listed fields communicate what is returned, but the description does not mention access requirements, whether the operation is purely non-destructive, or any rate-limit or payload-size caveats.
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 front-loaded sentence with no filler. It starts with the action, names the target resource, and then lists the key data points, making it easy for an agent to parse quickly.
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?
For a simple two-parameter tool with an output schema, this is a fairly complete definition, and it does not need to describe return values since an output schema exists. However, the repo format ambiguity and the absence of any explicit 'when to use' note mean an agent can still call the tool incorrectly or pick a less appropriate sibling tool.
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 0%, so the description is responsible for explaining the parameters. While 'pr_number' is reasonably self-explanatory, 'repo' is ambiguous in terms of format, the description does not specify whether it expects an owner/repo string, a repository URL, or an ID, and it adds no semantic guidance beyond a statement that it relates to a pull request.
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 uses a specific verb ('Fetch') with a precise resource ('pull request details') and enumerates concrete components such as changed files, diff stats, additions/deletions, and review comments. This makes it clearly distinct from siblings like inspect_issue, which handles issue details rather than PR details.
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 intended usage is implied: it should be called when a pull request's details are needed. However, the description never explicitly specifies when not to use it or how to choose between this and inspect_issue, so it falls short of giving clear when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_directoryB
List directory structure, files, subdirectories, sizes, and modification dates with optional depth limit and glob filter.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| recursive | No | ||
| depth_limit | No | ||
| glob_pattern | No |
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 carry behavioral context. It conveys the return content and optional filtering/depth parameters, but it does not mention read-only status, recursion behavior, symlink handling, or potential performance impact on large directories.
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?
A single, front-loaded sentence that packs the core operation and key options without filler. Every phrase contributes useful 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?
The description is adequate for a simple listing tool and an output schema exists, but it leaves parameter semantics and when-to-use decision-making mostly to the agent. There is no statement of expected output shape beyond the listed fields, and no alternative tool routing.
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 0%, so the description must compensate for parameter meaning. It only names depth limit and glob filter without clarifying their exact semantics, and omits any real explanation for path and recursive. The schema defaults do some work, but the required path is left entirely implicit.
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 identifies a directory-listing action and the resource: files, subdirectories, sizes, and modification dates. It is distinct by nature from siblings like search_local_files or read_file, though it does not explicitly name or contrast any sibling.
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 usage guidance is given. The description does not state when to prefer this over sibling tools, whether it is appropriate for filtering projects vs. file content, or any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileA
Read file contents securely within allowed directories with MIME type detection and size validation.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
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 full disclosure burden. It goes beyond a plain 'read file' statement by mentioning security containment, MIME type detection, and size validation, which are meaningful behavioral constraints an agent should know.
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?
One compact sentence front-loads the core action, then supplies key constraints without redundancy. Every phrase adds relevant value and the description is well-sized for the tool.
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?
For a single-parameter file-reading tool with an output schema, the description covers the essential context: security boundary and validation behavior. It still lacks explicit guidance on path format and failure behavior, which prevents a perfect score.
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 schema has no description for 'path', and the textual description adds limited guidance about path semantics. It implies the path must reside within allowed directories, but it does not define path format, allowed roots, or other details.
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 identifies a specific verb ('Read'), a resource ('file contents'), and a distinct scope ('within allowed directories'). This distinguishes it from sibling tools like list_directory and search_local_files, which have different purposes.
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 makes it clear that this tool is for reading file contents, not for listing or searching. However, it does not explicitly mention when not to use it or name sibling alternatives as options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recent_commitsA
Fetch recent commits for a repository branch within lookback days with commit stats.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| repo | Yes | ||
| limit | No | ||
| branch | No | main |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the behavioral burden; 'Fetch' clearly implies a read-only operation, and 'with commit stats' gives some insight into response content. However, it does not disclose auth requirements, sorting/ordering, how branches/days interact, or pagination behavior.
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, front-loaded sentence with no filler or redundant information. It conveys the primary operation, the scope, the lookback period, and the output feature efficiently.
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?
An output schema exists, so return-format documentation is less necessary. But with no annotations and 0% schema parameter coverage, the description should cover key operational details like 'limit', repo naming format, and branch behavior. It covers the core idea but leaves meaningful 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?
Since there are no parameter descriptions in the schema, the description is responsible for clarifying parameter semantics. It clarifies lookback days and branches, but does not explain 'limit', repo name format, or defaults. The description only partially compensates for 0% schema coverage.
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 uses a concrete verb ('Fetch') and identifies a clear resource ('recent commits') with useful scoping details: repository branch, lookback days, and commit stats. It distinguishes this tool from siblings like inspect_pr, check_ci_status, and search_repos without needing to open 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?
Usage context is only implied: use this tool to retrieve recent commit history for a branch. There is no explicit 'when to use' vs alternative, no exclusions, and no mention of when a repo/branch combination is required. This is minimally viable but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_codeA
Search code across specified repositories matching pattern and optional file extension filter.
| Name | Required | Description | Default |
|---|---|---|---|
| repos | Yes | ||
| pattern | Yes | ||
| file_extension | No |
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 the full behavioral burden. It states the search action but does not disclose important behaviors such as whether the search is read-only, how pattern semantics behave (e.g., regex vs literal), what exactly is searched (file contents vs filenames), or any limitations.
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, front-loads the primary action, and includes all three parameters at a high level. It has no filler or 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?
The tool is relatively simple (3 parameters, 2 required, no nested objects) and an output schema exists. Yet with no annotations and significant ambiguity in pattern semantics, a slightly richer description would make the tool safely and correctly invokable in more situations.
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 0%, so the description must compensate for the missing parameter details. It only restates the high-level purpose of repos, pattern, and file_extension without adding syntax, allowed values, or examples. It does not explain what a valid 'pattern' looks like or how file extensions are formatted.
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 states a specific verb ('Search'), a specific resource ('code across specified repositories'), and the matching conditions (pattern, optional file extension filter). It clearly distinguishes from sibling tools like search_local_files and search_repos by anchoring the search scope to user-selected repositories.
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 gives clear context: this tool searches code within given repositories, which implies when to use it over local-file or repository-metadata search. However, it does not explicitly mention alternatives or exclusions, so it falls short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_local_filesA
Search local directory files for text matching pattern with line numbers and surrounding context.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| pattern | Yes | ||
| file_type | No | ||
| case_sensitive | No |
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 must carry behavioral context on its own. It does usefully report that results include line numbers and surrounding context, and 'search' implies a read-only operation. However, it does not disclose recursion behavior, hidden-file handling, size limits, or whether matches are grouped by file.
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 packs the core action, resource, and output detail with no filler. It front-loads the verb and resource and earns every word.
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 description is adequate for a straightforward search tool, especially with an output schema available, but it leaves gaps: no explicit alternative-choosing guidance, no mention of whether the search is recursive, and no mention of how file_type or case_sensitive affect results. These would matter for an agent correctly invoking the tool.
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 0%, so the field names are the only aid. The description adds little beyond restating that a text pattern is matched; it does not explain path semantics, file_type filtering, or case_sensitive behavior. The parameter names are self-explanatory, but the description fails to compensate for the missing schema information.
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 names a specific action (Search), a specific resource (local directory files), and distinctive output traits (line numbers and surrounding context). It clearly distinguishes from sibling tools like search_code or search_repos by explicitly scoping to local directory 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 searching text within local directories, which gives some context, but it does not explicitly state when to prefer this tool over siblings like search_code or read_file, nor does it mention exclusions or limitations. The word 'local' is the only implicit signal for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_reposA
Search GitHub repositories matching query, optional language filter, and sort order.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| query | No | ||
| language | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the core search behavior: query matching, optional language filtering, and sorting. It also implicitly signals a non-mutating operation via the verb 'Search.' However, with no annotations available, it omits potentially useful behavioral details such as rate limits, visibility constraints, or whether only public repositories are searched.
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 entire description is one front-loaded, concise sentence with no unnecessary wording. Every phrase contributes something meaningful: the resource searched, the query, the optional language filter, and the sort behavior.
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?
This is a simple read-only search tool with an output schema already present, so the description need not document return values. The main missing elements are sort value options and sibling-tool routing guidance, but an agent has enough information to invoke the tool correctly.
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 schema description coverage is 0%, so the description is responsible for explaining parameters. It adds meaning to query, language, and sort, but it does not explain the limit parameter's purpose or what sort values are accepted, leaving the parameter explanation incomplete.
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 states a specific action and resource: 'Search GitHub repositories matching query, optional language filter, and sort order.' It clearly identifies what the tool affects and differentiates it from sibling tools like search_code and search_local_files, which operate on code or local files rather than repositories.
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 intended use is implied: use this tool when looking for GitHub repositories. However, the description never explicitly mentions when to choose this over search_code or search_local_files, nor does it state any exclusions or alternative conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_repo_visibilityA
Update the privacy/visibility settings of a repository to make it private or public.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | ||
| private | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It indicates a mutation ('update', 'make private or public') but does not disclose side effects, permission requirements, reversibility, or any consequences of changing visibility. For a mutating operation, this is a notable transparency gap.
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?
A single precise sentence with no filler. The core action, resource, and outcome are stated upfront, earning its place and avoiding redundant restatement of the parameter names.
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 only two simple required parameters and an output schema present, the description is almost sufficient. Nevertheless, no context is given about required permissions, side effects, or behavior on unauthorized operations. For a mutating tool without annotations, this small gap prevents full confidence.
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 schema has 0% description coverage, but the description maps 'private/public' to the 'private' boolean parameter, clarifying that true privately identifies the private state and false means public. However, it does not clarify the expected format of the 'repo' parameter (e.g., owner/repo), relying heavily on the parameter name. The description compensates minimally for the schema gap.
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 states a specific action ('Update'), identifies the resource ('repository privacy/visibility settings'), and clarifies the exact outcome ('make it private or public'). It is distinct from the sibling read-only tools, so an agent can tell this tool's purpose immediately.
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 when to use the tool: whenever a repository's visibility needs changing between private and public. However, it does not explicitly discuss when not to use it, mention alternatives, or state prerequisites such as required permissions or repository ownership, leaving usage context mostly implicit.
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.
13 tool updates
v0.1.0- First observed
analyze_code_quality - First observed
check_ci_status - First observed
generate_change_summary - First observed
get_project_context - First observed
inspect_issue - First observed
inspect_pr - First observed
list_directory - First observed
read_file - First observed
recent_commits - First observed
search_code - First observed
search_local_files - First observed
search_repos - First observed
update_repo_visibility
TDQS
Scored across 13 tools
Each tool targets a distinct resource and action: repository search, code search, local file search, PR/issue inspection, CI status, and file analysis are clearly separated. The three search tools differ by target, and read/list/analyze local tools have unambiguous boundaries.
Most tools follow a verb_noun snake_case pattern like search_repos, inspect_pr, read_file, and update_repo_visibility. The main inconsistency is recent_commits, which uses adjectival naming rather than an imperative verb, and get_project_context breaks the simple verb-noun pattern slightly.
13 tools is a well-scoped count for the apparent purpose of reading and analyzing GitHub repositories alongside local project inspection. Every tool has a clear, non-redundant job and the set feels dense without being bloated.
There is strong coverage for inspecting and analyzing repos, PRs, issues, CI, and local code, and generate_change_summary provides a useful diff workflow. However, as a GitHub MCP server it lacks list/create/update operations for PRs and issues, forcing agents to know IDs in advance and making common collaborative workflows impossible.
Maintenance
Related MCP Connectors
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Code intelligence for LLMs. Analyze, search, and retrieve code from any public git repository.
Screens public GitHub repos and PRs to generate risk maps, findings, and merge-readiness signals.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to manage GitHub repositories, branches, issues, pull requests, releases, and actions through natural language.140 npm5MIT
- FlicenseBqualityDmaintenanceEnables AI assistants to inspect local Git repositories and interact with the GitHub API for reading commits, diffs, files, issues, comments, pull requests, and project boards.1091 npm-
- AlicenseAqualityCmaintenanceEnables AI assistants to search and inspect code repositories, manage issues and pull requests, and analyze user contributions.13MIT
- AlicenseAqualityCmaintenanceConnects LLMs and AI agents directly to GitHub repositories, enabling repository inspection, file and tree exploration, code search, commit history, issues, pull requests, and releases for both public and private repos.13MIT