A self-hosted alternative to the official GitHub MCP server, built for operators who switch between Claude Code, Cursor, Codex CLI, or other MCP clients and want the same personal access token to work everywhere. Exposes seven tools in v0.1: PR listing and merging, file read/write via the Contents API, Dependabot alert sweeps, and a health check that reports rate limit headroom. Written in Python on FastMCP with stdio transport. Ships with macOS Keychain integration so your PAT never touches process args or environment variables where ps aux or pgrep can leak it. Lighter tool surface than the official Go server but slots into the same install pattern as other community Python servers.
Public tool metadata for what this MCP can expose to an agent.
actions_getGet details about specific GitHub Actions resources. Use this tool to get details about individual workflows, workflow runs, jobs, and artifacts by their unique IDs.4 paramsGet details about specific GitHub Actions resources. Use this tool to get details about individual workflows, workflow runs, jobs, and artifacts by their unique IDs.
repostringownerstringmethodstringget_workflow · get_workflow_run · get_workflow_job · download_workflow_run_artifact · get_workflow_run_usage · get_workflow_run_logs_urlresource_idstringactions_listTools for listing GitHub Actions resources. Use this tool to list workflows in a repository, or list workflow runs, jobs, and artifacts for a specific workflow or workflow run.8 paramsTools for listing GitHub Actions resources. Use this tool to list workflows in a repository, or list workflow runs, jobs, and artifacts for a specific workflow or workflow run.
pagenumberrepostringownerstringmethodstringlist_workflows · list_workflow_runs · list_workflow_jobs · list_workflow_run_artifactsper_pagenumberresource_idstringworkflow_jobs_filterobjectworkflow_runs_filterobjectactions_run_triggerTrigger GitHub Actions workflow operations, including running, re-running, cancelling workflow runs, and deleting workflow run logs.7 paramsTrigger GitHub Actions workflow operations, including running, re-running, cancelling workflow runs, and deleting workflow run logs.
refstringrepostringownerstringinputsobjectmethodstringrun_workflow · rerun_workflow_run · rerun_failed_jobs · cancel_workflow_run · delete_workflow_run_logsrun_idnumberworkflow_idstringadd_comment_to_pending_reviewAdd review comment to the requester's latest pending pull request review. A pending review needs to already exist to call this (check with the user if not sure).10 paramsAdd review comment to the requester's latest pending pull request review. A pending review needs to already exist to call this (check with the user if not sure).
bodystringlinenumberpathstringrepostringsidestringLEFT · RIGHTownerstringstartLinenumberstartSidestringLEFT · RIGHTpullNumbernumbersubjectTypestringFILE · LINEadd_issue_commentAdd a comment to a specific issue in a GitHub repository. Use this tool to add comments to pull requests as well (in this case pass pull request number as issue_number), but only if user is not asking specifically to add review comments.4 paramsAdd a comment to a specific issue in a GitHub repository. Use this tool to add comments to pull requests as well (in this case pass pull request number as issue_number), but only if user is not asking specifically to add review comments.
bodystringrepostringownerstringissue_numbernumberadd_reply_to_pull_request_commentAdd a reply to an existing pull request comment. This creates a new comment that is linked as a reply to the specified comment.5 paramsAdd a reply to an existing pull request comment. This creates a new comment that is linked as a reply to the specified comment.
bodystringrepostringownerstringcommentIdnumberpullNumbernumberassign_copilot_to_issueAssign Copilot to a specific issue in a GitHub repository. This tool can help with the following outcomes: - a Pull Request created with source code changes to resolve the issue More information can be found at: - https://docs.github.com/en/copilot/using-github-copilot/using-c...5 paramsAssign Copilot to a specific issue in a GitHub repository. This tool can help with the following outcomes: - a Pull Request created with source code changes to resolve the issue More information can be found at: - https://docs.github.com/en/copilot/using-github-copilot/using-c...
repostringownerstringbase_refstringissue_numbernumbercustom_instructionsstringcreate_branchCreate a new branch in a GitHub repository4 paramsCreate a new branch in a GitHub repository
repostringownerstringbranchstringfrom_branchstringcreate_gistCreate a new gist4 paramsCreate a new gist
publicbooleancontentstringfilenamestringdescriptionstringcreate_or_update_fileCreate or update a single file in a GitHub repository. If updating, you should provide the SHA of the file you want to update. Use this tool to create or update a file in a GitHub repository remotely; do not use it for local file operations. In order to obtain the SHA of origi...7 paramsCreate or update a single file in a GitHub repository. If updating, you should provide the SHA of the file you want to update. Use this tool to create or update a file in a GitHub repository remotely; do not use it for local file operations. In order to obtain the SHA of origi...
shastringpathstringrepostringownerstringbranchstringcontentstringmessagestringcreate_pull_requestCreate a new pull request in a GitHub repository.8 paramsCreate a new pull request in a GitHub repository.
basestringbodystringheadstringrepostringdraftbooleanownerstringtitlestringmaintainer_can_modifybooleancreate_pull_request_with_copilotDelegate a task to GitHub Copilot coding agent to perform in the background. The agent will create a pull request with the implementation. You should use this tool if the user asks to create a pull request to perform a specific task, or if the user asks Copilot to do something.5 paramsDelegate a task to GitHub Copilot coding agent to perform in the background. The agent will create a pull request with the implementation. You should use this tool if the user asks to create a pull request to perform a specific task, or if the user asks Copilot to do something.
repostringownerstringtitlestringbase_refstringproblem_statementstringcreate_repositoryCreate a new GitHub repository in your account or specified organization5 paramsCreate a new GitHub repository in your account or specified organization
namestringprivatebooleanautoInitbooleandescriptionstringorganizationstringdelete_fileDelete a file from a GitHub repository5 paramsDelete a file from a GitHub repository
pathstringrepostringownerstringbranchstringmessagestringdismiss_notificationDismiss a notification by marking it as read or done2 paramsDismiss a notification by marking it as read or done
statestringread · donethreadIDstringfork_repositoryFork a GitHub repository to your account or specified organization3 paramsFork a GitHub repository to your account or specified organization
repostringownerstringorganizationstringget_code_scanning_alertGet details of a specific code scanning alert in a GitHub repository.3 paramsGet details of a specific code scanning alert in a GitHub repository.
repostringownerstringalertNumbernumberget_commitGet details for a commit from a GitHub repository6 paramsGet details for a commit from a GitHub repository
shastringpagenumberrepostringownerstringperPagenumberinclude_diffbooleanget_copilot_job_statusGet the status of a GitHub Copilot coding agent job. Use this to check if a previously submitted task has completed and to get the pull request URL once it's created. Provide the job ID (from create_pull_request_with_copilot) or pull request number (from assign_copilot_to_issu...3 paramsGet the status of a GitHub Copilot coding agent job. Use this to check if a previously submitted task has completed and to get the pull request URL once it's created. Provide the job ID (from create_pull_request_with_copilot) or pull request number (from assign_copilot_to_issu...
idstringrepostringownerstringget_copilot_spaceThis tool can be used to provide additional context to the chat from a specific Copilot space. If the user mentions the keyword 'Copilot space' with the name and owner of the space, execute this tool. The response includes a table of contents (TOC) listing all documents in the...2 paramsThis tool can be used to provide additional context to the chat from a specific Copilot space. If the user mentions the keyword 'Copilot space' with the name and owner of the space, execute this tool. The response includes a table of contents (TOC) listing all documents in the...
namestringownerstringget_dependabot_alertGet details of a specific dependabot alert in a GitHub repository.3 paramsGet details of a specific dependabot alert in a GitHub repository.
repostringownerstringalertNumbernumberget_discussionGet a specific discussion by ID3 paramsGet a specific discussion by ID
repostringownerstringdiscussionNumbernumberget_discussion_commentsGet comments from a discussion5 paramsGet comments from a discussion
repostringafterstringownerstringperPagenumberdiscussionNumbernumberget_file_contentsGet the contents of a file or directory from a GitHub repository5 paramsGet the contents of a file or directory from a GitHub repository
refstringshastringpathstringrepostringownerstringget_gistGet gist content of a particular gist, by gist ID1 paramsGet gist content of a particular gist, by gist ID
gist_idstringget_global_security_advisoryGet a global security advisory1 paramsGet a global security advisory
ghsaIdstringget_job_logsGet logs for GitHub Actions workflow jobs. Use this tool to retrieve logs for a specific job or all failed jobs in a workflow run. For single job logs, provide job_id. For all failed jobs in a run, provide run_id with failed_only=true.7 paramsGet logs for GitHub Actions workflow jobs. Use this tool to retrieve logs for a specific job or all failed jobs in a workflow run. For single job logs, provide job_id. For all failed jobs in a run, provide run_id with failed_only=true.
repostringownerstringjob_idnumberrun_idnumbertail_linesnumberfailed_onlybooleanreturn_contentbooleanget_labelGet a specific label from a repository.3 paramsGet a specific label from a repository.
namestringrepostringownerstringget_latest_releaseGet the latest release in a GitHub repository2 paramsGet the latest release in a GitHub repository
repostringownerstringget_meGet details of the authenticated GitHub user. Use this when a request is about the user's own profile for GitHub. Or when information is missing to build other tool calls.Get details of the authenticated GitHub user. Use this when a request is about the user's own profile for GitHub. Or when information is missing to build other tool calls.
No parameter schema in public metadata yet.
get_notification_detailsGet detailed information for a specific GitHub notification, always call this tool when the user asks for details about a specific notification, if you don't know the ID list notifications first.1 paramsGet detailed information for a specific GitHub notification, always call this tool when the user asks for details about a specific notification, if you don't know the ID list notifications first.
notificationIDstringget_release_by_tagGet a specific release by its tag name in a GitHub repository3 paramsGet a specific release by its tag name in a GitHub repository
tagstringrepostringownerstringget_repository_treeGet the tree structure (files and directories) of a GitHub repository at a specific ref or SHA5 paramsGet the tree structure (files and directories) of a GitHub repository at a specific ref or SHA
repostringownerstringtree_shastringrecursivebooleanpath_filterstringget_secret_scanning_alertGet details of a specific secret scanning alert in a GitHub repository.3 paramsGet details of a specific secret scanning alert in a GitHub repository.
repostringownerstringalertNumbernumberget_tagGet details about a specific git tag in a GitHub repository3 paramsGet details about a specific git tag in a GitHub repository
tagstringrepostringownerstringget_team_membersGet member usernames of a specific team in an organization. Limited to organizations accessible with current credentials2 paramsGet member usernames of a specific team in an organization. Limited to organizations accessible with current credentials
orgstringteam_slugstringget_teamsGet details of the teams the user is a member of. Limited to organizations accessible with current credentials1 paramsGet details of the teams the user is a member of. Limited to organizations accessible with current credentials
userstringgithub_support_docs_searchRetrieve documentation relevant to answer GitHub product and support questions. Support topics include: GitHub Actions Workflows, Authentication, GitHub Support Inquiries, Pull Request Practices, Repository Maintenance, GitHub Pages, GitHub Packages, GitHub Discussions, Copilo...1 paramsRetrieve documentation relevant to answer GitHub product and support questions. Support topics include: GitHub Actions Workflows, Authentication, GitHub Support Inquiries, Pull Request Practices, Repository Maintenance, GitHub Pages, GitHub Packages, GitHub Discussions, Copilo...
querystringissue_readGet information about a specific issue in a GitHub repository.6 paramsGet information about a specific issue in a GitHub repository.
pagenumberrepostringownerstringmethodstringget · get_comments · get_sub_issues · get_labelsperPagenumberissue_numbernumberissue_writeCreate a new or update an existing issue in a GitHub repository.13 paramsCreate a new or update an existing issue in a GitHub repository.
bodystringrepostringtypestringownerstringstatestringopen · closedtitlestringlabelsarraymethodstringcreate · updateassigneesarraymilestonenumberduplicate_ofnumberissue_numbernumberstate_reasonstringcompleted · not_planned · duplicatelabel_writePerform write operations on repository labels. To set labels on issues, use the 'update_issue' tool.7 paramsPerform write operations on repository labels. To set labels on issues, use the 'update_issue' tool.
namestringrepostringcolorstringownerstringmethodstringcreate · update · deletenew_namestringdescriptionstringlist_branchesList branches in a GitHub repository4 paramsList branches in a GitHub repository
pagenumberrepostringownerstringperPagenumberlist_code_scanning_alertsList code scanning alerts in a GitHub repository.6 paramsList code scanning alerts in a GitHub repository.
refstringrepostringownerstringstatestringopen · closed · dismissed · fixeddefault: openseveritystringcritical · high · medium · low · warning · notetool_namestringlist_commitsGet list of commits of a branch in a GitHub repository. Returns at least 30 results per page by default, but can return more if specified using the perPage parameter (up to 100).6 paramsGet list of commits of a branch in a GitHub repository. Returns at least 30 results per page by default, but can return more if specified using the perPage parameter (up to 100).
shastringpagenumberrepostringownerstringauthorstringperPagenumberlist_copilot_spacesRetrieves the list of Copilot Spaces accessible to the user, including their names and owners.Retrieves the list of Copilot Spaces accessible to the user, including their names and owners.
No parameter schema in public metadata yet.
list_dependabot_alertsList dependabot alerts in a GitHub repository.4 paramsList dependabot alerts in a GitHub repository.
repostringownerstringstatestringopen · fixed · dismissed · auto_dismisseddefault: openseveritystringlow · medium · high · criticallist_discussion_categoriesList discussion categories with their id and name, for a repository or organisation.2 paramsList discussion categories with their id and name, for a repository or organisation.
repostringownerstringlist_discussionsList discussions for a repository or organisation.7 paramsList discussions for a repository or organisation.
repostringafterstringownerstringorderBystringCREATED_AT · UPDATED_ATperPagenumbercategorystringdirectionstringASC · DESClist_gistsList gists for a user4 paramsList gists for a user
pagenumbersincestringperPagenumberusernamestringlist_global_security_advisoriesList global security advisories from GitHub.11 paramsList global security advisories from GitHub.
cwesarraytypestringreviewed · malware · unrevieweddefault: reviewedcveIdstringghsaIdstringaffectsstringupdatedstringmodifiedstringseveritystringunknown · low · medium · high · criticalecosystemstringactions · composer · erlang · go · maven · npmpublishedstringisWithdrawnbooleanlist_issue_typesList supported issue types for repository owner (organization).1 paramsList supported issue types for repository owner (organization).
ownerstringlist_issuesList issues in a GitHub repository. For pagination, use the 'endCursor' from the previous response's 'pageInfo' in the 'after' parameter.9 paramsList issues in a GitHub repository. For pagination, use the 'endCursor' from the previous response's 'pageInfo' in the 'after' parameter.
repostringafterstringownerstringsincestringstatestringOPEN · CLOSEDlabelsarrayorderBystringCREATED_AT · UPDATED_AT · COMMENTSperPagenumberdirectionstringASC · DESClist_labelList labels from a repository2 paramsList labels from a repository
repostringownerstringlist_notificationsLists all GitHub notifications for the authenticated user, including unread notifications, mentions, review requests, assignments, and updates on issues or pull requests. Use this tool whenever the user asks what to work on next, requests a summary of their GitHub activity, wa...7 paramsLists all GitHub notifications for the authenticated user, including unread notifications, mentions, review requests, assignments, and updates on issues or pull requests. Use this tool whenever the user asks what to work on next, requests a summary of their GitHub activity, wa...
pagenumberrepostringownerstringsincestringbeforestringfilterstringdefault · include_read_notifications · only_participatingperPagenumberlist_org_repository_security_advisoriesList repository security advisories for a GitHub organization.4 paramsList repository security advisories for a GitHub organization.
orgstringsortstringcreated · updated · publishedstatestringtriage · draft · published · closeddirectionstringasc · desclist_pull_requestsList pull requests in a GitHub repository. If the user specifies an author, then DO NOT use this tool and use the search_pull_requests tool instead.9 paramsList pull requests in a GitHub repository. If the user specifies an author, then DO NOT use this tool and use the search_pull_requests tool instead.
basestringheadstringpagenumberrepostringsortstringcreated · updated · popularity · long-runningownerstringstatestringopen · closed · allperPagenumberdirectionstringasc · desclist_releasesList releases in a GitHub repository4 paramsList releases in a GitHub repository
pagenumberrepostringownerstringperPagenumberlist_repository_security_advisoriesList repository security advisories for a GitHub repository.5 paramsList repository security advisories for a GitHub repository.
repostringsortstringcreated · updated · publishedownerstringstatestringtriage · draft · published · closeddirectionstringasc · desclist_secret_scanning_alertsList secret scanning alerts in a GitHub repository.5 paramsList secret scanning alerts in a GitHub repository.
repostringownerstringstatestringopen · resolvedresolutionstringfalse_positive · wont_fix · revoked · pattern_edited · pattern_deleted · used_in_testssecret_typestringlist_starred_repositoriesList starred repositories5 paramsList starred repositories
pagenumbersortstringcreated · updatedperPagenumberusernamestringdirectionstringasc · desclist_tagsList git tags in a GitHub repository4 paramsList git tags in a GitHub repository
pagenumberrepostringownerstringperPagenumbermanage_notification_subscriptionManage a notification subscription: ignore, watch, or delete a notification thread subscription.2 paramsManage a notification subscription: ignore, watch, or delete a notification thread subscription.
actionstringignore · watch · deletenotificationIDstringmanage_repository_notification_subscriptionManage a repository notification subscription: ignore, watch, or delete repository notifications subscription for the provided repository.3 paramsManage a repository notification subscription: ignore, watch, or delete repository notifications subscription for the provided repository.
repostringownerstringactionstringignore · watch · deletemark_all_notifications_readMark all notifications as read3 paramsMark all notifications as read
repostringownerstringlastReadAtstringmerge_pull_requestMerge a pull request in a GitHub repository.6 paramsMerge a pull request in a GitHub repository.
repostringownerstringpullNumbernumbercommit_titlestringmerge_methodstringmerge · squash · rebasecommit_messagestringprojects_getGet details about specific GitHub Projects resources. Use this tool to get details about individual projects, project fields, and project items by their unique IDs.8 paramsGet details about specific GitHub Projects resources. Use this tool to get details about individual projects, project fields, and project items by their unique IDs.
ownerstringfieldsarraymethodstringget_project · get_project_field · get_project_item · get_project_status_updateitem_idnumberfield_idnumberowner_typestringuser · orgproject_numbernumberstatus_update_idstringprojects_listTools for listing GitHub Projects resources. Use this tool to list projects for a user or organization, or list project fields and items for a specific project.9 paramsTools for listing GitHub Projects resources. Use this tool to list projects for a user or organization, or list project fields and items for a specific project.
afterstringownerstringquerystringbeforestringfieldsarraymethodstringlist_projects · list_project_fields · list_project_items · list_project_status_updatesper_pagenumberowner_typestringuser · orgproject_numbernumberprojects_writeAdd, update, or delete project items, or create status updates in a GitHub Project.15 paramsAdd, update, or delete project items, or create status updates in a GitHub Project.
bodystringownerstringmethodstringadd_project_item · update_project_item · delete_project_item · create_project_status_updatestatusstringINACTIVE · ON_TRACK · AT_RISK · OFF_TRACK · COMPLETEitem_idnumberitem_repostringitem_typestringissue · pull_requestitem_ownerstringowner_typestringuser · orgstart_datestringtarget_datestringissue_numbernumberupdated_fieldobjectproject_numbernumberpull_request_numbernumberpull_request_readGet information on a specific pull request in GitHub repository.6 paramsGet information on a specific pull request in GitHub repository.
pagenumberrepostringownerstringmethodstringget · get_diff · get_status · get_files · get_review_comments · get_reviewsperPagenumberpullNumbernumberpull_request_review_writeCreate and/or submit, delete review of a pull request. Available methods: - create: Create a new review of a pull request. If "event" parameter is provided, the review is submitted. If "event" is omitted, a pending review is created. - submit_pending: Submit an existing pendin...7 paramsCreate and/or submit, delete review of a pull request. Available methods: - create: Create a new review of a pull request. If "event" parameter is provided, the review is submitted. If "event" is omitted, a pending review is created. - submit_pending: Submit an existing pendin...
bodystringrepostringeventstringAPPROVE · REQUEST_CHANGES · COMMENTownerstringmethodstringcreate · submit_pending · delete_pendingcommitIDstringpullNumbernumberpush_filesPush multiple files to a GitHub repository in a single commit5 paramsPush multiple files to a GitHub repository in a single commit
repostringfilesarrayownerstringbranchstringmessagestringrequest_copilot_reviewRequest a GitHub Copilot code review for a pull request. Use this for automated feedback on pull requests, usually before requesting a human reviewer.3 paramsRequest a GitHub Copilot code review for a pull request. Use this for automated feedback on pull requests, usually before requesting a human reviewer.
repostringownerstringpullNumbernumberrun_secret_scanningScan files, content, or recent changes for secrets such as API keys, passwords, tokens, and credentials. This tool is intended for targeted scans of specific files, snippets, or diffs provided directly as content. It accepts file contents or diffs and returns detected secrets...3 paramsScan files, content, or recent changes for secrets such as API keys, passwords, tokens, and credentials. This tool is intended for targeted scans of specific files, snippets, or diffs provided directly as content. It accepts file contents or diffs and returns detected secrets...
repostringfilesarrayownerstringsearch_codeFast and precise code search across ALL GitHub repositories using GitHub's native search engine. Best for finding exact symbols, functions, classes, or specific code patterns.5 paramsFast and precise code search across ALL GitHub repositories using GitHub's native search engine. Best for finding exact symbols, functions, classes, or specific code patterns.
pagenumbersortstringorderstringasc · descquerystringperPagenumbersearch_issuesSearch for issues in GitHub repositories using issues search syntax already scoped to is:issue7 paramsSearch for issues in GitHub repositories using issues search syntax already scoped to is:issue
pagenumberrepostringsortstringcomments · reactions · reactions-+1 · reactions--1 · reactions-smile · reactions-thinking_faceorderstringasc · descownerstringquerystringperPagenumbersearch_orgsFind GitHub organizations by name, location, or other organization metadata. Ideal for discovering companies, open source foundations, or teams.5 paramsFind GitHub organizations by name, location, or other organization metadata. Ideal for discovering companies, open source foundations, or teams.
pagenumbersortstringfollowers · repositories · joinedorderstringasc · descquerystringperPagenumbersearch_pull_requestsSearch for pull requests in GitHub repositories using issues search syntax already scoped to is:pr7 paramsSearch for pull requests in GitHub repositories using issues search syntax already scoped to is:pr
pagenumberrepostringsortstringcomments · reactions · reactions-+1 · reactions--1 · reactions-smile · reactions-thinking_faceorderstringasc · descownerstringquerystringperPagenumbersearch_repositoriesFind GitHub repositories by name, description, readme, topics, or other metadata. Perfect for discovering projects, finding examples, or locating specific repositories across GitHub.6 paramsFind GitHub repositories by name, description, readme, topics, or other metadata. Perfect for discovering projects, finding examples, or locating specific repositories across GitHub.
pagenumbersortstringstars · forks · help-wanted-issues · updatedorderstringasc · descquerystringperPagenumberminimal_outputbooleansearch_usersFind GitHub users by username, real name, or other profile information. Useful for locating developers, contributors, or team members.5 paramsFind GitHub users by username, real name, or other profile information. Useful for locating developers, contributors, or team members.
pagenumbersortstringfollowers · repositories · joinedorderstringasc · descquerystringperPagenumberstar_repositoryStar a GitHub repository2 paramsStar a GitHub repository
repostringownerstringSelf-hosted GitHub MCP server. Personal-access-token auth, stdio transport, transport-agnostic so it works with Claude Code (any account), Codex CLI, Cursor, or any MCP-compliant client. No claude.ai OAuth dependency.
Written in Python on top of FastMCP. Slots into the same install pattern as other community Python MCP servers.
The official github/github-mcp-server (Go, 60+ tools) is excellent if you want a kitchen-sink server tied to a single agent platform's auth flow. This one is scoped for operators who:
If neither applies, run github/github-mcp-server instead — that's the right call.
| Tool | Purpose |
|---|---|
health_check | Verify the PAT is valid + report rate-limit headroom. First call when wiring up. |
list_prs | List pull requests with state filter. |
get_pr | Single PR with check-run status + mergeable state. |
merge_pr | Squash/merge/rebase with optional branch delete. |
list_dependabot_alerts | Alert sweep with severity-grouped counts. |
get_file | Read a file via the Contents API. |
put_file | Create or update a file via the Contents API (idempotent with SHA). |
Future versions expand: workflows, releases, issues, rulesets, secret-scan alerts, branch protection, repo settings.
v0.1.1+ reads the PAT from macOS Keychain by default. Env-var fallback is still supported for non-macOS / CI, but the Keychain path is the recommended setup because the secret never enters argv or process env — safe from ps aux, pgrep -fl, lsof, /proc/<pid>/environ, panic dumps, CI logs, debuggers, or any LLM agent running an introspection command.
# One-time setup (macOS):
security add-generic-password -s github-mcp -a "$USER" -w "<your-fine-grained-PAT>"
# Update later (e.g. after rotation):
security delete-generic-password -s github-mcp -a "$USER" 2>/dev/null
security add-generic-password -s github-mcp -a "$USER" -w "<new-PAT>"
Do NOT install with an inline --env:
# BAD — bakes the PAT into ~/.claude.json + every Claude child spawn's --mcp-config argv.
# Any pgrep / ps aux dumps it.
claude mcp add github --scope user --env GITHUB_TOKEN=github_pat_... -- <command>
# GOOD — no --env block. The server reads from Keychain at call time.
claude mcp add github --scope user -- <command>
PR/incident lineage: this hygiene path was added 2026-05-19 after a pgrep -fl chrome-devtools-mcp dumped a PAT-bearing claude process into a session transcript. See adelaidasofia/github-mcp Keychain migration (TODO: link PR once merged).
For non-macOS environments, fall back to env:
export GITHUB_TOKEN=<your-PAT> # set in shell rc, NOT in argv
Minimum scopes for the v0.1 tool surface: Contents R/W, Pull requests R/W, Dependabot R.
Open Claude Code, paste:
/plugin marketplace add adelaidasofia/github-mcp
/plugin install github-mcp@github-mcp
git clone https://github.com/adelaidasofia/github-mcp ~/.claude/github-mcp
cd ~/.claude/github-mcp
uv tool install --editable .
Or as a one-off without persistent install:
cd ~/.claude/github-mcp
uv run github-mcp
The server reads the GitHub PAT from environment, in this precedence:
GITHUB_TOKENGH_TOKENFine-grained tokens recommended.
| Permission | Access | Unlocks |
|---|---|---|
| Metadata | Read | Baseline (auto-required when any other repo permission is set) |
| Contents | Read and write | get_file, put_file |
| Pull requests | Read and write | list_prs, get_pr, merge_pr |
| Dependabot alerts | Read | list_dependabot_alerts |
| Administration | Read and write | Future: rulesets, branch protection, allow_auto_merge toggle |
| Workflows | Read and write | Future: read/update .github/workflows/*.yml |
| Actions | Read and write | Future: trigger and inspect workflow runs |
| Secret scanning alerts | Read | Future: fleet-wide secret-scan sweep |
| Code scanning alerts | Read | Future: CodeQL fleet sweep |
v0.1 floor: Metadata + Contents (R/W) + Pull requests (R/W) + Dependabot alerts (R) is enough to use every tool in this release.
Future-proof: granting the full table now means new MCP tools can ship without rotating the PAT. Equivalent to checking "all repository permissions" in the fine-grained PAT UI. Trade-off: broader blast radius if the token leaks. Reasonable for a personal-dev token on an encrypted laptop with FileVault; reconsider for shared or production deployments.
The MCP introspects scopes via health_check — call it after wiring up to confirm what your token actually has.
Optional: GITHUB_API_BASE for GitHub Enterprise Server. Defaults to https://api.github.com.
Add to ~/.claude/.mcp.json (or any .mcp.json in the project root):
{
"mcpServers": {
"github": {
"command": "uv",
"args": ["run", "--project", "/Users/<you>/.claude/github-mcp", "github-mcp"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}
Add to ~/.codex/config.toml:
[mcp_servers.github]
command = "uv"
args = ["run", "--project", "/Users/<you>/.claude/github-mcp", "github-mcp"]
[mcp_servers.github.env]
GITHUB_TOKEN = "${GITHUB_TOKEN}"
~/.cursor/mcp.json follows the Claude Code shape. Same env block.
Configure it to spawn the github-mcp command and pipe stdio. The server speaks standard MCP over stdio.
GITHUB_TOKEN=ghp_yourpat uv run github-mcp
The server will wait on stdin for MCP traffic. In another shell, exercise health_check via your client.
uv pip install -e ".[dev]"
uv run pytest tests/ -v
This plugin sends a single anonymous install signal to myceliumai.co the first time it loads in a Claude Code session on a given machine.
What is sent:
slack-mcp)0.1.0)What is NOT sent:
Why: Helps the maintainer know which plugins people actually install, so attention goes to the ones that get used.
Opt out: Set the environment variable MYCELIUM_NO_PING=1 before launching Claude Code. The hook will skip the network call entirely. Already-pinged installs leave a sentinel at ~/.mycelium/onboarded-<plugin> — delete it if you want to reset state.
MIT.
GITHUB_TOKEN*secretClassic or fine-grained PAT with repo + workflow scopes
ray0907/git-mcp-server
cyanheads/git-mcp-server
io.github.b1ff/atlassian-dc-mcp-bitbucket
io.github.b1ff/atlassian-dc-mcp-jira
com.mcparmory/atlassian-jira
sirlordt/vscode-terminal-mcp