triage-mcp
Provides read-only tools for investigating GitHub issues and pull requests before starting a fix. It can search issues, retrieve issue details and recent comments, find related code files, check whether an issue is assigned, already fixed, or has an open PR, and inspect repository contribution rules including any AI-use or disclosure policy.
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., "@triage-mcp Before fixing markedjs/marked#4099, check for an existing PR or assignee."
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.
triage-mcp
A read-only Model Context Protocol server that lets a coding agent check a GitHub issue properly before it writes a fix.
I have had around a hundred pull requests merged into open-source projects, and the most common way to waste an afternoon is to fix something that already has an open PR, or to miss a contribution rule. Before I start on an issue I check the same four things by hand. This server gives an agent those checks as tools, so it does them too.
Tools
Tool | Question it answers |
| Is there an issue for this, open or closed? |
| What does it say, and what did people add in the latest comments? |
| Which files is it about? (needs a token, see below) |
| Is it assigned, is someone already fixing it, or is it already fixed? |
| What does CONTRIBUTING say, and does it mention AI use or disclosure? |
Every tool is read-only. There is no tool that comments, assigns, labels or opens a pull request.
check_existing_fix
This is the one that saves the most time. It collects pull requests that reference the issue from two places, the issue timeline and a search, merges duplicates, and returns one verdict:
Verdict | Meaning |
| a pull request that references the issue was merged |
| someone has an open pull request for it (drafts included) |
| no pull request yet, but the issue has an assignee |
| none of the above |
A pull request that was closed without merging does not count as a fix.
Real output for markedjs/marked#4099, trimmed:
{
"verdict": "open_pr_exists",
"reason": "Open PR #4196 by VadimToptunov references issue #4099.",
"pullRequests": [{ "number": 4196, "state": "open", "foundVia": ["timeline", "search"] }]
}Related MCP server: slim-github-mcp
Run it
Needs Node 20 or newer. It is not published to npm, so build it from a clone:
git clone https://github.com/shaurya703/triage-mcp && cd triage-mcp
npm install
npm run buildThen point an MCP client at it. For Claude Code or Claude Desktop:
{
"mcpServers": {
"triage": {
"command": "node",
"args": ["/absolute/path/to/triage-mcp/dist/index.js"],
"env": { "GITHUB_TOKEN": "<a token with public read access>" }
}
}
}GITHUB_TOKEN is optional. Without it you get GitHub's lower unauthenticated rate limit, and
find_related_code returns an error, because GitHub's code search refuses requests with no token.
Rate limits
GitHub rate limits are easy to handle badly: either the tool hangs for an hour or it hammers the API. This server does neither.
If GitHub says to retry within 10 seconds, it waits and retries, twice at most.
If the wait is longer, it does not wait. The agent gets an error that says when the limit resets.
A 403 that is not a rate limit is reported as a permission error and is not retried.
The longest wait is configurable with TRIAGE_MAX_WAIT_MS.
Tests
npm test # 43 tests, no network: fetch is mocked
npm run typecheckThe tests cover every verdict, duplicate pull requests found by both routes, closed-but-unmerged pull requests, each rate-limit path (with an injected clock, so nothing really sleeps), bad input, 404s, body truncation, and one end-to-end test that starts the real server over the SDK's in-memory transport and calls a tool through a real MCP client.
Limits worth knowing
A pull request that only mentions an issue ("see #42") is treated the same as one that fixes it. When a pull request was merged but the issue is still open, the reason says so, so the agent can look.
"I'll take this" in a comment is not detected as a claim.
The AI-policy check is a keyword match. It returns the matching lines so the agent reads them instead of trusting a yes or no.
The issue timeline is read for up to 500 events, and the search looks at the 30 most recently updated pull requests.
Design notes are in docs/DESIGN.md.
License
MIT
Available Tools
5 toolscheck_existing_fixBRead-only
Check whether an issue is assigned and whether open or merged pull requests reference it. Returns a verdict: unclaimed, assigned, open_pr_exists or already_fixed.
Inputs: repo (required), number (required).
get_issueARead-only
Get one issue: title, body (truncated if long), labels, assignees, author, state and the most recent comments.
Inputs: repo (required), number (required), commentLimit.
repo_contribution_rulesARead-only
Fetch CONTRIBUTING.md and the pull request template, and list lines that mention AI use or disclosure.
Inputs: repo (required).
search_issuesBRead-only
Search issues in a GitHub repository by free text and state.
Inputs: repo (required), query (required), limit, state.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool targets a distinct step of issue triage: fetching an issue, searching issues, searching code, checking for existing fixes, and fetching contribution rules. Minor overlap exists between get_issue (returns assignees) and check_existing_fix (checks assignment status) and between the two search tools, but descriptions make the boundaries clear.
Four of five names follow a verb_noun snake_case pattern (get_issue, find_related_code, check_existing_fix, search_issues). repo_contribution_rules breaks the pattern by dropping the verb, but it is still readable and unambiguous.
Five tools is well-scoped for a narrow triage workflow, and each one maps to a distinct decision an agent needs to make before claiming an issue. Nothing appears redundant or padding the surface.
The read-only triage lifecycle is well covered: discover an issue, search related issues/code, verify no existing fix, and check contribution rules before acting. Gaps are minor (no full untruncated issue body, no direct PR inspection or comment listing beyond what get_issue returns), but an agent can work around them.
Maintenance
Related MCP Connectors
Context for coding agents: checks a GitHub or Linear issue is ready before your agent starts it.
Operate GitHub from your AI assistant: repos, PRs, issues, Actions. Previews and read-only mode.
GitHub repo search, stats, language breakdown and comparison as agent tools.
Screens public GitHub repos and PRs to generate risk maps, findings, and merge-readiness signals.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with GitHub repositories, issues, pull requests, code, and more through a comprehensive set of tools.-
- AlicenseNot gradedqualityCmaintenanceEnables local models to query GitHub read-only through nine compact tools that return small, capped results, such as repositories, issues, pull requests, commits, code search, and file contents.2MIT
- AlicenseAqualityCmaintenanceLets agents read a GitHub repository's live issues through read-only tools for listing, filtering, fetching details with comments and cross-references, searching, and exploring labels and milestones, with transparent pagination and provenance notes.5MIT
- AlicenseAqualityCmaintenanceEnables AI agents to analyze public GitHub repositories directly through tools for repo health scoring, recent commit summaries, good first issue discovery, and semantic Q&A over docs and issues.432 npm1MIT