by andrea9293
MCP Documentation Server - Bridge the AI Knowledge Gap. ✨ Features: Document management • Gemini integration • AI-powered semantic search • File uploads • Smart chunking • Multilingual support • Zero-setup 🎯 Perfect for: New frameworks • API docs • Internal guides
# Add to your Claude Code skills
git clone https://github.com/andrea9293/mcp-documentation-serverA TypeScript-based Model Context Protocol (MCP) server that provides local-first document management and semantic search. Documents are stored in an embedded Orama vector database with hybrid search (full-text + vector), intelligent chunking, and local AI embeddings — no external database or cloud service required.
.txt, .md, and .pdf files directly from the browserNo comments yet. Be the first to share your thoughts!
START_WEB_UI=false or change the port with WEB_PORT.txt, .md, or .pdf files into the uploads folder and process them with a single tool call~/.mcp-documentation-server/Example configuration for an MCP client (e.g., Claude Desktop, VS Code):
{
"mcpServers": {
"documentation": {
"command": "npx",
"args": [
"-y",
"@andrea9293/mcp-documentation-server"
]
}
}
}
Advanced with env vars (all vars are optional)
{
"mcpServers": {
"documentation": {
"command": "npx",
"args": [
"-y",
"@andrea9293/mcp-documentation-server"
],
"env": {
"MCP_BASE_DIR": "/path/to/workspace",
"GEMINI_API_KEY": "your-api-key-here",
"MCP_EMBEDDING_MODEL": "Xenova/all-MiniLM-L6-v2",
"START_WEB_UI": "true",
"WEB_PORT": "3080",
}
}
}
}
All environment variables are optional. Without GEMINI_API_KEY, only the local embedding-based search tools are available.
The web interface starts automatically on port 3080 when the MCP server launches. Open your browser at:
http://localhost:3080
From the web UI you can:
GEMINI_API_KEY is set)To run the web UI standalone (without the MCP server):
npm run web # Development (tsx)
npm run web:build # Production (compiled)
add_document or place .txt / .md / .pdf files in the uploads folder and call process_uploads.search_all_documents, or within a single document with search_documents.get_context_window to fetch neighboring chunks and give the LLM broader context.The server registers the following tools (all validated with Zod schemas):
| Tool | Description |
| --- | --- |
| add_document | Add a document (title, content, optional metadata) |
| list_documents | List all documents with metadata and content preview |
| get_document | Retrieve the full content of a document by ID |
| delete_document | Remove a document, its chunks, database entries, and associated files |
| Tool | Description |
| --- | --- |
| process_uploads | Process all files in the uploads folder (chunking + embeddings) |
| get_uploads_path | Returns the absolute path to the uploads folder |
| list_uploads_files | Lists files in the uploads folder with size and format info |
| get_ui_url | Returns the Web UI URL (e.g. http://localhost:3080) — useful to open the dashboard or to locate the uploads folder from the browser |
| Tool | Description |
| --- | --- |
| search_documents | Semantic vector search within a specific document |
| search_all_documents | Hybrid (full-text + vector) cross-document search |
| get_context_window | Returns a window of chunks around a given chunk index |
| search_documents_with_ai | 🤖 AI-powered search using Gemini (requires GEMINI_API_KEY) |
Configure via environment variables or a .env file in the project root:
| Variable | Default | Description |
| --- | --- | --- |
| MCP_BASE_DIR | ~/.mcp-documentation-server | Base directory for data storage |
| MCP_EMBEDDING_MODEL | Xenova/all-MiniLM-L6-v2 | Embedding model name |
| GEMINI_API_KEY | — | Google Gemini API key (enables search_documents_with_ai) |
| MCP_CACHE_ENABLED | true | Enable/disable LRU embedding cache |
| START_WEB_UI | true | Set to false to disable the built-in web interface |
| WEB_PORT | 3080 | Port for the web UI |
| MCP_STREAMING_ENABLED | true | Enable streaming reads for large files |
| MCP_STREAM_CHUNK_SIZE | 65536 | Streaming buffer size in bytes (64KB) |
| MCP_STREAM_FILE_SIZE_LIMIT | 10485760 | Threshold to switch to streaming (10MB) |
~/.mcp-documentation-server/ # Or custom path via MCP_BASE_DIR
├── data/
│ ├── orama-chunks.msp # Orama vector DB (child chunks + embeddings)
│ ├── orama-docs.msp # Orama document DB (full content + metadata)
│ ├── orama-parents.msp # Orama parent chunks DB (context sections)
│ ├── migration-complete.flag # Written after legacy JSON migration
│ └── *.md # Markdown copies of documents
└── uploads/ # Drop .txt, .md, .pdf files here
Set via MCP_EMBEDDING_MODEL:
| Model | Dimensions | Notes |
| --- | --- | --- |
| Xenova/all-MiniLM-L6-v2 | 384 | Default — fast, good quality |
| Xenova/paraphrase-multilingual-mpnet-base-v2 | 768 | Recommended — best quality, multilingual |
Models are downloaded on first use (~80–420 MB). The vector dimension is determined automatically from the provider.
⚠️ Important: Changing the embedding model requires re-adding all documents — embeddings from different models are incompatible. The Orama database is recreated automatically when the dimension changes.
Server (FastMCP, stdio)
├─ Web UI (Express, port 3080)
│ └─ REST API → DocumentManager
└─ MCP Tools
└─ DocumentManager
├─ OramaStore — Orama vector DB (chunks DB + docs DB + parents DB), persistence, migration
├─ IntelligentChunker — Parent-child chunking (code, markdown, text, PDF)
├─ EmbeddingProvider — Local embeddings via @xenova/transformers
│ └─ EmbeddingCache — LRU in-memory cache
└─ GeminiSearchService — Optional AI search via Google Gemini
git clone https://github.com/andrea9293/mcp-documentation-server.git
cd mcp-documentation-server
npm install
npm run dev # FastMCP dev mode with hot reload
npm run bu