docs2db-mcp-server
MCP server for docs2db-api RAG queries. Provides semantic and hybrid search tools for RHEL documentation. Compatible with llama-stack, Goose, Claude Desktop, and other MCP clients.
Features
- Hybrid Search: Combines vector similarity and BM25 keyword search with Reciprocal Rank Fusion
- Cross-Encoder Reranking: Improves result quality using ms-marco-MiniLM-L-6-v2
- MCP Protocol: Standard Model Context Protocol via FastMCP
- SSE Transport: Server-Sent Events for real-time streaming
- Configurable: Environment variables for all settings
- Production Ready: Containerized, non-root user, health checks
Installation
Prerequisites
Install uv:
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Or with brew
brew install uv
From PyPI
uv add docs2db-mcp-server
From Source
git clone https://github.com/rhel-lightspeed/docs2db-mcp-server.git
cd docs2db-mcp-server
uv sync
uv pip install -e .
Quick Start
Prerequisites
- PostgreSQL with pgvector containing docs2db RAG database
- docs2db to build the RAG database (see docs2db)
Running the Server
# Start the MCP server (uses localhost defaults)
uv run python -m docs2db_mcp
Default configuration connects to postgresql://postgres:postgres@localhost:5432/ragdb
Server will start on http://localhost:8002/sse
Using with llama-stack
Add to your run.yaml:
tool_runtime:
- provider_id: model-context-protocol
provider_type: remote::model-context-protocol
registered_resources:
tool_groups:
- toolgroup_id: mcp::docs2db-rag
provider_id: model-context-protocol
mcp_endpoint:
uri: http://localhost:8002/sse
Using with Goose
Add to ~/.config/goose/profiles.yaml:
extensions:
docs2db-rag:
enabled: true
type: stdio
name: docs2db-rag
cmd: uv
args: ["run", "python", "-m", "docs2db_mcp"]
Using with Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"docs2db-rag": {
"command": "uv",
"args": ["run", "python", "-m", "docs2db_mcp"]
}
}
}
Configuration
All configuration via environment variables with DOCS2DB_MCP_ prefix:
MCP Server Settings
| Variable | Default | Description |
|---|---|---|
DOCS2DB_MCP_TRANSPORT |
sse |
Transport type (sse/stdio) |
DOCS2DB_MCP_HOST |
0.0.0.0 |
Bind address |
DOCS2DB_MCP_PORT |
8002 |
Port number |
DOCS2DB_MCP_LOG_LEVEL |
INFO |
Logging level |
Database Settings
| Variable | Default | Description |
|---|---|---|
DOCS2DB_MCP_DB_HOST |
localhost |
PostgreSQL host |
DOCS2DB_MCP_DB_PORT |
5432 |
PostgreSQL port |
DOCS2DB_MCP_DB_DATABASE |
ragdb |
Database name |
DOCS2DB_MCP_DB_USER |
postgres |
Database user |
DOCS2DB_MCP_DB_PASSWORD |
postgres |
Database password |
RAG Settings
| Variable | Default | Description |
|---|---|---|
DOCS2DB_MCP_RAG_SIMILARITY_THRESHOLD |
0.7 |
Minimum similarity score |
DOCS2DB_MCP_RAG_MAX_CHUNKS |
5 |
Maximum chunks to return |
DOCS2DB_MCP_RAG_ENABLE_RERANKING |
true |
Enable cross-encoder reranking |
Tools
search_documents
Search RHEL documentation using hybrid search (vector + BM25).
Parameters:
query(string, required): Search querymax_chunks(integer, optional): Maximum chunks to return (default: 5)similarity_threshold(float, optional): Minimum similarity score (default: 0.7)enable_reranking(boolean, optional): Enable cross-encoder reranking (default: true)
Returns:
{
"chunks": [
{
"text": "Chunk content...",
"contextual_text": "LLM-generated context...",
"similarity": 0.85,
"source": "path/to/source/file.html",
"metadata": {...}
}
],
"query_used": "original query"
}
Docker/Podman
Build Image
podman build -t docs2db-mcp-server .
Run Container
podman run -d \
--name docs2db-mcp \
-p 8002:8002 \
-e DOCS2DB_MCP_DB_HOST=postgres \
-e DOCS2DB_MCP_DB_PASSWORD=mysecret \
docs2db-mcp-server
Docker Compose / Podman Compose
services:
postgres:
image: pgvector/pgvector:pg17
environment:
POSTGRES_PASSWORD: postgres
volumes:
- ragdb:/var/lib/postgresql/data
- ./ragdb_dump.sql:/docker-entrypoint-initdb.d/init.sql
docs2db-mcp:
image: docs2db-mcp-server
ports:
- "8002:8002"
environment:
DOCS2DB_MCP_DB_HOST: postgres
DOCS2DB_MCP_DB_PASSWORD: postgres
depends_on:
- postgres
Development
# Clone repo
git clone https://github.com/rhel-lightspeed/docs2db-mcp-server.git
cd docs2db-mcp-server
# Install dependencies
uv sync
uv pip install -e ".[dev]"
# Run tests
uv run pytest
# Run linters
uv run ruff check .
uv run mypy src/
Architecture
┌─────────────────────────────────────┐
│ MCP Client │
│ (llama-stack, Goose, Claude, etc.) │
└──────────────┬──────────────────────┘
│ MCP Protocol (SSE/stdio)
↓
┌─────────────────────────────────────┐
│ docs2db-mcp-server │
│ │
│ FastMCP Server │
│ └─ search_documents (tool) │
│ ↓ │
│ UniversalRAGEngine │
│ (from docs2db-api) │
└──────────────┬──────────────────────┘
│
↓
┌─────────────────────────────────────┐
│ PostgreSQL + pgvector │
│ (docs2db RAG database) │
└─────────────────────────────────────┘
Related Projects
- docs2db - Build RAG databases from documents
- docs2db-api - Query API for docs2db databases
- linux-mcp-server - MCP server for Linux diagnostics
License
Apache License 2.0 - See LICENSE for details.
Contributing
Contributions welcome! Please open an issue or pull request.
Support
Metadata
Release files for docs2db-mcp-server 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| docs2db_mcp_server-0.1.0.tar.gz | 263.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| docs2db_mcp_server-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 276.7 kB
Release files / docs2db_mcp_server-0.1.0.tar.gz
| Download URL | docs2db_mcp_server-0.1.0.tar.gz |
|---|---|
| Size | 263.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
974fd747e8a7110ffb4f2a1cde800ab96668bd89d045e58339f6850ce00dbfa0
|
|
BLAKE2b-256 checksum How to use checksums |
9cab4f0183ce3278387f983478f3a776fd91e0be8e8b606bcce84da35772096c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.7.11
|
Release files / docs2db_mcp_server-0.1.0-py3-none-any.whl
| Download URL | docs2db_mcp_server-0.1.0-py3-none-any.whl |
|---|---|
| Size | 13.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
18ac0a8751bd079168a128bd4ab4727d9332d417b44c73a2d9d6822f9827df66
|
|
BLAKE2b-256 checksum How to use checksums |
56532525a121288d9149b5432058dfcfd650a205f40c5603bca537fdd27dc582
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.7.11
|