Skip to main content
Glama
crunchtools

MCP GitHub CrunchTools

by crunchtools

MCP GitHub CrunchTools

A secure MCP (Model Context Protocol) server for GitHub issues, pull requests, repository files, and search. Works with github.com and GitHub Enterprise Server.

Overview

This MCP server is designed to be:

  • Secure by default - Comprehensive input validation and token protection

  • No third-party services - Runs locally via stdio, your API token never leaves your machine

  • Multi-instance - Works with github.com or GitHub Enterprise Server via configurable API URL

  • Cross-platform - Works on Linux, macOS, and Windows

  • Automatically updated - GitHub Actions monitor for CVEs and update dependencies

  • Containerized - Available at quay.io/crunchtools/mcp-github built on Hummingbird Python base image

Related MCP server: GitHub Prod MCP

Naming Convention

Component

Name

GitHub repo

crunchtools/mcp-github

Container

quay.io/crunchtools/mcp-github

Python package (PyPI)

mcp-github-crunchtools

CLI command

mcp-github-crunchtools

Module import

mcp_github_crunchtools

Why Hummingbird?

The container image is built on the Hummingbird Python base image from Project Hummingbird, which provides:

  • Minimal CVE exposure - Built with a minimal package set, dramatically reducing the attack surface

  • Regular updates - Security patches are applied promptly

  • Optimized for Python - Pre-configured Python environment

  • Production-ready - Proper signal handling and non-root user defaults

Features

Issues (3 tools)

  • list_issues_tool - List issues for a repository (pull requests excluded)

  • get_issue_tool - Get a single issue by number

  • create_issue_comment_tool - Comment on an issue or pull request (write)

Pull Requests (4 tools)

  • list_pull_requests_tool - List pull requests for a repository

  • get_pull_request_tool - Get a single pull request by number

  • get_pull_request_diff_tool - Get the unified diff for a pull request

  • get_pull_request_checks_tool - Combined CI status (check-runs + commit status)

Files (2 tools)

  • get_file_content_tool - Read decoded file content from a repository

  • list_repo_tree_tool - List the git tree (files and directories)

Search (2 tools)

  • search_code_tool - Search code across GitHub

  • search_issues_tool - Search issues and pull requests across GitHub

Installation

uvx mcp-github-crunchtools

With pip

pip install mcp-github-crunchtools

With Container

podman run -e GITHUB_TOKEN=your_token \
    quay.io/crunchtools/mcp-github

Configuration

Environment Variables

Variable

Required

Default

Description

GITHUB_TOKEN

Yes

GitHub Personal Access Token

GITHUB_API_URL

No

https://api.github.com

API base URL (set for GHES)

GITHUB_DEFAULT_ORG

No

Default owner when a tool omits owner

Creating a GitHub Personal Access Token

  1. Navigate to token settings

  2. Create a token

    • Name: mcp-github-crunchtools

    • Expiration: Set an appropriate date (90 days recommended)

    • Scopes: Grant read access to contents, issues, and pull requests. Add write to issues/PRs only if you need create_issue_comment_tool.

  3. Copy and Store Token

    • Copy the token immediately (shown only once)

    • Store securely in a password manager

Add to Claude Code

claude mcp add mcp-github-crunchtools \
    --env GITHUB_TOKEN=your_token_here \
    -- uvx mcp-github-crunchtools

For GitHub Enterprise Server:

claude mcp add mcp-github-crunchtools \
    --env GITHUB_TOKEN=your_token_here \
    --env GITHUB_API_URL=https://ghe.example.com/api/v3 \
    -- uvx mcp-github-crunchtools

For the container version:

claude mcp add mcp-github-crunchtools \
    --env GITHUB_TOKEN=your_token_here \
    -- podman run -i --rm -e GITHUB_TOKEN quay.io/crunchtools/mcp-github

Usage Examples

List Issues

User: List open issues for crunchtools/mcp-github
Assistant: [calls list_issues_tool with owner="crunchtools", repo="mcp-github"]

Review a Pull Request

User: Show me the diff for PR #5 in crunchtools/mcp-github
Assistant: [calls get_pull_request_diff_tool with pull_number=5]

Check CI Status

User: Did the checks pass on pull request 5?
Assistant: [calls get_pull_request_checks_tool with pull_number=5]

Read a File

User: Show me src/server.py from crunchtools/mcp-github
Assistant: [calls get_file_content_tool with path="src/server.py"]
User: Find code using FastMCP in crunchtools repos
Assistant: [calls search_code_tool with query="FastMCP org:crunchtools"]

Security

This server was designed with security as a primary concern. See SECURITY.md for details.

