papermoon-mkdocs-mcp
papermoon-mkdocs-mcp
Легковесный MCP-сервер для сайтов документации MkDocs. Читает markdown-файлы напрямую с диска, обеспечивает полнотекстовый и опциональный семантический поиск, а также предоставляет структуру проекта через Model Context Protocol.
Возможности
5 MCP-инструментов — search, read_document, list_documents, get_project_info, get_document_outline
Ключевой поиск SQLite FTS5 с ранжированием BM25 (без внешних зависимостей)
Опциональный семантический векторный поиск через sentence-transformers
Гибридный поиск — комбинация ключевого и векторного поиска с Reciprocal Rank Fusion
Инкрементальная индексация — быстрое обновление при изменении файлов
Постоянный SQLite-индекс, переживающий перезапуски сервера
Учёт навигации — парсит
mkdocs.ymlи.nav.ymlИсключаемые документы — черновики и внутренние страницы можно скрыть из MCP
Безопасность в приоритете — защита от path traversal, read-only соединения для поиска
Минимум зависимостей — 3 обязательных, 2 опциональных
Related MCP server: mdbook-mcp-server
Установка
pip install papermoon-mkdocs-mcpЧтобы включить векторный поиск:
pip install papermoon-mkdocs-mcp[vector]Быстрый старт
Запустите из корня любого MkDocs-проекта (где находится mkdocs.yml):
cd /path/to/your/mkdocs-project
papermoon-mkdocs-mcpИли укажите конкретный файл конфигурации:
papermoon-mkdocs-mcp --config /path/to/mkdocs.ymlСервер автоматически определяет mkdocs.yml в текущем каталоге, если --config
не указан.
Варианты транспорта
По умолчанию сервер использует транспорт stdio. Вы можете переключиться на сетевой транспорт для удалённых или много-клиентских сценариев:
# 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Флаг | По умолчанию | Описание |
|
|
|
|
| Адрес привязки (только сетевые транспорты) |
|
| Порт привязки (только сетевые транспорты) |
Примечание по безопасности: При привязке к не-loopback адресу размещайте сервер за обратным прокси (например, nginx, Caddy), который завершает TLS.
Конфигурация MCP-клиента
Claude Desktop
Добавьте в файл конфигурации Claude Desktop:
{
"mcpServers": {
"mkdocs": {
"command": "papermoon-mkdocs-mcp",
"args": ["--config", "/path/to/mkdocs.yml"]
}
}
}Примечание: Если Claude Desktop не может найти команду (Failed to spawn process: No such file or directory), используйте полный путь к исполняемому файлу вместо просто mkdocs-mcp:
{
"mcpServers": {
"mkdocs": {
"command": "/path/to/.venv/bin/mkdocs-mcp",
"args": ["--config", "/path/to/mkdocs.yml"]
}
}
}Это часто случается, когда пакет установлен в виртуальное окружение, чей каталог bin/ не входит в PATH Claude Desktop.
Claude Code / VS Code
Добавьте в .mcp.json в корне вашего проекта:
{
"mcpServers": {
"mkdocs": {
"command": "papermoon-mkdocs-mcp",
"args": ["--config", "/path/to/mkdocs.yml"]
}
}
}Доступные инструменты
search
Поиск по документации с использованием ключевого, семантического или гибридного поиска.
Параметр | Тип | По умолчанию | Описание |
| str | (обязательно) | Строка поискового запроса |
| str |
|
|
| int |
| Максимальное количество результатов (1–100) |
Возвращает ранжированные результаты с путём, заголовком, оценкой релевантности (нормализованной 0.0–1.0) и фрагментом текста.
read_document
Чтение файла документации по его относительному пути.
Параметр | Тип | По умолчанию | Описание |
| str | (обязательно) | Относительный путь от каталога docs (например, |
Возвращает тело markdown (без frontmatter), разобранный frontmatter как отдельное поле, структуру заголовков и метаданные файла.
list_documents
Список всех файлов документации, опционально отфильтрованных по разделу.
Параметр | Тип | По умолчанию | Описание |
| str или null |
| Префикс каталога для фильтрации (например, |
Возвращает метаданные документов (путь, заголовок, описание, категории, размер, время изменения).
get_project_info
Получение метаданных MkDocs-проекта. Не принимает параметров.
Возвращает название сайта, URL сайта, каталог docs, тему, дерево навигации, количество документов и статус индекса.
get_document_outline
Получение структуры заголовков (оглавления) для документа.
Параметр | Тип | По умолчанию | Описание |
| str | (обязательно) | Относительный путь от каталога docs (например, |
Возвращает заголовок документа и список заголовков с уровнем, текстом и якорем.
Исключение документов
Некоторые markdown-файлы не стоит показывать через MCP — черновики, внутренние
руководства, сгенерированные временные файлы. Добавьте список mcp_exclude в 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Исключения применяются сразу везде. Исключённый документ отсутствует в дереве
навигации, никогда не попадает в поисковый индекс, не появляется в
list_documents и отклоняется в read_document и get_document_outline
— отказ идентичен ответу для несуществующего файла, поэтому не раскрывает
наличие документа.
mcp_exclude влияет только на этот MCP-сервер. Он не меняет то, что публикует
mkdocs build.
Синтаксис шаблонов
Шаблоны в стиле gitignore и сопоставляются с путём документа относительно
docs_dir.
Шаблон | Что соответствует |
| Любой каталог с именем |
| Только |
| Всё под корневым |
| Файлы, заканчивающиеся на |
|
|
|
|
|
|
| Класс символов |
| Повторно включает путь, исключённый более ранним шаблоном |
Шаблон, содержащий
/, привязан кdocs_dir; без него — соответствует на любой глубине.Завершающий
/ограничивает шаблон каталогами, поэтомуdrafts/не скрывает файл с именемdrafts.md.Правила оцениваются по порядку, и последнее совпавшее решает, поэтому помещайте
!-повторные включения после правила, которое они вырезают.Пустые строки и комментарии
#игнорируются.
Вновь исключённые файлы удаляются из индекса при следующем запуске, а удаление
шаблона возвращает их — нет необходимости удалять .mkdocs-mcp.db.
Архитектура
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При запуске сервер читает mkdocs.yml, сканирует каталог docs и строит
(или инкрементально обновляет) индекс SQLite FTS5. Поисковые запросы обращаются
к индексу напрямую; векторный поиск преобразует запрос с помощью all-MiniLM-L6-v2 и
сравнивает с сохранёнными эмбеддингами документов. Гибридный режим объединяет оба
списка результатов с помощью Reciprocal Rank Fusion.
Разработка
git clone https://github.com/aspect-build/mkdocs-mcp.git
cd mkdocs-mcp
pip install -e ".[dev]"
pytestЛинтинг и проверка типов:
ruff check .
mypy src/Требования
Python >= 3.10
Обязательные: fastmcp (>=3.0, <4), pydantic (>=2.0, <3), pyyaml (>=6.0), markdown (>=3.4)
Опциональные (векторный поиск): sentence-transformers (>=3.0), numpy (>=1.24)
Лицензия
См. LICENSE для подробностей.
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.
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.
Related MCP Connectors
Read-only MCP server for the OrchestKit docs: full-text search + Markdown fetch. No auth.
Query any docs site via MCP. Submit a URL, ask questions, get cited answers.
Team docs served to AI agents over MCP - search, Markdown reads, version pinning, read audit.
Turn a GitHub repo or docs site into agent-ready context: pack it or search it, over MCP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables interaction with MkDocs documentation through the MCP protocol, allowing AI assistants to read, search, and retrieve documentation content from MkDocs projects.9MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to access and read mdbook documentation, including structure, content, and search.203MIT
- AlicenseNot gradedqualityDmaintenanceProvides semantic search over markdown documentation using RAG, allowing natural language queries and integration with MCP clients.1MIT
- FlicenseAqualityDmaintenanceEnables searching documentation from GitHub repositories and web pages via MCP tools, with in-memory indexing and caching for fast retrieval.3-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/papermoonio/mkdocs-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server