GitHub MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GITHUB_REPO | No | Default repository name for all operations | |
| GITHUB_OWNER | No | Default repository owner for all operations | |
| GITHUB_TOKEN | Yes | GitHub Personal Access Token with repo scope |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| batch_update_issuesA | Update multiple GitHub issues in parallel (max 50 per batch). Each update object: {issue_number (required), title, body, state, labels, milestone, assignees} Note: labels/assignees replace existing (not append). Returns: {total, successful, failed, success_rate, execution_time_seconds, results} |
| batch_add_labelsA | Add labels to multiple issues in parallel. Labels are ADDED (not replaced). Each operation: {issue_number (required), labels (required)} Returns: {total, successful, failed, success_rate, execution_time_seconds, results} |
| batch_link_to_projectA | Link multiple issues to a GitHub Project (v2) board in parallel. project_id: Project node ID starting with "PVT_" (from GraphQL API, not project number) Requires token with project (write) scope. Returns: {total, successful, failed, success_rate, execution_time_seconds, results} |
| check_ci_statusA | Check CI workflow status for a branch. Returns overall and per-workflow status. Returns: {overall_status, overall_conclusion, branch, workflows: [{name, status, conclusion, url, jobs}]} If no CI runs found, returns status="no_runs". |
| get_ci_logsA | Get CI workflow logs for debugging failed jobs. Provide either branch OR run_id (not both). Optional filters:
Returns: {run_id, run_url, branch, status, conclusion, jobs: [{job_id, name, status, conclusion, logs, log_url}]} |
| create_issuesA | Create GitHub issues (1 or more). Parallel execution for multiple. Each issue: {title (required), body, labels, milestone, assignees} Options:
Returns: {total, successful, failed, results: [{index, success, data/error}]} |
| get_issueC | Retrieve full GitHub issue details including body content. Returns: {number, title, body, state, labels, milestone, created_at, updated_at, url} |
| list_issuesA | List and filter GitHub issues with pagination. Optional filters:
Returns: {total, count, issues: [{number, title, state, labels, milestone, assignee, url}]} |
| close_issueB | Close a GitHub issue with optional comment and reason. Optional:
Returns: {number, state, state_reason, comment_added, url} |
| create_milestoneB | Create a GitHub milestone. Optional:
Returns: {number, title, description, state, due_on, url} |
| list_milestonesA | List repository milestones with filtering and sorting. Options:
Returns: {total, milestones: [{number, title, state, open_issues, closed_issues, due_on, url}]} |
| create_pr_with_contentA | Create a GitHub PR with structured content. Auto-detects current branch as head. Required content:
Optional:
Returns: {pr_number, url, state, head, base, created_at} |
| get_pull_requestB | Get PR details including mergeable status and statistics. Returns: {number, title, state, merged, mergeable, mergeable_state, draft, head, base, commits, additions, deletions, changed_files, created_at, updated_at, merged_at, url} mergeable_state: "clean", "dirty", "unstable", "blocked", or "unknown" |
| update_prA | Update PR metadata. Only provided fields are updated; None values ignored. Optional updates:
Returns: {number, title, state, updated_fields, url} Note: Cannot update merged PRs. |
| merge_prA | Merge a PR after checking mergeable status. Options:
Returns: {merged, sha, message, branch_deleted} |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 15 tools
Each tool targets a distinct resource or operation: issues (create, get, list, close, batch update, batch add labels), milestones (create, list), PRs (create, get, update, merge), and CI (check status, get logs). No two tools have overlapping purposes.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., close_issue, create_milestone, get_ci_logs). Batch operations are prefixed with 'batch_', and names are descriptive without mixing conventions.
15 tools is a well-scoped set for a GitHub MCP server. It covers core workflows without being overly numerous or too sparse, providing a balanced surface for common development tasks.
The tool set covers CRUD-like operations for issues, PRs, milestones, and CI monitoring. Minor gaps exist (e.g., no tool for adding comments to issues, managing individual labels, or PR review actions), but the core workflows are well-supported, and agents can work around the gaps.