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 |
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 |
|---|---|
| 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