DEV Community

Sanusi Mubaraq
Sanusi Mubaraq

Posted on

Anti-hallucination Research Pipeline

Notion MCP Challenge Submission đź§ 

This is a submission for the Notion MCP Challenge

What I Built

A CLI research pipeline that turns a free-form topic into structured, evidence-backed claims and optional narrative output, with Notion as the place those results live.

Research and fact-check. The tool expands the topic with an LLM (brief plus multiple web searches), merges and deduplicates what Tavily returns, then asks an LLM to pull out discrete claims tied to specific URLs and snippets. Each claim is challenged in a second pass: another search for counter-evidence and an LLM judgment with a confidence level, a contradiction flag, and short notes—so every assertion carries a provenance trail, not just a paragraph of prose.

Optional report. You can also generate a readable research write-up (Markdown) and publish the same content as a normal Notion page—separate from the structured claim data.

Notion sync. A companion step pushes the claim set into Notion as a Research claims database: one row per claim, with the claim text, source link, snippet, topic label, confidence, contradiction flag, and fact-check notes. Sync uses the Python MCP client against Notion’s hosted MCP.

Re-runs. You can refresh adversarial fact-checking on an existing claim set without redoing the whole research pass.

Stack: Python, OpenRouter (LLM), Tavily (search), and Notion MCP for the sync step. Useful for research, due diligence, or keeping a living backlog of traceable assertions in Notion.

Video Demo

Mubaraq Notion MCP Image

Show us the code

https://github.com/LPMatrix/notion-mcp

How I Used Notion MCP

Notion MCP is the only way data gets into Notion in this project. The research pipeline — search, claim extraction, adversarial fact-check — writes to a local JSON file. A separate script, sync_to_notion.py, handles the sync entirely through MCP:

  • Connects to Notion's hosted MCP server at https://mcp.notion.com/mcp using the Python MCP SDK with Streamable HTTP transport and an OAuth Bearer token
  • Calls list_tools() after session.initialize() and resolves tool names at runtime
  • Creates the "Research claims" database via the create-data-source tool, passing the parent page ID, title, and property schema
  • Creates one page per claim via the create-page tool, writing all seven properties: Claim, Source URL, Source Snippet, Topic, Confidence, Contradiction, and Fact-check notes

Mubaraq Notion MCP Image

Top comments (0)