Skip to main content
Glama
FMorgan-111

GitHub MCP Agent Server

by FMorgan-111

GitHub MCP Agent Server

CI Python License

MCP server giving AI agents controlled GitHub access with policy guard and audit trail.


Architecture

   ┌───────────────┐        MCP stdio         ┌───────────────────┐
   │   AI Agent    │ ◄──────────────────────► │ GitHub MCP Server │
   │ (Claude, Codex│      JSON-RPC 2.0        │                   │
   │   or any MCP  │                         ┌─┴───────────────┐   │
   │    client)    │                         │ Policy Guard    │   │
   └───────────────┘                         ├─────────────────┤   │
                                             │ Audit Log       │   │
                                             └─────────────────┘   │
           ┌──────────────────────────────────────────────┐      │
           │                 github_client.py               │      │
           │                    (httpx)                     │      │
           │                   GitHub API                   │      │
           └──────────────────────────────────────────────┘      │
           ┌──────────────────────────────────────────────┐      │
           │          Review Engine (ruff + regex)          │      │
           └──────────────────────────────────────────────┘      │
                                                                └───┘

Related MCP server: github-mcp-demo

Features & Tools

Tool

Description

Example Input

Example Output

search_code

Search GitHub repo code by query

search_code("def main", "owner/repo")

List of matching files with paths & URLs

list_issues

List open or closed issues

list_issues("owner/repo", state="open")

Formatted list of issues

create_issue

Create a new issue (policy-guarded)

create_issue("owner/repo", "Bug: timeout", "Steps to reproduce...")

Confirmation with issue URL

get_pr_diff

Fetch raw diff of a pull request

get_pr_diff("owner/repo", pr_number=7)

Unified diff as text

create_pr

Create a pull request between branches

create_pr("owner/repo", "Add feature", "Details...", head="feat", base="main")

Confirmation with PR URL

review_pr_diff

Run local automated code review rules

review_pr_diff("owner/repo", pr_number=7)

List of warnings and errors found

comment_pr_review

Post review findings as PR comments

comment_pr_review("owner/repo", pr_number=7)

Number of comments posted

get_file_contents

Read a file from a repository

get_file_contents("owner/repo", "src/main.py", ref="main")

Decoded file content with metadata

create_or_update_file

Create or update a single file (guarded)

create_or_update_file("owner/repo", "src/app.py", content="print(1)", message="Add app.py")

Commit SHA and URL

push_files

Push multiple files as a single commit

push_files("owner/repo", "main", "feat: add modules", '[{"path":"a.py","content":"..."}]')

Commit SHA and file list

add_issue_comment

Comment on an issue or pull request

add_issue_comment("owner/repo", 1, "Looks good!")

Comment URL

merge_pull_request

Merge a pull request

merge_pull_request("owner/repo", 42, merge_method="squash")

Merge status and SHA


Security Model

  • Repository Allowlist: Only repositories explicitly allowed by policy can be accessed.

  • Branch Protection: PRs to protected branches are subject to branch protection rules before merging.

  • Dry-Run Mode: Execute operations without side effects for safe testing and auditing.

  • Audit Logging: All actions logged in JSONL format with precise timestamps to maintain traceability.

  • Policy Configuration: Start from policy.example.json to configure repository allowlists and protected branches.


FAQ

Why not call the GitHub API directly?
Direct API calls lack centralized policy enforcement, audit logging, and uniform tooling support for AI agents. This MCP server adds a controlled, auditable layer for safer automation.

What MCP clients work with this?
Agents like Claude Code, OpenAI Codex, and any client supporting the MCP JSON-RPC 2.0 transport can connect to this server.

How is this different from the official GitHub MCP server?
This project's key differentiator is policy enforcement. Repository allowlists prevent agents from touching unauthorized repos, branch protection blocks accidental PRs to sensitive branches, dry-run mode supports safe validation, and write actions are audit-logged with timestamps.


Quick Start

Prerequisites

  • Python 3.10+

  • GitHub personal access token with repo scope

Install

pip install fastmcp httpx python-dotenv

Configure and Run

git clone https://github.com/FMorgan-111/github-mcp-server.git
cd github-mcp-server
cp .env.example .env && nano .env
python3 -m src.main

Connect with Claude Code

claude mcp add github-agent -- python3 /path/to/github-mcp-server/src/main.py

