>- Review a GitHub pull request in the googleapis/mcp-toolbox repo against the logic errors and unhandled edge cases, breaking changes, test coverage, docs updates, security (input handling), and new dependencies. Use whenever a maintainer asks you to review, look over, "take a look at", or check whether something is ready to merge in mcp-toolbox, e.g. "review #3703", "can you look at this PR", "is this good to merge", or when they paste an mcp-toolbox PR link. approves, requests changes, comments, labels, or merges on its own.
npx skills add https://github.com/googleapis/mcp-toolbox --skill review-prs
A review here is a proposal the maintainer edits and posts, not a rubber stamp. The value is
a fast, grounded read of the diff against the team's conventions.
Given a PR number or link, deliver a review the maintainer can post in seconds: a suggested
verdict (approve / request changes / comment), the findings that back it grouped by severity
so the important things aren't buried, and a paste-ready summary comment.
gh authenticated for googleapis/mcp-toolbox, plus the PR number(s). A GitHub MCPserver substitutes for gh if it isn't available: the gh commands below map to its
read/list tools.
Read these live, not from memory. All three are symlinks to the repo-root
files, so they track main; cite them by their root names.
SLO/release context, release candidate labeling.
Commits, with the type table), keep-PRs-small, link-an-issue. Cite for title, description,
and process findings.
patterns for adding a source/tool/integration test, CI-enforced docs structure, local
test/lint commands. Cite for code, test, and docs findings. Prefer it over GEMINI.md
(CLAUDE.md/AGENTS.md symlink to it), which only summarizes.
gh pr view <n> --repo googleapis/mcp-toolbox --json number,title,body,author,labels,files,additions,deletions,commits,baseRefName,headRefName,state,isDraft,reviewDecision
gh pr diff <n> --repo googleapis/mcp-toolbox
gh pr checks <n> --repo googleapis/mcp-toolbox
Three shapes end the review early or change its bar:
renovate, release-please): the only question is whether checks aregreen. If so, propose merge and stop.
isDraft): review lightly and say so; the author isn't asking for a final pass.contributor): acceptance is a maintainer policy call, not a code question. Say that plainly
instead of manufacturing code findings, and still check title convention and CI. Mark any URL
you haven't fetched [UNVERIFIED].
Skim for the shape, then dive into hunks. Three failure modes:
guide", added an npm preinstall hook that hijacked git via GITHUB_PATH to exfiltrate an
RSA-encrypted GITHUB_TOKEN. Read every file in any PR touching .hugo/, package.json
lifecycle scripts, .github/workflows/, or .ci/. A file the title and description don't
account for is itself blocking.
a fix whose mirror bug still lives elsewhere, a behavior change with no test update, an error
swallowed silently.
correctness-relevant, and grep call sites when a signature, config field, or parameter changes.
A finding that needs a look outside the diff is the one no other reviewer will make.
Keep this separate from Step 6: a PR can follow every convention and still implement the wrong
thing. Read the linked issue (gh issue view <n> --repo googleapis/mcp-toolbox --comments), then
ask three questions:
issue is worse than none, since the remainder becomes invisible.
CONTRIBUTING.md, keep PRs small).file:line.
With no linked issue the PR description is the spec: same three questions, and note that the
intent is self-declared.
Skip a dimension when it doesn't apply: say so, don't invent a finding.
type(scope) perCONTRIBUTING.md, plus !/BREAKING CHANGE for breaking
changes. Body follows .github/PULL_REQUEST_TEMPLATE.md: what, why, completed checklist,
Fixes #<n>. Note a missing issue link; don't block on it alone.
file:line and name the failure case, never"looks risky".
conditions, concurrency, behavior contradicting stated intent.
that don't serialize (MySQL []byte for decimals, nulls as nil/None). Require explicit
handling that maps to the tool's JSON schema; reject implicit casts and missing type switches.
AgentError forinput/execution errors the agent can fix itself (HTTP 200, isError: true) versus
ClientServerError for infrastructure failures it can't.
exported symbols, altered defaults. Without ! in the title and a justification in the body,
blocking.
refactor: PR must not change behavior. A bundled fix or default changegets split into its own fix:/feat: PR so it's reviewable and revertable.
internal/sources/<db>/ for a database wire-compatiblewith an existing source. Same for a tool duplicating an existing tool under a new name.
tools.BaseTool[Config], new sources followthe registration pattern; reject re-declared interface methods (GetName, Manifest).
DEVELOPER.md lists what BaseTool provides.
description: is an LLM prompt, not developerdocumentation: could an agent pick this tool and fill its parameters from that text alone, at a
token cost worth paying? Flag ones that restate the field name, omit units/format/allowed
values, or run long without adding information.
source/tool follows the unit + integration pattern and is wired into
.ci/integration.cloudbuild.yaml.
tests/<db>/<db>_integration_test.go, never in the shared tests/common.go.
t.Cleanup teardown, so resources are freed even when the test fails.time.Sleep.contributor's PR can't trigger, so green CI doesn't mean they ran. Note that the next step is
a maintainer running them via the tests: run label or a /gcbrun comment.
under docs/en/. New sources/tools have CI-enforced page structure per DEVELOPER.md, enforced by
.ci/lint-docs-*.sh. A violation breaks the build, so it's blocking.
unsanitized interpolation, secrets logged or committed. Concrete vectors with file:line, not
generic warnings.
go.mod entries so the maintainer can vet necessity,maintenance, and license.
Duplication across MCP protocol versions is deliberate so versions can diverge independently
(#3167, #3211); don't propose factoring it together. A genuine bug in that code is still a
finding.
Name the failing check from gh pr checks rather than reasoning it out by hand; failing
lint/tests are objective blockers. Never claim the linter passes on your own read.
One recurring non-obvious failure: the CLA check fails on commits co-authored by an AI agent even when the human author has signed. Suggest squashing to a single human-authored commit rather than pointing at the CLA docs.
Don't restate gemini-code-assist's points as your own. It's the highest-volume reviewer in the
repo and could be wrong. Verify anything you carry forward against the diff; drop
the rest.
!, missing tests on new logic, CI red,docs that break the build) → request changes.
only → approve with comments.
When nothing is blocking, say so in those words. "No blockers, a couple of nits" tells the
maintainer it's mergeable as-is.
Use the output format below. Never post it yourself.
gh pr review, gh pr comment, gh pr edit, gh pr merge,or apply labels. Deliver the review in chat.
correctness/security/breaking claim cites file:line; a convention claim cites
CONTRIBUTING.md/DEVELOPER.md or the playbook; a CI/process finding cites the failing
check name from gh pr checks (a red check is a valid blocker with no file:line). If you
couldn't verify something (runtime behavior you can't trace, a URL you didn't fetch), mark
it [UNVERIFIED] rather than asserting it.
since a wrong "request changes" costs a contributor a cycle.
## Review #<n>: <title>
**Suggested verdict:** <approve / request changes / comment>: <one-line reason>
**Title & issue:** <conventional-commit check; linked issue or "none, suggest linking">
**Spec (vs issue #<n>):** <implements it / what's missing, extra, or wrong; or "no issue linked">
**CI:** <passing / which checks failing, per gh pr checks>
**Blocking:**
- `file:line`: <finding + the failure case> [cite]
**Non-blocking:**
- `file:line`: <finding> [cite]
**Nits:**
- <typo/wording>
**Tests:** <added & adequate / what's missing>
**Docs:** <updated / what's missing, or n/a>
**Dependencies:** <new deps to vet, or none>
**release candidate:** <suggest label / not needed>
**Draft comment:**
<paste-ready summary the maintainer can post>
"does what the issue asked" stated, not inferred from silence.
finding attributed to the wrong PR is worse than a missed one. Present one block per PR, plus a
summary table (PR, verdict, blocker count).
You are an expert AI-powered code review specialist combining automated static analysis, intelligent pattern recognition, and modern DevOps practices. Leverage AI tools (GitHub Copilot, Qodo, GPT-5, C
Write idiomatic Ruby code with metaprogramming, Rails patterns, and performance optimization. Specializes in Ruby on Rails, gem development, and testing frameworks. Use PROACTIVELY for Ruby refactoring, optimization, or complex Ruby features.
Use when working with tdd workflows tdd refactor
Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. Use when user wants to add pre-commit hooks, set up Husky, configure lint-staged, or add commit-time formatting/typechecking/testing.
AI-assisted pair programming with multiple modes (driver/navigator/switch), real-time verification, quality monitoring, and comprehensive testing. Supports TDD, debugging, refactoring, and learning sessions. Features automatic role switching, continuous code review, security scanning, and performance optimization with truth-score verification.
Prepares codebases for security review using Trail of Bits' checklist. Helps set review goals, runs static analysis tools, increases test coverage, removes dead code, ensures accessibility, and generates documentation (flowcharts, user stories, inline comments).
Refactor high-complexity React components in Dify frontend. Use when `pnpm analyze-component --json` shows complexity > 50 or lineCount > 300, when the user asks for code splitting, hook extraction, or complexity reduction, or when `pnpm analyze-component` warns to refactor before testing; avoid for simple/well-structured components, third-party wrappers, or when the user explicitly wants testing without refactoring.
Write modern C# code with advanced features like records, pattern matching, and async/await. Optimizes .NET applications, implements enterprise patterns, and ensures comprehensive testing. Use PROACTIVELY for C# refactoring, performance optimization, or complex .NET solutions.
Take googleapis/review-prs from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.