Find test gaps, generate grounded tests, and dynamically prove behavior with mutation testing.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Inspect callable tools, capabilities, and parameters exposed to AI agents by OrangePro.
orangepro_startOne-command setup: analyze + report + next actions
orangepro_analyze_sourcesBuild/refresh the evidence graph
orangepro_generate_testsGenerate grounded tests for gaps
orangepro_proveRun mutation-kill oracle on a behavior
orangepro_prove_loopSetup commands + dynamic proof + report refresh for one behavior
orangepro_find_test_gapsList behaviors with weak/missing tests, ranked by risk
Find the behaviors your tests miss. Generate grounded tests that actually run.
opro builds a knowledge graph from your local checkout, maps every behavior in your code, shows which ones are tested and which aren't, and generates integration-level tests grounded in real symbols β not hallucinated imports. It runs as a CLI and a local stdio MCP server.
Once you run the mcp server against a repo, you can get behavior-coverage/html β Live example: Twenty CRM behavior coverage report
Fig 1: System map β entry lanes (GraphQL, HTTP, Jobs) flowing into services, sized by traffic, colored by evidence tier, red-ringed by risk.
Fig 2: Priority gaps β top 20 unproven behaviors ranked by blast radius, with generated test drafts and applicable testing categories.
Install the target repository's dependencies first, then run OrangePro from that repository:
With no model key, the same command still performs deterministic analysis, renders the report, and dynamically proves eligible behaviors using existing tests. With a key, it also discovers AI candidate flows and drafts grounded tests for the highest-risk gaps. AI output never changes evidence tiers; only the mutation-kill oracle can mint Dynamically Proven.
The command writes:
The report opens on a system map of your repo β entry lanes (GraphQL/HTTP/Jobs) flowing into the services they reach, sized by traffic, colored by evidence tier, risk-ringed β identical on every run. Each completed rerun shows a delta banner against the previous completed run. The report discloses when bounded path enumeration prunes additional branch expansions. Every behavior gets a plain-English description; every top risk gets a deterministic context line and a state-aware next step.
Run opro export when you want a machine-readable evidence pack.
OrangePro runs as an MCP server. Any MCP-compatible agent (Cursor, Claude Code, Codex, Copilot, OpenCode) can drive it.
If you already have opro on your PATH, print the exact config for your client:
No global install is required. These commands use the published package:
Add to your client's MCP config:
| Client | Config location |
|---|---|
| Claude Code | .mcp.json or ~/.claude.json |
| Cursor | ~/.cursor/mcp.json or Settings β MCP |
| Codex | Config printed by opro agent --client codex or npx -y @orangepro/mcp-server@latest agent --client codex |
| VS Code / Copilot | MCP settings; use the generic config if your client accepts raw MCP server JSON |
| OpenCode | Config printed by opro agent --client opencode |
Tell your agent:
"Use
orangepro_start, thenorangepro_generate_testswith base_ref=main. Write each test to its suggested_path, run it, and report pass/fail."
The agent writes the test, runs it, calls orangepro_prove, and the behavior turns Dynamically Proven. One prompt, full loop.
| Tool | What it does |
|---|---|
orangepro_start | One-command setup: analyze + report + next actions |
orangepro_analyze_sources | Build/refresh the evidence graph |
orangepro_generate_tests | Generate grounded tests for gaps |
orangepro_prove | Run mutation-kill oracle on a behavior |
orangepro_prove_loop | Setup commands + dynamic proof + report refresh for one behavior |
orangepro_find_test_gaps | List behaviors with weak/missing tests, ranked by risk |
orangepro_graph_score | Graph readiness score (0β100) |
orangepro_status | Workspace state without generating anything |
orangepro_doctor | Recommend next evidence to improve quality |
orangepro_rtm | Requirements traceability matrix |
orangepro_stats | Aggregate statistics |
orangepro_changed_impact | What a diff touches (requires git + base ref) |
orangepro_record_run | Record a test run result |
orangepro_explain_test | Explain why a test was generated |
orangepro_export_evidence_pack | Export metadata-only evidence pack |
orangepro_update_graph | Incremental graph update |
orangepro_ai_links | Weak behaviorβsymbol suggestions (optional AI) |
orangepro_ai_flows | Candidate flow discovery (optional AI) |
Add --json to any read command for machine output. Run opro help for the full reference.
Each generated test includes:
If the environment can't run tests yet (dependencies not installed, runner unconfigured), rejected drafts are kept as Manual tests β scenario, Given/When/Then steps, synthetic test data, and expected outcome in plain English, with the exact blocker named. Install dependencies and re-run opro start to turn them into runnable tests. Runnable tests always replace Manual tests for the same behavior; the two are never mixed.
Generation is evidence-gated. A category is produced only when the graph has supporting evidence β never padded with generic filler. These are the local generation buckets. The report additionally shows each risk's applicable testing categories (contract, boundary limits, integration flow, state lifecycle, failure recovery, β¦), derived deterministically from graph facts. Categories with generated drafts are highlighted as drafts; they are not coverage or proof, and remaining applicable categories stay outlined. Neither taxonomy changes evidence tiers.
| Category | What it targets |
|---|---|
| Happy path | Primary expected behavior |
| Validation error | Bad/invalid input handling |
| Edge case | Boundaries, empty/null, concurrency, retries |
| Integration flow | Multi-step behavior across services |
| Security / privacy | Auth, injection, data leakage |
| Regression | Pinning a previously-broken behavior |
Every behavior gets exactly one tier. Nothing is labeled "tested" on faith.
| Tier | What it means | How you get there |
|---|---|---|
| Dynamically Proven | A real test kills a targeted mutant of this behavior | opro prove after writing/running a test |
| Runtime-covered | Coverage tool executed this code | opro start --generate-coverage |
| Statically Linked | A test imports and calls this code β a hard structural link | Automatic during analysis |
| Unconfirmed Candidate | A lexically similar test file exists, but nothing links it β a lead, not evidence | Automatic; upgrade it by writing the linking test |
| No Signal | Nothing tests this behavior yet | β |
"Dynamically Proven 0" is normal on first run. Static analysis always runs. Dynamic proof requires running tests against targeted mutations. That's the trust model β nothing is Dynamically Proven until a real test kills a real mutant.
When runtime coverage is available, opro start also compares Runtime-covered and Dynamically Proven behaviors over the same deterministic denominator. It never compares source-line coverage with behavior proof or folds off-denominator proofs into that percentage.
OrangePro separates static mapping, generated tests, runtime coverage, and dynamic proof. Those are different confidence bars.
| Language | Static behavior extraction | Generated tests | Runtime coverage | Dynamic proof |
|---|---|---|---|---|
| TypeScript / JavaScript | β | β Jest / Vitest / Mocha / AVA-style drafts | β lcov.info | β Vitest / Jest / Mocha |
| Python | β | β pytest | β coverage.py / pytest-cov XML | β pytest |
| Go | β | β same-package *_test.go | β coverprofile | β go test |
| Java | β | β JUnit 4/5 | β JaCoCo XML | β Maven/JUnit |
| Kotlin, Rust, PHP, C#, Ruby, Swift, C, C++ | β static behavior extraction | planned | planned where standard coverage exists | planned proof profiles |
Static mapping works across many languages through tree-sitter and repo metadata. Dynamic proof is deliberately narrower: each language needs a runner, mutation locator, sandbox profile, and false-proof regressions before it can mint Dynamically Proven.
Analysis, scoring, and proof need no model key. Generation does.
| Provider | Environment variable |
|---|---|
| OpenAI-compatible | OPENAI_API_KEY (optional: OPENAI_BASE_URL, OPENAI_MODEL) |
| Anthropic | ANTHROPIC_API_KEY (optional: ANTHROPIC_MODEL) |
| Ollama (local, no key) | OLLAMA_BASE_URL (optional: OLLAMA_MODEL) |
Auto-detect order: OpenAI β Ollama β Anthropic. Override with --provider and --model.
Run opro setup to configure interactively. Keys stay in your environment β never written to graph, config, or artifacts.
With a provider key, OrangePro can stage weak AI behaviorβsymbol links and AI-suggested candidate flows. These are ready for local use as review/generation worklists, but they are not evidence:
AI-linked suggestions.Use them when you want the agent to find likely service-boundary flows faster; ignore them when you want a deterministic-only report.
OrangePro separates analysis (what your code does) from proof (whether tests actually verify it).
| Phase | What happens | Needs a model key? |
|---|---|---|
| Analyze | AST walk β behaviors, flows, evidence tiers | No |
| Score | Graph readiness score (0β100) with reasons | No |
| Generate | Grounded tests for top gaps, per-behavior | Yes (BYOK) |
| Prove | Mutation-kill oracle confirms test actually breaks if behavior changes | No |
Reruns are cache-accelerated: unchanged files skip re-parsing, BYOK stages don't re-spend tokens on unchanged inputs, and proof certificates persist in a local ledger until the certified file changes. Upgrading the tool auto-invalidates caches.
.orangepro/; keyed auto-drive may write new, reviewable tests under orangepro_generated/.This repo is the free local tool. The OrangePro platform adds:
See docs/local-proof-kit.md for the full development reference.
MIT Β© OrangePro
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/orangepro)<a href="https://allmcps.com/mcp/orangepro"><img src="https://allmcps.com/api/badge/orangepro?style=directory" alt="OrangePro on AllMCPs" /></a>