关于 corroborate-mcp
corroborate-mcp 是一个 MCP 服务,用于检查当前说法被多少独立来源报道,并将转载内容聚类为报道源头。它面向需要覆盖情况判断及其证据和局限说明的 Agent,但不判断说法的每个细节是否属实。
主要功能
- 01识别转载并统计报道源头
- 02提供置信度与覆盖局限
- 03跨引擎搜索新闻来源
- 04独立的来源查找工具
- 05确定性、只读检查
适用场景
- 01评估新闻说法是否有独立报道
- 02区分通讯社报道转载与独立源头
- 03在 Agent 决策前查找来源
- 04检查覆盖缺口或搜索引擎故障
MCP 相关
提供 `corroborate_claim`,返回有证据支持的报道覆盖判断;并提供 `find_sources`,返回去重后的来源列表。通过 stdio 使用 MCP。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
2收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| claim | string | 是 | 要核查的主张,以陈述句形式提供 |
| max_sources | integer | 否 | 返回的证据来源数量上限(默认值为 8) |
| window_days | integer | 否 | 回溯时间窗口(天数,默认值为 7) |
详细介绍
corroborate-mcp
面向 AI Agent 的诚实交叉印证层。 提交一条主张;它会告诉你这条主张实际上有多大程度上是由独立来源报道的,并展示判断依据。
一篇 AP 报道被 40 家媒体转载,算一个源头,而不是 40 条引文。其他验证工具统计引文;Corroborate 统计独立源头,并考虑新闻转载关系,同时公布自身的错误率并披露覆盖缺口。这是原始搜索和引文检查工具所缺少的判断层。
corroborate_claim("NASA delayed the Artemis III landing") → CONFIRMED 4 independent origins · conf 0.9
corroborate_claim("Zorblatt Corp acquired Portugal") → UNCORROBORATED 0 origins · conf 0.05
何时应由 Agent 调用此工具
- 依赖当前事件/新闻主张之前——这条主张是否有独立报道,还是被一个来源传得满天飞?
- 按真实独立性对来源排序或筛选,并获取置信度评分。
- 当你需要一个经得起推敲的判断时——每个答案都附带证据、置信度和自身的注意事项。
它不是网页搜索引擎(搜索请使用 Exa/Tavily/Brave),也不是人工事实核查网络。它是两者之间范围明确、诚实的基础工具:这条内容有多大程度上是由独立来源报道的?
可信赖之处——源于设计
| 🔑 零 API 密钥,零账号 | 无需密钥的引擎(Google News RSS · GDELT · Hacker News)。无需注册。 |
| 👁 只读 | 它读取公开新闻,无法执行操作、写入内容、花费资金或触碰你的数据。 |
| 🎯 确定性 | 过程中不使用大模型——输入相同的证据,就会得到相同的判断。p50 约为 0.4s。 |
| 📖 开源(MIT) | 可阅读判断过程的每一行代码。 |
| 📊 公布错误率 | 我们在公开基准上衡量自身的误判 CONFIRMED/误判 UNCORROBORATED 比率,并在下方列出。大多数“事实核查”工具不会这样做。 |
| 🚫 绝不隐瞒 | 如果无法访问来源,它会返回错误,绝不会伪造“UNCORROBORATED”结果。 |
衡量什么——不衡量什么
衡量的是报道的交叉印证情况,而非真相。一条被所有媒体从同一篇通讯社报道转载的主张,会返回 SINGLE_SOURCE。一条无人报道的主张,即使属实,也会返回 UNCORROBORATED。判断结果会准确说明衡量的内容,在 notes 中标示其局限,并在某个引擎不可用时设置 coverage:"degraded"——因此,证据缺失绝不会被悄悄当成不存在的证据。
快速入门
需要 Node ≥ 18。无需密钥,无需配置。
Claude Code
claude mcp add corroborate -- npx -y corroborate-mcp
Claude Desktop / Cursor / 任意 MCP 客户端(claude_desktop_config.json、.cursor/mcp.json 等)
{ "mcpServers": { "corroborate": { "command": "npx", "args": ["-y", "corroborate-mcp"] } } }
无需 MCP 客户端即可试用
npx corroborate-mcp # starts the stdio server (silent = healthy)
# or from a checkout: node cli.js "The Federal Reserve held interest rates steady"
工具
corroborate_claim — 判断结果
{ claim, window_days?=7, max_sources?=8 } →
{
"claim": "Acme Corp acquires Widget Industries for $2 billion",
"corroboration": "CONFIRMED",
"n_independent_sources": 3,
"confidence": 0.9,
"coverage": "full",
"sources": [
{ "headline": "Acme Corp to acquire Widget Industries in $2 billion deal",
"outlet": "Financial Times", "domain": "ft.com", "url": "https://…",
"published_at": "2026-07-09T14:02:00Z", "age_days": 0.9,
"wire": false, "echoed_by_n_domains": 1 }
],
"notes": ["syndication detected: near-identical headlines across multiple domains collapsed into one origin"],
"method": "reporting-corroboration: counts INDEPENDENT story origins (syndication-aware), not raw article count; does not adjudicate truth"
}
| 字段 | 含义 |
|---|---|
corroboration | CONFIRMED(≥2 个独立源头)· SINGLE_SOURCE(1 个)· UNCORROBORATED(0 个) |
n_independent_sources | 经转载聚类后得到的不同报道源头——不是文章数量 |
confidence | 0–1。源头数量越多、跨引擎一致性越高,置信度越高;同一源头被大量转载时,置信度会降低 |
coverage | full;若本次调用有引擎故障,则为 degraded——此时判断结果较弱可能是故障所致,而非主张本身 |
sources[].wire | 源头是否为通讯社(AP/Reuters/AFP/UPI) |
sources[].echoed_by_n_domains | 有多少个域名转载了同一报道 |
notes | 诚实列出注意事项:转载合并、突发新闻传播链(<24h)、相关性门槛筛除、引擎故障 |
find_sources — 原始证据
{ query, window_days?=7, max_sources?=10 } → 去重后的多引擎来源列表(媒体、域名、url、日期),不提供判断结果。若你只需要报道覆盖情况并自行判断,这是成本更低的基础工具。
已测量的准确性——你应该对任何事实核查工具提出这样的要求
在一组公开的、包含 40 项声明的标注基准测试中(benchmark/——声明、标签、类别定义和测试框架均已公开;可使用 npm run benchmark 自行运行)。时效性声明会根据当前新闻更新,因此数据反映的是真实准确性,而非过时情况。最近一次运行时间:2026-07-22:
| 指标 | 结果 |
|---|---|
| 虚构声明被错误确认为真 | 0/10 |
| 广泛报道的真实声明被漏掉 | 0/12(11 项已确认,1 项仅有单一来源) |
| 检测到的小众真实声明 | 7/8 |
| 正确按时间范围处理的过时声明 | 2/5 |
| 失真声明被错误确认为真 | 6/6——请阅读下方警告 |
| 延迟 | p50 为 0.4 秒 · p95 <1 秒(慢速引擎在线时,最坏情况 ≤8 秒) |
⚠️ 请重视失真声明的数据——这是这个工具盲点的真实上限。 最近一次运行中,所有 6 项失真声明都返回了“已确认”(6/6),因为每一项都歪曲了一个目前正在报道的事件,而此工具会检查是否有独立报道涉及声明的主题和实体——它不会进行立场检测。因此,“Samsung 取消了 Galaxy Z Fold8”(他们实际上是发布了该产品)或“OpenAI 发布了 GPT-6”都会因真实事件的相关报道而得到确认。请牢记这条规则:如果某个主题正在被报道,那么它的失真版本很可能也会得到“已确认”。 应将“已确认”理解为*“这个主题有独立报道——现在请根据返回的来源核实具体事实”*,绝不要将其理解为“这项具体声明属实”。立场检测已列入 v1.1 路线图。(冠军赛、选举等周期性事件也可能匹配当前周期的报道——请参见过时声明的漏判情况。)
判定方式
- 搜索 Google News RSS、GDELT、Hacker News,并行进行(从声明中提取关键词;保留带引号的短语)。
- 相关性门槛——只有当文章标题确实涉及该声明时,才会计入(至少命中 2 个核心词,且命中比例 ≥35%)。宽泛的主题呼应会被剔除;剔除数量会予以报告。
- 联合转载聚类——不同域名下近乎相同的标题(Jaccard ≥ 0.55)会合并为一个来源;通讯社域名会被标记。
- 判定——独立来源即不同集群;来源越多、跨引擎一致性越高,置信度越高;单一来源产生大量相似报道时,置信度会降低;所有已知弱点都会写入
notes。
诚实说明限制
- 不进行立场检测(见上方的 6/6)。“已确认”= 有独立报道,并非已核实每个细节。
- 仅支持英文,且以标题为准。不会获取付费墙后的正文。
- 受时效窗口限制(默认 7 天,最长 90 天)。旧声明会被标记为
UNCORROBORATED——这表示不在时间窗口内,并非判定为虚假。 - 对同一通讯社报道的独立改写偶尔可能未被聚类;同一来源的不同表述偶尔也可能被计为两个来源。
- 所有引擎均不可用时会返回错误,绝不会伪造
UNCORROBORATED结果。
开发
npm test # golden-claim suite — deterministic, no network
npm run test:mcp # MCP stdio handshake + tools/list
npm run test:live # live invariants against real engines
npm run benchmark # 40-claim labeled accuracy benchmark (live, ~2 min)
npm run test:release # all of the above — required green before every release
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。