Skip to main content
Glama
X1pheR

QMD MCP

by X1pheR

QMD MCP

OpenSSF Scorecard OpenSSF Best Practices Verified by M8ven

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.

Пути рантайма

Контейнер использует следующие стабильные пути:

Путь

Назначение

/config/index.yml

Конфигурация коллекций QMD

/data/index.sqlite

База данных индекса QMD

/data/home

Домашний каталог рантайма

/data/cache

Кэш моделей и рантайма

Исходные коллекции обычно следует монтировать в режиме только для чтения. /data должен оставаться доступным для записи, поскольку он содержит перестраиваемый индекс и кэш моделей/рантайма.

Конфигурация

Dockerfile предоставляет рабочие значения по умолчанию для обычных путей рантайма и HTTP-слушателя. Переопределяйте только те настройки, которые нужны вашему развертыванию.

Переменная

По умолчанию

Назначение

QMD_HTTP_HOST

0.0.0.0

Адрес прослушивания HTTP внутри контейнера

QMD_HTTP_PORT

8181

Порт прослушивания HTTP

QMD_CONFIG_PATH

/config/index.yml

Файл конфигурации коллекций QMD

INDEX_PATH

/data/index.sqlite

База данных индекса QMD

QMD_SOURCE_RELATIVE_ROOT

unset

Необязательный общий корень источников. Если задан, результаты запросов включают точные значения source_relative_path относительно этого корня, безопасные от коллизий.

QMD_DEFAULT_COLLECTION

unset

Коллекция по умолчанию для start_embed; в противном случае используется первая настроенная коллекция

QMD_FORCE_CPU

0

Установите 1, чтобы отключить проверку ускорения и принудительно использовать CPU

QMD_EMBED_PARALLELISM

unset

Необязательное переопределение параллелизма эмбеддингов QMD

QMD_EMBED_MAX_DOCS_PER_BATCH

8

Максимум документов на один запланированный пакет эмбеддингов; допустимый диапазон 132

QMD_EMBED_MAX_BATCH_MB

16

Максимальный размер запланированного пакета эмбеддингов в МиБ; допустимый диапазон 1128

QMD_EMBED_MAX_DURATION_MS

3600000

Максимальная продолжительность запланированного сеанса эмбеддингов; допустимый диапазон 600007200000 мс

QMD_REFRESH_INTERVAL_MINUTES

15

Интервал запланированного обновления; 0 отключает его, максимум 1440

QMD_REFRESH_INITIAL_DELAY_SECONDS

120

Задержка перед первым запланированным обновлением; допустимый диапазон 03600

Недопустимые значения для ограниченных числовых параметров приводят к ошибке при запуске, а не принимаются молча. QMD_SOURCE_RELATIVE_ROOT никогда не раскрывает свой абсолютный путь; возвращается только относительный путь источника, а неоднозначные коллизии нормализованных путей возвращают null вместо предположений.

Модель безопасности

  • Контейнер работает от имени непривилеги

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
1dRelease cycle
5Releases (12mo)
Commit activity

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

View all related MCP servers

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.

View all MCP Connectors

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/X1pheR/qmd-mcp'

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