knowledge-curator-mcp
A local, zero-cost MCP server that fact-checks your Markdown/Obsidian notes using a local LLM (Ollama) and free public sources (Wikipedia + DuckDuckGo) — no API keys or cloud services required.
Verify a single claim (
verify_claim): Submit any statement and receive a verdict (verified, incorrect, needs_citation, or unverifiable), confidence score, reasoning, sources used, and a suggested correction if wrong.Fact-check an entire document (
fact_check_document): Extract and verify claims from a Markdown file at configurable depth levels (basic: 5 claims, thorough: 15, academic: 50). Optionally auto-fix by applying corrections/citations directly to the file.Automatically insert citations (
add_citations): Fact-check a file and insert footnote-style citations for claims that need sourcing.Scan an Obsidian vault (
scan_vault_for_issues): Walk an entire vault directory to identify files with contradicted or uncited claims, with support for exclude patterns (e.g. templates, daily notes) and optional report output.Commit corrections to git (
git_commit_corrections): Commit auto-fixed files to a git repository with an optional custom commit message.
Uses DuckDuckGo search as a free, key-less source to gather instant answers and evidence for fact-checking claims.
Provides a tool to commit corrected files to git, enabling version control of auto-fixed notes.
Fact-checks Markdown notes in Obsidian vaults, scanning files for contradicted or uncited claims and optionally inserting citations or corrections.
Leverages local Ollama models (e.g., qwen2.5:3b) to extract claims from notes and judge evidence for entailment without any cloud API.
Queries Wikipedia as a free, authoritative source to retrieve introductory extracts and verify factual claims.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@knowledge-curator-mcpverify the claim that the capital of Japan is Osaka"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
knowledge-curator-mcp
A local, zero-cost MCP server that fact-checks your Markdown / Obsidian notes.
It uses a local LLM via Ollama to extract claims and judge them against free, key-less sources (Wikipedia + DuckDuckGo). No cloud API, no API keys, nothing leaves your machine except the public search queries.
Unlike naive fact-checkers that count search hits, this server has the LLM read each source and decide whether it supports, contradicts, or is insufficient for the claim.
Why local?
No cost — runs entirely on your own machine.
Private — your notes are never sent to a cloud LLM.
Good enough — a small instruct model (3–7B) is plenty for "does this evidence support this sentence?" entailment judgments.
Related MCP server: knowledgine
Requirements
Node.js ≥ 18 (uses the global
fetch)Ollama running locally with an instruct model pulled:
ollama pull qwen2.5:3b # default — ~1.9GB, strong instruction-following
# alternatives: qwen3.5:4b (better), qwen2.5:7b (best, ~4.7GB)A general instruct model is recommended over a persona/style fine-tune: fact-checking needs neutral, accurate reading, not a personality.
Install & build
npm install
npm run buildConfigure your MCP client
Add to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"knowledge-curator": {
"command": "node",
"args": ["/absolute/path/to/knowledge-curator-mcp/build/index.js"],
"env": {
"OLLAMA_MODEL": "qwen2.5:3b"
}
}
}
}Environment variables
Variable | Default | Description |
|
| Ollama server URL |
|
| Any installed Ollama model |
|
| Wikipedia language edition ( |
Tools
Tool | What it does |
| Verify a single statement; returns a verdict + citations. |
| Extract & verify claims in a file; optional |
| Fact-check a file and insert footnote citations for claims that need them. |
| Walk an Obsidian vault and report files with contradicted/uncited claims. |
| Commit corrected files to git. |
Verdicts
Verdict | Meaning |
✅ | Evidence clearly supports the claim. |
❌ | Evidence clearly contradicts it (a correction is suggested). |
📝 | Plausible & on-topic, but evidence doesn't directly confirm. |
❓ | Evidence unrelated or insufficient. |
Example
"Verify: 日本の首都は大阪である。"
**Verdict**: ❌ incorrect (90% confidence)
**Reasoning**: Evidence clearly contradicts the claim that '日本の首都は大阪である'.
**Sources**: Wikipedia: 大阪市, Wikipedia: 首都圏 (日本), ...
**Suggested correction**: 日本の首都は東京である。Case study
See docs/case-study.md for an end-to-end walkthrough: ingesting PDFs into Markdown locally, then fact-checking the claims — including the example above where a naive hit-counter would be fooled but the LLM catches the error.
How it works
note.md ──▶ [LLM extracts claims] ──▶ for each claim:
├─ Wikipedia search (intro extracts)
├─ DuckDuckGo instant answer
└─ [LLM reads evidence → verdict + citation]Limitations
Quality scales with the model. A 3B model occasionally produces a sloppy rationale; use
qwen3.5:4b/qwen2.5:7bfor tougher material.Free sources are shallow: Wikipedia covers general/encyclopedic facts well, but niche or very recent claims will often come back
unverifiable.auto_fixedits files in place — keep your notes under version control.
License
MIT
Available Tools
5 toolsadd_citationsB
Fact-check a file and automatically insert citations for claims that need them.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the Markdown file | |
| citation_style | No | Citation style (currently rendered as footnotes) | footnote |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions 'automatically insert citations' implying file modification but does not detail side effects, permissions needed, or whether the operation is reversible. The note on citation style being rendered as footnotes is helpful but insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise and front-loaded. However, it could be slightly expanded to include more context without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description is incomplete. It does not explain return values, file save behavior, or any prerequisites for the file. The agent lacks sufficient context to use the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes both parameters. The description does not add extra meaning beyond the overall tool purpose, meeting the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: fact-check a file and insert citations. It distinguishes from sibling tools like fact_check_document (which likely only checks without inserting) and others that deal with different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, contexts, or when not to use it, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fact_check_documentA
Fact-check a Markdown/Obsidian note using a local LLM (Ollama) and free sources (Wikipedia, DuckDuckGo). Identifies claims that are verified, contradicted, or need a citation.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the Markdown file to check | |
| auto_fix | No | Apply citations/corrections to the file (default: false) | |
| check_level | No | Max number of claims to verify (basic: 5, thorough: 15, academic: 50) | thorough |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the use of local LLM and free sources, and the output categories. However, it does not mention that auto_fix modifies the file, potential side effects, error handling, or resource usage, which would be valuable for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately conveys the tool's core action, target, and output. Every word is necessary and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 params, no output schema, no annotations), the description is adequate but not complete. It lacks details on return format, error scenarios, and any integration with sibling tools (e.g., how results feed into add_citations or git_commit_corrections).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description does not need to add much. It adds no new parameter context beyond the schema's own descriptions. The baseline of 3 is appropriate, as the schema already explains the parameters adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: fact-checking a Markdown/Obsidian note using local LLM and free sources, and identifies claim statuses. It distinguishes from sibling tools like verify_claim (single claim) and scan_vault_for_issues (broader scanning).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus siblings (e.g., verify_claim for individual claims). It does not mention prerequisites or scenarios where this tool is inappropriate, leaving the agent to infer from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
git_commit_correctionsC
Commit corrected files to git.
| Name | Required | Description | Default |
|---|---|---|---|
| file_paths | Yes | Files to commit | |
| message | No | Optional commit message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only states 'commit corrected files to git' without disclosing behavioral traits like mutation, staging requirements, or side effects (e.g., creating commits).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words. Information is front-loaded, but could benefit from more detail without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description is too sparse. Missing context about return values, error conditions, or behavior (e.g., whether it pushes commits).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with clear descriptions ('Files to commit', 'Optional commit message'). The description adds no additional semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Commit corrected files to git,' which clearly identifies the action and resource. It distinguishes from sibling tools (add_citations, fact_check_document, etc.) which are unrelated to git operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. There's no mention of prerequisites (e.g., initialized repo, permissions) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_vault_for_issuesB
Scan an entire Obsidian vault and report files containing claims that are contradicted or need citations.
| Name | Required | Description | Default |
|---|---|---|---|
| vault_path | Yes | Path to the Obsidian vault directory | |
| output_report | No | Optional path to write the report | |
| exclude_patterns | No | Glob-ish patterns to skip (e.g. ['templates/*', 'daily/*']) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool scans and reports, but offers no details on performance, side effects (e.g., large vaults), or required permissions. The description does not go beyond the bare minimum.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no redundant information. It is appropriately concise but could be slightly more structured with separate usage notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool scans a vault and has 3 parameters with no output schema, the description is minimally adequate. It explains the purpose but lacks details on the scanning process, report format, or potential limitations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters have descriptions in the schema (100% coverage), so the description adds marginal value. It provides context that the tool scans for claims issues, but does not enhance parameter understanding beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool scans an Obsidian vault to report files with contradicted claims or missing citations. This effectively differentiates it from sibling tools like add_citations or verify_claim by focusing on scanning the entire vault.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used before other fact-checking tools but provides no explicit guidance on when to use it versus alternatives. No when-not-to or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_claimA
Verify a single claim with a local LLM against free sources, returning a verdict and citations.
| Name | Required | Description | Default |
|---|---|---|---|
| claim | Yes | The claim/statement to verify | |
| context | No | Optional surrounding context |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden. It reveals the use of a local LLM and free sources (implying privacy and cost constraints) and mentions the output (verdict and citations). However, it does not disclose potential side effects, limitations, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 14 words, no fluff. Information is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two parameters and no output schema, the description mentions return type (verdict and citations) but lacks details on verdict semantics, citation format, or error handling. Moderate completeness for the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The tool description adds minimal value beyond the schema, such as mentioning 'single claim' but not param specifics. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: verifying a single claim using a local LLM against free sources, and it distinguishes itself from sibling tools like 'fact_check_document' which likely handles documents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., fact_check_document) or when not to use it. The description implies it's for individual claims but offers no explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v2.0.0- First observed
add_citations - First observed
fact_check_document - First observed
git_commit_corrections - First observed
scan_vault_for_issues - First observed
verify_claim
TDQS
Scored across 5 tools
Tools are mostly distinct but add_citations and fact_check_document both operate on files and could be confused; one inserts citations while the other reports. scan_vault_for_issues is a batch version of fact_check_document, adding slight overlap.
Most tools follow verb_noun (add_citations, fact_check_document, verify_claim) but git_commit_corrections and scan_vault_for_issues break the pattern with prepositional phrases or compound nouns, creating mild inconsistency.
With 5 tools, the set is well-scoped for a knowledge curator. Each tool serves a clear purpose without redundancy, and the count feels neither sparse nor overwhelming.
The tools cover the essential workflow: verify claims, fact-check documents, add citations, scan vaults, and commit. Minor gaps exist (e.g., no tool for reverting changes or editing citations manually), but core operations are present.
Maintenance
Related MCP Connectors
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Serve a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- AlicenseAqualityAmaintenanceLocal-first MCP server for working with an Obsidian vault. No API key required1715MIT
- AlicenseNot gradedqualityDmaintenanceLocal-first MCP server that extracts structured knowledge from markdown notes into SQLite with full-text search, enabling AI coding tools to retrieve relevant context offline at zero cost.3MIT
- AlicenseNot gradedqualityBmaintenanceMCP server that indexes your Obsidian notes into a Milvus vector database and enables querying them via a local or OpenAI LLM, with real-time synchronization.3MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for local-first RAG over Obsidian vaults, enabling AI agents to search and ask questions about notes with grounded citations.MIT