GitHub Plus MCP Server
Read repositories, branches, tags, pull requests, files, directories, and GitHub Actions workflows/runs (read-only tools only in this schema).
Get repository info including the default branch (
github_get_repo)List branches with head SHAs and protection status (
github_list_branches)List tags with the commits they point to (
github_list_tags)Read a text file at a branch, tag, or SHA, with truncation flagging (
github_get_file)List directory contents, including the repo root (
github_list_directory)List pull requests filtered by state and base branch (
github_list_pull_requests)Get a pull request's details: description, mergeability, size, assignees, reviewers, labels (
github_get_pull_request)List the files a PR changes along with diffs (
github_get_pull_request_files)List Actions workflows with their IDs and file names (
github_list_workflows)List workflow runs, newest first, optionally filtered by branch (
github_list_workflow_runs)Poll a single workflow run's status and conclusion (
github_get_workflow_run)
Write operations (create branch/PR/tag, comment, assign, approve, trigger workflows, merge, delete) exist in the project but are not registered in this schema since the server runs read-only by default.
Provides read and write access to GitHub (github.com and GitHub Enterprise Server): browse repositories, branches, tags, directories and files, inspect pull requests (including diffs, mergeability, assignees, reviewers and labels), and list workflows and workflow runs. With writes enabled it can create branches and tags, open/close/reopen and comment on pull requests, assign and approve, and trigger workflow_dispatch workflows; optional destructive tools allow merging pull requests and deleting branches or tags.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GitHub Plus MCP Server list the open pull requests in aviz92/python-github-plus"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
python-github-plus-mcp
An MCP server that lets any MCP client work with GitHub (github.com and GitHub Enterprise Server): read repositories, branches, tags, pull requests, files and workflow runs, then optionally create branches, tags and pull requests, comment, assign, approve, trigger workflows, merge and delete.
It is a thin layer over python-github-plus, which does the GitHub work (defaults, validation, paging, error handling). This package only defines the tools and shapes their results for a model.
Requirements
uv (it provides
uvx, and installs Python 3.12+ if needed)git, to install straight from GitHub
A GitHub fine-grained personal access token
curl -LsSf https://astral.sh/uv/install.sh | sh # once, if uv is not installedRelated MCP server: GitHub MCP Server
Quick start
Claude Desktop
Add the server to claude_desktop_config.json, then restart the app:
{
"mcpServers": {
"github-plus": {
"command": "/Users/you/.local/bin/uvx",
"args": [
"--from", "git+https://github.com/aviz92/python-github-plus-mcp@main",
"python-github-plus-mcp"
],
"env": {
"GITHUB_ACCESS_TOKEN": "github_pat_..."
}
}
}
}Use the full path to
uvx(which uvxprints it). Claude Desktop does not load your shell'sPATH.With
@main, every restart of the app picks up the latest commit onmain. To stay on one version, pin a tag instead, e.g.@v0.1.0.The token lives only in this local file. Never commit it.
If you also run GitHub's official MCP server, give this one a different name (here
github-plus).
Claude Code
claude mcp add github-plus \
-e GITHUB_ACCESS_TOKEN=github_pat_... \
-e GITHUB_MCP_DEFAULT_REPO=your-user/your-repo \
-- uvx --from git+https://github.com/aviz92/python-github-plus-mcp@main python-github-plus-mcpToken permissions
Give the token access only to the repositories the model should see, with these repository permissions:
Permission | Read-only server | With writes | Used for |
Metadata | Read | Read | Required for every token |
Contents | Read | Read and write | Files, branches, tags; merging |
Pull requests | Read | Read and write | Listing, creating, commenting, assigning, approving, merging |
Actions | Read | Read and write | Workflows and runs; triggering a workflow |
A 403 from GitHub comes back as a tool error naming the permission the token is missing.
Configuration
All settings are environment variables (or a .env file in the working directory; see env.template).
The credentials use the same names as python-github-plus, so one .env serves both.
Variable | Default | Meaning |
| Personal access token | |
|
| GitHub Enterprise Server API URL, e.g. |
|
| |
|
| When |
|
| Register merge and delete tools (also needs |
|
| Upper bound for any |
|
| Longer file contents are cut and flagged |
|
|
|
|
| HTTP transport only |
|
| HTTP transport only |
Tools
Every tool takes repo (owner/name), falling back to GITHUB_MCP_DEFAULT_REPO. All repositories share one
connection. List tools take limit and return truncated: true when more exist.
Tool | Available | What it does |
| always | Repository info, including the default branch |
| always | Branches with their head sha |
| always | Tags with the commit each points to |
| always | Pull requests by |
| always | One pull request: description, mergeability, size, assignees, reviewers, labels |
| always | Files a pull request changes, with their diff (long diffs are cut) |
| always | A text file's content at a branch, tag or sha (default branch if omitted) |
| always | A directory's entries |
| always | Actions workflows with their id and file name |
| always | Runs of a workflow (by name, file name or id), newest first |
| always | One run's status and conclusion |
| writes enabled | Create a branch (from the default branch if omitted) |
| writes enabled | Open a pull request, optionally as a draft |
| writes enabled | Add a comment |
| writes enabled | Add assignees |
| writes enabled | Submit an approving review |
| writes enabled | Close without merging, or reopen |
| writes enabled | Run a |
| writes enabled | Annotated tag on a sha or a branch head |
| destructive enabled | Merge, squash or rebase. Cannot be undone |
| destructive enabled | Delete a branch or tag. Cannot be undone |
Enabling writes
Add to the server's env:
"GITHUB_MCP_READ_ONLY": "false"Merging and deleting have their own switch because they cannot be undone:
"GITHUB_MCP_ENABLE_DESTRUCTIVE": "true"Access and safety
The server can do whatever the token can do. Limit it with a fine-grained token that covers only the repositories and permissions you want; GitHub enforces it on every request.
Read-only by default, and merge/delete need a second, explicit switch.
Not exposed on purpose: repository settings, branch protection and collaborator management, and waiting on a workflow run (a tool that blocks for minutes; the model polls
github_get_workflow_runinstead).File writes are not exposed: commit through branches and pull requests.
Docker and the HTTP transport (experimental)
docker build -t python-github-plus-mcp .
docker run -i --rm -e GITHUB_ACCESS_TOKEN -e GITHUB_MCP_DEFAULT_REPO python-github-plus-mcpThe image runs over stdio by default. GITHUB_MCP_TRANSPORT=streamable-http serves on
GITHUB_MCP_HOST:GITHUB_MCP_PORT instead; in Docker, set GITHUB_MCP_HOST=0.0.0.0 and publish the port.
The HTTP transport has no authentication. Anyone who can reach the port acts with the configured token. Bind to loopback, or put an authenticating reverse proxy in front.
Development
git clone https://github.com/aviz92/python-github-plus-mcp
cd python-github-plus-mcp
uv sync --group dev
uv run pytest # mocked tests only
uv run pre-commit run --all-filesTo run a client against your working copy, point it at the checkout:
"command": "/Users/you/.local/bin/uv",
"args": ["--directory", "/path/to/python-github-plus-mcp", "run", "python-github-plus-mcp"]Integration tests
uv run pytest -m integration calls the tools through the server against the real GitHub API, with
GITHUB_ACCESS_TOKEN from the environment or .env, and needs a sandbox repository:
Variable | Meaning |
| Sandbox repo ( |
License
MIT
Available Tools
11 toolsgithub_get_fileARead-only
Read a text file. Long files are cut and flagged truncated. For a directory use github_list_directory.
Inputs: path (required), ref, repo. Returns: ref, path, size, content, +1 more
github_get_pull_requestBRead-only
Get one pull request: description, mergeability, size, assignees, reviewers and labels.
Inputs: number (required), repo. Returns: base, body, head, draft, +17 more
github_get_pull_request_filesARead-only
List the files a pull request changes, with their diff (long diffs are cut, patch_truncated).
Inputs: number (required), repo, limit. Returns: items, returned, truncated
github_get_repoBRead-only
Get a repository's basic info, including its default branch.
Inputs: repo. Returns: private, archived, html_url, language, +3 more
github_get_workflow_runBRead-only
Get one workflow run's status and conclusion. Poll this to follow a run.
Inputs: run_id (required), repo. Returns: id, name, event, branch, +6 more
github_list_branchesCRead-only
List branches with their head commit sha.
Inputs: repo, limit. Returns: items, returned, truncated
github_list_directoryCRead-only
List a directory ("" is the repo root).
Inputs: ref, path, repo. Returns: result
github_list_pull_requestsBRead-only
List pull requests, newest first. state "closed" includes merged ones (state "merged" in results).
Inputs: base, repo, limit, state. Returns: items, returned, truncated
github_list_tagsBRead-only
List tags, newest first, with the commit each points to.
Inputs: repo, limit. Returns: items, returned, truncated
github_list_workflow_runsARead-only
List runs of a workflow, newest first. workflow is its name, file name (ci.yml) or id.
Inputs: workflow (required), repo, limit, branch. Returns: items, returned, truncated
github_list_workflowsARead-only
List GitHub Actions workflows with their id and file name.
Inputs: repo. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 11 tools
Each tool targets a distinct GitHub resource and action: repo metadata, branches, tags, files, directories, pull requests, PR files, workflows, workflow runs, and a single workflow run. The file-vs-directory split is explicitly clarified, and PR list/get/files are clearly separated. No meaningful overlap or misselection risk.
All tools consistently use the github_ prefix followed by a verb_noun pattern such as github_list_branches, github_get_file, and github_list_workflow_runs. The read-only verbs list/get are used predictably throughout.
The server has 11 tools, which is well within a focused, useful range. Each tool covers a specific inspection operation without excessive granularity or obvious filler.
The surface covers repository files, branches, tags, pull requests, and Actions workflow runs for read-only inspection. However, notable GitHub operations are absent, including commit history, issues, code search, PR review/comments, releases, and any write operations. If the server is intentionally read-only, it is coherent but still incomplete for broader GitHub Plus usage.
Maintenance
Related MCP Connectors
GitHub MCP — wraps the GitHub public REST API (no auth required for public endpoints)
Access the GitHub API, enabling file operations, repository management, search functionality, and…
Manage repositories, users, releases, and automate GitHub workflows
Create, deploy, and operate MCP servers directly from your GitHub repositories.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server for the GitHub REST API that enables interaction with repositories, pull requests, issues, branches, commits, reviews, and code search, with configurable write and destructive operations.-
- AlicenseNot gradedqualityDmaintenanceEnables GitHub API integration via MCP, allowing search, repository details, file contents, and issue management.443 npmISC
- FlicenseNot gradedqualityDmaintenanceEnables managing GitHub repositories, files, and user information through MCP, with support for creating, updating, and deleting repository contents, as well as fetching user profiles.1-
- AlicenseNot gradedqualityCmaintenanceEnables self-hosted, read-only remote interaction with GitHub repositories, allowing listing repositories, searching code, and inspecting commits, pull requests, issues, and diffs via authenticated MCP clients.345 npmMIT