mcpField
C
compare-cli-mcp

compare-cli-mcp

本地服务
github.com/DrBaher法律与政务121 周前更新

关于 compare-cli-mcp

compare-cli-mcp 将 compare-cli 封装为面向 Agent 工作流的 MCP 服务,用于比较合同文档并识别版本差异。它提供协商文本比较、漂移结果和可选的人类可读报告,并支持限制文件访问目录。

主要功能

  1. 01比较两个文档
  2. 02读取协商记录作为基准
  3. 03提供合成比较演示
  4. 04返回结构化差异与状态
  5. 05可选生成可读报告
  6. 06限制访问基础目录

适用场景

  1. 01审查合同版本差异
  2. 02检查协商后的合同文本
  3. 03在 Agent 流水线中设置漂移门槛

MCP 相关

通过 stdio 向 MCP 客户端提供 compare_files、compare_with_negotiation 和 compare_demo 三个工具。工具返回 JSON 结构化结果,并可附带可读报告。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"drbaher-compare-cli": {
"command": "npx",
"args": [
"-y",
"compare-cli-mcp"
]
}
}
}
启动命令npx -y compare-cli-mcp

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

安装包
npmcompare-cli-mcp0.1.4

工具

3

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

参数类型必填说明
baseobject是
base.pathstring否服务端使用进程权限读取此路径。为无人值守的 Agent 运行此服务的运维人员,应通过 COMPARE_MCP_BASE_DIR 限制工作目录,或以权限最低的用户运行服务。
base.formatenum否与 content_base64 一起使用时必填。使用 content_text 时可选(默认值为“txt”)。docx | pdf | md | txt
base.content_textstring否UTF-8 文本。适用于 md/txt 输入的便捷方式。
base.content_base64string否Base64 编码的字节。内联传入 .docx / .pdf 时必填。
strictboolean否将排版差异升级为实质性差异。
candidateobject是
candidate.pathstring否服务端使用进程权限读取此路径。为无人值守的 Agent 运行此服务的运维人员,应通过 COMPARE_MCP_BASE_DIR 限制工作目录,或以权限最低的用户运行服务。
candidate.formatenum否与 content_base64 一起使用时必填。使用 content_text 时可选(默认值为“txt”)。docx | pdf | md | txt
candidate.content_textstring否UTF-8 文本。适用于 md/txt 输入的便捷方式。
candidate.content_base64string否Base64 编码的字节。内联传入 .docx / .pdf 时必填。
only_clausesarray否与规范化后的条款标题进行不区分大小写的子字符串匹配;仅保留匹配项。
ignore_clausesarray否与 only_clauses 的语义相同,但用于排除。可与 only_clauses 组合(先执行保留,再执行排除)。
strict_cosmeticboolean否将外观差异升级为实质性差异。
include_human_reportboolean否同时以第二个文本内容块返回面向用户阅读的报告。

详细介绍

compare-cli-mcp

npm version

面向 Agent 流水线的 MCP(Model Context Protocol)服务,封装 compare-cli。提供三个工具,使用 stdio 传输,以 JSON 为主的响应,并可选提供人类可读报告。

设计约定:../docs/mcp.md。此软件包提供实现;行为和架构与设计版本保持一致。

属于 contract-ops 套件。


安装

compare-cli-mcp 将 compare-cli 作为同级依赖,因此请同时安装两者:

npm install -g compare-cli@^0.3.0 compare-cli-mcp@^0.1.1

然后运行:

compare-mcp           # spawns the MCP server on stdio

接入 MCP 客户端

Claude Desktop / Claude Code

将以下内容添加到 MCP 客户端配置中(例如,在 macOS 上的 ~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "compare-cli": {
      "command": "compare-mcp"
    }
  }
}
锁定基础目录(建议在无人值守时使用)
{
  "mcpServers": {
    "compare-cli": {
      "command": "compare-mcp",
      "env": {
        "COMPARE_MCP_BASE_DIR": "/path/to/contract/documents"
      }
    }
  }
}

之后,Agent 提供的每个 path 参数都会相对于 COMPARE_MCP_BASE_DIR 解析;如果路径超出该目录,则会被拒绝(符号链接会先被解析)。如果未设置此环境变量,服务可以读取进程有权读取的任何文件——请参阅 ../docs/mcp.md §3.2 中的安全说明。

工具

工具用途
compare_files比较两个文档。每一侧都接受 path、content_base64 或 content_text。
compare_with_negotiation从 nda-review-cli 的 negotiation.json 读取基准文本。返回 base.negotiation_resolution,以便 Agent 审核哪个信号产生了双方同意的文本。
compare_demo使用捆绑的测试文件进行零参数合成比较。确定性地返回 exit_class: "substantive"。可用于确认服务已正确接入。

工具描述、输入架构和输出架构会通过 tools/list 公布。此软件包 v1.x 版本中的架构保持稳定;任何变更都会由 tests/fixtures/tools-list.json 中的快照基准测试进行约束。

输出格式

每次成功的工具调用都会返回:

  • structuredContent — 完全符合 compare --json 的格式(顶层字段为 ok、exit_class、exit_code、base、candidate、summary、differences、warnings)。根据 compare-cli 的 AGENTS.md,此格式在 compare-cli v1.x 中保持稳定。这是 Agent 读取的约定。
  • content[0] — 将相同的 JSON 序列化为文本块,供尚未读取 structuredContent 的 MCP 客户端使用。
  • content[1](可选;调用方传入 include_human_report: true 时返回)— 人类可读报告。

compare_with_negotiation 会添加 structuredContent.base.negotiation_resolution ∈ {"status", "per_round_agreed", "clause_status"},以指明哪个解析层级生成了双方同意的基准文本。

错误与偏差

实质性偏差属于成功的工具调用。 Agent 询问了有什么不同,服务端也给出了回答。根据 exit_class 路由是本契约的规定;错误封装(isError: true)仅用于 I/O / 参数错误,以及一种明确的前置条件异常:

代码触发条件
INPUT_NOT_FOUND路径不存在 / 无法读取。
INPUT_MALFORMED.docx / .pdf 格式错误。
PDF_NO_TEXT_LAYER扫描版 PDF;pdfjs 提取到的字符数为零。
INVALID_ARGS未通过架构验证(缺少参数、违反 oneOf 等)。
PATH_OUTSIDE_BASE_DIR已设置 COMPARE_MCP_BASE_DIR,且路径超出其范围。
NO_AGREED_ROUNDcompare_with_negotiation 的前置条件:未找到达成一致的轮次。此时 CLI 返回退出码 2;由于未运行比较,MCP 服务会将其提升为错误。
NOT_SIGNED_OFFrequire_signoffs: true,且 signoffs.a / signoffs.b 缺失。
INTERNAL_ERROR意外错误;会显示底层消息,避免 Agent 无法了解情况。

这些代码在此软件包的 v1.x 版本中保持稳定。

运行测试套件

# From the repo root:
npm install              # workspaces resolve compare-cli + compare-cli-mcp
cd mcp && npm test       # 22 tests, ~100 ms

一致性测试和快照测试套件位于 tests/test_protocol.mjs。tools/list 的基准文件位于 tests/fixtures/tools-list.json。有意修改架构后(同时提升次要版本号),可按以下方式重新生成基准文件:

node -e 'import("./compare-cli-mcp.mjs").then(m => process.stdout.write(JSON.stringify(JSON.parse(JSON.stringify(m.TOOLS)), null, 2)))' > tests/fixtures/tools-list.json

许可证

MIT。请参阅 ../LICENSE。

评论

支持 Markdown

第一次接触 MCP?

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

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