github-devhub-mcp
Provides tools for interacting with GitHub's REST API, including repository metadata, listing pull requests and issues, creating issues and comments, code search, and checking CI status.
Can be configured as an LLM provider to power AI tools such as PR review, issue triage, and summarization using local Ollama models.
Can be configured as an LLM provider to power AI tools such as PR review, issue triage, and summarization via OpenAI-compatible endpoints.
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-devhub-mcp Review the newest PR on my GitHub repo"
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.
github-devhub-mcp
A Model Context Protocol server (built on the official Python MCP SDK) that brings GitHub workflow tools and cost-free LLM-powered engineering tools to any MCP client (Claude Desktop, Claude Code, Cursor, …).
Two halves, one server:
github.*— read/write tools over the GitHub REST API (typed, rate-limit-aware, paginated).ai.*— LLM tools powered by the Groq free tier (no billing setup): PR review, PR summary, issue summary, issue triage, commit messages, and repo onboarding briefs.
Built to demonstrate MCP SDK integration, third-party API integration, and careful tool design — the three things this project is for.
What it can do
Tool | What it does |
| Repo metadata (stars, language, default branch, archived…) |
| Paginated, sorted repo list for an owner |
| PRs filtered by state, with stats |
| Full PR detail incl. head/base refs |
| Check runs + combined commit status for a PR or ref |
| Code search across GitHub |
| Issues filtered by state / labels / sort |
| Single issue detail |
| Create an issue (supports |
| Comment on an issue/PR thread (supports |
| Groq-powered code review of a PR diff |
| Concise "what/why/how/risks" PR summary |
| Issue + comment-thread summary |
| Classify issue type/priority/labels with reasoning |
| Conventional commit message from a PR |
| Onboarding brief from README + file tree |
| Connectivity + rate-limit + LLM ping check |
Related MCP server: GitHub MCP Agent Server
Architecture
┌─────────────────────────┐ stdio (Claude Desktop / Code)
│ MCP client │ ◄────── or streamable HTTP (--http)
└─────────────────────────┘
│ JSON-RPC (MCPServer)
▼
┌────────────────────────────────────────────┐
│ github_devhub (server.py) │
│ ┌──────────────┐ ┌──────────────┐ ┌─────┴───┐
│ │ github.* │ │ ai.* │ │ meta.* │
│ │ tools │ │ tools │ │ health │
│ └──────┬───────┘ └──────┬───────┘ └─────────┘
│ ▼ ▼
│ GithubClient LLMProvider (Protocol)
│ (httpx, GroqProvider (free tier)
│ rate-limit, swap for Ollama / vLLM / any
│ structured OpenAI-compatible endpoint)
│ errors)
└────────────────────────────────────────────┘Quickstart
# 1. Python 3.10+; install the package (with dev deps for testing)
python -m pip install -e ".[dev]"
# 2. Configure
cp .env.example .env # fill in GITHUB_TOKEN and GROQ_API_KEY
# 3. Run — the MCP Inspector is the easiest interactive demo
npx @modelcontextprotocol/inspector python -m github_devhub
# No Node.js installed? Same things work through the Python SDK client:
python scripts/smoke_client.pyRun with a client:
# Claude Desktop — claude_desktop_config.json
{
"mcpServers": {
"github-devhub": {
"command": "python",
"args": ["-m", "github_devhub"],
"env": {
"GITHUB_TOKEN": "ghp_...",
"GROQ_API_KEY": "gsk_..."
}
}
}
}Or over HTTP:
python -m github_devhub --http # streamable HTTP on http://localhost:8787/mcpGetting the two free keys
GitHub — a classic personal access token (
reposcope) or a fine-grained token with read access to contents/pulls/issues. → https://github.com/settings/tokensGroq — free API key, no card required. → https://console.groq.com/keys
Design decisions (the resume part)
These are deliberate, and each maps to a thing engineering teams screen for:
LLM-actionable errors — every failure carries a stable
code, arecoverableflag, and a plain-languageremediationhint (errors.py). Tool errors are returned as structured JSON the calling agent can parse and self-correct (e.g.GITHUB_404→ verify the owner/repo and retry;GROQ_429→ back off). Opaque errors are the #1 agent-killer; this server never returns one.Safety-first tool design — write tools (
github.create_issue,github.add_issue_comment) default to adry_runpreview so an agent can show intent before mutating anything. Reads are read-only; page sizes are capped.Rate-limit awareness — the GitHub client parses
x-ratelimit-remainingon every call, surfaces it in results, and converts an exhausted quota into a dedicated recoverable error instead of a generic 403. The health tool reports current headroom.Provider abstraction — tools depend on an
LLMProviderprotocol, not on Groq. Groq (free tier) is the default implementation; pointing the same server at a local Ollama or vLLM OpenAI-compatible endpoint is a config change. Seellm/provider.py.Context-budget guard — every prompt is truncated to a configurable char budget before hitting the LLM, so huge diffs can't blow a model's context window (
LLM_MAX_INPUT_CHARS).Protocol-level tests — the test suite drives the server through a real in-process MCP
Client, so tool registration, arguments, dry-run behavior, and error serialization are verified over the protocol, not just as unit functions.Two transports — stdio for local clients, streamable HTTP for remote tools.
Testing
python -m pip install -e ".[dev]"
python -m pytest # or just: pytestTry these prompts
List open PRs in octocat/Hello-World, then review PR #1 for me.
Triage issue #5 in octocat/Hello-World and propose labels.
Explain the architecture of facebook/react to a new contributor.
Summarize PR #3 in octocat/Hello-World and draft a commit message for it.
Check health, then show me open issues labeled bug in octocat/Hello-World.See DEMO.md for a scripted walkthrough.
Resume bullets
Built an MCP server on the official Python SDK exposing 17 typed tools across GitHub API integration and LLM-powered analysis, with stdio + streamable HTTP transports.
Integrated the Groq free-tier API behind a swappable LLM provider abstraction with config-bounded context budgets.
Designed LLM-actionable error protocol (stable codes +
recoverable+ remediation hints) anddry_run-safe write tools, validated by protocol-level tests over the MCP wire.
Roadmap
OAuth device flow instead of a static token
Webhook → MCP
notificationsfor live PR/CI eventsPer-session session pools on the HTTP transport
Cached embeddings for repo-wide semantic search
Available Tools
17 toolsai.explain_repoA
Generate a newcomer's onboarding brief for a repository from its README and top-level file tree.
Inputs: repo (required), owner (required). Returns: result
ai.gen_commit_messageA
Generate a conventional commit message from a pull request's commits and changed files.
Inputs: repo (required), owner (required), pull_number (required). Returns: result
ai.review_prB
Run an LLM code review on a pull request (fetches the diff, commits, and description).
Inputs: repo (required), owner (required), pull_number (required), focus, +1 more. Returns: result
ai.summarize_issueA
Summarize an issue and its comment thread so a newcomer can jump in.
Inputs: repo (required), owner (required), issue_number (required). Returns: result
ai.summarize_prA
Produce a concise summary of a pull request: what it does, how, and notable changes.
Inputs: repo (required), owner (required), pull_number (required). Returns: result
ai.triage_issueA
Classify an issue (type, priority, suggested labels) and explain why.
Inputs: repo (required), owner (required), issue_number (required). Returns: result
github.add_issue_commentA
Post a comment on an issue or PR thread. Set dry_run=true to preview without writing.
Inputs: body (required), repo (required), owner (required), issue_number (required), +1 more. Returns: result
github.ci_statusA
Get CI status (check runs + combined commit status) for a PR or a commit ref.
Inputs: repo (required), owner (required), ref, pull_number. Returns: result
github.code_searchA
Search code across GitHub. Requires a token with scope for the repos you search.
Inputs: query (required), page, per_page. Returns: result
github.create_issueA
Create an issue. Set dry_run=true to preview the request without writing anything.
Inputs: repo (required), owner (required), title (required), body, +2 more. Returns: result
github.get_issueB
Get an issue (not a PR) by number, with metadata.
Inputs: repo (required), owner (required), issue_number (required). Returns: result
github.get_prA
Get full detail on a pull request: title, state, author, stats, head/base refs.
Inputs: repo (required), owner (required), pull_number (required). Returns: result
github.get_repoB
Get repository metadata: description, language, stars, default branch, archived status.
Inputs: repo (required), owner (required). Returns: result
github.list_issuesB
List issues in a repository, optionally filtered by state and labels.
Inputs: repo (required), owner (required), page, sort, +3 more. Returns: result
github.list_prsA
List pull requests in a repository, filtered by state.
Inputs: repo (required), owner (required), page, state, +1 more. Returns: result
github.list_reposA
List repositories for an owner (user or org), sorted and paginated.
Inputs: owner (required), page, sort, per_page. Returns: result
meta.healthA
Check connectivity: GitHub API rate limit and a live Groq LLM ping.
Inputs: no named parameters. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 17 tools
Each tool targets a distinct resource and action—PRs, issues, repos, code search, CI, and AI analysis are cleanly separated. Even overlapping AI tools (summary vs review vs triage) have clearly defined different outputs.
Most tools follow a verb_noun pattern (get_pr, create_issue, list_repos, summarize_pr) with domain prefixes. Minor exceptions like ci_status and health are noun phrases, but the overall pattern is consistent and predictable.
17 tools is slightly above the ideal range, but each tool serves a distinct purpose in the GitHub + AI workflow. No redundant tools; the count feels intentional even if a bit heavy.
The surface is strong for reading and analyzing (repos, issues, PRs, code, CI) and supports creating issues and comments. However, there are no update/delete/merge operations for issues or PRs, leaving common management workflows incomplete.
Maintenance
Related MCP Connectors
An MCP server that gives your AI access to the source code and docs of all public github repos
AI-native git hosting — repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
A MCP server built for developers enabling Git based project management with project and personal…
GitHub Copilot MCP: code, repo, PR, workflow tools for AI assistants.
Related MCP Servers
- AlicenseBqualityBmaintenanceA MCP server that bridges LLMs with GitHub repository management, enabling automated analysis of pull requests, issue management, tag creation, and release management through natural language.666Apache 2.0
- AlicenseBqualityCmaintenanceMCP server that exposes GitHub operations as tools for AI agents, enabling code search, issue management, and PR review.12MIT
- FlicenseAqualityDmaintenanceAn MCP server exposing AI-powered GitHub PR review as tools.5-
- AlicenseAqualityDmaintenanceAn MCP server that enables AI assistants to interact with GitHub via a fine-grained personal access token — pushing commits, managing branches, opening and merging PRs, creating issues, and reading repositories. It runs locally with no telemetry and supports a read-only mode.151MIT