Development

pip install -e . --break-system-packages
python3 -m pytest tests/ -v
python3 -m src.main

106 tests, all passing.


Docker Deployment

docker build -t github-mcp-server .
docker run \
  -e GITHUB_TOKEN=ghp_your_token_here \
  -i github-mcp-server

The -e GITHUB_TOKEN=... flag passes the token into the container because the local .env file is not copied into the image.


License

MIT

Available Tools

12 tools
add_issue_commentB

Add a comment to a GitHub issue or pull request.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository in 'owner/repo' format.
issue_numberYesIssue or PR number.
bodyYesComment text (markdown supported).
dry_runNoIf True, preview without executing.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description alone must convey behavioral traits. It does not disclose important aspects such as idempotency, required permissions, error handling, or side effects like notification triggers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no extraneous words. However, it is too brief to cover necessary details, sacrificing completeness for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite 100% schema coverage and an output schema, the description lacks essential context: no usage scenarios, no behavioral notes, and no mention of how this tool fits with siblings. The completeness is insufficient for an agent to reliably select and use the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so each parameter is well-described in the schema. The tool description adds no additional meaning beyond the schema descriptions, meeting the baseline expectation but not exceeding it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the action ('Add a comment') and the target resource ('GitHub issue or pull request'). It distinguishes the tool from siblings like 'comment_pr_review' which deals with PR reviews, and 'create_issue' which creates issues, not comments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance is provided. The description does not mention when to use this tool versus alternatives, nor does it specify any prerequisites or conditions for use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comment_pr_reviewB

Fetch PR diff, run code review, and post findings as review comments.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes
pr_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses that the tool posts comments (mutating), but lacks details on authentication, rate limits, or what 'run code review' entails. Sufficiently transparent about core behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, efficient and front-loaded. However, the phrase 'run code review' is somewhat vague, slightly reducing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (multi-step) and existence of output schema, the description is minimally adequate. Does not mention write permissions or the nature of the review. Sufficient for a simple tool but leaves gaps for agents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description adds no additional meaning for parameters. 'repo' and 'pr_number' are not explained (e.g., repo format expected).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the multi-step action: fetch diff, run code review, and post findings as review comments. It distinguishes from sibling tools like review_pr_diff (which likely only returns review) and add_issue_comment (which adds a single comment).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 such as add_issue_comment or review_pr_diff. The description does not explain scenarios or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_issueA

Create a new issue in a GitHub repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository in 'owner/repo' format.
titleYesIssue title.
bodyYesIssue body text.
dry_runNoIf True, preview the operation without executing.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It only states the action without explaining side effects, required permissions, error handling, or idempotency. A create operation could have implications (e.g., rate limits, notifications) that are not mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no fluff. Every word is necessary. The structure is front-loaded with action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the existence of an output schema, the description is mostly complete. However, it lacks any usage context or behavioral notes that could help an agent decide when to use it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, meaning all parameters have descriptions in the input schema. The description adds no additional semantic value beyond what the schema already provides. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action ('Create a new issue') and the resource ('in a GitHub repository'). It is specific and distinguishes from sibling tools like add_issue_comment or create_pr.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance. While the use case is straightforward, the description does not mention prerequisites, alternatives, or scenarios where this tool is inappropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_or_update_fileB

Create or update a single file in a GitHub repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository in 'owner/repo' format.
pathYesFile path to create/update.
contentYesNew file content.
messageNoCommit message (default: auto-generated).
branchNoBranch to commit to (default: repo default branch).
shaNoBlob SHA of file being replaced (required for updates).
dry_runNoIf True, preview the operation without executing.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It only states the action without explaining behavior (e.g., requires SHA for updates, defaults branch, auto-generates message). Lacks details on destructive potential or access requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence is efficient and front-loaded. However, slightly too brief given the tool's complexity and number of siblings; could include a brief usage hint without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Description is incomplete for a tool with 7 parameters, 12 siblings, and no annotations. Does not explain how create vs update is determined, branch behavior, or commit message defaults. Output schema existence reduces need for return value info, but still lacks usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are well-documented. Description adds no extra meaning beyond the schema, meeting baseline expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb (create or update) and resource (single file in GitHub repository). Distinguishes from siblings like push_files (multiple files) and get_file_contents (read only).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 like push_files or get_file_contents. No context about prerequisites or typical use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_prC

Create a new pull request.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository in 'owner/repo' format.
titleYesPR title.
bodyYesPR description.
headYesSource branch name.
baseYesTarget branch name (e.g. 'main').
dry_runNoIf True, preview the operation without executing.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description lacks detail on side effects, authentication, rate limits, or other behavioral traits. It does not mention that creating a PR is a write operation, nor does it describe the dry_run parameter's behavior or any constraints. With no annotations, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that is front-loaded with the core action. It is not verbose, but it could benefit from a bit more detail without becoming lengthy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having a complex input schema and sibling tools, the description is too brief. It does not explain the purpose of parameters like 'dry_run' or the expected output. The presence of an output schema reduces the burden slightly, but the description still lacks necessary context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema documents all parameters. The description adds no additional meaning beyond the schema, which is acceptable but does not enhance understanding. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create a new pull request' clearly states the verb and resource. It is unambiguous and matches the tool name. However, it does not differentiate from sibling tools like 'create_issue' or 'merge_pull_request', which could be clarified for context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. There is no mention of prerequisites, such as needing a branch to exist, or when to choose other tools like 'create_issue' or 'merge_pull_request'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_file_contentsB

Read a file from a GitHub repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository in 'owner/repo' format.
pathYesFile path (e.g. 'src/main.py').
refNoBranch, tag, or commit SHA (default: default branch).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must carry the full burden. It merely says 'Read a file', failing to disclose whether the tool handles binary files, what happens on non-existent files, or the format of returned content. An output schema exists but is not referenced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise (one sentence), but conciseness sacrifices informativeness. It could be more front-loaded with key details without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 params, output schema exists), the description is insufficient. It omits details like default branch behavior, error handling, or content representation, which are needed for complete understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are already well-defined. The description adds no extra meaning beyond the schema, earning the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 'a file from a GitHub repository', making the purpose unambiguous. In the context of sibling tools like create_or_update_file and push_files, this read operation is distinctly identifiable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 search_code or get_pr_diff. There is no mention of prerequisites, limitations, or appropriate contexts, leaving the agent without decision support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pr_diffC

Get the diff for a pull request.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes
pr_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It only states the action, but does not disclose read-only nature, authentication requirements, error handling (e.g., if PR not found), or what the diff includes (e.g., unified vs. split view).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that is front-loaded with the action and resource. Every word adds value, with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, which reduces the burden, the description is minimal. For a simple get-diff tool with two parameters, it is adequate but lacks any further context about return values or operational behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description adds no parameter details beyond the names. 'repo' is ambiguous (owner/repo format?) and 'pr_number' is clear, but the description does not clarify expected format or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get the diff for a pull request.' It uses a specific verb ('Get') and resource ('diff for a pull request'), which distinguishes it from sibling tools like review_pr_diff, though the description does not elaborate on the diff format.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 (e.g., review_pr_diff might offer similar functionality). There is no mention of prerequisites, context, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_issuesC

List issues in a GitHub repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes
stateNoopen

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It does not mention pagination, ordering, side effects, or anything beyond the basic action. Minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (one sentence), which is good. However, it lacks structure and could be slightly expanded for clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple but the description is incomplete: no mention of output format, pagination, or the effect of the 'state' parameter. With an output schema existing, it could have referenced it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should clarify parameters. It does not explain 'repo' or 'state' values (e.g., valid states, default behavior). Fails to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'List issues in a GitHub repository' uses a specific verb (list) and resource (issues), making the purpose clear. However, it does not differentiate from sibling tools, though no conflicting list tool exists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 like search_code or create_issue. The description lacks context for selecting this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

merge_pull_requestC

