Skip to main content
Glama

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?"

CI PyPI Python License Glama score GitHub Marketplace DSH Plugin


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

gh CLI

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

breaking_change_no_compat anti-pattern

#47434

huggingface/transformers

"We'll handle internally" — closed

maintainer_internal_handling anti-pattern

#10393

awesome-mcp-servers

Missing Glama badge — auto-flagged

awesome-mcp-servers-glama-badge-required anti-pattern

#282

punkpeye/fastmcp

+271 lines, first PR — closed without review

punkpeye-fastmcp-282-too-large anti-pattern

—

contribai

Issue claim without due diligence — auto-closed

contribai-issue-claim-no-due-diligence anti-pattern

#2902

soxoj/maigret

CI failure (tag dev not recognized) — fixed, merged

maigret-tag-validation pattern

—

Ikalus1988/MisakaNet

Claimed issue without due diligence — auto-closed

contribai-issue-claim-no-due-diligence anti-pattern

#928

Ikalus1988/MisakaNet

Voice hooks PR — scope creep, closed

ikalus1998-misakanet-928 lesson

#936

Ikalus1988/MisakaNet

Global disable switch — incomplete impl

ikalus1998-misakanet-936 lesson

#938

Ikalus1988/MisakaNet

Anti-patterns reference doc — premature PR

ikalus1998-misakanet-938 lesson

#965

Ikalus1988/MisakaNet

README numbers sync — stale data

ikalus1998-misakanet-965 lesson

#248

punkpeye/awesome-mcp-devtools

Listing PR — still pending, no maintainer response

punkpeye-awesome-mcp-devtools-248-pending case study

🚀 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 zsxh1990

First run of doctor matters. It tells you whether the knowledge bundle was found and which optional pieces are missing. overall: NOT OK after a bare pip install is 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

analyze

PR analysis + improvement suggestions

title, --repo, --body, --diff-stat

eval

Older three-tier assessment (kept for compatibility)

title, --repo

coach

Agent PR dojo — exit 0 = pass, 1 = fail

title, --repo, --body

triage

Policy-aware preflight checks

title, --repo, --diff-stat

doctor

Install / knowledge-base / gh / MCP self-test

--format json

suggest

Alias of analyze

same as analyze

harvest

Rejected PR → anti-pattern / lesson draft

owner/repo [number]

profile get

Show a repo profile

owner/repo

profile writeback

Profile update suggestions (dry-run)

--author

case list

List case studies

--repo

schema info

Supported OKF schema versions

—

status

Health of in-flight outbound PRs

--author, --format json, --save-snapshot

update-issue

Refresh a pinned GitHub issue with heartbeat status

--author, --issue

auto-ping

Suggest pings for stale PRs (dry-run; --confirm to act)

--author, --confirm

auto-rebase

Suggest rebases for PRs that need one (dry-run; --confirm)

--author, --confirm

dump

NDJSON dump of every case

--out

mcp serve

Run the MCP server on stdio

—

maintainer

Maintainer action decision for one PR (5 actions)

title, --repo

contributor

Contributor decision — submit yet? (5 actions)

title, --repo, --diff-stat

review-queue

Build a prioritised review-queue digest

--prs-file

issue

Score/evaluate a single issue

--repo, --number, --format

issue-batch

Score many issues at once

--repo, --state, --label, --limit, --format

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 comment

comment_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 and comment_on_high_risk is false)

  • high_risk — post only when the risk tier is high_risk

  • always — post on every run; existing comments are updated in place (no spam)

Legacy: comment_on_high_risk: true is still supported and behaves like comment_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 on v1.* releases (publish-pypi.yml), so it is frozen at v1.8.0 — it does not follow v1.9.x, and there is no v2 tag. Pin a full vX.Y.Z tag 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 json

Docker 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 release

  • ghcr.io/zsxh1990/pr-genius:2.1.4 — Specific version

  • ghcr.io/zsxh1990/pr-genius:2.1 — Minor version

  • ghcr.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

analyze_pr

Merge probability + optimization path + 3-tier risk

title, repo

coach_pr

Go/no-go decision (pass/fail)

title, repo

triage_pr

Maintainer policy check (9 rules)

title, repo

get_repo_profile

Repo profile (17 fields)

repo

list_open_prs

Local open case-study records (not live GitHub PRs; live ones → status_prs); optional repo/author filters

(none)

get_case_study

PR case study details

repo, pr_number

search_patterns

Anti-pattern/success-pattern search

query

schema_info

OKF schema versions

(none)

status_prs

Outbound PR status heartbeat

author or repo

profile_writeback_suggestions

Profile update suggestions (dry-run)

author

maintainer_view

Maintainer-side PR view (5 actions: READY_FOR_REVIEW, WAIT_FOR_AUTHOR, CLOSE_DUPLICATE, CLOSE_STALE_OR_RISKY, HOLD_MAINTAINER_DECISION)

title, repo

contributor_view

Contributor readiness decision (5 actions: READY_TO_SUBMIT, FIX_BEFORE_SUBMIT, NEEDS_DISCUSSION, IMPROVE_CHANCE, ASK_MAINTAINER)

title, repo

review_queue

Prioritized review queue

prs or prs_file

prgenius_doctor

Install/data/MCP self-test — run this when analyze returns nothing

(none)

