gh_mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GITHUB_TOKEN | Yes | Required. GitHub personal access token or OAuth token used by the gh CLI. | |
| MCP_GH_ENV_FILE | No | Absolute path to a .env file to load environment variables from. Useful when the .env file is not in the launch directory. | |
| MCP_GH_LOG_LEVEL | No | Logging verbosity level. Use 'DEBUG' for detailed command logs. | INFO |
| MCP_GH_TRANSPORT | No | Transport protocol. Must be either 'stdio' or 'streamable-http'. The default is 'stdio'. | stdio |
| MCP_GH_HARD_MAX_RESULTS | No | Hard upper limit for maximum number of results returned by search tools. | 100 |
| MCP_GH_DEFAULT_MAX_RESULTS | No | Default maximum number of search results returned by search tools. | 30 |
| MCP_GH_ALLOW_WRITE_COMMANDS | No | Set to 'true' to enable write commands. Default is 'false' (read-only mode). | false |
| MCP_GH_CONFIRM_WRITE_COMMANDS | No | Set to 'true' to require human approval before executing write commands. Set to 'false' to disable the approval gate (not recommended). Default is 'true'. | true |
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 |
|---|---|
| gh_list_issuesA | List issues in a repository. state: open, closed, or all (default: all). labels: comma-separated label filter. |
| gh_get_issueB | Get details of a specific issue or pull request, including its body. |
| gh_list_labelsA | List labels in a repository. |
| gh_list_milestonesA | List milestones in a repository via the GitHub API. state: open, closed, or all (default: all). |
| gh_get_refA | Read-only: resolve one exact branch or tag reference path such as heads/main or tags/v1.0.0. This tool never performs matching-reference or prefix discovery. Annotated tag objects retain their tag-object identity and are peeled through bounded exact tag-object reads to a commit when applicable. |
| gh_get_commitA | Read-only: return immutable identity and commit-object evidence for one exact 40-character commit SHA. The result includes the tree SHA, every parent SHA, author, committer, message, and GitHub's verification/signature metadata without reinterpreting or upgrading that verification state. |
| gh_list_workflowsA | List GitHub Actions workflows in a repository. state: active, all, disabled, disabled_inactivity, disabled_fork. |
| gh_get_workflowA | Get details of a specific GitHub Actions workflow. |
| gh_list_runsA | List one authoritative, bounded page of GitHub Actions workflow runs. Existing branch, status, and per_page callers remain supported. Exact workflow, head-SHA, event, actor, creation-range, and check-suite filters are sent to GitHub's workflow-runs REST route rather than applied locally. |
| gh_get_runA | Get details of a specific GitHub Actions workflow run. |
| gh_list_run_jobsA | Read-only: return one bounded page of jobs and step metadata for an exact GitHub Actions run attempt. This downloads no logs, performs no watching or workflow dispatch, and never modifies GitHub. |
| gh_get_failed_run_logsA | Read-only: return bounded failed-step log text for one exact GitHub Actions run attempt, with truncation metadata and a SHA-256 fingerprint. This never reruns, cancels, deletes, or dispatches a workflow and never requests input. |
| gh_watch_runA | Poll a GitHub Actions workflow run until completion or timeout. |
| gh_get_job_logsA | Read-only: stream bounded plaintext log evidence for one exact GitHub Actions job and explicit run attempt. The server verifies exact attempt membership before and after retrieval and never downloads a workflow-run log archive. Supports a UTF-8 byte cap, a literal tail selection, or inclusive literal start/end markers; it exposes no regex, shell, rerun, cancel, delete, or dispatch operation. sha256 fingerprints the complete normalized plaintext source before selection. |
| gh_get_run_logsA | Read-only: stream bounded log evidence for one exact GitHub Actions workflow run attempt by enumerating that attempt's jobs and reading their plaintext job-log endpoints in stable job-ID order. The run-log ZIP endpoint is never used. The attempt is mandatory and is never silently replaced by the latest attempt. Supports a UTF-8 byte cap, a literal tail selection, or inclusive literal start/end markers; it exposes no regex, shell, rerun, cancel, delete, or dispatch operation. sha256 fingerprints the complete normalized aggregate before selection. |
| gh_list_run_artifactsA | Read-only: return one bounded page of immutable GitHub Actions artifact metadata for an exact workflow run. Optional name filtering is exact; archives are never downloaded and GitHub is never modified. |
| gh_get_artifactA | Read-only: return metadata for one exact GitHub Actions artifact identifier, including digest, expiry, and workflow-run/head identity. The artifact archive is never downloaded and GitHub is never modified. |
| gh_list_artifact_filesA | Read-only: inspect one exact, unexpired GitHub Actions artifact ZIP and return one bounded page of normalized regular-file paths and sizes. The archive is downloaded only into temporary server state, never extracted, and is rejected for traversal, absolute paths, duplicate/conflicting paths, symbolic links, special entries, encryption, or configured hard-limit violations. GitHub is never modified. |
| gh_read_artifact_fileA | Read-only: retrieve one exact normalized regular-file path from one exact, unexpired GitHub Actions artifact. Only valid UTF-8 text/JSON is returned. Returned content is bounded by max_bytes and the server hard cap, while sha256 fingerprints the complete validated file. The ZIP is temporary and never extracted; GitHub is never modified. |
| gh_compare_commitsA | Read-only: compare two exact 40-character commit SHAs without branch or tag resolution. Returns explicit merge-base/status evidence plus independently bounded commit and changed-file metadata with completeness and SHA-256 fingerprints. |
| gh_server_infoA | Read-only local diagnostic: return this MCP server's deployed version, tool-schema version, transport, tool count, and write-policy status. This tool does not call GitHub, spawn a subprocess, request approval, or modify any state. |
| gh_infoA | Return gh CLI version, authentication status, and active account. |
| gh_get_api_rate_statusA | Read-only diagnostic: perform or reuse a locally paced governed GET /rate_limit observation and return GitHub-provided primary rate-limit evidence separately from local request-governor blocking and write-pacing state. Repeated calls inside the configured diagnostic refresh interval are served from a local cache and do not create additional GitHub requests. |
| gh_search_reposA | Search GitHub repositories. Supports all GitHub search qualifiers (e.g. 'language:python stars:>1000'). Use 'is:fork' to exclude forks, 'archived:false' to exclude archived repos. |
| gh_search_issuesA | Search GitHub issues and pull requests. Supports all GitHub search qualifiers (e.g. 'is:open label:bug author:user'). Use 'is:pr' for pull requests only, 'is:issue' for issues only. |
| gh_search_codeA | Search GitHub source code. Supports all GitHub code search qualifiers (e.g. 'func name:main language:python'). |
| gh_list_prsB | List pull requests in a repository. state: open, closed, or all (default: open). |
| gh_get_prA | Read-only: return bounded metadata and exact base/head commit SHAs for one GitHub pull request. Performs one noninteractive GET request and cannot create comments, submit reviews, merge the pull request, request approval, or modify GitHub state. |
| gh_get_pr_diffA | Read-only: return a bounded unified diff or patch for the exact immutable base and head commit SHAs currently identified by a pull request. The result reports truncation, byte counts, and a SHA-256 fingerprint. This tool never checks out code, runs tests, requests approval, or modifies GitHub. |
| gh_list_pr_filesA | Read-only: return one bounded page of files changed by a pull request, together with its exact base and head SHAs. A file patch may be absent or truncated by GitHub; use gh_get_pr_diff for the bounded unified diff. This tool never modifies GitHub. |
| gh_list_pr_commitsA | Read-only: return one bounded page of commits in a pull request, together with its exact base and head SHAs. This tool never checks out code or modifies GitHub. |
| gh_get_pr_checksA | Read-only: return a bounded structured summary of CI checks for one exact pull-request head revision. This performs no watching, log download, workflow dispatch, approval, or GitHub write. |
| gh_list_pr_reviewsA | Read-only: return one bounded page of typed pull-request reviews with exact commit provenance and explicit pagination completeness for an unchanged PR head snapshot. |
| gh_get_pr_review_stateA | Read-only: aggregate bounded review, requested-reviewer, and unresolved-thread evidence only for an exact expected PR head. Head mismatch or partial evidence prevents a definitive satisfied result. |
| gh_get_merge_requirementsA | Read-only: aggregate effective branch/ruleset merge policy, current required checks, exact-head review/thread state, base freshness, mergeability, and allowed merge methods for one expected pull-request head. Missing policy visibility or head movement is reported as incomplete evidence and never interpreted as no requirement. |
| gh_get_pr_review_eligibilityA | Read-only exact-head preflight: report the pull-request author, ordinary GitHub identity, configured reviewer identity, and whether an independent APPROVED review or ordinary COMMENTED review is currently eligible. This advisory call performs no review write and never mints a reviewer installation token. |
| gh_list_releasesA | List releases in a repository. |
| gh_get_releaseA | Get details of a specific release. |
| gh_get_repoB | Get details of a specific repository. |
| gh_list_reposC | List repositories for a user or organization. type: all, owner, member, public, private, fork. |
| gh_get_file_contentsA | Read-only: fetch the complete contents and blob metadata for one repository file at a branch, tag, or commit ref. This tool never modifies GitHub. |
| gh_create_issueA | Additive write: create exactly one issue in the target repository. The ordinary write gate and repository policy must allow the target. Optional labels and assignees are bounded; one mutation attempt is followed by authoritative semantic readback when stable identity is available. The tool never retries an ambiguous mutation automatically and does not edit, close, comment on, or delete an existing issue. |
| gh_edit_issueA | Destructive write: edit metadata on exactly one existing issue after ordinary write authorization. The request may change title, body, labels, assignees, or milestone; one mutation attempt is followed by authoritative semantic readback of the requested fields. Ambiguous mutations are never retried automatically. It does not close or reopen the issue, post comments, delete the issue, or bypass repository policy. |
| gh_set_issue_stateA | Destructive write: close or reopen exactly one issue only when its current state matches expected_state. Pull requests are rejected. Closing requires completed, not_planned, or duplicate; reopening requires reopened. The mutation is attempted once, comments remain a separate tool, and authoritative readback verifies the final state and reason. |
| gh_create_labelA | Additive write: create exactly one new repository label after ordinary write authorization. Name, color, and description are explicitly bounded; one mutation attempt is followed by authoritative semantic readback. The operation never overwrites an existing label or retries an ambiguous create automatically, and it does not edit issues or delete labels. |
| gh_edit_labelA | Destructive write: edit exactly one existing label's name, color, or description after ordinary write authorization. One mutation attempt is followed by authoritative semantic readback of the resulting label; an ambiguous edit is never retried automatically. It does not delete labels or mutate issue content. |
| gh_create_milestoneA | Additive write: create exactly one repository milestone with bounded title, description, due date, and explicit open/closed state after ordinary write authorization. One mutation attempt is followed by authoritative readback of the stable milestone number and requested fields; ambiguous creation is never retried automatically. It does not assign issues to the milestone or edit existing milestones. |
| gh_create_commentA | Additive write: post exactly one bounded Markdown conversation comment on the specified issue or pull request after ordinary write authorization. The mutation is attempted once through the issue-comments REST endpoint, and authoritative readback of the returned immutable comment ID verifies repository and issue identity plus the requested body. It is not a formal pull-request review and cannot merge. |
| gh_create_prA | Additive write: create exactly one pull request from the specified bounded head and base selectors after ordinary write authorization. Optional labels, assignees, and review requests are bounded and read back when created. It does not approve, merge, or change another pull request. |
| gh_edit_prA | Destructive write: edit metadata on exactly one pull request after ordinary write authorization. The request may change title, body, labels, assignees, or base and uses authoritative readback for requested fields. Draft-state transition, formal review, merge, branch deletion, and direct head rewrite are separate or unavailable. |
| gh_set_pr_draft_stateA | Destructive write: transition exactly one pull request between draft and ready-for-review only when its current head SHA and draft state match the supplied preconditions. The operation changes no unrelated pull-request metadata, is attempted once, and authoritative readback verifies both unchanged head identity and the requested draft state. |
| gh_merge_prA | Destructive write: merge exactly one pull request using the explicit merge strategy only while its head matches expected_head_sha. Ordinary write authorization and the separate PR-merge fine gate are required. The tool cannot use administrator bypass, delete the branch, force a changed revision, or blindly retry an ambiguous merge. |
| gh_create_repoA | Additive write: create exactly one repository at the canonical OWNER/REPO target after ordinary write policy, exact prospective-repository target policy, and the separate repository-creation fine gate allow it. The mutation is attempted once, then exact authoritative readback verifies repository identity, visibility, description, and initialization when GitHub exposes that evidence. It never retries an ambiguous creation and cannot delete, rename, transfer, or otherwise administer an existing repository. |
| gh_commit_filesA | Destructive write: create or replace bounded UTF-8 file contents in one Git commit and conditionally advance exactly one existing branch only when its head matches expected_head_sha. Ordinary write authorization and the content-commit fine gate are required. The branch advance uses one exact compare-and-swap attempt followed by authoritative ref readback; it cannot delete files, force-update the ref, or blindly retry an ambiguous update. |
| gh_create_release_exactA | Additive write: create one GitHub release using an exact 40-character target commit SHA after ordinary write authorization and the separate release-creation fine gate. The tool verifies target identity, optionally requires the tag and every release state including drafts to be absent, performs exactly one governed creation request, and verifies release, tag commit, and explicit latest state. It never retries an ambiguous release mutation automatically. |
| gh_run_workflow_exactA | Destructive write: after ordinary write authorization, exact workflow-target policy, and the separate workflow-dispatch fine gate, dispatch exactly one positive workflow ID only when GitHub immediately re-verifies the caller's exact canonical workflow path and active state. The tool also verifies the exact branch/tag ref against expected_ref_sha, rejects same-name branch/tag ambiguity and an existing workflow_dispatch run for the workflow/head, accepts only a bounded typed input object, requests return_run_details, and binds authoritative readback to the exact returned run ID. It never redispatches automatically. |
| gh_create_branchA | Additive write: create exactly one branch linked to the specified issue after ordinary write authorization. The requested or default branch-name base is resolved to an exact commit and rechecked immediately before one mutation. Authoritative bounded readback verifies the exact issue association, branch ref, and target SHA. Full commit SHAs in base are rejected; use gh_create_branch_from_sha for a caller-supplied immutable base. The operation never moves or deletes refs and never blindly retries an ambiguous mutation. |
| gh_create_branch_from_shaA | Additive write: create exactly one new branch at an exact 40-character commit SHA after ordinary write authorization. A branch already at the requested SHA is a safe no-write result; a conflicting existing branch is left unchanged. One mutation attempt is followed by authoritative exact-ref readback; the operation never force-updates, moves, overwrites, deletes, or blindly retries an ambiguous ref creation. |
| gh_approve_prA | Additive write: submit exactly one formal GitHub APPROVED review for the supplied exact pull-request head through the server-configured independent reviewer principal. Before the review POST the server verifies repository write policy, current head, expected reviewer login, authenticated reviewer login, and reviewer != PR author. The caller cannot select credentials. The write is attempted once and immutable review-ID readback verifies APPROVED state, actor, head, and body. It never comments as a fallback, merges, dismisses reviews, or retries an ambiguous mutation automatically. |
| gh_request_pr_changesA | Additive write: submit exactly one formal GitHub CHANGES_REQUESTED review for the supplied exact pull-request head through the server-configured reviewer principal. The exact expected reviewer login is a compare-only precondition and cannot select credentials. The review POST is attempted once and immutable review-ID readback verifies state, actor, head, and body. It cannot approve, merge, dismiss reviews, or replay an ambiguous mutation. |
| gh_comment_pr_reviewA | Additive write: submit exactly one formal GitHub COMMENTED review through the ordinary authenticated GitHub principal for the supplied exact PR head. This is the explicit same-author fallback for recording an external or Central disposition; COMMENTED is never reported as GitHub APPROVED. The write is attempted once and immutable review-ID readback verifies actor, state, head, and body. It cannot select reviewer credentials, approve, merge, or retry an ambiguous mutation automatically. |
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/fvanevski/gh_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server