{
  "markdown": "<p align=\"center\">\n  <img src=\"https://github.com/OrangeproAI/orangepro-mcp/raw/main/docs/logo-horizontal.svg\" alt=\"OrangePro\" width=\"320\" />\n</p>\n\n<p align=\"center\">\n  <strong>Find the behaviors your tests miss. Generate grounded tests that actually run.</strong>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@orangepro/mcp-server\"><img src=\"https://badge.fury.io/js/@orangepro%2Fmcp-server.svg\" alt=\"npm version\" /></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-green.svg\" alt=\"MIT License\" /></a>\n  <a href=\"https://www.npmjs.com/package/@orangepro/mcp-server\"><img src=\"https://img.shields.io/npm/dw/@orangepro/mcp-server.svg\" alt=\"npm downloads\" /></a>\n  <a href=\"https://glama.ai/mcp/servers/OrangeproAI/orangepro-mcp\"><img src=\"https://glama.ai/mcp/servers/OrangeproAI/orangepro-mcp/badges/score.svg\" alt=\"Glama score\" /></a>\n  <a href=\"https://registry.modelcontextprotocol.io/?q=orangepro\"><img src=\"https://img.shields.io/badge/MCP_Registry-orangepro-orange.svg\" alt=\"MCP Registry\" /></a>\n</p>\n\n---\n\nOrangePro 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.\n\n```bash\nnpx -y @orangepro/mcp-server@latest start .\n```\n\n<!-- TODO: Replace with a terminal GIF showing the command running and report opening -->\n\n---\n\n## Table of Contents\n\n- [What you get](#what-you-get)\n- [Evidence tiers](#evidence-tiers)\n- [Quick start](#quick-start)\n- [Use with your coding agent](#use-with-your-coding-agent)\n- [How it works](#how-it-works)\n- [Language support](#language-support)\n- [Privacy](#privacy)\n- [CLI reference](#cli-reference)\n- [MCP tools](#mcp-tools-18-total)\n- [Platform](#whats-on-the-hosted-platform)\n- [Contributing](#contributing)\n\n---\n\n## What you get\n\nOne command produces an interactive HTML report:\n\n```bash\nnpx -y @orangepro/mcp-server@latest start .\nopen .orangepro/behavior-coverage.html\n```\nThe 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.\n\n**<a href=\"https://orangeproai.github.io/orangepro-mcp/twenty-crm-behavior-coverage.html\" target=\"_blank\">→ Live example: Twenty CRM (5,237 behaviors mapped)</a>**\n\n<img width=\"895\" alt=\"OrangePro system map — entry lanes, services, evidence tiers\" src=\"https://github.com/user-attachments/assets/1ceba779-e0ec-4ec1-99ce-001bc3589b42](https://github.com/user-attachments/assets/a4d85b98-4f19-4647-8dd9-db5911574f49\" />\n\n*System map — entry lanes (GraphQL, HTTP, Jobs) flowing into services, sized by traffic, colored by evidence tier, red-ringed by risk.*\n\n\n<img width=\"818\" alt=\"Priority gaps\" src=\"https://github.com/user-attachments/assets/30a512b6-7830-48db-a00f-a616e7176ea8\" />\n\n*Priority gaps of another open source Project HONO — top 20 unproven behaviors ranked by blast radius, with generated test drafts.*\n\n---\n\n## Evidence tiers\n\nEvery behavior gets exactly one tier. Nothing is labeled \"tested\" on faith.\n\n| Tier | Color | What it means |\n|------|-------|---------------|\n| **Dynamically Proven** | 🟢 | A real test kills a targeted mutation of this behavior |\n| **Runtime-covered** | 🟢 | Coverage tool executed this code |\n| **Statically Linked** | 🟡 | A test imports and calls this code — structural link, not proof |\n| **Unconfirmed Candidate** | ⚪ | A similar test file exists — a lead, not evidence |\n| **No Signal** | 🔴 | Nothing tests this behavior |\n\n> **\"Dynamically Proven 0\" is normal on first run.** Proof requires running tests against targeted mutations. That's the trust model.\n\n---\n\n## Quick start\n\n```bash\ncd /path/to/your/repo\nnpm install          # install the repo's own dependencies first\n\nnpx -y @orangepro/mcp-server@latest start .\nopen .orangepro/behavior-coverage.html\n```\n\nNo API key needed. The report shows your system map, evidence tiers, priority gaps, and delta since last run.\n\n**Want test generation?** Add a model key (BYOK):\n\n```bash\nexport ANTHROPIC_API_KEY=\"...\"   # or OPENAI_API_KEY / OLLAMA_BASE_URL\nnpx -y @orangepro/mcp-server@latest start .\n```\n\nAI output never changes evidence tiers. Only the mutation-kill oracle can mint Dynamically Proven.\n\n**Output:**\n\n```\n.orangepro/\n├── behavior-coverage.html   ← open this\n├── graph.json               ← deterministic evidence graph\n├── COVERAGE_REPORT.md       ← coverage and gap summary\n└── ai/                      ← candidate flows (when a key is configured)\n\norangepro_generated/         ← generated tests; your source files are never touched\n```\n\nEach rerun shows a **delta banner**: what entered the codebase, what moved up in risk, what got resolved.\n\n---\n\n## Use with your coding agent\n\nOrangePro runs as an MCP server. Add to your client's config:\n\n```json\n{\n  \"mcpServers\": {\n    \"orangepro-local\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@orangepro/mcp-server@latest\", \"mcp\"]\n    }\n  }\n}\n```\n\n| Client | Where to put it |\n| --- | --- |\n| Claude Code | `.mcp.json` or `~/.claude.json` |\n| Cursor | `~/.cursor/mcp.json` or Settings → MCP |\n| VS Code / Copilot | MCP settings |\n| Codex / OpenCode | Run `npx -y @orangepro/mcp-server@latest agent --client codex` |\n\n**The workflow:** Tell your agent:\n\n> \"Use `orangepro_start`, then `orangepro_generate_tests` with base_ref=main. Write each test to its suggested_path, run it, and report pass/fail.\"\n\nThe agent writes the test, runs it, calls `orangepro_prove`, and the behavior turns Dynamically Proven. One prompt, full loop.\n\n---\n\n## Works with\n\n<p>\n  <strong>Claude Code</strong> · <strong>Cursor</strong> · <strong>GitHub Copilot</strong> · <strong>Codex</strong> · <strong>Windsurf</strong> · <strong>OpenCode</strong> · <strong>VS Code</strong>\n</p>\n\nAny MCP-compatible agent can drive OrangePro. No vendor lock-in.\n\n---\n\n## How it works\n\n```\n┌─────────────┐     ┌──────────────┐     ┌─────────────┐\n│  Your Code  │ ──► │  Knowledge   │ ──► │  Evidence   │\n│  (any lang) │     │    Graph     │     │   Tiers     │\n└─────────────┘     └──────────────┘     └─────────────┘\n                           │\n                    ┌──────┴──────┐\n                    ▼             ▼\n             ┌───────────┐  ┌──────────┐\n             │ Gap Report│  │ Generate │\n             │ + Risks   │  │  Tests   │\n             └───────────┘  └──────────┘\n```\n\n| Phase | What happens | Needs a model key? |\n|-------|-------------|-------------------|\n| **Analyze** | AST walk → behaviors, flows, evidence tiers | No |\n| **Score** | Graph readiness score (0–100) | No |\n| **Generate** | Grounded tests for top gaps | Yes (BYOK) |\n| **Prove** | Mutation-kill oracle confirms test breaks if behavior changes | No |\n\nSame code = same score. Deterministic. Always.\n\n---\n\n## Language support\n\n| Language | Static mapping | Generated tests | Dynamic proof |\n|----------|:-:|:-:|:-:|\n| TypeScript / JavaScript | ✓ | ✓ Jest / Vitest / Mocha | ✓ |\n| Python | ✓ | ✓ pytest | ✓ |\n| Go | ✓ | ✓ `*_test.go` | ✓ |\n| Java | ✓ | ✓ JUnit 4/5 | ✓ |\n| Kotlin, Rust, PHP, C#, Ruby, Swift, C, C++ | ✓ | planned | planned |\n\nStatic mapping works across many languages via tree-sitter. Dynamic proof is deliberately narrower — each language needs a runner, mutation locator, and sandbox profile.\n\n---\n\n## Highest-value local run\n\nUse the repository's own setup and test commands first, and keep unit and integration\ncoverage in separate artifacts. Then run `opro start`; it performs analysis, ingests\nthe artifacts, attempts targeted proof, generates report-visible drafts, and writes the\nfinal report. A separate `opro analyze` is unnecessary when `opro start` follows it.\n\n```bash\n# 1. Install/build exactly as the repository documents.\n# 2. Run the repository's unit and integration coverage commands separately.\n# 3. Record artifact provenance (example paths and commands):\nmkdir -p .orangepro\n# create .orangepro/coverage-suites.json using the schema below\n\nopro coverage .                    # optional preflight: discover/generate artifacts\nopro start . --proof-limit 5 --generate-limit 20\n```\n\n```json\n{\n  \"artifacts\": {\n    \".orangepro/coverage/unit.coverprofile\": {\n      \"suite\": \"unit\",\n      \"command\": \"make unit-test-coverage\"\n    },\n    \".orangepro/coverage/integration.coverprofile\": {\n      \"suite\": \"integration\",\n      \"command\": \"make integration-test-coverage\"\n    }\n  }\n}\n```\n\nWithout this manifest, OrangePro conservatively infers clear `unit`/`integration` names\nand labels everything else `unclassified`; it never guesses that an aggregate profile is\nunit-only. The report shows unit, integration, their overlap, unclassified coverage, and\nthe combined union separately. `--proof-limit` controls dynamic proof attempts (which\nmay draft a test for proof); `--generate-limit` independently controls the additional\nreport-visible risk-gap drafting lane. A generation run\nalso records its terminal status and exact reason, so a compiler/import failure is not\nmisreported as a generic dependency problem.\n\n---\n\n## Privacy\n\n- **No stored source.** Reads code in-process. Never uploads to an OrangePro server.\n- **No existing-source mutation.** Never edits your source or test files.\n- **Your keys stay yours.** Read from env at call time, never persisted.\n- **BYOK is direct.** Code context goes to the model provider you configure. OrangePro is not in that path.\n\n---\n\n<details>\n<summary><strong>CLI reference</strong></summary>\n\n```bash\nopro                          # analyze + report + agent next actions\nopro start --base main        # same, scoped to a branch diff\nopro analyze                  # build the evidence graph\nopro score                    # graph readiness (0–100)\nopro gaps --limit 10          # top 10 untested behaviors\nopro generate --base main     # tests for PR diff\nopro generate --single        # top gap, whole repo\nopro prove                    # mutation-kill oracle\nopro rtm                      # traceability matrix\nopro export                   # metadata-only evidence pack\nopro mcp                      # run as MCP server (stdio)\nopro doctor                   # what evidence to add next\nopro coverage                 # discover/generate artifacts; analyze or start ingests them\n```\n\nAdd `--json` to any read command for machine output. Run `opro help` for the full reference.\n\n</details>\n\n<details>\n<summary><strong>MCP tools (18 total)</strong></summary>\n\n| Tool | What it does |\n|------|--------------|\n| `orangepro_start` | One-command setup: analyze + report + next actions |\n| `orangepro_analyze_sources` | Build/refresh the evidence graph |\n| `orangepro_generate_tests` | Generate grounded tests for gaps |\n| `orangepro_prove` | Run mutation-kill oracle on a behavior |\n| `orangepro_prove_loop` | Setup + dynamic proof + report refresh for one behavior |\n| `orangepro_find_test_gaps` | List behaviors with weak/missing tests, ranked by risk |\n| `orangepro_graph_score` | Graph readiness score (0–100) |\n| `orangepro_status` | Workspace state without generating anything |\n| `orangepro_doctor` | Recommend next evidence to improve quality |\n| `orangepro_rtm` | Requirements traceability matrix |\n| `orangepro_stats` | Aggregate statistics |\n| `orangepro_changed_impact` | What a diff touches (requires git + base ref) |\n| `orangepro_record_run` | Record a test run result |\n| `orangepro_explain_test` | Explain why a test was generated |\n| `orangepro_export_evidence_pack` | Export metadata-only evidence pack |\n| `orangepro_update_graph` | Incremental graph update |\n| `orangepro_ai_links` | Weak behavior→symbol suggestions (optional AI) |\n| `orangepro_ai_flows` | Candidate flow discovery (optional AI) |\n\n</details>\n\n<details>\n<summary><strong>PR workflow</strong></summary>\n\n```bash\nopro generate --base main              # tests for what this branch changed\nopro generate --pr 1234                # checks out PR #1234\nopro generate --changed                # current branch diff vs main\n```\n\nEach generated test includes:\n- **Grounding** — the real files, symbols, and existing tests it cites\n- **Run hints** — where to write it, how to run it\n- **Scenario bucket** — what failure mode it targets\n\nIf 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.\n\n</details>\n\n<details>\n<summary><strong>Test categories</strong></summary>\n\nGeneration is evidence-gated. A category is produced only when the graph has supporting evidence.\n\n| Category | What it targets |\n|----------|-----------------|\n| Happy path | Primary expected behavior |\n| Validation error | Bad/invalid input handling |\n| Edge case | Boundaries, empty/null, concurrency, retries |\n| Integration flow | Multi-step behavior across services |\n| Security / privacy | Auth, injection, data leakage |\n| Regression | Pinning a previously-broken behavior |\n\n</details>\n\n<details>\n<summary><strong>Model setup (BYOK)</strong></summary>\n\nAnalysis, scoring, and proof need no model key. Generation does.\n\n| Provider | Environment variable |\n|----------|---------------------|\n| OpenAI-compatible | `OPENAI_API_KEY` (optional: `OPENAI_BASE_URL`, `OPENAI_MODEL`) |\n| Anthropic | `ANTHROPIC_API_KEY` (optional: `ANTHROPIC_MODEL`) |\n| Ollama (local, no key) | `OLLAMA_BASE_URL` (optional: `OLLAMA_MODEL`) |\n\nAuto-detect order: OpenAI → Ollama → Anthropic. Override with `--provider` and `--model`.\nThe defaults are `gpt-5.3-codex` for OpenAI and `claude-sonnet-5` for Anthropic.\n\nRun `opro setup` to configure interactively. Keys stay in your environment — never written to graph, config, or artifacts.\n\n</details>\n\n<details>\n<summary><strong>AI candidate lanes</strong></summary>\n\nWith a provider key, OrangePro stages weak AI behavior→symbol links and AI-suggested candidate flows. These are review/generation worklists, not evidence:\n\n- AI links appear as `AI-linked` suggestions.\n- AI flows are stored separately from deterministic flows.\n- Neither lane changes evidence tiers or denominator counts.\n\nUse them when you want the agent to find likely service-boundary flows faster; ignore them for a deterministic-only report.\n\n</details>\n\n---\n\n## What's on the hosted platform\n\nThis repo is the free local tool. The [OrangePro platform](https://orangepro.ai) adds:\n\n- Persistent knowledge graph across PRs and repos\n- PR/CI policy gates over evidence tiers and risk deltas\n- Jira / Confluence / TestRail / OpenAPI enrichment\n- Cross-repo intelligence and recurring-flow memory\n- Production incident correlation and regression targeting\n- Team dashboards and test lifecycle management\n\n---\n\n## Contributing\n\n```bash\ngit clone https://github.com/OrangeproAI/orangepro-mcp.git\ncd orangepro-mcp && npm ci && npm run build\nnpm test\n```\n\nPRs welcome. Please open an issue first for large changes.\n\n---\n\n<p align=\"center\">\n  MIT License · <a href=\"https://orangepro.ai\">orangepro.ai</a>\n</p>\n",
  "bytes": 14979,
  "sha": "eb45b5bce06f36ac52263686a3b63d4dafacabf7d442b3552dc19863daf23c5a",
  "repo_slug": "orangeproai/orangepro-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_orangeproai_orangepro_0cbd7803/readme"
}