Corroborate Mcp

io.github.chefcohen由 GitHub 账号 chefcohen 发布v0.1.3更新于 Oct 24, 2026

Honest claim corroboration for AI agents: syndication-aware independent-source counting.

概览

AI 生成的概览

本地 MCP 服务器,用于判断某条新闻说法被多少独立来源报道,按独立来源而非引用数量计数。

可以做什么
  • 对一条说法给出佐证结论,附置信度、覆盖状态与来源清单
  • 按查询列出多个新闻引擎去重后的来源,不给出结论
  • 标注通讯社来源,以及同一报道被多少域名转载
  • 报告转载合并、突发新闻连锁、引擎故障等注意事项
适用场景
适合在助手准备采信某条时事或新闻说法时,判断它是被独立报道,还是单一通讯社稿件被广泛转载。也适合在引用前按真实独立性对来源排序或筛选。
运行要求
通过 npx 以 stdio 在本地运行,需要 Node 18 或更高版本。无需 API 密钥、账号或配置;会访问公开新闻源,因此需要网络连接。
安装前请注意
只读且无需密钥,但结论衡量的是报道佐证程度而非真实性:由于不做立场检测,被广泛报道事件的失真版本仍可能返回 CONFIRMED。覆盖范围限于英文、标题层面和近期时间窗;coverage 为 degraded 表示某个引擎故障,而非该说法为假。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Corroborate Mcp,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

corroborate-mcp

The honest corroboration layer for AI agents. Hand it a claim; it tells you how independently that claim is actually being reported — and shows its work.

[npm] [downloads] [license] [node] [MCP] [API keys]

An AP story echoed by 40 outlets is one origin, not 40 citations. Other verifiers count citations; Corroborate counts independent origins — syndication-aware — then publishes its own error rates and discloses coverage gaps. That's the judgment layer raw search and citation-checkers skip.

text
corroborate_claim("NASA delayed the Artemis III landing")   → CONFIRMED       4 independent origins · conf 0.9corroborate_claim("Zorblatt Corp acquired Portugal")        → UNCORROBORATED  0 origins · conf 0.05

When an agent should call this

  • Before relying on a current-event / news claim — is it independently reported, or one source echoed everywhere?
  • To rank or filter sources by genuine independence, with a confidence score.
  • When you need a verdict you can defend — every answer ships its evidence, its confidence, and its own caveats.

Not a web search engine (use Exa/Tavily/Brave for that) and not a human fact-checking network. It's the narrow, honest primitive in between: how independently is this reported?

Why it's trustworthy — by design

🔑 Zero API keys, zero accountsKeyless engines (Google News RSS · GDELT · Hacker News). Nothing to sign up for.
👁 Read-onlyIt reads public news. It cannot act, write, spend, or touch your data.
🎯 DeterministicNo LLM in the loop — same evidence in, same verdict out. p50 ~0.4s.
📖 Open source (MIT)Read every line of the judgment.
📊 Published error ratesWe measure our own false-CONFIRMED / false-UNCORROBORATED rates on a public benchmark and print them below. Most "fact-check" tools don't.
🚫 Never lies by omissionIf sources are unreachable it returns an error, never a fake "UNCORROBORATED."

What it measures — and what it doesn't

Reporting corroboration, not truth. A claim every outlet syndicated from one wire story comes back SINGLE_SOURCE. A claim nobody covers comes back UNCORROBORATED even if true. The verdict states exactly what was measured, flags its weaknesses in notes, and sets coverage:"degraded" when an engine was down — so absence of evidence is never quietly sold as evidence of absence.

Quickstart

Requires Node ≥ 18. No keys, no config.

Claude Code

bash
claude mcp add corroborate -- npx -y corroborate-mcp

Claude Desktop / Cursor / any MCP client (claude_desktop_config.json, .cursor/mcp.json, …)

json
{ "mcpServers": { "corroborate": { "command": "npx", "args": ["-y", "corroborate-mcp"] } } }

Try it with no MCP client

bash
npx corroborate-mcp   # starts the stdio server (silent = healthy)# or from a checkout:  node cli.js "The Federal Reserve held interest rates steady"