Key Security Features

  1. Token Protection

    • Stored as SecretStr (never accidentally logged)

    • Environment variable only (never in files or args)

    • Sanitized from all error messages

  2. Input Validation

    • Pydantic models for write inputs

    • Allowlist character validation for owner/repo names

    • Path traversal prevention for file reads

  3. API Hardening

    • Bearer-token auth and pinned GitHub API version

    • HTTPS enforcement (except localhost)

    • TLS certificate validation

    • Request timeouts (30s)

    • Response size limits (10MB)

  4. Automated CVE Scanning

    • GitHub Actions scan dependencies

    • Container security scanning with Trivy

Development

Setup

git clone https://github.com/crunchtools/mcp-github.git
cd mcp-github
uv sync --all-extras

Run Tests

uv run pytest

Lint and Type Check

uv run ruff check src tests
uv run mypy src

Build Container

podman build -t mcp-github .

License

AGPL-3.0-or-later

Contributing

Contributions welcome! Please read SECURITY.md before submitting security-related changes.

Available Tools

11 tools
create_issue_comment_toolA

Create a comment on a GitHub issue or pull request.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
issue_numberYesIssue or pull request number
bodyYesComment body (Markdown)
ownerNoRepository owner (defaults to GITHUB_DEFAULT_ORG if unset)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as authentication requirements, rate limits, or whether the comment is appended. Merely states the action without additional context.

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 sentence that front-loads the core purpose without any filler. Every word earns its place.

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?

The tool has an output schema (known from context) and a simple action. However, the description lacks usage context like prerequisites or examples. It is minimally complete but could benefit from additional guidance.

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?

All parameters have descriptions in the input schema (100% coverage). The description does not add extra meaning beyond what the schema provides; hence 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 and resource: 'Create a comment on a GitHub issue or pull request.' It distinguishes this tool from sibling tools that are read-only (get, list, search).

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 guidance on when to use or not use this tool, nor alternatives mentioned. However, the purpose is implied from the context of sibling tools being read-oriented.

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

get_file_content_toolA

Get the decoded text content of a file in a GitHub repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
pathYesPath to the file within the repository
ownerNoRepository owner (defaults to GITHUB_DEFAULT_ORG if unset)
refNoBranch, tag, or commit SHA (default: the default branch)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It discloses that content is decoded text but does not mention potential issues like large file handling, rate limits, or authentication. Basic transparency is provided but not comprehensive.

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

Conciseness5/5

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

The description is a single, concise sentence that is front-loaded and contains no superfluous information. Every word is necessary.

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?

The description is adequate for a simple file retrieval tool, but given the presence of an output schema and sibling tools, it could improve by noting return format or edge cases. Completeness is moderate.

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 clear parameter descriptions. The tool description does not add additional meaning beyond the schema, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool retrieves decoded text content of a file in a GitHub repository. The verb 'get' and resource 'file content' are specific. It distinguishes itself from sibling tools like get_pull_request_diff_tool (diff) and search_code_tool (search).

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?

The description implies usage when raw file content is needed but provides no explicit guidance on when to use this tool over alternatives like get_pull_request_diff_tool or list_repo_tree_tool. No exclusions or conditions are mentioned.

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

get_issue_toolB

Get a single GitHub issue by number.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
issue_numberYesIssue number (e.g., #42)
ownerNoRepository owner (defaults to GITHUB_DEFAULT_ORG if unset)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description's single sentence does not disclose behavioral traits beyond the basic operation. It fails to mention that this is a read-only operation, any rate limits, or error responses, which are important for safe invocation.

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 extremely concise, consisting of one clear sentence that immediately conveys the tool's purpose. Every word is necessary and there is no redundant information.

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 tool's low complexity and the presence of a complete output schema and parameter documentation, the brief description is minimally adequate. However, it could benefit from specifying the scope (e.g., 'from the specified repository') and any prerequisites (e.g., authentication).

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 description adds no extra meaning beyond what the schema already provides for repo, issue_number, and owner parameters. 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?

The description clearly states the tool's purpose: retrieving a single GitHub issue by number. It uses a specific verb ('Get') and resource ('GitHub issue'), and implicitly distinguishes from sibling tools that list or search issues.

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., list_issues_tool, search_issues_tool). There are no explicit conditions or exclusion criteria, leaving the agent to infer usage context.

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

get_pull_request_checks_toolA

Get a combined CI status summary for a GitHub pull request.

Combines check-runs and the legacy commit status into one summary, including the overall state and per-check conclusions.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
pull_numberYesPull request number
ownerNoRepository owner (defaults to GITHUB_DEFAULT_ORG if unset)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

The description discloses that it combines two sources into a summary with overall state and per-check conclusions. No annotations exist, but the description sufficiently covers the behavior for a read-only operation. It could explicitly state it's a read operation.

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?

Two sentences efficiently convey the purpose and composition of the summary. No redundant information; front-loaded with the main action.

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

