{"slug": "building-an-mcp-server-that-verifies-its-sources-inside-footnote-mcp", "title": "Building an MCP Server That Verifies Its Sources: Inside footnote-mcp", "summary": "A developer built footnote-mcp, a Python MCP server that verifies source claims using heuristic and LLM-based backends. The tool achieves 100% accuracy on numeric and factual data claims and 83% overall accuracy, with a blind spot in semantic negation and paraphrase. It supports web search, page fetching, and browser automation without requiring API keys.", "body_md": "footnote-mcp is a Python MCP server installable via pip, Docker, or pipx. No API keys required — it falls back to scraped Bing + DuckDuckGo search and automatic headless Chromium for JavaScript-heavy pages.\n\nThe core tool is `evidence_entailment`\n\n. It takes a claim and a source text, and returns whether the claim is supported, unsupported, or contradicted. The heuristic backend extracts numeric and named-entity tokens from both the claim and source, then checks for exact matches and contradictions. On its design domain — numeric and factual data claims — it achieves 100% accuracy on a labeled benchmark set.\n\nFor semantic cases (negation, paraphrase), the `ollama`\n\nbackend uses a local LLM as a judge.\n\nThree tools build on this: `corroborate_claim`\n\ntriangulates a claim across multiple sources, `locate_claim_span`\n\nfinds the exact supporting sentence with character offsets, and `build_research_debug_report`\n\nproduces a compact report of queries, URLs, and verification gaps.\n\n`web_read`\n\nfetches pages through a 5-tier escalation ladder: HTTP (curl_cffi) to rotating proxy to headless Chromium to Chromium through proxy to hosted scrape API (Firecrawl/ScrapingBee). A block/quality detector decides when to escalate, and per-domain rate limiting, circuit breakers, and negative cache keep it polite.\n\n`web_search`\n\nsupports Tavily, Brave, Google, or scraped Bing + DuckDuckGo as fallback. Pass `semantic: true`\n\nto reorder results by meaning using local Ollama embeddings.\n\nBeyond text, the server handles tables, CSV/XLSX/PDF/JSON, date validation, unit resolution, and time series reconciliation. For JavaScript-heavy pages, 10 browser tools let you drive a headless Chromium session. When generic parsers fail, the server can synthesize sandboxed extraction code through a controlled recipe system.\n\nThe heuristic backend achieves 100% accuracy on numeric and factual data claims (n=15). Overall accuracy including semantic cases is 83% (n=18). The blind spot is purely semantic negation and paraphrase — the `ollama`\n\nbackend closes that gap.\n\n```\npip install footnote-mcp\npython -m playwright install chromium\nfootnote-mcp\n```\n\nThen add to your MCP client config and start researching. Full source at [github.com/KazKozDev/footnote-mcp](https://github.com/KazKozDev/footnote-mcp).\n\nFeedback welcome — especially on the verification approach. The benchmark is designed to be extended, so if you have a claim/source pair that should be caught, open an issue or PR.", "url": "https://wpnews.pro/news/building-an-mcp-server-that-verifies-its-sources-inside-footnote-mcp", "canonical_source": "https://dev.to/kazkozdev/building-an-mcp-server-that-verifies-its-sources-inside-footnote-mcp-v2-1lj5", "published_at": "2026-07-18 06:15:28+00:00", "updated_at": "2026-07-18 06:27:46.213167+00:00", "lang": "en", "topics": ["developer-tools", "artificial-intelligence", "large-language-models", "ai-agents", "ai-research"], "entities": ["footnote-mcp", "KazKozDev", "Ollama", "Tavily", "Brave", "Google", "Firecrawl", "ScrapingBee"], "alternates": {"html": "https://wpnews.pro/news/building-an-mcp-server-that-verifies-its-sources-inside-footnote-mcp", "markdown": "https://wpnews.pro/news/building-an-mcp-server-that-verifies-its-sources-inside-footnote-mcp.md", "text": "https://wpnews.pro/news/building-an-mcp-server-that-verifies-its-sources-inside-footnote-mcp.txt", "jsonld": "https://wpnews.pro/news/building-an-mcp-server-that-verifies-its-sources-inside-footnote-mcp.jsonld"}}