Merge a pull request.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository in 'owner/repo' format.
pr_numberYesPull request number.
commit_titleNoCustom merge commit title.
merge_methodNo'merge', 'squash', or 'rebase' (default: 'merge').merge
dry_runNoIf True, preview without executing.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose any behavioral traits such as destructive side effects, authentication requirements, rate limits, or what happens post-merge. For a mutation tool, this is a critical omission.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence, which is minimal but lacks substantive information. It does not waste words, but it also fails to provide valuable detail, making it under-specified rather than properly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of 5 parameters, an output schema, and related sibling tools, the description is insufficient. It does not explain merge methods, dry run behavior, or how this tool fits into a workflow with sibling tools like create_pr or comment_pr_review.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so all parameters are documented. The tool description adds no additional meaning beyond the schema, earning the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Merge a pull request.' is a clear verb+resource statement that directly conveys the tool's action. However, it does not add any additional scope or differentiation from sibling tools like 'create_pr' or 'review_pr_diff', which limits its clarity slightly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 this tool versus alternatives, such as when a pull request is ready to be merged or prerequisites like required reviews. No context is given for appropriate usage contexts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

push_filesC

Push multiple files as a single commit.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository in 'owner/repo' format.
branchYesBranch name to commit to.
messageYesCommit message.
files_jsonYesJSON string of [{"path": "...", "content": "..."}, ...].
dry_runNoIf True, preview without executing.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description lacks behavioral details such as whether it creates a new commit, overwrites, or handles branch creation. No annotations provided to compensate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very short single sentence, but for a tool with multiple parameters and complex operation, it is under-specified. Could be more informative without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Lacks context on prerequisites (e.g., branch existence), failure modes, or behavior of dry_run. Output schema exists but doesn't excuse missing behavioral context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all parameters, so baseline is 3. Description adds no additional detail beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Push multiple files as a single commit,' but does not explicitly differentiate from sibling tool 'create_or_update_file' which pushes a single file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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., create_or_update_file), nor any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

review_pr_diffB

Review a PR diff using ruff + legacy regex rules. Returns structured findings.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes
pr_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must fully disclose behavior. It mentions using 'ruff + legacy regex rules' but does not explain side effects, permission requirements, or what constitutes 'structured findings'. This is insufficient for a tool that likely modifies state or accesses code.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, no unnecessary words. It is efficiently front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, return values are not needed in the description. However, the description omits important context like required access permissions, the fact that it uses specific static analysis tools, and how the 'structured findings' are structured. It is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should add meaning beyond parameter names. It does not describe any constraints, formats, or examples for 'repo' or 'pr_number'. The parameter names are self-explanatory at a basic level, but lacking detail hurts usability.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reviews a PR diff using 'ruff + legacy regex rules' and returns structured findings. This distinguishes it from siblings like get_pr_diff (which only retrieves the diff) and comment_pr_review (which adds comments).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 vs alternatives such as comment_pr_review or create_issue. The description does not mention prerequisites or conditions for use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_codeC

Search for code in GitHub repositories.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
repoNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It does not disclose whether the operation is read-only (likely), rate limits, scope (public/private repos), or result form. The minimal description fails to inform the agent of behavioral traits beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise (one sentence), but it is too minimal to be informative. It lacks structure such as front-loading key details, and every sentence (only one) earns its place, but it fails to cover necessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 0% schema coverage, no annotations, and existence of an output schema, the description is incomplete. It does not explain return values, pagination, search behavior (e.g., exact vs. fuzzy), or error modes. The output schema is not documented in the description, assuming the agent infers from open-ended schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description adds no meaning to the parameters 'query' and 'repo.' It does not explain what valid queries look like, how 'repo' filters, or default behavior. The schema already provides types and required flags, so no added value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Search for code in GitHub repositories,' which is a specific verb+resource combination. However, it does not distinguish from sibling tools like 'get_file_contents' or 'create_or_update_file' that also involve code, and it lacks scope details (e.g., all repos vs. owned repos).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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., 'list_issues' for issues, 'get_file_contents' for specific files). The description implies usage for code searches but provides no exclusions or context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

B3.2/5.0
Disambiguation4/5

Most tools have distinct purposes, but `review_pr_diff` and `comment_pr_review` both involve PR review, which could cause slight ambiguity. However, their descriptions clarify the different outputs.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case, making them predictable and easy to understand. No mixing of conventions.

Tool Count5/5

With 12 tools, the server covers core GitHub operations without being bloated or sparse. Each tool serves a clear purpose.

Completeness4/5

The tool set covers most common GitHub workflows (issues, PRs, files, code search) but lacks update/delete operations for issues and files, which may require workarounds.

Maintenance

ActivityStale
ResponsivenessSyncing

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

Related MCP Servers

Latest Blog Posts

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/FMorgan-111/github-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server