Completeness5/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 parameters (2 required), and presence of an output schema, the description fully covers what the tool does and returns. No gaps identified.

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%, and the description does not add extra meaning beyond the parameter names and types. The baseline of 3 is appropriate since the schema already explains the parameters adequately.

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 that the tool retrieves a combined CI status summary for a GitHub pull request, combining check-runs and legacy commit status. This is distinct from siblings like get_pull_request_tool, which focuses on PR metadata.

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?

The description implies usage for obtaining CI status, but does not explicitly compare to alternatives (e.g., when to use this vs. get_pull_request_tool which might also include status). No when-not or exclusion criteria are provided.

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

get_pull_request_diff_toolB

Get the unified diff for a GitHub pull request.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
pull_numberYesPull request number
ownerNoRepository owner (defaults to GITHUB_DEFAULT_ORG if unset)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, and the description fails to disclose behavioral traits such as read-only nature, auth requirements, rate limits, or output size limits. The description does not compensate for the lack of annotations.

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 clear sentence with no extraneous information. However, it could be slightly improved by adding a sentence about output format or usage context without becoming verbose.

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?

The description is minimal but an output schema exists (reducing the need to explain return values). However, for a tool that fetches potentially large diffs, it could mention truncation or format. Overall adequate but not complete.

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?

With 100% schema description coverage, the parameters are already well-documented. The description adds no extra meaning beyond the schema, so baseline 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?

The description clearly states the action 'Get' and the specific resource 'unified diff for a GitHub pull request'. It distinguishes from sibling tools like get_pull_request_tool (which returns PR metadata) and get_pull_request_checks_tool.

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. Sibling tools exist for similar tasks (e.g., get_pull_request_tool, get_pull_request_checks_tool) but no comparison or context is provided.

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

get_pull_request_toolA

Get a single GitHub pull request by number.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
pull_numberYesPull request number
ownerNoRepository owner (defaults to GITHUB_DEFAULT_ORG if unset)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. The verb 'Get' implies a read-only operation, but the description does not disclose further behavioral traits such as rate limits, error handling, or response structure. The presence of an output schema mitigates some need, but the description adds minimal behavioral context beyond the obvious.

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?

Extremely concise single sentence (8 words) that front-loads the verb and object. Every word earns its place; no redundancy.

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?

For a simple retrieval tool with a comprehensive output schema, the description is largely sufficient. It could mention that the 'owner' parameter defaults to a configured organization, but overall it provides enough context for an agent to use it correctly.

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 three parameters. The tool description adds no additional meaning beyond what the schema already provides, so baseline 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?

The description clearly states the action ('Get'), the resource ('single GitHub pull request'), and the identifier ('by number'). It is specific and easily distinguishes from sibling tools like list_pull_requests_tool (multiple) or get_pull_request_diff_tool (specific part).

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?

The description provides clear context: it retrieves a single pull request by number. However, it does not provide guidance on when to use this tool versus alternatives (e.g., use get_pull_request_checks_tool for checks), nor does it mention prerequisites or exclusions.

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

list_issues_toolA

List issues for a GitHub repository (pull requests excluded).

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
ownerNoRepository owner (defaults to GITHUB_DEFAULT_ORG if unset)
stateNoFilter by state (open, closed, all)open
labelsNoComma-separated label names
per_pageNoResults per page, max 100 (default: 30)
pageNoPage number (default: 1)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

Description does not disclose behaviors beyond excluding PRs (e.g., pagination, rate limits, sorting). Since no annotations are provided, the description could offer more context.

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, concise and to the point, with no superfluous information.

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 full schema coverage and output schema, the description adequately communicates the tool's scope (issues only). Slight lack of ordering/sorting defaults, but acceptable.

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 parameter descriptions, so the description adds minimal value beyond what is already in the schema.

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 tool lists issues for a GitHub repository and explicitly excludes pull requests, distinguishing it from list_pull_requests_tool.

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 guidance on when to use this tool vs alternatives like search_issues_tool. Usage is implied but not clarified.

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

list_pull_requests_toolB

List pull requests for a GitHub repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
ownerNoRepository owner (defaults to GITHUB_DEFAULT_ORG if unset)
stateNoFilter by state (open, closed, all)open
per_pageNoResults per page, max 100 (default: 30)
pageNoPage number (default: 1)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/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 says 'list', implying read-only behavior, but does not disclose details like authentication requirements, rate limits, or that it supports pagination. The output schema provides return structure, so a baseline of 3 is reasonable.

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 extremely concise—one sentence with no fluff. However, it could include a bit more context (e.g., filtering options) without losing conciseness.

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 presence of an output schema and complete parameter descriptions, the description is minimally adequate. However, it lacks context about when to use this tool over similar list tools (e.g., list_issues_tool) and does not mention any behavioral constraints.

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?

