fathom-mcp
You can crawl and index documentation sites or local files, then perform semantic search over them via MCP tools, with REST API and web UI also available.
add_documentation: crawl/index a docs site; supports incremental re-ingestion, background jobs, sitemap discovery, language filtering, and pruning missing pages.search_documentation: semantic search over indexed docs; modes: hybrid (vector+keyword), vector, keyword; filter by name/version; set number of chunks (k).list_sources: list indexed sources with page and chunk counts.get_ingest_status: check progress of background crawl jobs by job ID.add_local_docs: index local folders containing HTML, Markdown, PDF, or TXT files for semantic search.REST API: endpoints for search, sources, upload files/folders, LLM chat, system info, and OpenAPI docs.
Web UI and MCP stdio integration for AI clients like Claude Code and OpenCode.
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., "@fathom-mcp ingest https://docs.example.com and search for 'authentication setup'"
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.
docs-mcp
Documentation RAG system: crawl a docs site → chunk + embed locally (HuggingFace) → store in Postgres+pgvector → semantic search via MCP server, REST API, and web UI.
Demo
live at https://docs-mcp.veermehta.dev
Related MCP server: MCPDocSearch
Architecture
flowchart LR
A[Browser] --> B[API Server]
B --> D[Web UI]
B --> C[(Postgres + pgvector)]
B --> G[Ingestion Pipeline]
G --> H[Scraper Subprocess]
G --> C
I[AI Client<br/>Claude Code, OpenCode] -->|MCP over stdio| F[MCP Server]
F --> CQuick start
git clone ... docs-mcp && cd docs-mcp
python -m venv .venv && source .venv/bin/activate
pip install -e ".[local]"
docker compose up -d
cp .env.example .env # set LLM_API_KEY
.venv/bin/docs-mcp-api # http://127.0.0.1:8000MCP tools
add_documentation · estimate_documentation · search_documentation · list_sources · get_ingest_status · add_local_docs
REST API
Endpoint | What |
| Semantic search |
| Indexed sources |
| Upload files |
| Index a local folder |
| Chat with docs |
| System info |
| Interactive OpenAPI documentation |
| OpenAPI schema |
OpenCode
~/.config/opencode/opencode.jsonc:
{
"mcp": {
"docs-mcp": {
"type": "local",
"command": ["/path/to/docs-mcp/.venv/bin/python", "-m", "docs_mcp.mcp"]
}
}
}verify it with:
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | /path/to/docs-mcp/.venv/bin/python -m docs_mcp.mcpConfig
Copy .env.example to .env — set EMBEDDING_PROVIDER=api + EMBEDDING_API_KEY for remote embeddings (Jina, OpenAI, etc.), or leave as local for HuggingFace.
Available Tools
5 toolsadd_documentationA
Crawl a framework/library documentation site and index it for semantic search.
Re-ingesting an existing source is incremental: pages whose extracted markdown is unchanged are skipped (no re-embedding).
Args: name: Short identifier for the framework, e.g. "react". version: Version string, e.g. "18.3" or "latest". base_url: Entry point URL of the documentation site. max_depth: How many link hops to follow from base_url. max_pages: Hard cap on the number of pages crawled. background: If true, start the crawl and return a job id immediately; track it with get_ingest_status. Large sites should use this to avoid tool timeouts. prune_missing: If true, delete indexed pages that this crawl did not visit. Only enable when depth/page caps cover the whole site, otherwise capped crawls would delete valid pages. lang: ISO 639-1 language code to filter pages (e.g. "en"). Only pages matching this language are crawled. sitemap: If true, discover pages from sitemap.xml instead of following links. Gives better coverage for docs sites that expose a sitemap.
Inputs: name (required), version (required), base_url (required), lang, +5 more. Returns: result
add_local_docsA
Index local documentation files from a folder on disk.
Walks the folder, finds supported files (HTML, Markdown, PDF, TXT), extracts text, chunks, embeds, and stores them for semantic search.
Args: name: Short identifier for this collection, e.g. "internal-api". path: Absolute or relative path to the folder on the server. recursive: If true, descend into subdirectories (default true).
Inputs: name (required), path (required), recursive. Returns: result
get_ingest_statusA
Check progress of a background add_documentation job.
Args: job_id: The id returned when the job was submitted with background=true.
Inputs: job_id (required). Returns: result
list_sourcesA
List all indexed documentation sources with page and chunk counts.
Inputs: no named parameters. Returns: result
search_documentationA
Semantic search over indexed documentation.
Returns the most relevant markdown chunks with their source URL and heading path. Use add_documentation first if nothing is indexed yet.
Args: query: What to look for, e.g. "how to define a loader". name: Optional framework name filter, e.g. "react". version: Optional version filter, e.g. "18.3". k: Number of chunks to return (1-20). mode: "hybrid" (default) fuses vector + keyword ranking; "vector" or "keyword" force a single strategy.
Inputs: query (required), k, mode, name, +1 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool targets a distinct operation: web ingestion (add_documentation), local ingestion (add_local_docs), job tracking (get_ingest_status), search (search_documentation), and enumeration (list_sources). The two ingest tools could superficially be confused, but their descriptions clearly separate web-crawl vs local-folder scopes.
All tools use consistent snake_case verb_noun naming: add_documentation, add_local_docs, get_ingest_status, search_documentation, list_sources. The verb set (add/get/search/list) is predictable and readable throughout.
Five tools is well-scoped for a documentation indexing/search server, covering ingestion, async job tracking, retrieval, and listing. No tool feels redundant or gratuitous.
The surface covers ingest (web + local), status, search, and list, which handles the core RAG lifecycle. However, there is no tool to delete or remove an indexed source, and no way to inspect job history or cancel a running job, leaving minor gaps.
Maintenance
Related MCP Connectors
Ingest, manage, and retrieve documents for RAG-powered AI applications
Shared knowledge base for AI agents. Semantic search across agents, no setup required — just a URL.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Versioned documentation registry and semantic search for AI tools and coding assistants.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to enhance their responses with relevant documentation through a semantic vector search, offering tools for managing and processing documentation efficiently.22 npm65MIT
- AlicenseNot gradedqualityNot gradedmaintenanceCrawls documentation websites and provides semantic search capabilities over the content through vector embeddings, enabling natural language queries of technical documentation.2MIT
- AlicenseCqualityDmaintenanceEnables AI agents to ingest documents, generate embeddings, and perform semantic search via PostgREST APIs.3ISC
- AlicenseAqualityCmaintenanceEnables ingestion and semantic search over text documents using PostgreSQL + pgvector and OpenAI-compatible embeddings, allowing any LLM agent to retrieve relevant chunks for grounded answers.4AGPL 3.0