Tools

corroborate_claim — the verdict

{ claim, window_days?=7, max_sources?=8 } →

json
{  "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"}
FieldMeaning
corroborationCONFIRMED (≥2 independent origins) · SINGLE_SOURCE (1) · UNCORROBORATED (0)
n_independent_sourcesDistinct story origins after syndication clustering — not article count
confidence0–1. Rises with origins + cross-engine agreement; penalized for wide single-origin echo
coveragefull, or degraded when an engine failed this call — a weak verdict may then reflect the outage, not the claim
sources[].wireOrigin is a wire service (AP/Reuters/AFP/UPI)
sources[].echoed_by_n_domainsHow many domains carried this same story
notesHonest caveats: syndication collapse, breaking-news cascade (<24h), relevance-gate discards, engine outages

find_sources — the raw evidence

{ query, window_days?=7, max_sources?=10 } → deduped multi-engine list (outlet, domain, url, date), no verdict. The cheaper primitive when you want the coverage and your own judgment.

Measured accuracy — because you should demand it from any fact-check tool

Against a public 40-claim labeled benchmark (benchmark/ — claims, labels, category definitions, and harness are all public; run it yourself with npm run benchmark). The time-sensitive claims are refreshed from current news so the numbers reflect real accuracy, not staleness. Latest run 2026-07-22:

MetricResult
Fabricated claims falsely CONFIRMED0/10
Widely-reported true claims missed0/12 (11 CONFIRMED, 1 single-source)
Niche true claims detected7/8
Stale claims correctly windowed2/5
Distorted claims falsely CONFIRMED6/6 — read the warning ↓
Latencyp50 0.4s · p95 <1s (≤8s worst case when the slow engine is up)

⚠️ Respect the distorted-claim number — it's the honest ceiling of this tool's blind spot. In the latest run all 6 distorted claims came back CONFIRMED (6/6), because each one distorts a currently-reported event, and this tool checks whether independent reporting exists around a claim's topic and entities — it does not do stance detection. So "Samsung cancelled the Galaxy Z Fold8" (they unveiled it) or "OpenAI released GPT-6" confirms off the real coverage of the true story. The rule to live by: if a claim's topic is being reported, a distorted version of it will very likely CONFIRM. Read CONFIRMED as "this topic has independent coverage — now verify the specific facts against the returned sources," never as "this exact claim is true." Stance detection is the v1.1 roadmap item. (Recurring events like championships/elections can likewise match the current cycle's coverage — see the stale-claim leaks.)

How the judgment works

  1. Search Google News RSS, GDELT, Hacker News in parallel (keywords extracted from the claim; quoted phrases preserved).
  2. Relevance gate — an article counts only if its headline genuinely addresses the claim (≥2 core-token hits AND ≥35% of core tokens). Loose topical echoes are discarded; the discard count is reported.
  3. Syndication clustering — near-identical headlines across domains (Jaccard ≥ 0.55) collapse into one origin; wire domains flagged.
  4. Verdict — independent origins = distinct clusters; confidence rises with origins + cross-engine agreement, falls for wide single-origin echoes; every known weakness goes in notes.

Honest limitations

  • No stance detection (the 6/6 above). CONFIRMED = independently covered, not verified in every detail.
  • English-language, headline-level. Paywalled body text isn't fetched.
  • Recency-windowed (default 7 days, max 90). Old claims read UNCORROBORATED — a window statement, not a falsity verdict.
  • Independent rewrites of one wire story can occasionally slip clustering; distinct phrasings of one origin can occasionally count as two.
  • All engines down → error, never a fake UNCORROBORATED.

Development

bash
npm test              # golden-claim suite — deterministic, no networknpm run test:mcp      # MCP stdio handshake + tools/listnpm run test:live     # live invariants against real enginesnpm run benchmark     # 40-claim labeled accuracy benchmark (live, ~2 min)npm run test:release  # all of the above — required green before every release

MIT © Ezra Cohen · github · npm

来源:README.md,提交 1da5f99

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.1.3最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分