Skip to main content
Glama
bmihestean

delivery-mcp-server

by bmihestean

delivery-mcp-server

PH.02 of the AI-Forward Delivery Leader Build Program. Сервер MCP (Model Context Protocol), предоставляющий индексированные программные документы delivery-copilot — SOW, отчеты о статусе, заметки QBR, реестр рисков — в виде инструментов, ресурса и подсказки, которые любой хост MCP (Claude Desktop, Claude Code) может использовать напрямую, с изоляцией по учетным записям, перенесенной напрямую из PH.01.

MCP — это та часть, которую почти ни один кандидат с опытом в delivery/PM на самом деле не создавал: большинство людей использовали MCP-сервер внутри чат-клиента. Этот сервер создан с нуля, и этот README также служит объяснением назначения каждой движущейся части.

Статус

Создано и проверено: 3 инструмента, 1 ресурс, 1 подсказка, все протестированы от начала до конца через реальный MCP Client и через claude mcp add в Claude Code.

Related MCP server: Claude RAG MCP Pipeline

Что такое MCP и почему он построен именно так

MCP стандартизирует то, как хост-приложение (Claude Desktop, Claude Code) взаимодействует с сервером, предоставляющим данные и функциональность — одна интеграция вместо индивидуальной для каждого приложения. Сервер предоставляет три различных примитивных типа, и эта сборка намеренно использует все три, чтобы показать различие на практике, а не просто описать его:

  • Инструменты — действие, которое модель решает вызвать в середине разговора, выбирая собственные аргументы. search_delivery_docs — это основной инструмент данного сервера.

  • Ресурсы — данные только для чтения, которые приложение выбирает для загрузки по URI, как браузер загружает страницу — не то, что модель вызывает сама. delivery://{account}/{filename} — это ресурс данного сервера: получить целый документ, когда вы уже знаете, какой именно вам нужен.

  • Подсказки — шаблон сообщения, который человек вызывает по имени, как слэш-команду. draft_status_update — это подсказка данного сервера: выберите учетную запись, получите готовую инструкцию, вставленную в разговор.

Разделение на поиск и генерацию — это настоящее архитектурное решение. delivery-copilot/ask.py извлекает фрагменты и вызывает Claude для генерации ответа с цитированием в одном скрипте, потому что ничто другое в этом конвейере не является моделью. Внутри MCP-сервера в цикле уже есть модель — та, что ведет разговор хоста. Поэтому search_delivery_docs выполняет только поиск и возвращает совпавшие фрагменты в виде данных; собственная модель хоста читает их и сама составляет обоснованный ответ, руководствуясь инструкцией по цитированию/отказу, встроенной в docstring инструмента (единственное место, где сервер может оставить инструкции по обоснованию, поскольку он не владеет системным промптом). Одно заслуживающее упоминания следствие: этот сервер ни разу не вызывает Claude. Нет ANTHROPIC_API_KEY, нет платных запросов — это локальное встраивание и векторный поиск, именно то, что уже делает ingest.py. Стоимость генерации полностью ложится на хост.

Изоляция переносится без изменений из PH.01. Каждый инструмент принимает аргумент account и читает только коллекцию Chroma этой учетной записи (delivery_docs__<account>) — снова проверено на этом уровне с помощью одноразовой второй учетной записи: задав ей не связанный вопрос (то, на что могла ответить только meridian-health), она вернула только свою собственную единственную заметку, никогда не содержимое Meridian.

Структура репозитория — почему это не Python-импорт от delivery-copilot

Этот репозиторий зависит от delivery-copilot ровно для одной вещи: артефакта данных в chroma_db/, а не его кода. Никакого межрепозиторного pip install -e, никаких общих модулей:

  • list_accounts() читает client.list_collections() и удаляет префикс delivery_docs__ — вообще не нуждается в data/raw/.

  • list_documents(account) читает уникальные значения source, уже сохраненные в метаданных фрагментов этой коллекции.

  • Ресурс delivery:// восстанавливает документ, объединяя его фрагменты в исходном порядке (извлеченном из идентификаторов фрагментов source::N, которые ingest.py уже назначает).

Укажите DELIVERY_DB_PATH на любое собранное хранилище Chroma (по умолчанию: ../delivery-copilot/chroma_db, предполагая, что оба репозитория клонированы как соседние) — и этот сервер работает — действительно самодостаточный с точки зрения кода, независимо клонируемый, что соответствует тому, как ai-fundamentals-rig и delivery-copilot независимы друг от друга.

Стоящая внимания находка (окружение)

mcp[cli] тянет за собой pyjwt[crypto] → cryptography. cryptography перестала поставлять предварительно собранные x86_64 macOS wheels начиная с v46.0.4 (с тех пор только arm64) — установка на этой (действительно Intel) машине пыталась скомпилировать из исходников и не удалась без заголовков Rust/OpenSSL. Зафиксировали cryptography==46.0.3 в requirements.txt, последний релиз с x86_64 wheel, комфортно удовлетворяющий требованию pyjwt cryptography>=3.4.0. Напоминание: "pip install" молча предполагает, что для вашей архитектуры CPU есть wheel — это не всегда так.

Также: текущая мажорная версия MCP Python SDK (v2) требует Python 3.10+; системный Python этой машины был 3.9.6. Установили 3.13 через официальный установщик python.org, рядом с системным интерпретатором, специально для .venv этого репозитория.

Настройка

# needs delivery-copilot's index already built: `python ingest.py` in that repo first
python3.13 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Запуск

Ручное тестирование, хост не нужен — вызывает каждый инструмент/ресурс/подсказку через реальный Client в памяти:

python test_server.py

MCP Inspector (интерактивный, открывает локальный веб-интерфейс):

uv run mcp dev server.py     # or: pip install uv, then the same command

Зарегистрировать в Claude Code:

claude mcp add delivery-copilot \
  -e DELIVERY_DB_PATH=/absolute/path/to/delivery-copilot/chroma_db \
  -- /absolute/path/to/delivery-mcp-server/.venv/bin/python /absolute/path/to/delivery-mcp-server/server.py

claude mcp list   # confirm it connects

Затем в чате Claude Code: "Используя MCP-сервер delivery-copilot, кто владеет риском Okta для meridian-health, согласно документам?" — Claude сам вызывает search_delivery_docs и цитирует то, что возвращается.

Что дальше

PH.02 функционально завершен: 3 инструмента, 1 ресурс, 1 подсказка, протестированы локально и вживую через Claude Code. Естественные расширения, не блокирующие: вторая реальная учетная запись, как только она появится (ничто здесь не привязано к meridian-health), и агент статуса/рисков PH.03 может разумно строиться на draft_status_update, а не начинаться с нуля.


Часть AI-Forward Delivery Leader Build Program.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables LLMs to perform semantic search and document management using ChromaDB, supporting natural language queries with intuitive similarity metrics for retrieval augmented generation applications.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables Claude Desktop to search and query personal document collections (PDF, Word, Markdown, text) using semantic search and conversational AI with full context preservation across exchanges.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables Claude Desktop to search custom knowledge bases using retrieval-augmented generation via a simple MCP tool.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables querying enterprise documents (DOCX, PDF, PPTX) using natural language, with hybrid search and MCP integration for Claude Desktop and other agents.
    MIT