All 5 parameters are described in the input schema (100% coverage), so the description adds no additional semantic value beyond what's in the schema. The baseline of 3 applies as per guidelines.

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 verb 'List' and resource 'pull requests' with scope 'for a GitHub repository'. It is direct and unambiguous, but does not differentiate from sibling tools like 'get_pull_request_tool' which retrieves a single PR.

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 vs alternatives such as search_issues_tool or list_issues_tool. It lacks any mention of when not to use it or prerequisites, leaving the agent to infer from the name alone.

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

list_repo_tree_toolB

List the git tree (files and directories) of a GitHub repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
ownerNoRepository owner (defaults to GITHUB_DEFAULT_ORG if unset)
tree_shaNoTree SHA, branch name, or "HEAD" (default: HEAD)HEAD
recursiveNoRecurse into subtrees (default: false)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, description bears full burden for behavioral disclosure. Only states what the tool does, not how it behaves (e.g., error handling, authentication, rate limits, output structure). Lacks context beyond minimal functionality.

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, no wasted words. Front-loaded with verb and resource. Appropriate length for a straightforward listing tool.

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 that output schema exists and parameter documentation is thorough, this description is adequate but minimal. Fails to mention key behavioral aspects like recursion or tree types. Agent may need to rely on schema entirely for 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 baseline is 3. Description adds no extra meaning beyond the schema's parameter descriptions. Does not elaborate on defaults or usage of tree_sha or recursive.

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 'List' and resource 'git tree (files and directories)' of a GitHub repository. It is specific and distinct from sibling tools like get_file_content_tool which retrieves a file, and search_code_tool which searches code.

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. Does not mention prerequisites, exclusions, or typical scenarios. Implies usage only through name and description.

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

search_code_toolB

Search for code across GitHub.

Uses GitHub code search syntax (e.g., "addClass repo:jquery/jquery").

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query string
per_pageNoResults per page, max 100 (default: 30)
pageNoPage number (default: 1)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations provided, and the description does not disclose behavioral traits such as rate limits, authentication requirements, or response structure. The presence of an output schema is not mentioned in the description.

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?

Two concise sentences, the first clearly stating the purpose, the second adding essential syntax context. No extraneous information.

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?

The description is adequate for a simple search tool with an output schema, but lacks usage guidelines and behavioral details that would make it complete for agent decision-making.

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?

Input schema covers 100% of parameters, so baseline is 3. The description adds value by referencing GitHub code search syntax, which helps agents formulate queries, but does not elaborate on each parameter beyond the schema.

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?

Clearly states 'Search for code across GitHub', which is a specific verb and resource. Distinguishes from sibling tools like search_issues_tool by focusing on code search.

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?

Mentions GitHub code search syntax but provides no guidance on when to use this tool versus alternatives (e.g., search_issues_tool). No explicit when-to-use or when-not-to-use criteria.

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

search_issues_toolA

Search for issues and pull requests across GitHub.

Uses GitHub issue search syntax (e.g., "is:open is:pr author:octocat").

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query string
per_pageNoResults per page, max 100 (default: 30)
pageNoPage number (default: 1)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Without annotations, the description covers the key behavior: searching issues and PRs with search syntax. It does not mention rate limits or authentication, but the output schema exists to describe return values.

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?

Two sentences efficiently convey the tool's purpose and usage without unnecessary words.

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 output schema and clear description, the tool is well-specified for an agent to decide when to invoke it. Could mention that it searches both issues and PRs explicitly, which it does.

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

Parameters4/5

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

Schema coverage is 100% (baseline 3). The description adds value by explaining the search syntax for the query parameter, which is crucial for correct usage.

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 searches for issues and pull requests across GitHub using search syntax, distinguishing it from siblings like list_issues_tool and search_code_tool.

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

Usage Guidelines4/5

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

The description provides context on using GitHub issue search syntax with an example, implying when to use it. However, it does not explicitly list alternatives or exclusions.

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

TDQS

A3.7/5.0
Disambiguation5/5

Each tool targets a unique resource or action (e.g., get_issue, list_pull_requests, search_code) with no overlaps in purpose, ensuring clear differentiation.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (e.g., create_issue_comment, get_file_content, list_issues) with no deviations.

Tool Count5/5

11 tools is well-scoped for a GitHub-focused server, covering core retrieval and search tasks without excessive or insufficient breadth.

Completeness3/5

The tool set covers reading (get, list, search) and commenting, but lacks fundamental write operations like create_issue, create_pull_request, or update/delete for issues and PRs, leaving notable gaps.

Maintenance

ActivitySlowing
ResponsivenessNo issues

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

  • A
    license
    C
    quality
    C
    maintenance
    A production-ready MCP server for GitHub operations, providing tools for repository management, issues, pull requests, and more via both MCP stdio and REST API.
    27
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server for GitHub operations, providing tools for repository management, issues, pull requests, and code search.

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/crunchtools/mcp-github'

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