mcp-docs-server
by praveenc
README.md
# MCP Docs Server
A Model Context Protocol (MCP) server for searching MCP protocol documentation. Built with TypeScript using the official MCP SDK.
[](https://www.npmjs.com/package/@praveenc/mcp-docs-server)
[](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.praveenc%2Fmcp-docs-server/versions/0.1.0)
## Features
- **BM25 Search** - High-quality ranked search using BM25 algorithm with Porter stemming
- **Fast Startup** - Indexes document titles at startup, fetches content on-demand
- **Markdown Aware** - Weights headers, code blocks, and links for better relevance
- **stdio Transport** - Runs as a local process for easy integration
## Installation
### Quick Start (Recommended)
Add to your MCP client configuration (Claude Desktop, Kiro, etc.):
```json
{
"mcpServers": {
"mcp-docs-server": {
"command": "npx",
"args": ["-y", "@praveenc/mcp-docs-server"]
}
}
}
```
That's it! The server will be downloaded and run automatically.
### Global Install
```bash
npm install -g @praveenc/mcp-docs-server
```
Then configure your MCP client:
```json
{
"mcpServers": {
"mcp-docs-server": {
"command": "mcp-docs-server"
}
}
}
```
## Tools
### search_mcp_docs
Search MCP protocol documentation with ranked results.
**Parameters:**
- `query` (string, required): Search query string
- `k` (number, optional): Maximum results to return (default: 5). Returns fewer if fewer documents match.
**Example:**
```json
{
"query": "transports",
"k": 5
}
```
**Returns:**
```json
[
{
"url": "https://modelcontextprotocol.io/specification/2025-11-25/basic/transports.md",
"title": "Transports",
"score": 15.725,
"snippet": "MCP uses JSON-RPC to encode messages..."
}
]
```
### fetch_mcp_doc
Fetch full document content by URL.
**Parameters:**
- `uri` (string, required): Document URL from modelcontextprotocol.io
**Example:**
```json
{
"uri": "https://modelcontextprotocol.io/specification/2025-11-25/server/tools.md"
}
```
**Returns:**
```json
{
"url": "https://modelcontextprotocol.io/specification/2025-11-25/server/tools.md",
"title": "Tools",
"content": "# Tools\n\nTools enable servers to expose executable functionality..."
}
```
## Testing with MCP Inspector
```bash
npx @modelcontextprotocol/inspector npx -y @praveenc/mcp-docs-server
```
## Development
Clone the repository for local development:
```bash
git clone https://github.com/praveenc/mcp-docs-server.git
cd mcp-docs-server
npm install
```
### Commands
```bash
# Run in development mode
npm run dev
# Run tests
npm test
# Type check
npm run typecheck
# Build
npm run build
# Test with MCP Inspector (development)
npm run inspect:dev
```
### Local MCP Client Config (Development)
```json
{
"mcpServers": {
"mcp-docs-server": {
"command": "npx",
"args": ["tsx", "/path/to/mcp-docs-server/src/index.ts"]
}
}
}
```
## Architecture
```text
src/
├── index.ts # MCP server entry point
├── config.ts # Configuration
├── tools/
│ └── docs.ts # search_mcp_docs, fetch_mcp_doc
└── utils/
├── cache.ts # Document caching
├── doc-fetcher.ts # HTTP fetching & HTML parsing
├── indexer.ts # BM25 search index
├── logger.ts # Logging utilities
├── stopwords.ts # Stop words list
├── text-processor.ts # Text utilities
└── url-validator.ts # URL validation
```
## Search Algorithm
The search uses BM25 (Best Matching 25) with enhancements:
- **Porter Stemming** - Matches word variants (e.g., "running" → "run")
- **Bigrams** - Captures phrase matches (e.g., "tool input")
- **Weighted Scoring**:
- Title matches: 3-8x boost
- Header matches: 4x weight
- Code blocks: 2x weight
- Link text: 2x weight
- **Domain Term Preservation** - Technical terms like "mcp", "json", "stdio" are not stemmed
## License
MIT
TDQS
A3.7/5.0
Scored across 2 tools
Disambiguation5/5
The two tools have clearly distinct purposes: one fetches a specific document by URL, the other searches across documents. No overlap in functionality.
Naming Consistency5/5
Both tool names follow a consistent verb_noun pattern (fetch_mcp_doc, search_mcp_docs) and use snake_case uniformly.
Tool Count3/5
With only two tools, the server is minimal but still covers the core operations of searching and fetching documentation. However, it feels slightly thin for a documentation server.
Completeness3/5
The server allows searching and fetching full documents, but lacks operations like listing all available documents or browsing by category, which are common in documentation servers.
Maintenance
ActivityInactive
ResponsivenessNo issues