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 分