GitHub MCP Server
This GitHub MCP Server enables AI agents to interact with GitHub repositories through the GitHub REST API, providing comprehensive repository management, issue tracking, code search, and file operations.
Core Capabilities:
Repository Management: List repositories for users/organizations with filtering and sorting options, get detailed repository information (metadata, stars, forks, language, topics), and create new repositories with customizable settings (public/private, auto-initialize)
File Operations: Read file contents from any repository, branch, tag, or specific commit using path references
Issue Management: List issues with filters for state/labels and pagination, create new issues with title, body (Markdown), labels, assignees, and milestones, update existing issues, and add comments to issues/pull requests
Code Search: Search code across GitHub using advanced query syntax with filters for language, repository, file location, and user
Real-time Event Monitoring: Monitor GitHub events (issues, pull requests, releases, stars, watches, forks, commits, branches, tags) via webhooks with Discord notifications and SSE transport
Technical Details:
Authentication via GitHub Personal Access Token
Rate limiting: 5,000 requests/hour (authenticated), 30 search requests/minute
Pagination support (up to 100 results per page)
Environment-based configuration for tokens, webhook secrets, and Discord integration
Enables interaction with GitHub repositories via the GitHub REST API, allowing for repository management, file reading, issue tracking, code searching, and commenting on issues or pull requests.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GitHub MCP Serverlist the open issues for modelcontextprotocol/servers"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
GitHub MCP Server
Model Context Protocol server for GitHub repository management and interaction.
Overview
This MCP server enables AI agents to interact with GitHub repositories via the GitHub REST API. Built with TypeScript using the official MCP SDK and Octokit.
Version: 0.3.0 (Phase 3 In Progress)
Author: Pip (@pipseedai)
License: MIT
Features
Phase 1: Read Operations β
github_list_repos- List repositories for a user or organizationgithub_get_repo- Get detailed repository informationgithub_get_file- Read file contents from a repositorygithub_list_issues- List repository issues with filtersgithub_search_code- Search code across GitHub repositories
Phase 2: Write Operations β
github_create_repo- Create a new repositorygithub_create_issue- Create an issue with title, body, labels, assigneesgithub_update_issue- Update issue (title, body, state, labels, assignees)github_create_comment- Add comments to issues or pull requests
Phase 3: Webhook Monitoring π§
Real-time GitHub event monitoring with Discord notifications.
Components:
β Phase 3.1: HTTP server with SSE transport for MCP tools
β Phase 3.2: Webhook signature verification (HMAC SHA-256)
β Phase 3.3: Discord delivery via webhooks
π² Phase 3.4: Production deployment and GitHub webhook configuration
Supported Events:
Issues (opened, closed, reopened)
Pull requests (opened, closed, merged)
Releases (published, created)
Stars, watches, forks
Commits, branches, tags
Event Filtering: Automatically filters noisy events (individual watch/unwatch, repetitive actions)
Phase 4: Advanced Features (Future)
Pull request creation and management
Branch and commit operations
Repository forking and starring
Workflow management
Installation
cd ~/.openclaw/workspace/mcp-servers/github
npm install
npm run buildConfiguration
Authentication
Requires a GitHub Personal Access Token stored in ~/.openclaw/secrets/github.env:
GITHUB_TOKEN=ghp_your_token_hereWebhook Server (Phase 3)
For real-time GitHub event monitoring, configure webhook secrets and Discord delivery in ~/.openclaw/secrets/github.env:
# Required: GitHub webhook secret (set when creating webhook)
GITHUB_WEBHOOK_SECRET=your_webhook_secret_here
# Required: Discord webhook URL for notifications
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
# Optional: HTTP server port (default: 9999)
PORT=9999Start the HTTP server:
source ~/.openclaw/secrets/github.env
npm run build
node dist/server-http.jsEndpoints:
GET /health- Server health checkGET /sse- MCP SSE transport (tools still available)POST /webhooks/github- GitHub webhook receiver
GitHub Webhook Configuration:
Go to repository Settings β Webhooks β Add webhook
Payload URL:
https://your-domain.com/webhooks/githubContent type:
application/jsonSecret: Same as
GITHUB_WEBHOOK_SECRETEvents: Choose events to monitor (or "Send me everything")
Usage
Via mcporter CLI
Note: Make sure GITHUB_TOKEN is set in your environment before running these commands.
export GITHUB_TOKEN=ghp_your_token_here# List repositories for authenticated user
npx mcporter call --stdio "./path/to/github-mcp/dist/index.js" \
'github.github_list_repos()'
# Get repository information
npx mcporter call --stdio "./path/to/github-mcp/dist/index.js" \
'github.github_get_repo(owner: "modelcontextprotocol", repo: "servers")'
# Read file contents
npx mcporter call --stdio "./path/to/github-mcp/dist/index.js" \
'github.github_get_file(owner: "owner", repo: "repo", path: "README.md")'
# List repository issues
npx mcporter call --stdio "./path/to/github-mcp/dist/index.js" \
'github.github_list_issues(owner: "owner", repo: "repo", state: "open")'
# Search code
npx mcporter call --stdio "./path/to/github-mcp/dist/index.js" \
'github.github_search_code(query: "addClass in:file language:js")'Available Tools
github_list_repos
List repositories for a user or organization.
Parameters:
username(optional) - GitHub username/org (defaults to authenticated user)type(optional) - Filter: "all", "owner", "member" (default: "owner")sort(optional) - Sort by: "created", "updated", "pushed", "full_name" (default: "updated")per_page(optional) - Results per page (default: 30, max: 100)
github_get_repo
Get detailed information about a repository.
Parameters:
owner(required) - Repository ownerrepo(required) - Repository name
Returns: Repository metadata including description, stars, forks, language, topics, etc.
github_get_file
Read file contents from a repository.
Parameters:
owner(required) - Repository ownerrepo(required) - Repository namepath(required) - File path in repositoryref(optional) - Branch, tag, or commit SHA (default: default branch)
Returns: Decoded file content as text
github_list_issues
List issues for a repository.
Parameters:
owner(required) - Repository ownerrepo(required) - Repository namestate(optional) - "open", "closed", "all" (default: "open")labels(optional) - Comma-separated label namesper_page(optional) - Results per page (default: 30, max: 100)
github_search_code
Search for code across GitHub repositories.
Parameters:
query(required) - Search query (supports GitHub search syntax)per_page(optional) - Results per page (default: 30, max: 100)
Example queries:
"addClass in:file language:js repo:owner/repo""function user:pipseedai""TODO extension:md"
github_create_repo
Create a new GitHub repository.
Parameters:
name(required) - Repository namedescription(optional) - Repository descriptionprivate(optional) - Private repository (default: false)auto_init(optional) - Initialize with README (default: false)
github_create_issue
Create a new issue in a repository.
Parameters:
owner(required) - Repository ownerrepo(required) - Repository nametitle(required) - Issue titlebody(optional) - Issue description (supports Markdown)labels(optional) - Array of label namesassignees(optional) - Array of GitHub usernamesmilestone(optional) - Milestone number
github_update_issue
Update an existing issue.
Parameters:
owner(required) - Repository ownerrepo(required) - Repository nameissue_number(required) - Issue numbertitle(optional) - New titlebody(optional) - New descriptionstate(optional) - "open" or "closed"labels(optional) - Array of label names (replaces existing)assignees(optional) - Array of usernames (replaces existing)
github_create_comment
Add a comment to an issue or pull request.
Parameters:
owner(required) - Repository ownerrepo(required) - Repository nameissue_number(required) - Issue or PR numberbody(required) - Comment text (supports Markdown)
Rate Limits
Authenticated: 5,000 requests/hour
Search: 30 requests/minute
Errors (403/429) are caught and returned gracefully
Development
# Build
npm run build
# Watch mode
npm run watchFile Structure
mcp-servers/github/
βββ package.json
βββ tsconfig.json
βββ README.md
βββ src/
β βββ index.ts # Main server implementation
βββ dist/ # Compiled JavaScript
βββ index.js
βββ index.d.tsTesting
Phase 1 (Read Operations):
β Authentication with GitHub PAT
β List repositories
β Get repository details (tested on modelcontextprotocol/servers)
β Read file contents (tested on README.md)
β List issues with filters
β Search code across repositories
Phase 2 (Write Operations):
β Create repository (tested on pipseedai/mcp-test)
β Create issues with labels
β Update issue title, body, state, labels
β Add comments to issues
Validation: All tools tested on https://github.com/pipseedai/mcp-test
Next Steps
Add Phase 3 advanced features (PRs, branches, commits, forks)
Add unit tests
Improve error handling and validation
Add response caching for frequently accessed data
Consider GraphQL API for complex queries
Add workflow and release management tools
References
Created: 2026-02-03
Last Updated: 2026-02-05
Repository: https://github.com/pipseedai/github-mcp
Available Tools
9 toolsgithub_create_commentC
Add a comment to an issue or pull request
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | Repository owner | |
| repo | Yes | Repository name | |
| issue_number | Yes | Issue or pull request number | |
| body | Yes | Comment body (markdown supported) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Add a comment' implies a write operation, it doesn't specify authentication requirements, rate limits, whether comments are editable/deletable, or what happens on success/failure. For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps.
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 states the core functionality without any wasted words. It's appropriately sized and front-loaded with the essential information, making it easy 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?
Given this is a mutation tool with no annotations and no output schema, the description is insufficiently complete. It doesn't address authentication needs, error conditions, response format, or how it differs from similar sibling tools. The 100% schema coverage helps with parameters, but other critical contextual information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema (like explaining the relationship between owner/repo/issue_number or body formatting). Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add a comment') and target resource ('to an issue or pull request'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like github_update_issue, which might also involve commenting, so it doesn't reach the highest score for sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like github_update_issue for issue modifications or other commenting methods. It lacks any context about prerequisites, permissions needed, or specific scenarios where this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_create_issueC
Create a new issue in a repository
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | Repository owner | |
| repo | Yes | Repository name | |
| title | Yes | Issue title | |
| body | No | Issue body (markdown supported) | |
| labels | No | Labels to add to the issue | |
| assignees | No | Usernames to assign to the issue | |
| milestone | No | Milestone number to associate with the issue |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool creates an issue but doesn't mention what permissions are needed, whether it's idempotent, what happens on failure, rate limits, or what the response looks like. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding its 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, efficient sentence that directly states the tool's purpose without any wasted words. It's front-loaded with the core action ('Create a new issue') and specifies the context ('in a repository'), making it immediately clear 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?
For a mutation tool with 7 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain the return value, error conditions, authentication needs, or how it differs from sibling tools like github_update_issue. The high parameter count and lack of structured metadata mean the description should provide more contextual information to be complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all 7 parameters well-documented in the schema (e.g., 'Issue title', 'Issue body (markdown supported)'). The description adds no parameter information beyond what the schema provides, so it doesn't enhance parameter understanding. However, since the schema fully covers parameters, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Create') and resource ('new issue in a repository'), making the purpose immediately understandable. It distinguishes this tool from siblings like github_create_comment or github_create_repo by specifying 'issue' rather than other GitHub entities. However, it doesn't explicitly contrast with github_update_issue, which handles modifications rather than creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention github_update_issue for modifying existing issues, github_list_issues for viewing issues, or github_create_comment for adding comments. There's also no information about prerequisites like repository access or authentication requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_create_repoC
Create a new repository for the authenticated user
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Repository name | |
| description | No | Repository description | |
| private | No | Whether the repository is private (default: false) | |
| auto_init | No | Initialize with README (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool creates a repository but doesn't mention critical behaviors like authentication requirements (implied by 'authenticated user' but not explicit), potential side effects (e.g., initializing files if auto_init is true), rate limits, error conditions, or what the response contains. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding how it behaves.
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 directly states the tool's purpose without any fluff or redundancy. It's front-loaded with the core action and resource, making it easy to parse quickly. Every word earns its place, and there's no wasted verbiage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of creating a repository (a mutation operation) with no annotations and no output schema, the description is insufficiently complete. It doesn't cover behavioral aspects like authentication needs, error handling, or response format, nor does it provide usage guidance relative to siblings. For a tool that modifies state and has multiple parameters, more context is needed to ensure safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with all parameters clearly documented in the schema itself. The description adds no additional parameter information beyond what the schema provides (e.g., it doesn't explain naming conventions, privacy implications, or auto_init details). According to the rules, when schema_description_coverage is high (>80%), the baseline is 3 even with no param info in the description, which applies here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create') and resource ('new repository for the authenticated user'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like github_create_comment or github_create_issue, which also create resources but of different types. The description is specific about what gets created but doesn't contrast with other creation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication status), when not to use it (e.g., for existing repositories), or direct alternatives like github_get_repo for retrieval. The context is implied (creating a repo) but lacks explicit usage boundaries or comparisons with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_get_fileC
Read file contents from a repository
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | Repository owner | |
| repo | Yes | Repository name | |
| path | Yes | File path in the repository | |
| ref | No | Branch, tag, or commit SHA (default: default branch) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Read' implies a non-destructive operation, it doesn't mention authentication requirements, rate limits, error conditions (e.g., file not found), or response format. For a tool with zero annotation coverage, this leaves significant behavioral gaps.
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 communicates the core functionality without unnecessary words. It's appropriately sized for a straightforward read operation and gets directly to the point.
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 tool with 4 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what format the file contents are returned in (raw text, encoded, etc.), doesn't mention authentication or rate limiting, and provides no guidance on error handling. The minimal description leaves too many contextual questions unanswered.
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 100%, with all parameters clearly documented in the schema itself. The description adds no additional parameter information beyond what's already in the structured fields, so it meets but doesn't exceed the baseline expectation when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Read file contents') and resource ('from a repository'), making the purpose immediately understandable. However, it doesn't distinguish this tool from potential siblings like 'github_search_code' or 'github_get_repo' that might also retrieve repository content in different ways.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'github_search_code' (for searching across files) and 'github_get_repo' (for repository metadata), there's no indication of when file content retrieval is preferred over other repository access methods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_get_repoB
Get detailed information about a specific repository
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | Repository owner (username or organization) | |
| repo | Yes | Repository name |
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. It states the tool 'gets' information, implying a read-only operation, but doesn't clarify aspects like authentication requirements, rate limits, error handling, or the format of the returned data. This leaves significant gaps for an AI agent to understand how to invoke it correctly.
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 directly states the tool's purpose without unnecessary words. It is front-loaded and appropriately sized, making it easy 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?
Given the tool's low complexity (2 simple parameters) and high schema coverage, the description is minimally adequate. However, with no annotations and no output schema, it lacks details on behavioral traits and return values, which could hinder an AI agent's ability to use it effectively in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with clear documentation for both parameters ('owner' and 'repo'). The description doesn't add any meaning beyond what the schema provides, such as examples or constraints, but since the schema is comprehensive, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('detailed information about a specific repository'), making the purpose understandable. However, it doesn't distinguish this from sibling tools like 'github_get_file' or 'github_list_repos', which also retrieve repository-related information but with different scopes or formats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. For example, it doesn't explain that this is for fetching metadata about a single repository, as opposed to 'github_list_repos' for multiple repositories or 'github_get_file' for file contents. There are no explicit when/when-not instructions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_list_issuesC
List issues for a repository
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | Repository owner | |
| repo | Yes | Repository name | |
| state | No | Issue state filter (default: open) | |
| labels | No | Comma-separated list of label names | |
| per_page | No | Results per page (default: 30, max: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions listing but doesn't disclose behavioral traits like pagination behavior (implied by 'per_page' parameter but not explained), rate limits, authentication requirements, or whether this is a read-only operation. For a tool with 5 parameters and no annotation coverage, this is inadequate.
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 with zero wasted words. It's appropriately sized for a straightforward listing operation and gets directly to the point without unnecessary elaboration.
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 5 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain what the tool returns (issue objects? just titles?), how pagination works beyond the 'per_page' parameter, or error conditions. For a GitHub API tool with multiple siblings, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional meaning beyond what's in the schema (e.g., no context about how 'labels' filtering works or typical use cases for 'state'). Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and resource 'issues for a repository', making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'github_search_code' or 'github_list_repos', which would require more specificity about scope or filtering capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'github_search_code' and 'github_update_issue', there's no indication of whether this is for basic listing versus more advanced operations, or any prerequisites for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_list_reposC
List repositories for a user or organization
| Name | Required | Description | Default |
|---|---|---|---|
| username | No | GitHub username or organization name (defaults to authenticated user) | |
| type | No | Repository type filter (default: owner) | |
| sort | No | Sort order (default: updated) | |
| per_page | No | Results per page (default: 30, max: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but lacks behavioral details. It doesn't disclose that this is a read-only operation (implied by 'List'), potential rate limits, authentication requirements, pagination behavior (beyond per_page in schema), or what the output looks like (e.g., list of repo objects). It adds minimal context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('List repositories') without unnecessary words. Every part earns its place, making it easy to scan and understand 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?
Given 4 parameters, no annotations, and no output schema, the description is incomplete. It doesn't cover authentication needs, rate limits, pagination beyond per_page, error handling, or output format. For a tool with moderate complexity and no structured safety hints, this leaves significant gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing full parameter documentation. The description adds no parameter-specific semantics beyond implying a target (user/organization) for the 'username' parameter. It doesn't explain interactions between parameters or usage nuances, so it meets the baseline for high 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 clearly states the action ('List') and resource ('repositories'), specifying it's for a user or organization. It distinguishes from siblings like github_get_repo (which gets a single repo) and github_search_code (which searches code content), but doesn't explicitly differentiate from all siblings like github_list_issues (which lists issues, not repos).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication), compare with github_search_code for broader searches, or explain when to use type filters. The description is purely functional without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_search_codeC
Search for code across GitHub repositories
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query (e.g., 'addClass in:file language:js repo:owner/repo') | |
| per_page | No | Results per page (default: 30, max: 100) |
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. It states the action ('Search') but doesn't describe key traits like whether this is a read-only operation, rate limits, authentication requirements, or what the response format looks like (e.g., pagination, error handling). This is a significant gap for a search tool with no annotation coverage.
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 directly states the tool's purpose without any fluff. It's appropriately sized and front-loaded, making it easy to parse quickly. Every word earns its place, with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a code search tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits (e.g., rate limits, auth), response format, and usage context relative to siblings. While the schema covers parameters well, the overall description doesn't provide enough context for effective agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('query' and 'per_page') with clear descriptions and constraints. The description adds no additional meaning beyond what the schema provides, such as query syntax examples or usage tips. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Search') and resource ('code across GitHub repositories'), making the purpose immediately understandable. It doesn't explicitly differentiate from siblings like 'github_get_file' (which retrieves specific files) or 'github_list_repos' (which lists repositories), but the focus on code search is clear enough to avoid confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. For example, it doesn't clarify if this is for broad code searches versus using 'github_get_file' for specific file retrieval or 'github_list_repos' for repository discovery. No exclusions or prerequisites are mentioned, leaving usage context ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_update_issueC
Update an existing issue
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | Repository owner | |
| repo | Yes | Repository name | |
| issue_number | Yes | Issue number | |
| title | No | New issue title | |
| body | No | New issue body | |
| state | No | Issue state | |
| labels | No | Labels (replaces existing) | |
| assignees | No | Assignees (replaces existing) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic action. It doesn't disclose behavioral traits such as required permissions (e.g., write access to the repo), whether updates are partial or full (e.g., 'labels' and 'assignees' replace existing as per schema, but description doesn't highlight this), rate limits, or error handling. This is inadequate for a mutation tool with zero annotation coverage.
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 with zero wasteβ'Update an existing issue' is front-loaded and directly conveys the core purpose without unnecessary elaboration. It's appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, mutation operation) and lack of annotations and output schema, the description is incomplete. It doesn't address key aspects like what fields can be updated, how partial updates work, authentication needs, or expected return values, leaving significant gaps for an AI agent to understand the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 8 parameters, including their types, descriptions, and constraints (e.g., 'state' enum). The description adds no additional meaning beyond the schema, such as explaining parameter interactions or usage examples. Baseline 3 is appropriate as the schema does the heavy lifting.
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 'Update an existing issue' clearly states the action (update) and resource (issue), which is specific and unambiguous. However, it doesn't differentiate from sibling tools like 'github_create_issue' or 'github_create_comment' beyond the basic verb, missing explicit distinction about modifying versus creating resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. For example, it doesn't mention using 'github_create_issue' for new issues or 'github_list_issues' to find issue numbers, nor does it specify prerequisites like needing an existing issue number. This leaves the agent without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose targeting specific GitHub resources and actions, with no overlap in functionality. The descriptions clearly differentiate between operations like creating vs. listing, and between different resource types like repos, issues, files, and code search.
All tools follow a perfect 'github_verb_noun' pattern with consistent snake_case throughout. The naming convention is predictable and readable, making it easy to understand each tool's function at a glance.
With 9 tools, this server is well-scoped for GitHub operations, covering core repository, issue, file, and search functionality. Each tool earns its place without bloat, providing a focused yet comprehensive surface for common GitHub workflows.
The toolset covers most essential GitHub operations including repository CRUD (create/list/get), issue lifecycle (create/list/update), file reading, and code search. Minor gaps exist such as missing pull request operations, issue commenting (though create_comment covers this), and repository update/delete, but core workflows are well-supported.
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
Access the GitHub API, enabling file operations, repository management, search functionality, andβ¦
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Manage repositories, users, releases, and automate GitHub workflows
Code intelligence for LLMs. Analyze, search, and retrieve code from any public git repository.
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/pipseedai/github-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server