pr-genius
PR Genius is a read-only MCP server that advises on open-source PR contributions — grading PR quality, matching known failure patterns, checking repo-specific policy, and monitoring in-flight PR health.
analyze_pr— deep risk analysis (low/medium/high tier), positive/negative signals, P0–P2 checklist, recommended action; accepts title, repo, body, labels, author association, star count, merge rate, mergeable state, anddiff-statfor size/impact.coach_pr— quick pass/fail go-no-go gate before opening a PR.triage_pr— policy-aware screening against a repo's hard/soft rules, returning pass / needs_preflight / warn / reject with cited violations.get_repo_profile— 17-field profile of a repo (AI policy, maintainer vibe, external merge rate, close keywords) to understand its contribution culture.contributor_view— contributor-side readiness decision: READY_TO_SUBMIT, FIX_BEFORE_SUBMIT, NEEDS_DISCUSSION, IMPROVE_CHANCE, ASK_MAINTAINER, with checklist and merge probability.maintainer_view— maintainer-side action for one PR: READY_FOR_REVIEW, WAIT_FOR_AUTHOR, CLOSE_DUPLICATE, CLOSE_STALE_OR_RISKY, HOLD_MAINTAINER_DECISION.review_queue— build a prioritised maintainer review-queue digest (summary + markdown) from a supplied PR list or JSON file.search_patterns— keyword search across 753 anti-patterns and success patterns, filterable by type and limit.get_case_study/list_open_prs— read local PR case studies (with round-by-round history) and list open case-study records, filtered by repo or author.status_prs— outbound PR heartbeat: classify in-flight PRs into 9 states (NEEDS_REBASE, CI_FAILING, STALE_REVIEW, CHANGES_REQUESTED, STALE_NO_REVIEW, BLOCKED, CLEAN, WAITING, UNKNOWN), suggest actions, optionally save snapshots for transition detection.profile_writeback_suggestions— propose evidence-backed repo profile updates (e.g. stale thresholds, response times) from PR health data.prgenius_doctor— self-test of install, knowledge-base coverage,ghCLI, and MCP registration; run before trusting analysis output.schema_info— report supported OKF schema versions and enums.
All tools are annotated read-only, idempotent, and non-destructive.
Provides tools to analyze pull requests on GitHub repositories, offering merge probability estimation, policy triage, and pattern-based coaching using historical case studies.
type: Knowledge Bundle title: PR Genius — Pre-submission PR Advisor description: Evidence-backed PR contribution advisor for large open-source projects version: 2.1.5 created: 2026-07-01 updated: 2026-09-05 author: zsxh1990 conforms_to: OKF v0.1 (Sudhakaran88/okf-conformance) + agent_guidelines extension
mcp-name: io.github.zsxh1990/pr-genius
PR Genius — The advisor that knows which PRs get closed
753 loaded patterns across 67 repos, plus 190 PR observations kept for pattern mining. (Trigger coverage — how often rules fire on real PRs — is measured separately by
scripts/measure_pattern_coverage.py, issue #66. There is no "quality pass rate" claim here: it is not measurable for the current set, so it is not asserted.) Clone → paste MCP config → ask "Should I open this PR to encode/httpx?"
Related MCP server: devflow-mcp
🎯 What is PR Genius?
PR Genius is not a PR dashboard. It's an Outbound PR CRM for professional OSS contributors and AI agents:
Manage PRs you've submitted to other repos — when to fix CI, rebase, wait, ping, or abandon.
PR Genius is also a DSH (Cordis) plugin that slots into the DeepSeek Harness chat sidebar, advisor panel, session tab, preferences section, and /prgenius slash-command. See 🧩 DSH Plugin below.
Capability |
| PR Genius |
Cross-repo PR list | ✅ | ✅ |
Status classification | ❌ | ✅ (9 states) |
Stale detection | ❌ | ✅ |
Action suggestions | ❌ | ✅ |
Common OSS PR policy | ❌ | ✅ |
Snapshot & transitions | ❌ | ✅ |
Status heartbeat runs daily via cron, auto-detecting:
🔴
NEEDS_REBASE/CI_FAILING— fix immediately🟡
STALE_REVIEW— ping after threshold🟡
STALE_NO_REVIEW— consider abandoning🟢
CLEAN/WAITING— continue waiting
🛡️ Why PR Genius?
PR Genius doesn't write PRs for you. It knows which PRs get closed.
Capability | LLM directly | Scraper Agent | PR Genius |
Knowledge source | Training data | Real-time scrape | 753 structured patterns |
Repo understanding | Generic | Surface data (stars) | 17-field agent_guidelines |
Failure patterns | Unknown | Unknown | 61 anti-patterns |
Success patterns | Unknown | Unknown | 692 patterns — retrieval/reference only, not wired into scoring (issue #69) |
Maintainer preference | Guess | Recent PRs | Structured policy files |
Merge probability | Can't estimate | Can't estimate | Based on repo merge rate + signals |
Real cases (PR Genius helped avoid these rejections):
PR | Repo | What happened | PR Genius would have flagged |
#491 | MisakaNet | "Destructive README rewrite" — closed |
|
#47434 | huggingface/transformers | "We'll handle internally" — closed |
|
#10393 | awesome-mcp-servers | Missing Glama badge — auto-flagged |
|
#282 | punkpeye/fastmcp | +271 lines, first PR — closed without review |
|
— | contribai | Issue claim without due diligence — auto-closed |
|
#2902 | soxoj/maigret | CI failure (tag |
|
— | Ikalus1988/MisakaNet | Claimed issue without due diligence — auto-closed |
|
#928 | Ikalus1988/MisakaNet | Voice hooks PR — scope creep, closed |
|
#936 | Ikalus1988/MisakaNet | Global disable switch — incomplete impl |
|
#938 | Ikalus1988/MisakaNet | Anti-patterns reference doc — premature PR |
|
#965 | Ikalus1988/MisakaNet | README numbers sync — stale data |
|
#248 | punkpeye/awesome-mcp-devtools | Listing PR — still pending, no maintainer response |
|
🚀 Quick Start
# Code only. Add [mcp] if you want the MCP server.
pip install prgenius-core
pip install "prgenius-core[mcp]" # + the MCP engine
# The knowledge bundle is NOT in the wheel — it lives in this git repo.
# Clone it and point the CLI at it (or export PRGENIUS_REPO_ROOT=<clone>).
git clone https://github.com/zsxh1990/pr-genius.git
export PRGENIUS_REPO_ROOT="$PWD/pr-genius"
# Sanity check: prints what it found and what is missing
prgenius-core doctor
# Analyze PR
python3 -m prgenius analyze "feat: add feature" --repo org/repo --body "Fixes #123"
# Coach (pass/fail)
python3 -m prgenius coach "feat: add feature" --repo org/repo
# Triage (policy check)
python3 -m prgenius triage "docs: typo" --repo org/repo --diff-stat "docs/faq.md | 3 ++-"
# Status heartbeat (outbound PR monitoring)
python3 -m prgenius status --author zsxh1990
python3 -m prgenius status --author zsxh1990 --format json --save-snapshot
# Profile writeback suggestions (dry-run)
python3 -m prgenius profile writeback --author zsxh1990First run of
doctormatters. It tells you whether the knowledge bundle was found and which optional pieces are missing.overall: NOT OKafter a barepip installis expected — it is the wheel containing code only, not a broken install. The warning names exactly what to do.
CLI reference
The console script is prgenius-core; python3 -m prgenius is equivalent.
Every command takes a global --repo-root to point at a knowledge-base checkout.
Command | What it does | Key flags |
| PR analysis + improvement suggestions |
|
| Older three-tier assessment (kept for compatibility) |
|
| Agent PR dojo — exit 0 = pass, 1 = fail |
|
| Policy-aware preflight checks |
|
| Install / knowledge-base / |
|
| Alias of | same as |
| Rejected PR → anti-pattern / lesson draft |
|
| Show a repo profile |
|
| Profile update suggestions (dry-run) |
|
| List case studies |
|
| Supported OKF schema versions | — |
| Health of in-flight outbound PRs |
|
| Refresh a pinned GitHub issue with heartbeat status |
|
| Suggest pings for stale PRs (dry-run; |
|
| Suggest rebases for PRs that need one (dry-run; |
|
| NDJSON dump of every case |
|
| Run the MCP server on stdio | — |
| Maintainer action decision for one PR (5 actions) |
|
| Contributor decision — submit yet? (5 actions) |
|
| Build a prioritised review-queue digest |
|
| Score/evaluate a single issue |
|
| Score many issues at once |
|
issue and issue-batch were added in v1.6.3. Examples:
# One issue
python3 -m prgenius issue --repo Ikalus1988/MisakaNet --number 2792
# A labelled batch, machine-readable
python3 -m prgenius issue-batch --repo Ikalus1988/MisakaNet \
--state open --label question --limit 50 --format json🤖 GitHub Action
Use PR Genius as a GitHub Action in any repo:
# .github/workflows/pr-genius.yml
name: PR Genius Check
on:
pull_request:
types: [opened, synchronize]
permissions:
contents: read
issues: write # required when comment_mode != never (post/update PR comment)
jobs:
pr-genius:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: zsxh1990/pr-genius@v2.1.4
id: pr-genius
with:
title: ${{ github.event.pull_request.title }}
repo: ${{ github.repository }}
body: ${{ github.event.pull_request.body }}
pr_number: ${{ github.event.pull_request.number }}
comment_mode: always # never | high_risk | always — post full analysis as a PR commentcomment_mode controls whether the full analysis is posted as a visible PR
comment (mirrors pr-agent's /review):
never— do not post (default when unset andcomment_on_high_riskis false)high_risk— post only when the risk tier ishigh_riskalways— post on every run; existing comments are updated in place (no spam)
Legacy:
comment_on_high_risk: trueis still supported and behaves likecomment_mode: high_risk.
Version Pins
@v2.1.4— Pinned to a specific release tag (for reproducibility)@main— Latest development version (not recommended for production)
No floating major tag tracks 2.x. The only floating major tag is
v1, and its auto-update is gated onv1.*releases (publish-pypi.yml), so it is frozen atv1.8.0— it does not followv1.9.x, and there is nov2tag. Pin a fullvX.Y.Ztag instead of relying on a floating major.
Docker Image (Alternative)
Use PR Genius as a Docker container via GitHub Container Registry:
# .github/workflows/pr-genius-docker.yml
name: PR Genius Check (Docker)
on:
pull_request:
types: [opened, synchronize]
permissions:
contents: read
pull-requests: write
jobs:
pr-genius:
runs-on: ubuntu-latest
steps:
- name: Run PR Genius
uses: docker://ghcr.io/zsxh1990/pr-genius:latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
args: coach "${{ github.event.pull_request.title }}" --repo ${{ github.repository }} --format jsonDocker Image Tags (emitted by publish-ghcr.yml from each vX.Y.Z git tag as {version} / {major}.{minor} / {major}):
ghcr.io/zsxh1990/pr-genius:latest— Latest releaseghcr.io/zsxh1990/pr-genius:2.1.4— Specific versionghcr.io/zsxh1990/pr-genius:2.1— Minor versionghcr.io/zsxh1990/pr-genius:2— Major version
Auto-update with Dependabot:
# .github/dependabot.yml
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"🤖 MCP Configuration
{
"mcpServers": {
"pr-genius": {
"command": "python",
"args": ["-m", "prgenius", "mcp", "serve"]
}
}
}Docker (stdio MCP server, built from the root Dockerfile): docker build -t pr-genius . && docker run --rm -i pr-genius — this image is a stdio server, not an HTTP service. (The ghcr.io/zsxh1990/pr-genius image is built from Dockerfile.github_action for the GitHub Action, not for MCP stdio.)
14 MCP Tools
Tool | Purpose | Required Args |
| Merge probability + optimization path + 3-tier risk |
|
| Go/no-go decision (pass/fail) |
|
| Maintainer policy check (9 rules) |
|
| Repo profile (17 fields) |
|
| Local open case-study records (not live GitHub PRs; live ones → | (none) |
| PR case study details |
|
| Anti-pattern/success-pattern search |
|
| OKF schema versions | (none) |
| Outbound PR status heartbeat |
|
| Profile update suggestions (dry-run) |
|
| Maintainer-side PR view (5 actions: |
|
| Contributor readiness decision (5 actions: |
|
| Prioritized review queue |
|
| Install/data/MCP self-test — run this when analyze returns nothing | (none) |
Tool Parameter Notes
title(required foranalyze_pr,coach_pr,triage_pr): The PR title, e.g."fix: timeout in connection pool"repo(required for most tools): Repository inowner/nameformat, e.g."encode/httpx"pr_description(optional): Additional PR body text for deeper analysisquery(required forsearch_patterns): Search keywords, e.g."connection timeout"diff_stat(optional foranalyze_pr,coach_pr):git diff --statoutput — populates theimpact/reviewfields (both arenullwithout it) and is the authoritative PR-size signalstar_count≥ 0,repo_merge_ratein[0.0, 1.0],author_associationinNONE/CONTRIBUTOR/COLLABORATOR/MEMBER/OWNER,mergeableinMERGEABLE/CONFLICTING/UNKNOWN— invalid values are rejected instead of silently producing meaningless output
🧩 DSH Plugin
PR Genius ships as a DSH (Cordis) plugin (v2.0.0+). The TypeScript layer is a thin shell — analysis is delegated to the existing Python MCP engine; the plugin adds five UI surfaces on top.
Install
dsh plugin add pr-geniusOr apply the one-line patch in cordis.patch.yml. Full guide: docs/dsh-integration.md.
Five surfaces
Surface | Slot | What it does |
Dashboard (sidebar) |
| PR Intelligence Dashboard — cross-repo status at a glance |
Advisor tab |
| Session-level advisor for the current conversation |
Advisor panel |
| Same advisor as a right-hand panel |
|
| Slash-command for inline PR checks |
Preferences |
| Config card for the tunables below |
Maintainer mode is the same five surfaces on a different projection (5-action decision: READY_FOR_REVIEW, WAIT_FOR_AUTHOR, CLOSE_DUPLICATE, CLOSE_STALE_OR_RISKY, HOLD_MAINTAINER_DECISION).
Configuration
All tunables are Schemastery-validated and settable from cordis.yml — no code changes needed. Invalid values fail at load time naming the field. See src/config.ts for the full schema (14 leaf fields: kbRoot, MCP transport/command/args/url/timeoutMs/protocolVersion, sidebar default view, maintainer enabled/actions/confidenceMin/staleDays, locale, risk filter).
Relationship to v1.x
The DSH plugin wraps the same Python analysis engine (prgenius/src/prgenius/mcp.py). v1.x CLI and MCP server continue to work unchanged. The plugin adds UI surfaces and config management; it does not fork the analysis logic.
Honesty note: The DSH plugin has been verified for TypeScript compilation, unit tests, and static contract conformance (
scripts/check_dsh_plugin_contract.py, 27/27 checks). It has been run in a live DSH runtime — that is how issues #100, #101 and #103 were found and filed. What is still unverified is the current code: the fixes shipped in 2.1.5 and later have not been re-verified in a host. Rendering and runtime behaviour of this release require that re-check. Seedocs/compatibility.mdfor the version matrix (every cell marked unrun) anddocs/maturity-self-assessment.mdfor the completeness scorecard.
🧑💻 For Contributors
maintainer_view answers "what should the maintainer do with this PR?"
contributor_view answers the other side: "should I submit this PR yet, and
what is blocking me?" It is the pre-submission gate — run it before opening
the PR, then again whenever you change something.
python3 -m prgenius coach "fix: timeout in connection pool" \
--repo encode/httpx --body "Fixes #4821"or over MCP as contributor_view (same engine, title + repo required).
The 5 outcomes and what to do about each
Decision | Meaning | Your next move |
| Nothing structural is blocking | Open the PR |
| Concrete, fixable defects found | Fix the listed checklist items, re-run, then submit |
| Breaking change, core, or security surface | Open an issue first; a large surprise PR gets closed |
| Not blocking, but it could be better | Optional — raise odds (tests, issue link, |
| Genuinely unclear from here | Ask the maintainer before investing more work |
What moves you from FIX_BEFORE_SUBMIT to READY_TO_SUBMIT
Signals the evaluator weighs most, in practice:
Link an issue.
Fixes #N/Closes #Nin the body — the single most common reason a first PR gets bounced.Keep it small. Size comes from
--diff-stat(git diff --statoutput). Withoutdiff-statthe impact/review fields arenull, so pass it.Tests that fail without your change. A test that passes either way is decoration.
Match the repo's conventions, not the global ones — read that repo's profile first (
python3 -m prgenius profile get owner/name). The rules differ per project; that is the point of the knowledge base.
The maintainer-side five actions are the mirror image — see the maintainer_view
row in the MCP tools table.
📊 Data Scale
Numbers below are measured from the repo at the current commit. Run
python3 -c "from prgenius.parser import iter_profiles, iter_case_studies; from prgenius.evaluator import load_anti_patterns, load_success_patterns; print(len(list(iter_profiles('.'))), len(list(iter_case_studies('.'))), len(load_anti_patterns('.')), len(load_success_patterns('.')))"to verify.
Dimension | Count |
Repo profiles | 67 |
Case studies | 53 |
Success patterns | 692 (436 .md + 256 .json) |
Anti-patterns | 61 (all .md) |
PR observations | 190 (structured records of failed PRs, |
Total patterns | 753 (61 anti + 692 success) |
Covered repos | 67 (uv, react, kubernetes, transformers, httpx, etc.) |
🤖 Robots / Agents
docs/index.md — file map
AGENT_GUIDELINES_SCHEMA.md — agent_guidelines schema
ROUNDS_SCHEMA.md — rounds schema
BLACKLIST.md — repos we don't track
📖 Contributing
See CONTRIBUTING.md. AI-assisted PRs welcome.
🤝 Community
中文文档
中文版 README:README.zh-CN.md
Citation
@misc{pr-genius-2026,
title = {PR Genius — Evidence-backed PR Contribution Advisor},
author = {zsxh1990},
year = {2026},
url = {https://github.com/zsxh1990/pr-genius}
}Available Tools
14 toolsanalyze_prARead-onlyIdempotent
Detailed PR analysis with signals and checklist. Use analyze_pr for deep analysis, coach_pr for quick pass/fail.
Returns: tier (low_risk/medium_risk/high_risk), signals (positive/negative/neutral), checklist (P0/P1/P2 items), and recommended_action.
Use this before submitting a PR to a large open-source repo to check if your contribution strategy is sound. Combines repo profile data, anti-pattern matching, and success pattern analysis.
Args: title: PR title (e.g. "feat: add new search endpoint") repo: Target repo in org/name format (e.g. "encode/httpx") body: PR body/description text description: Extended description (optional) author: PR author username author_association: Author's association with repo (NONE/CONTRIBUTOR/COLLABORATOR/MEMBER/OWNER) labels: PR labels (e.g. ["bug", "documentation"]) star_count: Repository star count (>= 0; 0 = unknown) repo_merge_rate: Repository's external PR merge rate 0.0-1.0 (0 = unknown) mergeable: Mergeable state (MERGEABLE/CONFLICTING/UNKNOWN) diff_stat: git diff --stat output — populates impact/review and is the authoritative PR-size signal (null when omitted)
Returns: dict with keys: tier, signals, checklist, recommended_action, repo, title, impact, review (impact/review null without diff_stat)
Example: analyze_pr("fix: timeout in connection pool", "encode/httpx", "Fixes #123") → {"tier": "medium_risk", "signals": {...}, "checklist": [...], "recommended_action": "..."}
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| repo | Yes | ||
| title | Yes | ||
| author | No | ||
| labels | No | ||
| diff_stat | No | ||
| mergeable | No | MERGEABLE | |
| star_count | No | ||
| description | No | ||
| repo_merge_rate | No | ||
| author_association | No | NONE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, and the description adds real behavior: it combines repo profile data, anti-pattern matching, and success pattern analysis, and discloses the exact response keys and the diff_stat dependency for impact/review. It stops short of noting limits such as cost, latency, or behavior on missing optional inputs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, alternative, and return shape before the Args list, which is well organized. The Args section partly restates the schema, but each entry adds format or default semantics that justify its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return keys and the diff_stat caveat, plus an example call and response. For an 11-parameter read-only analysis tool this is nearly complete, though it does not describe how optional defaults (e.g. mergeable='MERGEABLE') affect results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden and does it well: it defines formats and sentinel semantics for star_count (0 = unknown), repo_merge_rate (0.0-1.0, 0 = unknown), mergeable enum values, author_association enum values, labels as a string array, and flags diff_stat as the authoritative PR-size signal. This meaningfully exceeds the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (detailed PR analysis) and immediately differentiates from the sibling coach_pr by intent (deep analysis vs quick pass/fail). Also names what it produces: tier, signals, checklist, recommended_action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative (coach_pr) with the selecting condition, and gives a concrete when-to-use scenario: before submitting a PR to a large open-source repo. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coach_prARead-onlyIdempotent
Agent PR Dojo: quick pass/fail gate. Use coach_pr for go/no-go decision, analyze_pr for detailed analysis.
Use this as a final gate before opening a PR. Returns pass=true if safe to submit, pass=false if there are blocking issues to fix first.
Combines repo profile analysis, anti-pattern matching, and maintainer policy checks into a single go/no-go decision.
Args: title: PR title repo: Target repo (org/name) body: PR body/description description: Extended description author: PR author username author_association: Author's association (NONE/CONTRIBUTOR/etc.) labels: PR labels star_count: Repo star count (>= 0) repo_merge_rate: External PR merge rate (0.0-1.0) mergeable: Mergeable state (MERGEABLE/CONFLICTING/UNKNOWN) diff_stat: git diff --stat output (populates impact/review)
Returns: dict with pass (bool), tier, signals, checklist, recommended_action
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| repo | Yes | ||
| title | Yes | ||
| author | No | ||
| labels | No | ||
| diff_stat | No | ||
| mergeable | No | MERGEABLE | |
| star_count | No | ||
| description | No | ||
| repo_merge_rate | No | ||
| author_association | No | NONE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint, so the safety profile is covered. The description adds real value beyond that by disclosing what work happens internally (profile analysis + anti-pattern matching + policy checks) and the branch semantics of the return value (pass=true safe to submit, pass=false blocking issues). It does not mention latency, data sources, or failure modes, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the routing sentence and final output semantics before the Args list, which is justified at length given 0% schema coverage. Minor redundancy: 'quick pass/fail gate,' 'go/no-go decision,' and 'final gate' restate the same idea across three sentences, and the Returns line partly duplicates the pass=true/false sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description steps in to describe the returned dict (pass, tier, signals, checklist, recommended_action), and it covers all 11 inputs at a useful level. It is complete enough to invoke correctly, though it lacks guidance on required vs optional inputs and on what the 'tier'/'signals' values mean.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 11 parameters, so the description carries the full burden and largely meets it: it gives ranges and accepted values (repo_merge_rate 0.0-1.0, star_count >= 0, mergeable MERGEABLE/CONFLICTING/UNKNOWN, author_association NONE/CONTRIBUTOR/etc.) and explains the role of diff_stat. It falls short of 5 because the body vs description split is ambiguous ('PR body/description' vs 'Extended description') and it never indicates which params drive the decision.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('quick pass/fail gate' for a PR) and immediately distinguishes itself from the sibling analyze_pr by contrasting go/no-go with detailed analysis. It also enumerates the inputs it combines (repo profile analysis, anti-pattern matching, maintainer policy checks), so an agent understands exactly what this tool produces without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the moment to use it ('final gate before opening a PR') and the explicit alternative plus its selection condition ('analyze_pr for detailed analysis'). This is the clearest possible routing guidance in a one-line form.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
contributor_viewARead-onlyIdempotent
Contributor-facing action decision for a single PR (v1.6.0).
Output answers: 'Is my PR ready to submit? What should I fix?' Maps analyze_pr signals to 5 actions: READY_TO_SUBMIT, FIX_BEFORE_SUBMIT, NEEDS_DISCUSSION, IMPROVE_CHANCE, ASK_MAINTAINER.
Args: title: PR title repo: Target repo (org/name) body: PR body description: Extended description author: PR author username author_association: Author's association (NONE/CONTRIBUTOR/etc.) labels: PR labels star_count: Repo star count repo_merge_rate: External PR merge rate 0.0-1.0 diff_stat: Diff stat string
Returns: dict with keys: persona, repo, title, author, action, action_label, action_icon, reason, next_step, checklist, confidence, merge_probability, impact, review, author_info, context.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| repo | Yes | ||
| title | Yes | ||
| author | No | ||
| labels | No | ||
| diff_stat | No | ||
| star_count | No | ||
| description | No | ||
| repo_merge_rate | No | ||
| author_association | No | NONE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description adds useful behavioral context: the deterministic mapping from analyze_pr signals to a fixed set of 5 named action outcomes, plus the version. It does not disclose whether inputs need a live PR, latency, or failure modes, so it is informative but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and output questions are front-loaded, and the Args/Returns sections are scannable. The 15-key Returns list is somewhat long, but with no output schema it is justified rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with no output schema and no annotation-gap in the safety domain, the description supplies both the argument inventory and the return-key inventory, so an agent knows what it will get back. The main residual gap is the ambiguous body/description parameters and the absence of any live-input requirement note.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the parameter burden, and it does enumerate all 10 args. But most entries are near-tautological (title='PR title', author='PR author username'), and the body vs description distinction ('PR body' vs 'Extended description') is left ambiguous. It adds format hints only for repo (org/name) and author_association, so it partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('action decision for a single PR') and immediately enumerates the exact 5 actions produced. The 'contributor-facing' framing cleanly distinguishes it from the maintainer_view sibling, so an agent can pick between them without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The quoted questions ('Is my PR ready to submit? What should I fix?') imply when a contributor would call it, and the reference to mapping analyze_pr signals hints at its relationship to that sibling. However there is no explicit when-to-use-vs-alternative or exclusion guidance, leaving the choice between contributor_view, analyze_pr, coach_pr and triage_pr to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_case_studyARead-onlyIdempotent
Get a specific PR case study with full details and rounds.
Returns the complete case study including frontmatter, body text, and round-by-round interaction history. Useful for learning from past PR experiences.
Args: repo: Repository in org/name format pr_number: PR number (integer)
Returns: dict with frontmatter, body, path, or error if not found
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | ||
| pr_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds details about the return structure (frontmatter, body, path) and error handling, which are beyond the annotations and schema. It is sufficient for a simple retrieval tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with a one-sentence purpose, a brief context statement, and clearly separated Args/Returns sections. Every sentence adds value, and the structure is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 simple parameters and no output schema, the description covers the core functionality and return format. It mentions error handling ('or error if not found'). An example would be nice but is not essential given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no descriptions (0% coverage), so the description compensates by explaining 'repo: Repository in org/name format' and 'pr_number: PR number (integer)'. This adds meaningful guidance beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves a specific PR case study with full details and rounds, distinguishing it from sibling tools like list_open_prs (which lists PRs) and search_patterns (which searches patterns). The verb 'get' and resource 'case study' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates it is useful for learning from past PR experiences, providing context for when to use. While it lacks explicit when-not-to-use or alternative tools, the purpose is clear enough to differentiate from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_repo_profileARead-onlyIdempotent
Get repository profile with maintainer guidelines, AI policy, and merge rate.
Returns 17 agent_guidelines fields including ai_policy, maintainer_vibe, external_merge_rate, close_keywords, and more. Use this to understand a repo's contribution culture before submitting a PR.
Args: repo: Repository in org/name format (e.g. "encode/httpx")
Returns: dict with repo metadata and agent_guidelines, or error if not found
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds useful behavioral context by stating that it returns repository metadata plus agent_guidelines, and that an error is returned if the repo is not found, which goes beyond what the annotations or schema provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear one-sentence summary, followed by useful return details and a concise Args/Returns structure. Every sentence contributes meaningful information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, no output schema, and comprehensive annotations, the description covers everything needed: input format, what fields are returned, a usage scenario, and error behavior. There are no critical gaps for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only the parameter name and type with no description, but the description fully compensates by specifying the required format: 'Repository in org/name format (e.g. "encode/httpx")'. This is exactly the semantic information an agent needs to invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: it gets a repository profile with maintainer guidelines, AI policy, and merge rate. It names concrete fields returned, making the tool's purpose unmistakable, though it does not explicitly differentiate it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit context for when to use the tool: 'Use this to understand a repo's contribution culture before submitting a PR.' It does not mention exclusions or when to prefer a sibling tool, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_open_prsARead-onlyIdempotent
List open PR case-study records in the local knowledge base (issue #74).
NOTE: these are local case-study folders with final_status=open —
NOT live GitHub PRs. For live GitHub PR health use status_prs.
Args: repo: filter by target repo (org/name, e.g. "encode/httpx"); "" = all author: filter by PR author username; "" = all
Returns: list of {repo, pr_number, pr_url, author, folder} for each matching open case study
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | ||
| author | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the safety profile is covered. The description adds genuine context beyond that: it clarifies the records are local case-study folders with final_status=open rather than live data, and specifies the return fields. It does not cover pagination or ordering, so it falls just short of the top.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then a NOTE for the critical disambiguation, followed by scannable Args/Returns blocks. Every line earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description correctly spells out the returned fields ({repo, pr_number, pr_url, author, folder}). Combined with annotations covering safety and full parameter documentation, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden — and it does, documenting both params: `repo` filters by target repo with format example 'org/name' and '`""` = all', and `author` filters by PR author username with the same empty-string default semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List open PR case-study records in the local knowledge base') and immediately disambiguates the misleading name by clarifying these are NOT live GitHub PRs. An agent can tell it apart from status_prs without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative for the other case: 'For live GitHub PR health use `status_prs`.' It gives a clear when-to-use boundary and an exclusion, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
maintainer_viewARead-onlyIdempotent
Maintainer-facing action decision for a single PR (v1.5.1).
Output answers: 'What should I do with this PR right now?' Maps analyze_pr signals to 5 actions: READY_FOR_REVIEW, WAIT_FOR_AUTHOR, CLOSE_DUPLICATE, CLOSE_STALE_OR_RISKY, HOLD_MAINTAINER_DECISION.
Phase 5.1: Adds impact (files/lines/breaking/security), review (complexity/estimated_minutes), and author_info fields.
Args: title: PR title repo: Target repo (org/name) body: PR body description: Extended description author: PR author username author_association: Author's association (NONE/CONTRIBUTOR/etc.) labels: PR labels star_count: Repo star count repo_merge_rate: External PR merge rate 0.0-1.0 diff_stat: Diff stat string (e.g. "3 files changed, 10 insertions(+), 5 deletions(-)")
Returns: dict with keys: persona, repo, title, author, action, reason, blocking_signals, next_step, review_ready, impact, review, author_info, context.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| repo | Yes | ||
| title | Yes | ||
| author | No | ||
| labels | No | ||
| diff_stat | No | ||
| star_count | No | ||
| description | No | ||
| repo_merge_rate | No | ||
| author_association | No | NONE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description usefully discloses the 5 action outcomes and the decision semantics, but adds nothing about latency, whether repo_merge_rate/labels must be pre-fetched, or failure modes for this 10-param tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and action list, which is good, but version/phase trivia ('v1.5.1', 'Phase 5.1') and the verbose Args/Returns blocks add noise an agent does not need. Every sentence about parameters does earn some place given 0% schema coverage, so it is not wasteful overall but is not tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the return dict keys (action, reason, blocking_signals, next_step, review_ready, impact, review, author_info, context), and it covers all input params. Sufficient for correct invocation, though it never explains what the required vs optional split means or how missing optional inputs affect the action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does document all 10 args, including non-obvious detail: repo as org/name, author_association values, repo_merge_rate as 0.0-1.0, and a diff_stat format example. It omits semantics for description vs body overlap and the effect of defaults, keeping it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action-decision role for a single PR and frames the output question ('What should I do with this PR right now?'), which is distinctive among siblings. It names analyze_pr as the upstream signal source, but does not distinguish itself from triage_pr, coach_pr, or contributor_view, which sound adjacent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Maintainer-facing action decision' framing implies the maintainer-side use case and mentions the analyze_pr dependency, giving usable context. However, there is no explicit when-to-use/when-not or routing to triage_pr/coach_pr/review_queue for the overlapping workflows, so the agent must infer selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prgenius_doctorARead-onlyIdempotent
Self-test the pr-genius install (issue #70).
Run this before trusting analyze_pr output. Reports Python/package versions, knowledge-base readability and coverage (anti-patterns, success-patterns, profiles, case studies, policies), gh CLI availability, MCP tool registration, a sample analyze against a known profile, and data-coverage warnings.
Returns: dict with keys: ok, prgenius_version, python_version, platform, knowledge_base, gh, mcp, sample, warnings
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already covering the safety profile (readOnly, idempotent, non-destructive), the description goes further and enumerates the concrete checks performed (versions, KB readability/coverage, gh CLI, MCP registration, sample analyze, warnings). Since there is no output schema, spelling out the return dict keys is genuinely additive behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and precondition are front-loaded in two tight sentences. The 'Returns' block is somewhat long, but each key listed is load-bearing given no output schema exists, so the length is largely earned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param diagnostic with no output schema, the description supplies both the invocation precondition and the shape of the result (ok, versions, kb, gh, mcp, sample, warnings). Nothing an agent needs in order to call or interpret it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. The description correctly implies a no-argument invocation and has no parameter semantics to get wrong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Self-test the pr-genius install') and instantly separates itself from the analysis siblings by framing itself as a pre-flight health check. Nothing about what it does is left ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes the usage condition: 'Run this before trusting analyze_pr output.' That names the sibling whose reliability it gates, which is exactly the routing signal an agent needs to pick this tool over analyze_pr or status_prs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profile_writeback_suggestionsARead-onlyIdempotent
Get profile writeback suggestions based on PR status analysis.
Analyzes PR health data and suggests profile updates (e.g., stale_days_threshold, response_time). Returns suggestions with evidence, source, and confidence score.
Args: author: GitHub username mode: 'suggest' (all suggestions) or 'auto' (confidence >= 0.8 only)
Returns: list of {field, value, repo, evidence, source, confidence, private}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | suggest | |
| author | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds value beyond that by disclosing the output structure (field, value, repo, evidence, source, confidence, private) and the auto-mode confidence threshold, which tells the agent what the results mean.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose before the Args/Returns blocks, and every sentence carries information. The Args/Returns formatting slightly duplicates what a schema would normally hold, but given 0% schema coverage it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the Returns section is essential and present. Parameter behavior and thresholds are documented. Only the default mode value and any permission/pagination considerations are missing, which is minor for a two-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning — and it does: author is a GitHub username, and mode's two values are defined with the 0.8 confidence cutoff. This compensates well for the empty schema, though it doesn't state the default value ('suggest') that the schema declares.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get profile writeback suggestions') and names the basis ('PR status analysis'), with an example of the fields suggested. It does not explicitly differentiate itself from siblings like analyze_pr or get_repo_profile, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mode parameter is explained with a concrete selection rule ('suggest' = all, 'auto' = confidence >= 0.8), which implies usage. However, there is no guidance on when to call this tool versus analyze_pr, get_repo_profile, or other profile/PR siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_queueARead-onlyIdempotent
Build maintainer review queue digest from a list of PRs (v1.5.0).
Groups PRs by maintainer action (5 classes) and produces a digest suitable for Actions summary or git-trackable markdown file.
Args: prs: List of {repo, number, title, body, author, labels, star_count, repo_merge_rate} prs_file: Alternative — path to JSON file containing the PR list
Returns: dict with keys: generated_at, total, summary (action -> count), results (per-PR maintainer_view), digest_markdown
| Name | Required | Description | Default |
|---|---|---|---|
| prs | No | ||
| prs_file | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint, so the safety profile is covered. The description adds genuine context beyond that: the grouping behavior (5 action classes), the two output forms, and a full enumeration of the returned dict keys, which matters since there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded and cleanly sectioned into Args/Returns, with the core purpose stated first. The version tag '(v1.5.0)' is minor noise, but overall it is tight and earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderately complex digest-builder with no output schema, the description supplies the return keys, the input field list, and the two output destinations. Missing only the specific 5 action classes and the precedence between prs and prs_file, which are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load and it largely does: it documents prs as a list of {repo, number, title, body, author, labels, star_count, repo_merge_rate} and prs_file as an alternative path to a JSON PR list. It does not specify the JSON file's expected shape or how the two inputs interact if both are supplied, but it compensates well for the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Build maintainer review queue digest from a list of PRs') and clarifies the mechanism (groups by maintainer action into 5 classes, emits markdown). It is clearly distinguishable from the per-PR sibling maintainer_view, but it never explicitly names or contrasts any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied through the stated output targets ('suitable for Actions summary or git-trackable markdown file'). There is no explicit when-to-use vs. maintainer_view/analyze_pr/triage_pr guidance, no prerequisites, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schema_infoARead-onlyIdempotent
返回支持的 schema 版本和枚举值。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the return scope but no further behavioral context such as caching, response shape, or rate limits, so it neither contradicts nor significantly extends the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It directly states the tool's output in a compact way that is easy for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only metadata tool, the description covers the essential information needed to select and call it. It could be slightly more detailed about the format or structure of the returned schema versions and enum values, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty input schema, so there are no parameter semantics to explain. The description accurately focuses on what the tool returns, which is sufficient for invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns supported schema versions and enum values. This is clear and distinct from the sibling tools, though it does not explicitly name a sibling to differentiate itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus the sibling tools, nor any mention of prerequisites or context. The intended use is only implied by the purpose statement, so an agent gets no explicit routing support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_patternsARead-onlyIdempotent
Search anti-patterns and success-patterns by keyword.
Use this to find relevant patterns before submitting a PR. Anti-patterns show what NOT to do, success-patterns show what works.
Args: query: Search keyword (e.g. "duplicate PR", "missing tests", "out of scope", "breaking change") pattern_type: Filter type — "all" (default), "anti-pattern", or "success-pattern" limit: Max results to return (default 10)
Returns: list of dicts with keys: key, title, symptom, fix_action, source_pr, type, file
Example: search_patterns("duplicate PR") → finds anti-patterns about duplicate submissions search_patterns("timeout", "anti-pattern") → finds timeout-related failure patterns
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| pattern_type | No | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is clear. The description adds behavioral context (search, filter, return format) but doesn't introduce new traits beyond what annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for purpose, usage, args, returns, and examples. It is efficient, though slightly verbose with the example lines; still, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return format (list of dicts with specific keys) and provides examples. The tool's complexity is low, and the description is adequate for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description fully explains each parameter with examples: query (with keyword examples), pattern_type (options: all, anti-pattern, success-pattern), limit (default 10). This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search anti-patterns and success-patterns by keyword,' providing a specific verb and resource. It distinguishes itself from sibling tools like list_open_prs and get_case_study by focusing on patterns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this to find relevant patterns before submitting a PR,' giving clear context of when to use. It also clarifies the two types of patterns but doesn't explicitly state when not to use, though the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
status_prsARead-onlyIdempotent
Check health of in-flight PRs (outbound PR heartbeat).
Classifies open PRs into 9 statuses: NEEDS_REBASE, CI_FAILING, STALE_REVIEW, CHANGES_REQUESTED, STALE_NO_REVIEW, BLOCKED, CLEAN, UNKNOWN, WAITING. Suggests actions for each.
Args: author: GitHub username to check PRs for repo: Repository to check (org/name) stale_days: Days without update to consider stale (default: profile or 14) save_snapshot: If True, persist the result to data/status-snapshots/ for transition detection across runs. Default False because MCP callers (Cursor, Claude Code) may poll frequently and would otherwise flood the snapshot directory.
Returns: dict with prs, ignored, summary, actions, transitions
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | ||
| author | No | ||
| stale_days | No | ||
| save_snapshot | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: the save_snapshot side effect (persisting to data/status-snapshots/) and the explicit rationale for defaulting it False (frequent MCP polling would flood the directory). It does not explain the transition-detection semantics of the snapshot beyond a one-line mention.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the status taxonomy, then organized into Args and Returns sections. The 9-status enumeration is long but earns its place by defining the output vocabulary; the 'Returns' line is useful given there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the return keys (prs, ignored, summary, actions, transitions) and the status categories. Params are covered and the snapshot side effect is disclosed, leaving only minor gaps such as parameter optionality and the meaning of 'transitions'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden, and it does: all four params are explained with meaning and format hints ('GitHub username', 'org/name', stale_days defaulting to profile or 14, and the save_snapshot tradeoff). It omits that every parameter is optional with a null default, which the schema technically encodes but doesn't document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Check health of in-flight PRs') and quantifies the output (9 named statuses plus suggested actions), so an agent knows exactly what it gets back. It does not, however, differentiate itself from the many related siblings (list_open_prs, triage_pr, review_queue), leaving overlap ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to use this tool versus alternatives, despite a crowded sibling set that includes list_open_prs, triage_pr, and review_queue. The 'outbound PR heartbeat' phrase hints at context but offers no when/when-not condition or prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
triage_prARead-onlyIdempotent
Policy-aware PR screening.
Reads docs/policies/-.md and checks the PR against hard/soft rules.
返回: verdict: pass / needs_preflight / warn / reject policy_loaded: bool violations: list of {rule, severity, evidence} generic_checks: list (only when needs_preflight) recommended_action: str (always)
Example: triage_pr("docs: typo", "Ikalus1988/MisakaNet", "fix typo", "docs/faq.md | 3 ++-") → {verdict: "pass", policy_loaded: true, ...}
triage_pr("docs: add installation", "pallets/flask", ...)
→ {verdict: "needs_preflight", generic_checks: [...6 items...], ...}
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| repo | Yes | ||
| title | Yes | ||
| labels | No | ||
| diff_stat | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. Beyond that, the description adds genuine behavioral context: it reads a per-org/repo policy file, applies hard/soft rules, and enumerates the return fields including verdict levels and recommended_action. Undisclosed are edge cases like what happens when the policy file is missing (only hinted at by policy_loaded) — hence not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose, then a compact return-value block, then two short examples — efficient and scannable with minimal waste. The examples repeat fields the return block already listed, but structurally the layout is sound and appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully documents the return shape (verdict, policy_loaded, violations, generic_checks, recommended_action), which is exactly the burden it should carry. Combined with annotations covering the safety profile, it is largely complete; only auth requirements and the behavior when no policy file exists remain unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema carries no parameter documentation at all. The example call implicitly maps four of the five parameters (title, repo, body, diff_stat) via positional values, but 'labels' is never mentioned and no parameter's format or constraints are described. Partial compensation for a real coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Policy-aware PR screening' — and elaborates that it reads docs/policies/<org>-<repo>.md and checks the PR against hard/soft rules, which is concrete enough to distinguish it from a generic analyzer. It does not, however, contrast itself against close siblings like analyze_pr or coach_pr, so the differentiation is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is conveyed only through two worked examples rather than explicit when-to-use/when-not guidance. Given siblings such as analyze_pr, coach_pr, and review_queue that plausibly overlap in PR-evaluation territory, the description leaves the agent to infer when triage_pr is the right choice. This is implied-usage territory, not explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v2.1.4- Added
analyze_pr - Added
coach_pr - Added
contributor_view - Added
get_repo_profile - Changed
list_open_prs2 fields changed- added
Input schema / properties / authorAdded value: +{ + "default": "", + "title": "Author", + "type": "string" +} - added
Input schema / properties / repoAdded value: +{ + "default": "", + "title": "Repo", + "type": "string" +}
- Added
maintainer_view - Added
prgenius_doctor - Added
profile_writeback_suggestions - Added
review_queue - Added
schema_info - Added
status_prs - Added
triage_pr
2 tool updates
v1.3.0- Removed
get_repo_profile - Removed
schema_info
8 tool updates
v1.3.1- Removed
analyze_pr - Removed
coach_pr - Added
get_case_study - Added
get_repo_profile - Added
list_open_prs - Added
schema_info - Added
search_patterns - Removed
triage_pr
3 tool updates
v0.1.0- First observed
analyze_pr - First observed
coach_pr - First observed
triage_pr
TDQS
Scored across 14 tools
Five tools (analyze_pr, coach_pr, triage_pr, maintainer_view, contributor_view) all analyze a single PR with overlapping decision outputs; descriptions clarify perspective and depth, but an agent could still confuse coach_pr with contributor_view or triage_pr. The remaining tools are distinct, so overlap is notable but manageable.
All tool names use lowercase snake_case with descriptive domain terms, but the pattern mixes verb_noun (analyze_pr, get_repo_profile) and noun_noun (maintainer_view, review_queue). The mix is still predictable and readable, with only minor deviations.
14 tools fit the PR assistant domain well and stay within the 3-15 sweet spot. The only concern is that several analysis tools overlap, but the count itself is appropriate.
The surface covers pre-submission analysis, policy checks, repo profiles, pattern search, case studies, in-flight status, maintainer/contributor views, review queues, and self-diagnostics. Minor gap: no tool to fetch a live PR's full content by number, but core decision-support workflows are covered.
Maintenance
Related MCP Connectors
A Model Context Protocol (MCP) application for automated GitHub PR analysis and issue management.…
Repo intel for AI coding agents: overview, PRs, contributors, hot files, CI, deps. Remote MCP.
AI-native git hosting — repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA MCP server that provides tools for analyzing git changes and suggesting appropriate PR templates, helping automate PR-related workflows.MIT
- AlicenseNot gradedqualityDmaintenanceA production-ready MCP server that provides AI assistants with comprehensive GitHub developer tooling including PR analysis, code review, changelog generation, dependency auditing, commit summarization, and refactoring suggestions.8 npmISC
- AlicenseNot gradedqualityFmaintenanceComprehensive MCP server for analyzing GitHub pull requests, detecting security vulnerabilities, assessing code quality, and providing risk ratings across multiple languages.3 npmMIT
- AlicenseAqualityDmaintenanceMCP server to automate Pull Request creation with AI. Analyzes Git branches, generates descriptions, titles, suggests reviewers, and performs code reviews.84MIT