Tool Parameter Notes

  • title (required for analyze_pr, coach_pr, triage_pr): The PR title, e.g. "fix: timeout in connection pool"

  • repo (required for most tools): Repository in owner/name format, e.g. "encode/httpx"

  • pr_description (optional): Additional PR body text for deeper analysis

  • query (required for search_patterns): Search keywords, e.g. "connection timeout"

  • diff_stat (optional for analyze_pr, coach_pr): git diff --stat output — populates the impact/review fields (both are null without it) and is the authoritative PR-size signal

  • star_count ≥ 0, repo_merge_rate in [0.0, 1.0], author_association in NONE/CONTRIBUTOR/COLLABORATOR/MEMBER/OWNER, mergeable in MERGEABLE/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-genius

Or apply the one-line patch in cordis.patch.yml. Full guide: docs/dsh-integration.md.

Five surfaces

Surface

Slot

What it does

Dashboard (sidebar)

sidebar.footer.action

PR Intelligence Dashboard — cross-repo status at a glance

Advisor tab

conversation.view

Session-level advisor for the current conversation

Advisor panel

details (pinned SDK) / sidebar.right.pane.tab (upstream) — probed at runtime

Same advisor as a right-hand panel

/prgenius

ctx.command (Cordis command API, not a slot)

Slash-command for inline PR checks

Preferences

settings.section

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. See docs/compatibility.md for the version matrix (every cell marked unrun) and docs/maturity-self-assessment.md for 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

READY_TO_SUBMIT

Nothing structural is blocking

Open the PR

FIX_BEFORE_SUBMIT

Concrete, fixable defects found

Fix the listed checklist items, re-run, then submit

NEEDS_DISCUSSION

Breaking change, core, or security surface

Open an issue first; a large surprise PR gets closed

IMPROVE_CHANCE

Not blocking, but it could be better

Optional — raise odds (tests, issue link, diff-stat)

ASK_MAINTAINER

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:

  1. Link an issue. Fixes #N / Closes #N in the body — the single most common reason a first PR gets bounced.

  2. Keep it small. Size comes from --diff-stat (git diff --stat output). Without diff-stat the impact/review fields are null, so pass it.

  3. Tests that fail without your change. A test that passes either way is decoration.

  4. 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, pr-observations/)

Total patterns

753 (61 anti + 692 success)

Covered repos

67 (uv, react, kubernetes, transformers, httpx, etc.)

🤖 Robots / Agents

  1. docs/index.md — file map

  2. AGENT_GUIDELINES_SCHEMA.md — agent_guidelines schema

  3. ROUNDS_SCHEMA.md — rounds schema

  4. 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 tools
analyze_prA
Read-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": "..."}

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
repoYes
titleYes
authorNo
labelsNo
diff_statNo
mergeableNoMERGEABLE
star_countNo
descriptionNo
repo_merge_rateNo
author_associationNoNONE

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_prA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
repoYes
titleYes
authorNo
labelsNo
diff_statNo
mergeableNoMERGEABLE
star_countNo
descriptionNo
repo_merge_rateNo
author_associationNoNONE

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_viewA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
repoYes
titleYes
authorNo
labelsNo
diff_statNo
star_countNo
descriptionNo
repo_merge_rateNo
author_associationNoNONE

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_studyA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes
pr_numberYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_profileA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_prsA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
repoNo
authorNo

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_viewA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
repoYes
titleYes
authorNo
labelsNo
diff_statNo
star_countNo
descriptionNo
repo_merge_rateNo
author_associationNoNONE

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_doctorA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_suggestionsA
Read-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}

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNosuggest
authorYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_queueA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
prsNo
prs_fileNo

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_infoA
Read-onlyIdempotent

返回支持的 schema 版本和枚举值。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_patternsA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
pattern_typeNoall

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_prsA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
repoNo
authorNo
stale_daysNo
save_snapshotNo

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_prA
Read-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...], ...}
ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
repoYes
titleYes
labelsNo
diff_statNo

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 12 tool updatesv2.1.4
    • Addedanalyze_pr
    • Addedcoach_pr
    • Addedcontributor_view
    • Addedget_repo_profile
    • Changedlist_open_prs2 fields changed
      • addedInput schema / properties / author
        Added value: +{
        +  "default": "",
        +  "title": "Author",
        +  "type": "string"
        +}
      • addedInput schema / properties / repo
        Added value: +{
        +  "default": "",
        +  "title": "Repo",
        +  "type": "string"
        +}
    • Addedmaintainer_view
    • Addedprgenius_doctor
    • Addedprofile_writeback_suggestions
    • Addedreview_queue
    • Addedschema_info
    • Addedstatus_prs
    • Addedtriage_pr
  2. 2 tool updatesv1.3.0
    • Removedget_repo_profile
    • Removedschema_info
  3. 8 tool updatesv1.3.1
    • Removedanalyze_pr
    • Removedcoach_pr
    • Addedget_case_study
    • Addedget_repo_profile
    • Addedlist_open_prs
    • Addedschema_info
    • Addedsearch_patterns
    • Removedtriage_pr
  4. 3 tool updatesv0.1.0
    • First observedanalyze_pr
    • First observedcoach_pr
    • First observedtriage_pr

TDQS

A3.9/5.0

Scored across 14 tools

Disambiguation3/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers