mcpField
O
OrangePro

OrangePro

已认证精选本地服务
orangepro.ai开发工具191 天前更新

关于 OrangePro

OrangePro 是用于代码仓库测试分析的本地 CLI 和 MCP 服务,为开发者与 QA 团队绘制函数和测试的关联,并通过变异测试验证测试是否能发现代码变化。分析和排序无需 AI 模型;测试生成可选用自带密钥。

主要功能

  1. 01映射函数与测试的关联
  2. 02按风险为未验证函数排序
  3. 03通过变异验证测试效果
  4. 04生成 HTML 报告与 CSV 测试表
  5. 05支持多种语言的分析与验证
  6. 06提供 MCP 工作流工具

适用场景

  1. 01定位缺少有效测试保护的函数
  2. 02验证测试能否捕获函数故障
  3. 03为高优先级缺口起草测试
  4. 04让编码 Agent 执行测试分析与验证

MCP 相关

OrangePro 作为 MCP 服务向编码 Agent 提供缺口排序、建议测试位置和验证步骤等工具,支持从分析到证明测试有效性的工作流。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"orangepro": {
"command": "npx",
"args": [
"-y",
"@orangepro/mcp-server"
]
}
}
}
启动命令npx -y @orangepro/mcp-server

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@orangepro/mcp-server

工具

18

收录的工具列表 · 更新于 2 周前

参数类型必填说明
freshboolean否即使自上次运行以来没有变化,也执行完整运行。默认情况下,未更改的代码仓库会立即返回 unchanged_since 和上次运行的报告。
modelstring否覆盖模型名称。
no_aiboolean否即使已配置提供方密钥,也禁用自动 AI 弱链接和候选流程处理。
ai_allboolean否对所有确定性行为节点运行 AI 弱链接处理,而非仅处理缺口。
sourcestring否要分析的源路径。默认为工作区。
base_refstring否可选的 PR/差异基准引用。默认情况下,尽可能自动检测 main/master。
providerenum否AI 流程的 BYOK 提供商覆盖项。openai | ollama | anthropic
workspacestring否本地工作区根目录。默认为当前目录。
no_ai_flowsboolean否禁用自动 AI 候选流程发现,同时保留弱 AI 链接。
prompt_versionenum否自动证明生成通道的可选生成策略。默认为 v2/deterministic;v5 使用批量两阶段生成。无论选择哪种策略,证明/铸造门槛均不变。v2 | v5
include_markdownboolean否丰富类似需求文档的 Markdown 文档。默认为 true。
generate_coverageboolean否在 analyze 之前运行安全的本地覆盖率生成(如果支持)。默认为 false。
coverage_timeout_msinteger否每条命令的覆盖率生成超时时间。

详细介绍

OrangePro

了解测试真正保护了哪些代码。故意破坏代码,证明这一点。

npm 版本 MIT 许可证 npm 下载量 Glama 评分 MCP 注册表


OrangePro 会映射代码库中的每个公共函数,将其与实际调用它的测试关联起来,并根据可能造成的破坏对剩余项排序。对于你关注的测试,它会在隔离副本中破坏函数,并检查测试是否失败。它在你的计算机上运行,不使用 AI 模型进行评分,也不会向 OrangePro 发送任何内容。只有在添加自己的密钥后,才会调用模型,以便可选地生成测试和提供建议。

npx -y @orangepro/mcp-server@latest start .

目录


你将获得什么

每次运行都会在 .orangepro/ 中生成两份报告和一份测试电子表格:

文件面向对象内容
short_behavior-coverage.html负责人、经理以及赶时间的人一页内容:如何处理优先级最高的 20 个函数,排名前五的函数及其原因和为每个函数起草的测试,自上次报告以来的变化,以及如何重现此次运行。
behavior-coverage.html开发者**工作清单:**每个已排序函数及其处理建议、筛选器,还有一个侧边面板,展示证据、排序原因、两项起草的测试和证明命令。**映射:**按区域展示测试覆盖范围。**运行详情:**输入、计数、证明结果、指纹和设置。
tests.csvQA、测试经理每个测试槽位一行(前置条件、步骤、测试数据、预期结果、优先级、文件夹),可直接用于 Excel、Google Sheets、TestRail、Jira Xray 或 Zephyr Scale。详细报告中的 导出测试(CSV) 会下载此文件,其运行详情会说明各列的对应关系(导入 tests.csv)。

每个函数都会得到以下四种处理建议之一:

含义处理方式
Done当此代码被破坏时,某项测试会失败。无需处理。代码变更后,它会回到 Prove。
Prove某项测试会运行此函数,或覆盖率运行会执行此函数,但尚未证明有测试能捕捉到代码破坏。运行证明命令。
Check某个测试文件或测试名称指向此处,但没有追踪到函数调用。先阅读该测试文件;如果它会驱动此函数,就证明这一点,否则编写一项测试。
Write目前还没有测试能捕捉到此处的代码破坏。编写一项测试(为排名前 20 的函数起草了两项),然后证明它。
单页摘要
OrangePro 单页摘要:如何处理优先级最高的 20 个函数,以及排名前五的函数及其测试 ### 详细报告 OrangePro 详细报告:带筛选器的工作列表和显示某个函数的侧边栏

这两份报告均由 OrangePro 在其自身仓库的提交 64a5213 上生成,未使用模型密钥,因此没有起草测试。使用密钥后,排名前 20 的每项都会显示两个起草的测试,侧边栏则会显示测试步骤和代码。


开发者为什么会用它

  • 它会告诉你测试实际检查了什么,而不只是运行了什么。 调用某个函数的测试不一定是在检查该函数。opro prove 会在隔离副本中将函数体替换为固定返回值,然后原样重新运行你自己的测试。如果测试仍然通过,就说明它没有保护该函数。
  • 它优先呈现影响。 一个筛选器会显示那些调用路径会到达删除或清除操作的代码(清除缓存不计入);其他筛选器会显示经常变更、有很多调用方或按计划运行的代码。
  • 它如实呈现证据。 只有当测试调用了某个确切函数时,该函数才会被标记为“已关联”。名称相似的测试只是线索,绝不代表覆盖。只检查模拟对象的测试不计入。
  • 它可重复运行。 相同的提交、完整的 git 历史、相同的配置和相同的版本会得到相同的排名。每份报告都会记录指纹,因此你能判断结果变化是由代码还是工具引起的。
  • 你的编码 Agent 可以驱动它。 作为 MCP 服务,它能在一个循环中向 Claude Code、Cursor、Copilot、Codex 等工具提供按排名排列的缺口、建议的测试位置和证明步骤。
  • 它免费、本地运行且开源(MIT)。 无需账户,分析无需 API 密钥,也不会上传任何内容。

快速开始

cd /path/to/your/repo
# install the repo's own dependencies first (npm ci, uv sync, go mod download, ...)
npx -y @orangepro/mcp-server@latest start .
open .orangepro/short_behavior-coverage.html

分析、排名和证明无需模型密钥。测试生成是可选功能,使用你自己的密钥(参见模型设置)。

想获得最准确的运行结果,请注意:

  • 使用完整克隆,而不是浅克隆。 变更历史会影响部分排名;如果历史不完整,报告会注明。
  • 使用 rank_exclude_paths 排除非产品代码(参见配置)。
  • 变更后重新运行。 每份报告都会说明自上一份报告以来发生的变更。如果没有任何变化(提交、文件、设置、覆盖和证明都相同),start 会立即复用上一份报告并说明这一点;即使如此,--fresh 仍会完整运行。

写入的内容:

.orangepro/
├── short_behavior-coverage.html   ← one-page summary
├── behavior-coverage.html         ← detailed report: worklist, map, run details
├── tests.csv                      ← drafted tests, one row per test
├── report-data.json               ← the data both reports show (used to compare and reuse runs)
├── run-key.json, last-start.json  ← what the last run saw, so an unchanged repo is not analysed again
├── graph.json                     ← the evidence graph (deterministic)
├── ledger.json                    ← proof certificates
├── rtm.md                         ← traceability matrix
└── config.json                    ← optional per-repo settings

orangepro_generated/               ← generated tests (only with a model key); your files are never edited

证据等级

每个函数恰好对应一个证据标签。上面的四种待办事项都由它确定。

证据含义待办事项
已证明测试在原始代码上通过;而在隔离副本中破坏该函数后,测试在自身断言处失败。完成
测试运行过你运行的覆盖率工具执行了这段代码。证明
已关联某个测试调用了这个确切函数。这是结构上的关联,不是证明。证明
未确认某个测试文件或名称相似的测试指向这里,但没有追踪到调用。这只是线索,不是证据。检查
未找到测试没有任何测试与之关联。编写

如果证明已运行但未能捕获问题,该函数会变为 编写;如果证明是在代码变更前完成的,则会重新变为 证明。

OrangePro 不计入的内容,因此已关联数量只是下限,不是覆盖率百分比:

  • 只对模拟对象进行断言的测试;
  • 通过 HTTP 发起的调用或来自端到端测试套件的调用;
  • 在 Python 中,仅通过 fixture 才能到达测试的对象。

为标记出的代码路径编写新测试之前,请先检查现有测试。

首次运行时显示“已证明 0”很正常。 证明会运行你的测试,因此只会针对你选择的函数运行,或在 opro start 的尝试预算内运行。


排名原理

每个未经验证的函数都会获得一个 OrangePro 风险分数,ORS = P × I × D:

  • P:函数发生变更的可能性。变更历史、扇出、新代码和代码规模。
  • I:函数可能造成的影响。入站引用、入口点位置、数据敏感性,以及两次调用内可到达删除或清除操作的路径所适用的最低分数。
  • D:问题被发现的难易程度。证据等级(关联测试或覆盖率运行记录比名称匹配或毫无证据更容易发现问题),以及是否在无人值守的情况下运行(作业和调度程序)。

分数决定工作顺序,并不代表缺陷概率。权重固定,不涉及任何 AI 模型。报告会显示每一行背后的输入。


验证测试

# Python: the mutation value is derived from the function (return annotation or its observed result)
opro prove-loop --target-symbol 'sym:app/billing/invoices.py#void_invoice' \
  --test 'tests/test_invoices.py::test_void_marks_invoice_void' --replacement sentinel

# TypeScript / JavaScript: give the inert body to substitute
opro prove-loop --target-symbol 'sym:src/orders.service.ts#OrdersService.cancel' \
  --test src/orders.service.spec.ts --replacement 'return null;'
  • **已验证:**测试在原始代码上通过,在有问题的副本上会在自身断言处失败。
  • **未验证:**测试在有问题的副本上仍然通过,因此无法保护该函数。这同样会被列为发现项。
  • **无法运行:**设置失败。这种情况不会计入任何一方。

无需模型密钥即可查找薄弱测试:

opro roast .   # passing tests whose targeted mutant still survives

与编码 Agent 配合使用

OrangePro 以 MCP 服务的形式运行。将它添加到客户端的配置中:

{
  "mcpServers": {
    "orangepro-local": {
      "command": "npx",
      "args": ["-y", "@orangepro/mcp-server@latest", "mcp"]
    }
  }
}
客户端配置位置
Claude Code.mcp.json 或 ~/.claude.json
Cursor~/.cursor/mcp.json 或 Settings → MCP
VS Code / CopilotMCP 设置
Codex / OpenCode / Windsurf运行 npx -y @orangepro/mcp-server@latest agent --client codex 以打印设置说明

运行完整流程的提示词:

“使用 orangepro_start,然后使用 orangepro_find_test_gaps。针对排名最高的缺口,在建议的路径下编写测试并运行,然后调用 orangepro_prove_loop,告诉我是否已验证。”


配置

可选。将配置放在仓库中的 .orangepro/config.json,或放在 ~/.orangepro/config.json 中以设置适用于所有仓库的默认值。所有会影响排名的设置都会显示在报告中。

{
  "classification": {
    "rank_exclude_paths": ["ui/**", "docs/**", "scripts/**"],
    "test_support_paths": ["internal/testutil/**"],
    "destructive_sinks": ["archive*"]
  },
  "tuning": { "churn_window_days": 180 },
  "proof": { "python_runner": "auto", "attempt_limit": 20 },
  "overrides": [
    { "symbol": "sym:src/legacy/shim.ts#shim", "action": "suppress", "reason": "generated shim, not product code" }
  ]
}
  • rank_exclude_paths 会将路径从排名中排除,但仍会将其计为行为。
  • destructive_sinks 会为你的代码库添加类似删除的调用。
  • 覆盖项(suppress、pin、reclassify)都必须附带原因,报告也会列出这些覆盖项。
  • 权重和等级无法配置。

语言支持

语言映射函数关联调用这些函数的测试起草测试变异验证
TypeScript / JavaScript✓✓✓ Jest、Vitest、Mocha✓ Jest、Vitest、Mocha
Python✓✓✓ pytest✓ pytest
Go✓✓✓ *_test.go✓ go test
Java✓✓✓ JUnit 4 和 5✓ 仅支持使用 JUnit 5 的 Maven
Kotlin、Rust、PHP、C#、Ruby、Swift、C、C++✓仅匹配名称尚未支持尚未支持
  • “仅匹配名称”表示看起来与函数相关的测试文件或测试名称会被标记为未确认(Check)。系统不会追踪调用,因此目前这些语言无法达到已关联或已验证状态。
  • TypeScript 和 JavaScript 使用 TypeScript 编译器进行解析;其他语言使用 tree-sitter。
  • Python 验证会通过仓库自身的环境运行 pytest:先使用现有的 .venv 或 venv,然后在存在相应锁文件时使用 uv 或 poetry,否则运行 python -m pytest。设置 proof.python_runner 可使用你自己的命令。
  • Java 验证需要 Maven(Surefire)和 JUnit 5。Gradle 和 JUnit 4 项目可以映射并关联,但尚未验证。
  • **尚未追踪,**因此已测试的代码可能会显示为未确认:通过 Go 测试套件方法和辅助构造函数进行的调用、在运行时注入的依赖、反射,以及通过 HTTP 或 RPC 发出的调用。

要求和限制

  • 在 macOS 或 Linux 上使用已修补的 Node.js:22.23.4 或更高版本的 22.x、24.22.1 或更高版本的 24.x,或 26.12.1 或更高版本。 Windows 未经测试:证明流程使用 POSIX 路径和符号链接。
  • 使用已修补的 Node.js。 2026 年 10 月 21 日发布的 Node.js 安全更新(22.23.4、24.22.1、26.12.1)修复了多个高危问题,而 Node.js 20 已终止生命周期,不会再获得修复。奇数主版本(23、25)没有已修补版本。package.json 中的 engines 字段记录了这一要求,但除非设置 engine-strict=true,否则 npm 只会发出警告。使用 node -v 检查版本。参见 Node.js 安全更新公告。
  • Git,用于变更历史。 如果没有 Git,或使用的是浅克隆,排序只依据结构,报告会注明这一点。不是 Git 工作区的文件夹始终会运行完整分析。
  • 先安装仓库的依赖项(npm ci、uv sync、go mod download、mvn -q install,……)。证明流程会在隔离副本中运行你自己的测试,并要求测试在该副本中通过。
  • 读取范围: 源文件和测试文件;跳过 .gitignore 或 .orangeproignore 中的内容(不支持使用 ! 进行反向匹配)、常见构建和依赖项目录(node_modules、vendor、dist、build、target、coverage、.venv,……)、大于 1 MB 的文件,以及生成的代码(标记为 Code generated … DO NOT EDIT 的文件)。最多读取 100,000 个文件;ORANGEPRO_MAX_FILES 可降低此上限,ORANGEPRO_MAX_ANALYZE_MS 可设置扫描时限。
  • 测试草拟涵盖优先级最高的 20 个函数,每个函数草拟两个测试,顺序与工作清单一致;报告会显示这 20 个函数。草拟内容会保留,直至对应函数的代码发生变更。
  • 复用一次运行时,何为“没有任何变更”: 提交、Git 不忽略的所有已修改或未跟踪文件、OrangePro 的设置和忽略文件、覆盖率文件、证明记录、start 选项、是否设置了模型密钥,以及分析版本。若测试草拟因提供商错误(额度不足、速率限制)而失败,则会重新完整运行。
  • CSV 列映射遵循各工具的 CSV 导入器(参见导入 tests.csv)。首次导入时请检查导入预览。

