Find test gaps, generate grounded tests, and dynamically prove behavior with mutation testing.
ai.orangepro/mcp β Model Context Protocol (MCP) Server
The ai.orangepro/mcp MCP server is intended to identify test gaps, generate tests that are grounded in existing context, and dynamically validate behavior using mutation testing. Its scope centers on improving behavioral and code coverage through test generation and analysis workflows.
π οΈ Key Features
Find test gaps
Generate grounded tests that actually run
Dynamically prove behavior with mutation testing
π Use Cases
Test automation
Test generation for integration and end-to-end testing
Behavioral coverage and code-coverage improvement
β‘ Developer Benefits
Developer experience focused on testing and developer tools
Graph/knowledge-graph and ontology-aligned semantic analysis and static analysis
Mutation-testing-driven behavioral validation
β οΈ Limitations
Test gap detection and mutation validation are the core focus; broader functionality is not specified in the provided data.
OrangePro maps every public behavior in your codebase, scores each one by real test evidence, and shows you the structural blind spots before your users find them. Runs locally. Your code never leaves your machine.
npx -y @orangepro/mcp-server@latest start .
open .orangepro/behavior-coverage.html
The report has two modes: Simple (integration-level blind spots, plain English) and Expert (full behavior list, evidence tiers, flows, system map). Toggle with the pill switch at the top.
OrangePro system map β entry lanes, services, evidence tiers
System map β entry lanes (GraphQL, HTTP, Jobs) flowing into services, sized by traffic, colored by evidence tier, red-ringed by risk.
Priority gaps
Priority gaps of another open source Project HONO β top 20 unproven behaviors ranked by blast radius, with generated test drafts.
Evidence tiers
Every behavior gets exactly one tier. Nothing is labeled "tested" on faith.
Tier
Color
What it means
Dynamically Proven
π’
A real test kills a targeted mutation of this behavior
Runtime-covered
π’
Coverage tool executed this code
Statically Linked
π‘
A test imports and calls this code β structural link, not proof
Unconfirmed Candidate
βͺ
A similar test file exists β a lead, not evidence
No Signal
π΄
Nothing tests this behavior
"Dynamically Proven 0" is normal on first run. Proof requires running tests against targeted mutations. That's the trust model.
Quick start
bash
cd /path/to/your/repo
npm install # install the repo's own dependencies first
npx -y @orangepro/mcp-server@latest start .
open .orangepro/behavior-coverage.html
No API key needed. The report shows your system map, evidence tiers, priority gaps, and delta since last run.
AI output never changes evidence tiers. Only the mutation-kill oracle can mint Dynamically Proven.
Output:
code
.orangepro/
βββ behavior-coverage.html β open this
βββ graph.json β deterministic evidence graph
βββ COVERAGE_REPORT.md β coverage and gap summary
βββ ai/ β candidate flows (when a key is configured)
orangepro_generated/ β generated tests; your source files are never touched
Each rerun shows a delta banner: what entered the codebase, what moved up in risk, what got resolved.
Use with your coding agent
OrangePro runs as an MCP server. Add to your client's config:
Mutation-kill oracle confirms test breaks if behavior changes
No
Same code = same score. Deterministic. Always.
Language support
Language
Static mapping
Generated tests
Dynamic proof
TypeScript / JavaScript
β
β Jest / Vitest / Mocha
β
Python
β
β pytest
β
Go
β
β *_test.go
β
Java
β
β JUnit 4/5
β
Kotlin, Rust, PHP, C#, Ruby, Swift, C, C++
β
planned
planned
Static mapping works across many languages via tree-sitter. Dynamic proof is deliberately narrower β each language needs a runner, mutation locator, and sandbox profile.
Highest-value local run
Use the repository's own setup and test commands first, and keep unit and integration
coverage in separate artifacts. Then run opro start; it performs analysis, ingests
the artifacts, attempts targeted proof, generates report-visible drafts, and writes the
final report. A separate opro analyze is unnecessary when opro start follows it.
bash
# 1. Install/build exactly as the repository documents.# 2. Run the repository's unit and integration coverage commands separately.# 3. Record artifact provenance (example paths and commands):mkdir -p .orangepro
# create .orangepro/coverage-suites.json using the schema below
opro coverage . # optional preflight: discover/generate artifacts
opro start . --proof-limit 5 --generate-limit 20
Without this manifest, OrangePro conservatively infers clear unit/integration names
and labels everything else unclassified; it never guesses that an aggregate profile is
unit-only. The report shows unit, integration, their overlap, unclassified coverage, and
the combined union separately. --proof-limit controls dynamic proof attempts (which
may draft a test for proof); --generate-limit independently controls the additional
report-visible risk-gap drafting lane. A generation run
also records its terminal status and exact reason, so a compiler/import failure is not
misreported as a generic dependency problem.
Privacy
No stored source. Reads code in-process. Never uploads to an OrangePro server.
No existing-source mutation. Never edits your source or test files.
Your keys stay yours. Read from env at call time, never persisted.
BYOK is direct. Code context goes to the model provider you configure. OrangePro is not in that path.
CLI reference
bash
opro # analyze + report + agent next actions
opro start --base main # same, scoped to a branch diff
opro analyze # build the evidence graph
opro score # graph readiness (0β100)
opro gaps --limit 10 # top 10 untested behaviors
opro generate --base main # tests for PR diff
opro generate --single # top gap, whole repo
opro prove # mutation-kill oracle
opro rtm # traceability matrix
opro export# metadata-only evidence pack
opro mcp # run as MCP server (stdio)
opro doctor # what evidence to add next
opro coverage # discover/generate artifacts; analyze or start ingests them
Add --json to any read command for machine output. Run opro help for the full reference.
MCP tools (18 total)
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 + 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)
PR workflow
bash
opro generate --base main # tests for what this branch changed
opro generate --pr 1234 # checks out PR #1234
opro generate --changed # current branch diff vs main
Each generated test includes:
Grounding β the real files, symbols, and existing tests it cites
Run hints β where to write it, how to run it
Scenario bucket β what failure mode it targets
If dependencies aren't installed, tests are kept as Manual tests (Given/When/Then steps with the blocker named). Install dependencies and re-run to convert them to runnable tests.
Test categories
Generation is evidence-gated. A category is produced only when the graph has supporting evidence.
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
Model setup (BYOK)
Analysis, scoring, and proof need no model key. Generation does.
Auto-detect order: OpenAI β Ollama β Anthropic. Override with --provider and --model.
The defaults are gpt-5.3-codex for OpenAI and claude-sonnet-5 for Anthropic.
Run opro setup to configure interactively. Keys stay in your environment β never written to graph, config, or artifacts.
AI candidate lanes
With a provider key, OrangePro stages weak AI behaviorβsymbol links and AI-suggested candidate flows. These are review/generation worklists, not evidence:
AI links appear as AI-linked suggestions.
AI flows are stored separately from deterministic flows.
Neither lane changes evidence tiers or denominator counts.
Use them when you want the agent to find likely service-boundary flows faster; ignore them for a deterministic-only report.