Skip to main content
Glama
papermoonio

papermoon-mkdocs-mcp

by papermoonio

papermoon-mkdocs-mcp

Un servidor MCP ligero para sitios de documentación MkDocs. Lee archivos markdown directamente del disco, proporciona búsqueda de texto completo y búsqueda semántica opcional, y expone la estructura del proyecto a través del Protocolo de Contexto de Modelo.

Características

  • 5 herramientas MCP -- search, read_document, list_documents, get_project_info, get_document_outline

  • Búsqueda de palabras clave SQLite FTS5 con clasificación BM25 (cero dependencias externas)

  • Búsqueda semántica vectorial opcional mediante sentence-transformers

  • Búsqueda híbrida que combina resultados de palabras clave y vectores con fusión de rango recíproco

  • Indexación incremental -- actualizaciones rápidas cuando los archivos cambian

  • Índice SQLite persistente que sobrevive a los reinicios del servidor

  • Consciente de la navegación -- analiza mkdocs.yml y .nav.yml

  • Documentos excluibles -- mantén borradores y páginas internas fuera de la superficie MCP

  • Seguridad primero -- prevención de traversal de rutas, conexiones de búsqueda de solo lectura

  • Dependencias mínimas -- 3 requeridas, 2 opcionales

Related MCP server: mdbook-mcp-server

Instalación

pip install papermoon-mkdocs-mcp

Para habilitar la búsqueda vectorial:

pip install papermoon-mkdocs-mcp[vector]

Inicio rápido

Ejecuta desde la raíz de cualquier proyecto MkDocs (donde se encuentra mkdocs.yml):

cd /path/to/your/mkdocs-project
papermoon-mkdocs-mcp

O apunta a un archivo de configuración específico:

papermoon-mkdocs-mcp --config /path/to/mkdocs.yml

El servidor detecta automáticamente mkdocs.yml en el directorio actual cuando se omite --config.

Opciones de transporte

Por defecto, el servidor utiliza el transporte stdio. Puedes cambiar a un transporte de red para configuraciones remotas o de múltiples clientes:

# Streamable HTTP (recommended for network access)
papermoon-mkdocs-mcp --transport streamable-http --host 0.0.0.0 --port 9000

# SSE (legacy client compatibility)
papermoon-mkdocs-mcp --transport sse --port 8080

Flag

Default

Descripción

--transport

stdio

stdio, sse o streamable-http

--host

127.0.0.1

Dirección de enlace (solo transportes de red)

--port

8000

Puerto de enlace (solo transportes de red)

Nota de seguridad: Al enlazar a una dirección que no sea de loopback, coloca el servidor detrás de un proxy inverso (por ejemplo, nginx, Caddy) que termine TLS.

Configuración del cliente MCP

Claude Desktop

Añade a tu archivo de configuración de Claude Desktop:

{
  "mcpServers": {
    "mkdocs": {
      "command": "papermoon-mkdocs-mcp",
      "args": ["--config", "/path/to/mkdocs.yml"]
    }
  }
}

Nota: Si Claude Desktop no puede encontrar el comando (Failed to spawn process: No such file or directory), usa la ruta completa al ejecutable en lugar de solo mkdocs-mcp:

{
  "mcpServers": {
    "mkdocs": {
      "command": "/path/to/.venv/bin/mkdocs-mcp",
      "args": ["--config", "/path/to/mkdocs.yml"]
    }
  }
}

Esto es común cuando el paquete está instalado en un entorno virtual cuyo directorio bin/ no está en el PATH de Claude Desktop.

Claude Code / VS Code

Añade a .mcp.json en la raíz de tu proyecto:

{
  "mcpServers": {
    "mkdocs": {
      "command": "papermoon-mkdocs-mcp",
      "args": ["--config", "/path/to/mkdocs.yml"]
    }
  }
}

Herramientas disponibles

Busca documentación usando búsqueda de palabras clave, semántica o híbrida.

Parámetro

Tipo

Default

Descripción

query

str

(requerido)

La cadena de consulta de búsqueda

search_type

str

"hybrid"

"keyword", "vector" o "hybrid"

max_results

int

10

Máximo de resultados a devolver (1--100)

Devuelve resultados clasificados con ruta, título, puntuación de relevancia (normalizada 0.0--1.0) y fragmento de texto.

read_document

Lee un archivo de documentación por su ruta relativa.

Parámetro

Tipo

Default

Descripción

path

str

(requerido)

Ruta relativa desde el directorio de docs (por ejemplo, guide/setup.md)

Devuelve el cuerpo markdown (frontmatter eliminado), el frontmatter analizado como un campo separado, la estructura de encabezados y los metadatos del archivo.

list_documents

Lista todos los archivos de documentación, opcionalmente filtrados por sección.

Parámetro

Tipo

Default

Descripción

section

str o null

null

Prefijo de directorio para filtrar (por ejemplo, guide)

