GitHub MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GITHUB_TOKEN | Yes | GitHub Personal Access Token | |
| GITHUB_API_URL | No | API URL (change for GitHub Enterprise) | https://api.github.com |
| GITHUB_TIMEOUT | No | Request timeout in seconds | 30 |
| GITHUB_PROTOCOL | No | Preferred clone protocol (ssh or https) | ssh |
| GITHUB_MCP_CACHE_DIR | No | Credential cache directory | ~/.github-mcp-cache |
Capabilities
Features and capabilities supported by this server
| 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 |
|---|---|
| github_connectA | Connect to GitHub API with a Personal Access Token. Credentials are automatically cached for future reconnection. Args: token: GitHub Personal Access Token (generate at https://github.com/settings/tokens) api_url: GitHub API URL (default: https://api.github.com, change for GitHub Enterprise) protocol: Preferred clone/push protocol — 'ssh' or 'https' (default: ssh) timeout: Request timeout in seconds (default: 30) session_name: Name for this session (default: 'default') |
| github_disconnectC | Disconnect a GitHub session. Args: session_name: Name of the session to disconnect (default: 'default') |
| github_statusA | Show connection status, authenticated user info, and API rate limits. Args: session_name: Session to check (default: 'default') |
| github_save_credentialsB | Save GitHub credentials to disk cache for future use. Args: session_name: Name to save credentials under token: GitHub Personal Access Token api_url: GitHub API URL protocol: Preferred clone protocol — 'ssh' or 'https' |
| github_list_reposA | List repositories for the authenticated user or a specific user/org. Args: owner: Username or org name (empty = authenticated user's repos) repo_type: Filter — 'all', 'owner', 'public', 'private', 'member' (default: all) sort: Sort by — 'updated', 'created', 'pushed', 'full_name' (default: updated) max_results: Maximum number of repos to return (default: 30) session_name: GitHub session to use |
| github_get_repoB | Get detailed information about a specific repository. Shows stars, forks, languages, default branch, license, and more. Args: owner: Repository owner (user or org) repo: Repository name session_name: GitHub session to use |
| github_create_repoA | Create a new GitHub repository. Args: name: Repository name description: Repository description private: Make repository private (default: False = public) auto_init: Initialize with a README (default: True) gitignore_template: Gitignore template name (e.g., 'Python', 'Node', 'Go') license_template: License template (e.g., 'mit', 'apache-2.0', 'gpl-3.0') org: Organization to create repo under (empty = personal repo) session_name: GitHub session to use |
| github_delete_repoA | Delete a GitHub repository permanently. ⚠️ This action cannot be undone. All data, issues, PRs, and wiki will be lost. Args: owner: Repository owner repo: Repository name session_name: GitHub session to use |
| github_fork_repoC | Fork a repository to your account or an organization. Args: owner: Original repo owner repo: Original repo name org: Organization to fork to (empty = your personal account) new_name: Custom name for the fork (empty = keep original name) session_name: GitHub session to use |
| github_update_repoA | Update repository settings. Only provided fields will be updated. Leave empty to keep current value. Args: owner: Repository owner repo: Repository name description: New description (empty = no change) homepage: Homepage URL (empty = no change) private: 'true' or 'false' (empty = no change) archived: 'true' to archive (empty = no change) default_branch: New default branch name (empty = no change) session_name: GitHub session to use |
| github_list_topicsC | Get repository topics/tags. Args: owner: Repository owner repo: Repository name session_name: GitHub session to use |
| github_update_topicsA | Set repository topics/tags (replaces all existing topics). Args: owner: Repository owner repo: Repository name topics: Comma-separated topic names (e.g., 'python,mcp,devops') session_name: GitHub session to use |
| github_list_languagesB | Get the language breakdown for a repository (bytes per language). Args: owner: Repository owner repo: Repository name session_name: GitHub session to use |
| github_list_contributorsC | List repository contributors with commit counts. Args: owner: Repository owner repo: Repository name max_results: Maximum contributors to return (default: 30) session_name: GitHub session to use |
| github_list_branchesC | List all branches in a repository. Args: owner: Repository owner repo: Repository name max_results: Maximum branches to return (default: 30) session_name: GitHub session to use |
| github_get_branchA | Get detailed information about a specific branch. Args: owner: Repository owner repo: Repository name branch: Branch name session_name: GitHub session to use |
| github_create_branchA | Create a new branch from an existing branch or commit SHA. Args: owner: Repository owner repo: Repository name branch_name: Name for the new branch from_branch: Source branch name (default: repo's default branch) from_sha: Specific commit SHA to branch from (overrides from_branch) session_name: GitHub session to use |
| github_delete_branchC | Delete a branch from a repository. Args: owner: Repository owner repo: Repository name branch: Branch name to delete session_name: GitHub session to use |
| github_protect_branchB | Set branch protection rules. Args: owner: Repository owner repo: Repository name branch: Branch name to protect require_reviews: Require pull request reviews (default: True) required_reviewers: Minimum number of reviewers (default: 1) enforce_admins: Enforce rules for admins too (default: False) session_name: GitHub session to use |
| github_list_tagsA | List all tags in a repository. Args: owner: Repository owner repo: Repository name max_results: Maximum tags to return (default: 30) session_name: GitHub session to use |
| github_create_tagA | Create a new tag (lightweight or annotated). Args: owner: Repository owner repo: Repository name tag_name: Tag name (e.g., 'v1.0.0') sha: Commit SHA to tag message: Tag message (if provided, creates an annotated tag) session_name: GitHub session to use |
| github_compare_branchesA | Compare two branches showing ahead/behind counts and changed files. Args: owner: Repository owner repo: Repository name base: Base branch (e.g., 'main') head: Head branch to compare (e.g., 'feature-branch') session_name: GitHub session to use |
| github_get_fileA | Get file content from a repository (auto-decodes base64). Args: owner: Repository owner repo: Repository name path: File path in the repo (e.g., 'src/main.py') ref: Branch, tag, or commit SHA (empty = default branch) session_name: GitHub session to use |
| github_create_fileA | Create a new file in a repository via a commit. Args: owner: Repository owner repo: Repository name path: File path to create (e.g., 'docs/guide.md') content: File content (will be base64-encoded automatically) message: Commit message branch: Branch to commit to (empty = default branch) session_name: GitHub session to use |
| github_update_fileA | Update an existing file in a repository via a commit. You need the current file's SHA (get it from github_get_file). Args: owner: Repository owner repo: Repository name path: File path to update content: New file content message: Commit message sha: Current file SHA (required to prevent conflicts) branch: Branch to commit to (empty = default branch) session_name: GitHub session to use |
| github_delete_fileB | Delete a file from a repository via a commit. Args: owner: Repository owner repo: Repository name path: File path to delete message: Commit message sha: Current file SHA (get from github_get_file) branch: Branch to commit to (empty = default branch) session_name: GitHub session to use |
| github_get_treeA | Get directory listing/tree for a repository path. Args: owner: Repository owner repo: Repository name path: Directory path (empty = root) ref: Branch, tag, or SHA (empty = default branch) session_name: GitHub session to use |
| github_get_clone_urlA | Get the clone URL for a repository in SSH or HTTPS format. Args: owner: Repository owner repo: Repository name protocol: 'ssh' or 'https' (empty = use session default) session_name: GitHub session to use |
| github_list_prsA | List pull requests for a repository. Args: owner: Repository owner repo: Repository name state: Filter — 'open', 'closed', 'all' (default: open) sort: Sort by — 'created', 'updated', 'popularity' (default: created) max_results: Maximum PRs to return (default: 30) session_name: GitHub session to use |
| github_get_prB | Get detailed information about a pull request. Args: owner: Repository owner repo: Repository name pr_number: PR number session_name: GitHub session to use |
| github_create_prA | Create a new pull request. Args: owner: Repository owner repo: Repository name title: PR title head: Source branch name (e.g., 'feature-branch') base: Target branch name (e.g., 'main') body: PR description/body (markdown supported) draft: Create as draft PR (default: False) session_name: GitHub session to use |
| github_update_prA | Update a pull request's title, body, base branch, or state. Args: owner: Repository owner repo: Repository name pr_number: PR number title: New title (empty = no change) body: New body (empty = no change) base: New base branch (empty = no change) state: New state — 'open' or 'closed' (empty = no change) session_name: GitHub session to use |
| github_merge_prB | Merge a pull request. Args: owner: Repository owner repo: Repository name pr_number: PR number to merge merge_method: Merge strategy — 'merge', 'squash', or 'rebase' (default: merge) commit_title: Custom merge commit title (empty = default) commit_message: Custom merge commit message (empty = default) session_name: GitHub session to use |
| github_close_prA | Close a pull request without merging. Args: owner: Repository owner repo: Repository name pr_number: PR number to close session_name: GitHub session to use |
| github_list_pr_filesB | List files changed in a pull request. Args: owner: Repository owner repo: Repository name pr_number: PR number session_name: GitHub session to use |
| github_list_pr_reviewsA | List reviews on a pull request. Args: owner: Repository owner repo: Repository name pr_number: PR number session_name: GitHub session to use |
| github_request_reviewersB | Request reviewers for a pull request. Args: owner: Repository owner repo: Repository name pr_number: PR number reviewers: Comma-separated GitHub usernames (e.g., 'user1,user2') session_name: GitHub session to use |
| github_create_pr_commentA | Add a comment on a pull request. Args: owner: Repository owner repo: Repository name pr_number: PR number body: Comment body (markdown supported) session_name: GitHub session to use |
| github_list_issuesA | List issues in a repository with optional filters. Args: owner: Repository owner repo: Repository name state: Filter — 'open', 'closed', 'all' (default: open) labels: Comma-separated label names to filter by assignee: Filter by assignee username sort: Sort by — 'created', 'updated', 'comments' (default: created) max_results: Maximum issues to return (default: 30) session_name: GitHub session to use |
| github_get_issueC | Get detailed information about an issue. Args: owner: Repository owner repo: Repository name issue_number: Issue number session_name: GitHub session to use |
| github_create_issueA | Create a new issue in a repository. Args: owner: Repository owner repo: Repository name title: Issue title body: Issue body (markdown supported) labels: Comma-separated label names (e.g., 'bug,priority:high') assignees: Comma-separated usernames to assign session_name: GitHub session to use |
| github_update_issueA | Update an issue's title, body, labels, assignees, or state. Args: owner: Repository owner repo: Repository name issue_number: Issue number title: New title (empty = no change) body: New body (empty = no change) labels: Comma-separated labels (replaces all labels; empty = no change) assignees: Comma-separated assignees (replaces all; empty = no change) state: 'open' or 'closed' (empty = no change) session_name: GitHub session to use |
| github_close_issueB | Close an issue. Args: owner: Repository owner repo: Repository name issue_number: Issue number to close session_name: GitHub session to use |
| github_create_issue_commentB | Add a comment on an issue. Args: owner: Repository owner repo: Repository name issue_number: Issue number body: Comment body (markdown supported) session_name: GitHub session to use |
| github_list_issue_commentsA | List comments on an issue. Args: owner: Repository owner repo: Repository name issue_number: Issue number max_results: Maximum comments to return (default: 30) session_name: GitHub session to use |
| github_add_labelsA | Add labels to an issue or pull request. Args: owner: Repository owner repo: Repository name issue_number: Issue or PR number labels: Comma-separated label names to add session_name: GitHub session to use |
| github_list_workflowsB | List all GitHub Actions workflows in a repository. Args: owner: Repository owner repo: Repository name session_name: GitHub session to use |
| github_trigger_workflowA | Trigger a workflow dispatch event (manually run a workflow). The workflow must have a 'workflow_dispatch' trigger defined. Args: owner: Repository owner repo: Repository name workflow_id: Workflow ID or filename (e.g., 'deploy.yml') ref: Branch or tag to run on (default: main) inputs: Workflow inputs as JSON string (e.g., '{"environment": "staging"}') session_name: GitHub session to use |
| github_list_workflow_runsB | List workflow runs for a repository or specific workflow. Args: owner: Repository owner repo: Repository name workflow_id: Specific workflow ID or filename (empty = all workflows) status: Filter — 'completed', 'in_progress', 'queued', 'success', 'failure' branch: Filter by branch name max_results: Maximum runs to return (default: 20) session_name: GitHub session to use |
| github_get_workflow_runC | Get details of a specific workflow run. Args: owner: Repository owner repo: Repository name run_id: Workflow run ID session_name: GitHub session to use |
| github_get_run_logsA | Get the download URL for workflow run logs (returns a redirect URL). Args: owner: Repository owner repo: Repository name run_id: Workflow run ID session_name: GitHub session to use |
| github_cancel_workflow_runA | Cancel a workflow run that is in progress. Args: owner: Repository owner repo: Repository name run_id: Workflow run ID to cancel session_name: GitHub session to use |
| github_rerun_workflowC | Re-run a workflow (all jobs or only failed jobs). Args: owner: Repository owner repo: Repository name run_id: Workflow run ID to re-run session_name: GitHub session to use |
| github_list_releasesA | List all releases for a repository. Args: owner: Repository owner repo: Repository name max_results: Maximum releases to return (default: 20) session_name: GitHub session to use |
| github_get_releaseA | Get details of a specific release. Args: owner: Repository owner repo: Repository name release_id: Release ID (use either this or tag) tag: Release tag name (e.g., 'v1.0.0') session_name: GitHub session to use |
| github_create_releaseA | Create a new release with auto-generated or custom release notes. Args: owner: Repository owner repo: Repository name tag_name: Tag name for the release (e.g., 'v1.0.0') name: Release title (default: tag name) body: Release notes body (markdown) target: Branch or commit SHA (default: default branch) draft: Create as draft (default: False) prerelease: Mark as pre-release (default: False) generate_notes: Auto-generate release notes (default: False) session_name: GitHub session to use |
| github_delete_releaseB | Delete a release (the tag is NOT deleted). Args: owner: Repository owner repo: Repository name release_id: Release ID to delete session_name: GitHub session to use |
| github_get_latest_releaseB | Get the latest published release for a repository. Args: owner: Repository owner repo: Repository name session_name: GitHub session to use |
| github_get_userA | Get user profile information (authenticated user if username is empty). Args: username: GitHub username (empty = authenticated user) session_name: GitHub session to use |
| github_list_user_reposA | List public repositories for a specific user. Args: username: GitHub username sort: Sort by — 'updated', 'created', 'pushed', 'full_name' (default: updated) max_results: Maximum repos (default: 30) session_name: GitHub session to use |
| github_get_orgB | Get organization information. Args: org: Organization name session_name: GitHub session to use |
| github_list_org_reposA | List repositories for an organization. Args: org: Organization name repo_type: Filter — 'all', 'public', 'private', 'forks', 'sources' (default: all) sort: Sort by — 'updated', 'created', 'pushed', 'full_name' max_results: Maximum repos (default: 30) session_name: GitHub session to use |
| github_list_org_membersA | List members of an organization. Args: org: Organization name max_results: Maximum members to return (default: 50) session_name: GitHub session to use |
| github_search_reposA | Search GitHub repositories by query. Supports GitHub search qualifiers: language:python, stars:>100, topic:mcp, etc. Args: query: Search query (e.g., 'mcp server language:python stars:>10') sort: Sort by — 'stars', 'forks', 'updated', 'help-wanted-issues' (default: stars) max_results: Maximum results (default: 20) session_name: GitHub session to use |
| github_search_codeA | Search code across GitHub. Supports qualifiers: repo:owner/repo, path:src/, extension:py, language:python, etc. Args: query: Code search query (e.g., 'FastMCP language:python') max_results: Maximum results (default: 20) session_name: GitHub session to use |
| github_search_issuesA | Search issues and pull requests across GitHub. Supports qualifiers: repo:owner/repo, is:issue, is:pr, state:open, label:bug, etc. Args: query: Search query (e.g., 'is:issue state:open label:bug repo:owner/repo') sort: Sort by — 'created', 'updated', 'comments', 'reactions' (default: created) max_results: Maximum results (default: 20) session_name: GitHub session to use |
| github_search_usersA | Search GitHub users and organizations. Supports qualifiers: type:user, type:org, location:india, language:python, etc. Args: query: Search query (e.g., 'type:org language:python') sort: Sort by — 'followers', 'repositories', 'joined' (default: followers) max_results: Maximum results (default: 20) session_name: GitHub session to use |
| github_list_gistsA | List gists for the authenticated user or a specific user. Args: username: GitHub username (empty = authenticated user) max_results: Maximum gists to return (default: 20) session_name: GitHub session to use |
| github_create_gistA | Create a new gist with one or more files. Args: files: JSON string mapping filenames to content, e.g. '{"hello.py": "print("hello")", "readme.md": "# Hello"}' description: Gist description public: Make gist public (default: False = secret) session_name: GitHub session to use |
| github_get_gistC | Get gist content and details. Args: gist_id: Gist ID session_name: GitHub session to use |
| github_delete_gistA | Delete a gist permanently. Args: gist_id: Gist ID to delete session_name: GitHub session to use |
| github_list_notificationsA | List GitHub notifications for the authenticated user. Args: all_notifications: Show all notifications including read ones (default: False = unread only) participating: Only show notifications where user is participating (default: False) max_results: Maximum notifications to return (default: 30) session_name: GitHub session to use |
| github_mark_notifications_readA | Mark all notifications as read. Args: last_read_at: ISO 8601 timestamp — mark notifications before this as read (empty = all) session_name: GitHub session to use |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/Pawangunjkar/github-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server