Skip to main content

MCP server for docs2db-api RAG queries

Project description

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

  1. PostgreSQL with pgvector containing docs2db RAG database
  2. 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 query
  • max_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

License

Apache License 2.0 - See LICENSE for details.

Contributing

Contributions welcome! Please open an issue or pull request.

Support

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

docs2db_mcp_server-0.1.0.tar.gz (263.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

docs2db_mcp_server-0.1.0-py3-none-any.whl (13.4 kB view details)

Uploaded Python 3

File details

Details for the file docs2db_mcp_server-0.1.0.tar.gz.

File metadata

  • Download URL: docs2db_mcp_server-0.1.0.tar.gz
  • Upload date:
  • Size: 263.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.11

File hashes

Hashes for docs2db_mcp_server-0.1.0.tar.gz
Algorithm Hash digest
SHA256 974fd747e8a7110ffb4f2a1cde800ab96668bd89d045e58339f6850ce00dbfa0
MD5 10954303ff17f6584cf5fa4729732175
BLAKE2b-256 9cab4f0183ce3278387f983478f3a776fd91e0be8e8b606bcce84da35772096c

See more details on using hashes here.

File details

Details for the file docs2db_mcp_server-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for docs2db_mcp_server-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 18ac0a8751bd079168a128bd4ab4727d9332d417b44c73a2d9d6822f9827df66
MD5 8a78892963a4847a4d1928905892c2fc
BLAKE2b-256 56532525a121288d9149b5432058dfcfd650a205f40c5603bca537fdd27dc582

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page