隐私和网络使用

  • 不会发送任何关于你的代码或运行的信息。 不会收集使用情况遥测数据。
  • 源代码只在进程内读取,绝不会存储或上传。报告和证据图仅包含元数据,不包含你的源代码。
  • 绝不会编辑你的源文件。 证明流程会在隔离副本中运行。
  • 只有在你配置密钥后才会调用模型, 并且请求会直接从你的计算机发送给你选择的提供商。密钥、提供商、其端点和模型只从你的 shell 环境或 MCP 客户端配置的 env 区块中读取。OrangePro 不读取任何 .env 文件,因此你扫描的仓库无法选择密钥的发送位置,OrangePro 也绝不会在任何地方写入密钥。opro setup 只会保存提供商和模型名称。
  • 配置密钥后,报告和 tests.csv 会包含模型草拟的测试, 提示词会包含作为依据的函数名称、文件和证据。
  • 报告不会从网络加载任何内容。 只有你点击的链接会访问外部网站。

反馈

报告包含一个 提供反馈 链接,每项发现都包含一个 这看起来不对 链接。有时,报告还会在发现项之后询问报告是否有帮助。

  • 链接不会携带任何关于你项目的信息。 表单只会发送你查看并提交的内容。
  • 除非你留下电子邮件地址,否则你会保持匿名。
opro feedback          # print the link and your settings
opro feedback off      # stop the "Did this help?" question (links stay)
ORANGEPRO_FEEDBACK_URL=off   # hide every feedback link

此问题最多每 14 天出现一次(ORANGEPRO_FEEDBACK_COOLDOWN_DAYS)。该偏好设置只存储在你的计算机上。MCP 客户端会将链接作为可选结果元数据(_meta["ai.orangepro/feedback_url"])获取,且不会要求你的 Agent 提示你提供反馈。


参考

命令行 ```bash opro # same as opro start . opro start . --no-ai --no-auto # analyze + reports, no model calls, no proof attempts opro start . --fresh # run in full even when nothing changed since the last run opro start --base main # scope to a branch diff opro analyze # build the evidence graph and reports opro gaps --limit 10 # top unproven behaviors, ranked opro prove-loop ... # mutation proof for one function (see above) opro roast . # find tests whose mutant survives (no key needed) opro doctor --proof # why top targets aren't proven yet opro generate --base main # tests for what this branch changed (needs a model key) opro rtm # traceability matrix opro export # metadata-only evidence pack opro coverage # find or generate runtime coverage artifacts opro feedback [on|off] # feedback link and invitation setting opro mcp # run as an MCP server (stdio) ``` 在任意读取命令中添加 `--json`,即可获取机器可读的输出。运行 `opro help` 查看所有标志。
MCP 工具(18 个)
工具功能
orangepro_start分析、编写两份报告和 tests.csv,并返回后续操作;如果没有任何更改,则立即返回 unchanged_since(fresh 会强制完整运行)
orangepro_analyze_sources构建或刷新证据图
orangepro_find_test_gaps按 ORS 排序的未证实行为
orangepro_prove_loop针对单个行为执行设置 + 变异验证 + 刷新报告
orangepro_prove仅执行变异验证
orangepro_generate_tests为缺口生成有依据的测试(需要模型密钥)
orangepro_changed_impact查看差异影响的内容
orangepro_status查看工作区状态,不运行任何操作
orangepro_doctor查看下一步应添加哪些证据
orangepro_graph_score图谱就绪度(0–100)
orangepro_rtm可追溯性矩阵
orangepro_stats汇总统计信息
orangepro_record_run记录测试运行结果
orangepro_explain_test说明生成测试的原因
orangepro_export_evidence_pack仅含元数据的证据包
orangepro_update_graph增量更新图谱
orangepro_ai_links弱行为→代码建议(可选 AI,不作为证据)
orangepro_ai_flows候选流程(可选 AI,不作为证据)
覆盖率产物

