linked-docs
Click on "Install 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., "@linked-docswhat are the different enemy types in Factorio?"
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.
Linked Documentation System
A production-ready RAG system with dual interfaces: REST API + MCP Protocol
Enables web applications and AI assistants to intelligently search and reference documentation using hybrid semantic + keyword search.
🎯 What Is This?
This is a complete RAG (Retrieval Augmented Generation) system that provides two ways to access powerful documentation search:
REST API Server (
main.py) - FastAPI-based HTTP server for web applications and integrationsMCP Server (
mcp_server.py) - Model Context Protocol server for AI assistants (Cursor, Claude Desktop)
Both servers share the same hybrid search engine, enabling accurate documentation retrieval whether you're building a web app or empowering an AI assistant.
Key Features
Intelligent Hybrid Search: Combines semantic understanding (FAISS embeddings) with keyword matching (BM25)
Smart Ranking: Title/metadata boosting, multi-chunk document expansion, relevance scoring
Multi-Format Support: PDF, Markdown, and web documentation (via built-in scraper)
MCP Native: Works seamlessly in Cursor, Claude Desktop, and other MCP-compatible tools
Enterprise Ready: Access control, audit logging, local-first architecture
Fast: <200ms search latency, optimized chunking and indexing
Zero Cost: Runs 100% locally, no API keys or cloud dependencies
Related MCP server: Documentation Fetcher & RAG Search
🏗️ How It Works
┌─────────────────────────────────────────────────────────┐
│ AI Assistant (Cursor/Claude) │
└────────────────────┬────────────────────────────────────┘
│ MCP Protocol (JSON-RPC over stdio)
▼
┌─────────────────────────────────────────────────────────┐
│ mcp_server.py │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Tools: search_documentation(), list_sources() │ │
│ └─────────────────────────────────────────────────┘ │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────┼────────────────┐
▼ ▼ ▼
┌─────────┐ ┌──────────┐ ┌──────────────┐
│ Hybrid │ │ Access │ │ Audit Logger │
│ Search │ │ Control │ │ │
└────┬────┘ └──────────┘ └──────────────┘
│
├─ Semantic Search (FAISS + embeddings)
│ • Title/metadata boosting
│ • Multi-chunk document expansion
│
└─ Keyword Search (BM25)
• Exact term matching
• Traditional rankingProject Structure
LinkedDocsMCP/
├── mcp_server.py # Main MCP server (stdio interface)
├── main.py # FastAPI server (for testing/debugging)
├── download_docs.py # Web documentation scraper CLI
├── connectors/ # Document format handlers
│ ├── pdf.py # PDF extraction
│ └── markdown.py # Markdown parsing
├── indexing/ # Search engine core
│ ├── chunker.py # Semantic text chunking
│ ├── embedder.py # Sentence transformers
│ ├── vector_store.py # FAISS vector database
│ ├── keyword_search.py # BM25 implementation
│ └── hybrid_search.py # Combined search with boosting
├── schemas/ # Data models
│ ├── config.py # Settings & configuration
│ └── document.py # Document schemas
├── core/ # Cross-cutting concerns
│ ├── access_control.py # Permission system
│ └── audit.py # Query logging
└── data/ # Local storage
├── sources/ # Your documents (PDF, MD)
└── vector_store/ # Indexed vectors & metadata🚀 Quick Start (5 Minutes)
Prerequisites
Python 3.10+
Cursor or Claude Desktop (for MCP integration)
1. Install Dependencies
pip install -r requirements.txtFirst run: Downloads ~80MB embedding model (one-time)
2. Add Documentation
Option A: Download from web
# Download Factorio wiki (example)
python download_docs.py https://wiki.factorio.com/Tutorials --crawl --max 20Option B: Add your own files
# Copy PDFs or Markdown files
copy your-docs.pdf data/sources/
copy your-guide.md data/sources/3. Set Up MCP in Cursor (or other LLM service)
Add to your Cursor MCP config (~/.cursor/mcp.json or C:\Users\<USER>\.cursor\mcp.json):
{
"mcpServers": {
"linked-docs": {
"command": "python",
"args": ["C:/full/path/to/LinkedDocsMCP/mcp_server.py"]
}
}
}4. Restart Cursor & Use!
In Cursor's chat:
What are the different enemy types in Factorio?The AI will automatically search your documentation and provide accurate, cited answers! ✨
Key Features Explained
Hybrid Search
Combines two complementary approaches:
Semantic Search (70% weight)
Uses
sentence-transformers(all-MiniLM-L6-v2 model)Understands meaning: "authentication setup" matches "configuring auth"
Converts text to 384-dimensional vectors
Fast similarity search with FAISS
Keyword Search (30% weight)
Uses BM25 algorithm (same as Elasticsearch)
Exact term matching: great for technical terms, code, etc.
Traditional ranking with document length normalization
Smart Ranking Enhancements:
Title Boosting: Documents whose titles match the query get 3x boost
Multi-Chunk Expansion: Returns up to 3 sequential chunks from highly relevant documents
Document Grouping: Results grouped by source document for better context
Semantic Chunking
Unlike naive character-splitting, this uses smart boundaries:
Markdown headers (
##,###) - keeps sections togetherParagraph breaks (
\n\n) - maintains topical coherenceSentences - fallback for unstructured text
Settings:
Chunk size: 2048 characters (whole sections, not fragments)
Overlap: 200 characters (prevents context loss at boundaries)
Web Documentation Scraper
Built-in tool to download and convert web docs:
# Download single page
python download_docs.py https://wiki.example.com/Guide
# Crawl multiple pages (with smart duplicate detection)
python download_docs.py https://wiki.example.com/Main --crawl --max 50
# Force re-download (skip existing detection)
python download_docs.py https://wiki.example.com/Main --crawl --force
# Filter by language
python download_docs.py https://wiki.example.com/Main --crawl --languages en,deFeatures:
Auto-detects and skips existing pages (saves time & bandwidth)
Respects same-domain and link patterns
Polite crawling with configurable delays
Converts HTML to clean Markdown with metadata
Preserves document structure (headers, lists, tables)
🔒 Security & Access Control
Built-in features:
4-tier access hierarchy: PUBLIC → INTERNAL → RESTRICTED → CONFIDENTIAL
Query-time filtering based on user permissions
Full audit logging (every query tracked)
Local-only processing (no data leaves your machine)
Audit logs (data/audit.log):
{
"timestamp": "2025-10-21T14:30:00Z",
"event_type": "search",
"user_id": "mcp_client",
"query": "enemy types",
"results_count": 5,
"search_time_ms": 143
}⚙️ Configuration
Edit schemas/config.py or set environment variables:
# Search weights
SEMANTIC_WEIGHT = 0.7 # Meaning-based search
KEYWORD_WEIGHT = 0.3 # Exact term matching
# Chunking
CHUNK_SIZE = 1280 # Larger chunks for complete sections
CHUNK_OVERLAP = 128 # Overlap for context continuity
# Model
EMBEDDING_MODEL = "all-MiniLM-L6-v2" # Fast, accurate, small🔧 Advanced Usage
REST API (for testing/debugging)
# Start FastAPI server
python main.py
# Search via REST
curl -X POST http://localhost:8000/api/v1/search_docs \
-H "Content-Type: application/json" \
-d '{"query": "getting started", "top_k": 5}'
# Interactive API docs
open http://localhost:8000/docsProgrammatic Usage
from indexing.embedder import Embedder
from indexing.vector_store import VectorStore
from indexing.hybrid_search import HybridSearchEngine
# Initialize
embedder = Embedder(model_name="all-MiniLM-L6-v2")
vector_store = VectorStore(embedding_dim=384)
search_engine = HybridSearchEngine(vector_store, keyword_searcher, embedder)
# Search
results = search_engine.search("how to configure auth", top_k=5)
for chunk, score in results:
print(f"{score:.3f}: {chunk.text[:100]}...")Technical Highlights
Hybrid search outperforms pure semantic or keyword alone
Smart chunking preserves document structure
Title boosting dramatically improves ranking quality
Multi-chunk expansion provides complete context
Zero cloud dependencies - privacy-first architecture
MCP native - works with any compatible AI assistant
🙏 Acknowledgments
Built with:
FastAPI - Modern Python web framework
Sentence Transformers - Semantic embeddings
FAISS - Vector similarity search
BM25 (rank-bm25) - Keyword ranking
MCP - Model Context Protocol by Anthropic
Status: ✅ Demo Ready | Version: 1.0.0 | Updated: October 2025
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/folence/Linked-Docs-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server