Purpose
corroborate-mcp is described as "an honest corroboration layer for AI agents." Give it a claim, and it will tell you how independently that claim has actually been reported, and show you the basis for its judgment. Its core distinction is this: an AP story republished by 40 outlets is one source, not 40 citations. Other verification tools count citations, whereas Corroborate counts independent sources, and achieves this by identifying content aggregation, then publicly discloses its own error rate and coverage gaps.
This is not a web search engine (use Exa/Tavily/Brave for search), nor a human fact-checking network, but a narrow, honest primitive in between: how independently this claim has been reported.
Main capabilities
- Claim corroboration assessment (corroborate_claim): Input a claim, and it returns a verdict, confidence, evidence and caveats. The parameters are
{ claim, window_days?=7, max_sources?=8 }. The parameters are{ query, window_days?=7, max_sources?=10 }. This is the cheaper raw capability, suitable for obtaining coverage when you want to make your own judgment. - Aggregation-aware independent source counting: Near-identical headlines across domains (Jaccard ≥ 0.55) are merged into one source, and wire service domains are flagged.
- Confidence scoring: The more independent sources and the higher the cross-engine agreement, the higher the confidence; a single source that is widely republished lowers confidence.
- Public error rate: Measured accuracy is published against a public benchmark of 40 labeled claims (the claims, labels, category definitions and test framework in benchmark/ are all public and can be run yourself with
npm run benchmark), and time-sensitive claims are refreshed from current news. - Honest disclosure of limitations: Every answer comes with evidence, confidence and its own caveats; when an engine is unavailable, the coverage status is marked as
coverage:"degraded", avoiding quietly treating "absence of evidence" as evidence of "nonexistence."
How to use
Requires Node ≥ 18, no keys and no configuration. Can be used in Claude Desktop, Cursor or any MCP client (configuration files such as claude_desktop_config.json、.cursor/mcp.json etc.). It can also be tried without an MCP client.
Decision process:
- Search Google News RSS, GDELT, and Hacker News in parallel (extract keywords from the claim, preserving quoted phrases).
- Relevance gate — count something only if the headline actually concerns the claim (hits ≥2 core words and covers ≥35% of the core words); loose thematic echoes are discarded, and the number discarded is reported.
- Aggregate clustering — near-identical headlines across domains are merged into one source, and wire-service domains are flagged.
- Verdict — independent sources means the number of distinct clusters; confidence rises with sources and cross-engine agreement, and falls with a single source being widely reprinted; all known weaknesses are written into notes.
When to use it
- Before relying on a current-events or news-type claim, determine whether it has been independently reported or whether a single source has been reprinted everywhere.
- Rank or filter sources by true independence, with confidence scores attached.
- When you need a defensible conclusion — every answer comes with evidence, confidence, and its own caveats.
Limitations
- No stance detection: in the latest run, all 6 distorted claims returned CONFIRMED (6/6), because each distorted a currently reported event, and this tool only checks whether independent reporting exists around the claim's topic and entities; it does not detect stance. Therefore claims such as "Samsung cancelled the Galaxy Z Fold8" (it was actually launched) or "OpenAI released GPT-6" would be confirmed based on actual reporting of a real story. CONFIRMED should be understood as "there is independent reporting on this topic — now verify the specific facts against the returned sources," and never as "this exact claim is true." Stance detection is a v1.1 roadmap item. Periodic events (such as tournaments or elections) may also match reporting from the current cycle.
- English-only, headline-level; it does not crawl body text behind paywalls.
- It has a time window (7 days by default, 90 days maximum). Older claims will show UNCORROBORATED — this is a statement about the window, not a determination of falsity.
- Independent rewrites of the same wire-service report may occasionally slip past clustering; different wording from the same source may occasionally be counted as two sources.
- When all engines are unavailable, it reports an error and never fabricates UNCORROBORATED.
- It measures reporting corroboration, not truth. A claim reprinted by every outlet using the same wire-service copy will return SINGLE_SOURCE; a claim no one has reported will return UNCORROBORATED, even if it is true. The verdict clearly states what was measured and flags weaknesses in notes.