先运行自己的单元测试和集成测试覆盖率,然后运行 opro start。OrangePro 会导入 Go coverprofiles、lcov、coverage.py XML 和 JaCoCo XML,并将单元测试、集成测试和未分类覆盖率分别保留。要为产物添加标签,请添加 .orangepro/coverage-suites.json:

{
  "artifacts": {
    ".orangepro/coverage/unit.coverprofile": { "suite": "unit", "command": "make unit-test-coverage" },
    ".orangepro/coverage/integration.coverprofile": { "suite": "integration", "command": "make integration-test-coverage" }
  }
}
模型设置(自带密钥,仅用于生成)
提供商环境变量
OpenAI 兼容OPENAI_API_KEY(可选:OPENAI_BASE_URL、OPENAI_MODEL)
AnthropicANTHROPIC_API_KEY(可选:ANTHROPIC_MODEL)
Ollama(本地,无需密钥)OLLAMA_BASE_URL(可选:OLLAMA_MODEL)

自动检测顺序:OpenAI → Ollama → Anthropic。使用 --provider 和 --model 覆盖,或运行 opro setup。

  • 模型输出绝不会改变证据等级。 只有变异验证才能将某项行为标记为已证实。
  • 生成的测试会写入 orangepro_generated/,并附带其所依据的文件和现有测试,以及运行方式和位置。
  • 代码未通过编译检查的草稿会作为计划保留(“仅计划”),并注明原因。如果没有密钥,排名前 20 的每项都会显示两个空槽位,并附上可复制到编码 Agent 的提示词。
导入 tests.csv

每个测试占一行,编码为 UTF-8。前 12 列用于导入;其余列会为每个测试保留优先级、证据和验证命令。排名最高的五个函数优先级为 High,其余为 Medium。

tests.csv 中的列TestRailJira XrayZephyr Scale
IDTest Case Identifier(将 Key 留空)
TitleTitleSummaryName
Section(a > b)Sections Hierarchy
Folder(a/b)Test Repository PathFolder
PriorityPriorityPriorityPriority(将 Medium 映射为 Normal)
Test typeTypeLabelsLabels
PreconditionsPreconditions(在 Xray 中使用独立问题;如需添加到 Description)Precondition
StepsManual Test Step: Action
Test dataManual Test Step: Data
Steps with dataStepsTest Script (Steps) - Step
Expected resultExpected ResultManual Test Step: Expected ResultTest Script (Steps) - Expected Result
ReferencesReferencesDescriptionObjective
- **TestRail:** 使用 **Test Case (Text)** 模板从 CSV 导入,每个测试用例占一行。 - **Jira Xray:** 使用 Test Case Importer;每个测试都将作为一个手动步骤导入。 - **Zephyr Scale:** 它没有测试数据字段,因此由 **Steps with data** 承载测试数据。 - **确认前,请检查导入器的预览。**
PR 工作流
opro generate --base main     # tests for what this branch changed (read-only git diff)
opro generate --changed       # current branch vs its base
opro generate --pr 1234       # checks out PR #1234 (asks first; refuses on a dirty tree)

托管平台

此仓库提供免费的本地工具。OrangePro 平台还提供:

  • 跨 PR 和仓库持久保存的图谱;
  • 针对证据和风险变更的 CI 门禁;
  • 需求与事件关联;
  • 团队仪表板。

参与贡献

git clone https://github.com/OrangeproAI/orangepro-mcp.git
cd orangepro-mcp && npm ci && npm run build
npm test

欢迎提交 PR。对于较大的更改,请先创建 issue。


MIT 许可证 · orangepro.ai

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。