An MCP tool that reads a GitHub pull request's diff and returns a focused review. Three things make it different from any other AI reviewer: it reads your plugin's docs, it follows your repo's conventions, and it remembers your past findings. Works in Claude Desktop, Cursor, Continue, Zed, or anything that speaks MCP.
The reviewer reads your plugin's documentation and flags violations of documented invariants — citing both path:line and the docs file. Nobody else's review tool can do this.
Drop a .swiss-review.json in your repo. Define forbidden patterns, ignored paths, required checks, default focus. The reviewer applies them as additional rules.
Patterns flagged ≥2× in past reviews of the same repo are surfaced into every new review. Switching to a competitor loses the accumulated memory.
.swiss-review.json in the repo's default branch.
owner/repo#N, or owner/repo/pull/N."security" · "performance" · "tests" · or any free text. Steers reviewer attention.true, posts the review as a PR comment. Requires the license to have github_write capability AND the PAT to have write scope.ask tool.Drop this in the repo's default branch. Every field is optional; the reviewer applies whatever's present and ignores the rest.
{ "tone": "blunt", "ignored_paths": ["vendor/", "dist/", "*.lock"], "forbidden_patterns": [ { "pattern": "console\\.log\\(", "severity": "must", "note": "no debug logs" }, { "pattern": "\\b(TODO|FIXME)\\b", "severity": "nit" } ], "required_checks": [ "new code paths covered by tests", "public APIs documented" ], "default_focus": "security" }
Pick your tool. License key YOUR-LICENSE-KEY is pre-filled if you arrived from ?license=….
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{ "mcpServers": { "swiss-review": { "transport": "streamable-http", "url": "https://mcp.swiss.software", "headers": { "Authorization": "Bearer YOUR-LICENSE-KEY" } } } }
Settings → MCP → Add server:
{ "mcpServers": { "swiss-review": { "url": "https://mcp.swiss.software", "headers": { "Authorization": "Bearer YOUR-LICENSE-KEY" } } } }
mcpServers: - name: swiss-review url: https://mcp.swiss.software headers: Authorization: Bearer YOUR-LICENSE-KEY
"context_servers": { "swiss-review": { "url": "https://mcp.swiss.software", "headers": { "Authorization": "Bearer YOUR-LICENSE-KEY" } } }
For scripts and CI:
# list available tools curl -sS -X POST https://mcp.swiss.software/ \ -H "Authorization: Bearer YOUR-LICENSE-KEY" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' # review a PR curl -sS -X POST https://mcp.swiss.software/ \ -H "Authorization: Bearer YOUR-LICENSE-KEY" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{ "name":"review_pr", "arguments":{"pr":"owner/repo#42","focus":"security"} }}'
Every review carries a metadata header so you know exactly which modes fired:
**Review of acme/widget#42** — Refactor settings page _jane · feat/settings → main · 6 files, +210/-45_ _Mode: **plugin-aware** (acme-widget v2.4.0, 8 doc files)_ _Config: `.swiss-review.json` @main (3 forbidden, 2 ignored)_ _Memory: 2 recurring patterns from this repo's history_ _PAT: license-scoped_ _Posted: [PR comment](https://github.com/acme/widget/pull/42#issuecomment-…)_ ## Summary Migrates the legacy settings handler to the new SettingsRegistry… ## Must fix **handlers/settings.php:88** — Missing CSRF token check on POST. _Recurring pattern (×3 in this repo)._ **handlers/auth.php:42** — violates docs/05-rest-api.md …
Authorization: Bearer …. Never in URLs.post: true requires two independent locks: (1) the operator-set github_write capability flag on your license, (2) Pull requests: Write scope on your PAT.