Devuelve metadatos de documentos (ruta, título, descripción, categorías, tamaño, mtime).

get_project_info

Obtiene metadatos del proyecto MkDocs. No toma parámetros.

Devuelve el nombre del sitio, URL del sitio, directorio de docs, tema, árbol de navegación, número de documentos y estado del índice.

get_document_outline

Obtiene la estructura de encabezados (tabla de contenidos) de un documento.

Parámetro

Tipo

Default

Descripción

path

str

(requerido)

Ruta relativa desde el directorio de docs (por ejemplo, guide/setup.md)

Devuelve el título del documento y una lista de encabezados con nivel, texto y ancla.

Exclusión de documentos

Algunos archivos markdown no merecen exponerse a través de MCP: borradores, runbooks internos, archivos de trabajo generados. Añade una lista mcp_exclude a mkdocs.yml:

site_name: My Docs

mcp_exclude:
  - drafts/             # any directory named 'drafts', at any depth
  - internal/**         # anchored: only 'internal/' at the docs root
  - "*-scratch.md"      # by filename suffix, at any depth
  - "!internal/public.md"  # re-include one file from a broader rule

Las exclusiones se aplican en todas partes a la vez. Un documento excluido está ausente del árbol de navegación, nunca entra en el índice de búsqueda, no aparece en list_documents y es rechazado por read_document y get_document_outline -- el rechazo es idéntico a la respuesta para un archivo que no existe, por lo que no revela que el documento está ahí.

mcp_exclude afecta solo a este servidor MCP. No cambia lo que mkdocs build publica.

Sintaxis de patrones

Los patrones son de estilo gitignore y coinciden con la ruta de un documento relativa a docs_dir.

Patrón

Coincide

drafts/

Cualquier directorio llamado drafts y todo lo que contiene

/drafts/

Solo drafts/ en la raíz de docs

internal/**

Todo bajo un internal/ de nivel raíz

*.tmp.md

Archivos que terminan en .tmp.md, a cualquier profundidad

guide/*.md

Archivos .md directamente en guide/ (no en subdirectorios)

guide/**/*.md

Archivos .md en cualquier lugar bajo guide/

draft?.md

draft1.md, draftx.md -- ? es un solo carácter

draft[0-9].md

Una clase de caracteres

!keep/this.md

Re-incluye una ruta que un patrón anterior excluyó

  • Un patrón que contiene / está anclado en docs_dir; uno sin él coincide a cualquier profundidad.

  • Una / final restringe un patrón a directorios, por lo que drafts/ no oculta un archivo llamado drafts.md.

  • Las reglas se evalúan en orden y la última que coincida decide, así que coloca las re-inclusiones ! después de la regla que recortan.

  • Las líneas en blanco y los comentarios # se ignoran.

Los archivos recién excluidos se eliminan del índice en la siguiente ejecución, y eliminar un patrón los trae de vuelta -- no es necesario borrar .mkdocs-mcp.db.

Arquitectura

src/mkdocs_mcp/
  config.py      -- MkDocs config detection and nav parsing
  exclusions.py  -- mcp_exclude pattern matching
  repository.py  -- SQLite schema and CRUD operations
  indexer.py     -- Index orchestration with incremental updates
  searcher.py    -- Keyword, vector, and hybrid search
  server.py      -- FastMCP server with 5 tool definitions
  utils.py       -- Path validation, frontmatter parsing, text extraction
  models.py      -- Pydantic response models

Al iniciar, el servidor lee mkdocs.yml, escanea el directorio de docs y construye (o actualiza incrementalmente) un índice SQLite FTS5. Las consultas de búsqueda acceden al índice directamente; la búsqueda vectorial incrusta la consulta con all-MiniLM-L6-v2 y la compara con las incrustaciones de documentos almacenadas. El modo híbrido fusiona ambas listas de resultados usando fusión de rango recíproco.

Desarrollo

git clone https://github.com/aspect-build/mkdocs-mcp.git
cd mkdocs-mcp
pip install -e ".[dev]"
pytest

Linting y verificación de tipos:

ruff check .
mypy src/

Requisitos

  • Python >= 3.10

  • Requeridos: fastmcp (>=3.0, <4), pydantic (>=2.0, <3), pyyaml (>=6.0), markdown (>=3.4)

  • Opcionales (búsqueda vectorial): sentence-transformers (>=3.0), numpy (>=1.24)

Licencia

Consulta LICENSE para más detalles.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables interaction with MkDocs documentation through the MCP protocol, allowing AI assistants to read, search, and retrieve documentation content from MkDocs projects.
    9
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides semantic search over markdown documentation using RAG, allowing natural language queries and integration with MCP clients.
    1
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables searching documentation from GitHub repositories and web pages via MCP tools, with in-memory indexing and caching for fast retrieval.
    3
    -

Latest Blog Posts

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/papermoonio/mkdocs-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server