QMD MCP
QMD MCP
QMD MCP упаковывает QMD в виде долго работающего Streamable HTTP MCP-сервера. Он предоставляет поиск QMD и получение документов, а также ограниченные операции обслуживания индекса, не открывая доступа к произвольному выполнению команд оболочки.
Это поддерживаемая сообществом интеграция. Она не связана с вышестоящим проектом QMD, не одобрена им и не поддерживается им официально.
Обратная связь и вклад
Используйте GitHub Issues для сообщений об ошибках и запросов новых функций, а pull requests — для предлагаемых изменений. Описание рабочего процесса разработки, требований к тестам и соглашений о кодировании см. в CONTRIBUTING.md. Проблемы безопасности должны обрабатываться через приватный процесс, описанный в SECURITY.md.
Изменения в релизах фиксируются в CHANGELOG.md.
Related MCP server: Web Search MCP Remote Server
Быстрый старт
Публичный Docker-образ публикуется в GitHub Container Registry (GHCR):
ghcr.io/x1pher/qmd-mcp:v0.1.3Пакет является публичным, поэтому Docker не требует входа в GitHub для его загрузки.
Для производственных развертываний используйте неизменяемый digest, опубликованный в соответствующем GitHub Release, а не полагайтесь только на тег версии.
Образ в настоящее время поддерживает linux/amd64. Он намеренно содержит только нативный рантайм llama QMD linux-x64, чтобы размер образа оставался ограниченным.
1. Создайте каталоги
mkdir -p qmd/config qmd/content
cd qmdПоместите файлы Markdown, которые вы хотите индексировать с помощью QMD, в content/.
2. Создайте config/index.yml
global_context: >-
This is a local Markdown knowledge base. Search results are discovery evidence;
read the source document before relying on a material claim.
collections:
notes:
path: /vault
pattern: "**/*.md"
ignore:
- "archive/**"
archive:
path: /vault/archive
pattern: "**/*.md"
includeByDefault: false
append-only-log:
path: /vault/logs
pattern: "history.md"
includeByDefault: false
embedding: falseЗначения path указывают на пути внутри контейнера. Пример Compose ниже монтирует ./content в /vault.
embedding: false — это расширение обёртки QMD MCP для коллекций, которые должны оставаться только лексическими. Файлы по-прежнему индексируются и доступны для явного лексического поиска (lex), но исключаются из проверки состояния эмбеддингов, запланированного создания эмбеддингов и ручных заданий start_embed. Используйте это для больших журналов с добавлением только в конец или других материалов, требующих точного поиска, где повторное построение векторов добавляет затраты, не давая полезного семантического поиска.
3. Создайте compose.yml
services:
qmd-mcp:
image: ghcr.io/x1pher/qmd-mcp:v0.1.3
container_name: qmd-mcp
environment:
QMD_FORCE_CPU: "1"
QMD_REFRESH_INTERVAL_MINUTES: "15"
QMD_REFRESH_INITIAL_DELAY_SECONDS: "120"
ports:
- "127.0.0.1:8181:8181"
volumes:
- ./content:/vault:ro
- ./config:/config:ro
- qmd-data:/data
healthcheck:
test:
- CMD
- node
- -e
- >-
fetch('http://127.0.0.1:8181/health')
.then(r=>process.exit(r.ok?0:1))
.catch(()=>process.exit(1))
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
restart: unless-stopped
volumes:
qmd-data:В примере HTTP-порт привязывается только к loopback. Если другой контейнер должен вызывать QMD MCP напрямую, подключите оба контейнера к общей сети Docker и используйте имя службы QMD, а не открывайте порт широко на хосте.
QMD_FORCE_CPU=1 обеспечивает предсказуемое развертывание только на CPU. Удалите его или установите в 0, если вы намеренно хотите, чтобы QMD проверял наличие поддерживаемого ускорения.
4. Запустите контейнер
docker compose up -dПроверьте службу:
curl --fail http://127.0.0.1:8181/healthКонечная точка Streamable HTTP MCP:
http://127.0.0.1:8181/mcpАльтернатива с Docker CLI
Вы можете запустить тот же релиз без Compose:
docker volume create qmd-data
docker run -d \
--name qmd-mcp \
--restart unless-stopped \
-p 127.0.0.1:8181:8181 \
-e QMD_FORCE_CPU=1 \
-e QMD_REFRESH_INTERVAL_MINUTES=15 \
-e QMD_REFRESH_INITIAL_DELAY_SECONDS=120 \
-v "$PWD/content:/vault:ro" \
-v "$PWD/config:/config:ro" \
-v qmd-data:/data \
ghcr.io/x1pher/qmd-mcp:v0.1.3Что предоставляет QMD MCP
QMD MCP сохраняет ориентированные на чтение MCP-инструменты QMD и добавляет ограниченные административные операции:
healthсообщает состояние индекса и рантайма;start_updateзапускает ограниченное асинхронное задание переиндексации файловой системы;start_embedзапускает ограниченное асинхронное задание создания эмбеддингов;job_statusсообщает о недавних административных заданиях;запланированное обновление и создание эмбеддингов могут выполняться автоматически, пока коллекции с
embedding: falseостаются только лексическими;обычный
queryвыполняется с отключённым реранжированием;query_rerankedпредоставляет отдельный ресурсоёмкий по CPU путь с реранжированием;результаты запросов могут включать точный
source_relative_pathдля точной передачи в файловую систему, когда настроенQMD_SOURCE_RELATIVE_ROOTи путь к источнику разрешается однозначно;получение документов по умолчанию возвращает внутренний текст с явным opt-in предоставлением ресурсов MCP.
Одновременно выполняется только одно административное задание. Завершённые задания сохраняются в памяти с ограниченной историей. Полное описание девяти инструментов, включая уровень доступа и побочные эффекты, см. в docs/tools.md.
Пути рантайма
Контейнер использует следующие стабильные пути:
Путь | Назначение |
| Конфигурация коллекций QMD |
| База данных индекса QMD |
| Домашний каталог рантайма |
| Кэш моделей и рантайма |
Исходные коллекции обычно следует монтировать в режиме только для чтения. /data должен оставаться доступным для записи, поскольку он содержит перестраиваемый индекс и кэш моделей/рантайма.
Конфигурация
Dockerfile предоставляет рабочие значения по умолчанию для обычных путей рантайма и HTTP-слушателя. Переопределяйте только те настройки, которые нужны вашему развертыванию.
Переменная | По умолчанию | Назначение |
|
| Адрес прослушивания HTTP внутри контейнера |
|
| Порт прослушивания HTTP |
|
| Файл конфигурации коллекций QMD |
|
| База данных индекса QMD |
| unset | Необязательный общий корень источников. Если задан, результаты запросов включают точные значения |
| unset | Коллекция по умолчанию для |
|
| Установите |
| unset | Необязательное переопределение параллелизма эмбеддингов QMD |
|
| Максимум документов на один запланированный пакет эмбеддингов; допустимый диапазон |
|
| Максимальный размер запланированного пакета эмбеддингов в МиБ; допустимый диапазон |
|
| Максимальная продолжительность запланированного сеанса эмбеддингов; допустимый диапазон |
|
| Интервал запланированного обновления; |
|
| Задержка перед первым запланированным обновлением; допустимый диапазон |
Недопустимые значения для ограниченных числовых параметров приводят к ошибке при запуске, а не принимаются молча. QMD_SOURCE_RELATIVE_ROOT никогда не раскрывает свой абсолютный путь; возвращается только относительный путь источника, а неоднозначные коллизии нормализованных путей возвращают null вместо предположений.
Модель безопасности
Контейнер работает от имени непривилеги
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 Servers
- AlicenseAqualityDmaintenanceMCP server for markdown files — search, extract sections, list headings, find code blocks across docs.6675MIT
- AlicenseNot gradedqualityBmaintenanceRemote HTTP/SSE MCP server for web search with full page content extraction, search summaries, and API authentication.MIT
- AlicenseAqualityAmaintenanceMCP server for live web search and clean-markdown page fetch over the Keenable web index.2852MIT
- FlicenseNot gradedqualityDmaintenanceA web search MCP server using DuckDuckGo, supporting streaming HTTP and session management.1
Related MCP Connectors
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
Agentic search over your Dewey document collections from any MCP-compatible client.
Query SEC EDGAR filings, XBRL financials, and company data through MCP. STDIO & Streamable HTTP.
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/X1pheR/qmd-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server