vera_mcp_service
Integrates with OpenAI-compatible APIs to structure consultation text for email delivery.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vera_mcp_servicesearch knowledge base for best practices in hiring"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
vera_mcp_service
MCP Tools Server — инструментальный слой между Agent Service и конкретными сервисами проекта «Работа для всех». Принимает вызовы по MCP-протоколу, выполняет узкие бизнес-процессы и возвращает типизированный результат. Не оркестрирует диалог и не хранит состояние сессии. Для формирования документов может использовать собственный узкий LLM-процесс: структурирование уже готовой консультации без изменения её смысла.
Роль в системе
Последний из трёх сервисов архитектуры ассистента (AGENT_VERA_ARCHITECTURE.md): Agent Service (vera_agent_service, оркестратор, production-ready) → MCP Tools Server (этот репозиторий) → RAG Service (vera_rag_service, семантический поиск по базе знаний, production-ready). Оба соседних контракта уже зафиксированы кодом по обе стороны — этот сервис реализует тонкую прослойку по готовому ТЗ, а не проектирует контракт с нуля.
Сервис предоставляет два инструмента:
vera_rag_kb— поиск по базе знаний Vera RAG;send_consultation_email— структурирование готовой консультации, формирование доступного PDF и отправка по email.
История базовой реализации находится в MCP_SERVICE_PLAN.md, реализация
консультации — в CONSULTATION_EMAIL_TOOL_PLAN.md.
Related MCP server: Sentinel Core Agent
Как это работает
Приём вызова —
FastMCP(mcp.server.fastmcp), транспортstreamable-http, работает автономно (mcp.run(transport="streamable-http")) — без FastAPI, по образцу проверенного на масштабе in-house проектаtools-mcp(см. план, раздел 0.1). Agent Service подключается черезMultiServerMCPClientна/mcp.Инструмент
vera_rag_kb(app/tools/vera_rag_kb.py) — тонкий адаптер: валидация непустогоqueryчерез Pydantic-схему MCP, затем вызовRagClient.search(). Роль пользователя в поисковый контракт не входит: RAG получает запрос безaudienceи ищет по всему корпусу. При сбое RAG Service исключение всплывает как есть: Agent Service (handle_tool_errors=False) ждёт именно исключение MCP-уровня, неdictс полем ошибки.Инструмент
send_consultation_email(app/tools/send_consultation_email.py) — тонкая MCP-граница надConsultationDeliveryService. Email валидируется внутри тела тула, поэтому ошибка возвращается словарём, а неToolError.Подготовка консультации — общий
LlmClientполучает исходный текст как данные, возвращаетPreparedConsultation, Jinja подставляет структуру в фирменный HTML-бланк, WeasyPrint формирует tagged PDF/UA с Unicode-текстом. Прикладных ограничений длины текста иmax_completion_tokensнет.Отправка —
SmtpClientсобираетmultipart/alternativeс PDF-вложением и выполняет только внутренние ограниченные ретраи временных SMTP-сбоев. ОдинMessage-IDсохраняется на всех попытках. PDF существует только в памяти.Реестр тулов (
app/tools/__init__.py::register_all_tools) — единая точка регистрации, покрытая meta-тестом.Клиент RAG Service (
app/clients/rag_client.py) —POST /api/v1/searchсX-API-Key, без собственного слоя ретраев.GET /healthпроверяет RAG. Платные LLM-запросы и SMTP-login из health-check не выполняются.Наблюдаемость — OpenTelemetry → общий Arize Phoenix project. Spans содержат длины, размеры и outcomes, но не текст консультации, email, PDF или секреты.
Стек
mcp (FastMCP, streamable-http) · httpx · pydantic /
pydantic-settings · Jinja2 · WeasyPrint · aiosmtplib · OpenTelemetry →
Arize Phoenix · Docker Compose. FastAPI сервису не нужен.
Контракты
Подробности, JSON-примеры и обоснования — MCP_SERVICE_PLAN.md, раздел 3.
Контракт | Кто использует | Кратко |
Тул | Agent Service → этот сервис |
|
Тул | Agent Service → этот сервис |
|
| Этот сервис → RAG Service |
|
OpenAI-compatible Chat Completions | Этот сервис → LLM API | Базовый |
SMTP TLS | Этот сервис → почтовый сервер | Отправка |
| Оркестратор/мониторинг |
|
Запуск локально
cp .env.example .env
# заполнить .env — RAG, LLM и SMTP-реквизиты
docker compose up -d --buildСервис | Адрес |
MCP Tools Server (streamable-http) |
|
|
|
Общий Phoenix (трейсы) — поднимается из vera_agent_service/docker-compose.yml (http://localhost:6006), не из этого репозитория (план, Этап 8.3 — единственный общий инстанс на все три сервиса).
Роль MCP в распределённом trace
MCP сохраняет продуктовую границу между Agent и retrieval:
tool.vera_rag_kb vera_agent_service
└── mcp.execute.vera_rag_kb vera_mcp_service
└── rag.search vera_rag_service
tool.send_consultation_email
└── mcp.execute.send_consultation_email
├── consultation.format
├── consultation.pdf.render
└── consultation.email.sendВсе сервисы должны использовать одинаковый PHOENIX_PROJECT_NAME, но одного
общего Phoenix недостаточно: дерево связывается динамической W3C propagation на
обоих сетевых переходах. Span MCP содержит только технические атрибуты и длину
query, без текста запроса или чанков. При завершении процесса общий HTTP-клиент
закрывается, затем выполняются force_flush и shutdown tracing.
Локально без Docker (venv):
Перед запуском переключить endpoint-блок в .env: закомментировать активные
production-адреса и раскомментировать строки из секции Local endpoints.
python -m venv venv
venv\Scripts\activate # Windows; source venv/bin/activate — Linux/macOS
pip install -r requirements-dev.txt
python -m app.mainСовместный запуск с Agent Service/RAG Service
Общая внешняя Docker-сеть больше не используется. Все сервисы развёртываются
на production-хосте 91.218.115.104 и обращаются друг к другу через его
опубликованные порты: Agent → MCP — http://91.218.115.104:9000/mcp,
MCP → RAG — http://91.218.115.104:8002, MCP → Phoenix —
http://91.218.115.104:6006/v1/traces.
В .env активна секция Production endpoints; секция Local endpoints
предназначена только для запуска python -m app.main непосредственно на хосте.
Тестирование
pytest tests/ # юнит + интеграционные, без внешней инфраструктуры
ruff check . # линтерИнтеграционные тесты поднимают настоящий FastMCP-сервер на свободном порту
и подключаются настоящим MultiServerMCPClient. Реальные LLM/SMTP в
автоматических тестах не вызываются. Локальный SMTP contract-тест отправляет
настоящее MIME-письмо через loopback TCP-сокет без внешней почты. Text-layer
тест WeasyPrint запускается, когда в системе доступен Pango; в Windows без
Pango он пропускается, а перед production должен быть выполнен в
Linux-контейнере.
Документация
MCP_SERVICE_PLAN.md— план реализации по этапам, зафиксированные технические решения, контракты, находки, конвенции для будущих тулов, соответствие WBSCONSULTATION_EMAIL_TOOL_PLAN.md— контракт и устройство отправки PDF-консультацииLLM_CLIENT_REFERENCE.md— эталон общего OpenAI-compatible LLM-клиентаAGENT_VERA_ARCHITECTURE.md— исходная архитектурная концепция трёх сервисовFASTAPI_PATTERNS.md— эталонные паттерны кода проекта (частично применимо — этот сервис не на FastAPI, см. план, раздел 0.1)
Как добавить новый тул
Новый файл
app/tools/<name>.py—<name>(...)+register_<name>(mcp, ...)с развёрнутымdescription(перечислением каждого параметра текстом — влияет на выбор тула LLM).Одна строка в
app/tools/__init__.py::register_all_tools.Классифицировать тул как read-only или мутирующий. Для мутирующего тула явно определить внутренние/внешние retries и риск дубликатов до реализации.
Бизнес-процесс размещать в
app/services/, оставляя MCP-функцию тонкой.Юнит-тесты тула, обновить
tests/unit/tools/test_registry.py(новое имя — в ожидаемый набор).Ручной OpenTelemetry span, если тул делает внешний вызов помимо уже покрытых.
Чеклист перед production-развёртыванием
Локально и функционально всё готово и проверено (см. «Статус» ниже) — но это не значит готовность к реальному прод-деплою. По приоритету, сверху вниз:
P0 — открытых блокеров нет:
Провижининг БД RAG исправлен; production health-check RAG возвращает
database=ok.Реальный
RAG_SERVICE_API_KEYзадан в локальном production.env(само значение не коммитится). Плейсхолдер в.env.exampleоставлен намеренно как безопасный шаблон.LLM и SMTP-реквизиты находятся в игнорируемом
.env; перед деплоем проверить их тестовым вызовом без пользовательских данных.
P1 — инфраструктура сейчас dev-уровня, не прод:
Нет Nginx/TLS перед сервисом — MCP-эндпоинт сейчас голый HTTP на
9000.Лимит памяти в
docker-compose.yml(512M) — placeholder-значение, не проверено нагрузочным тестированием.Agent Service должен отключить внешний retry для
send_consultation_emailи назначить отдельный увеличенный timeout.
P2 — не верифицировано мной фактическим прогоном:
CI (
.github/workflows/ci.yml) написан и локально согласован с реальной инфраструктурой, но реальный прогон на GitHub Actions не проверялся — нет доступа к Actions из этой среды. Проверить на первом push/PR.Единое дерево трейса через все три сервиса в живом Phoenix требует проверки после production-деплоя Agent Service.
Полный путь
Agent → MCP → RAGс реальным контентом требует отдельного E2E-прогона после production-деплоя Agent Service.PDF/UA необходимо проверить валидатором и вручную скринридером в Linux-контейнере; локальная Windows-среда не содержит Pango.
Реальную SMTP-доставку проверить в безопасный тестовый ящик.
Семантика доставки: SMTP обеспечивает at-least-once, а не строгую
exactly-once-гарантию. Повторы находятся только внутри SmtpClient, один
Message-ID переиспользуется; долговременный outbox в текущую версию не входит.
Статус
Реализованы vera_rag_kb и send_consultation_email. Unit- и
contract/integration-тесты не требуют внешней инфраструктуры; ruff check .
должен оставаться чистым. Для консультации остаются эксплуатационные проверки:
реальный LLM structured output, PDF/UA в контейнере, SMTP в тестовый ящик и
сквозной Agent Service без внешнего retry.
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
- Alicense-qualityDmaintenanceMCP server that exposes Open WebUI Knowledge Bases as tools and resources, enabling AI assistants to search and access knowledge bases.Last updated4MIT
- Flicense-qualityDmaintenanceEnables file system operations, web scraping, and AI-powered search through MCP tools for use by LLM agents.Last updated1
- Flicense-qualityCmaintenanceAn MCP-based enterprise tools server that exposes company knowledge search and employee database lookup as callable tools.Last updated
- Alicense-qualityDmaintenanceMCP server that gives AI agents access to the Conduit knowledge graph. Enables querying knowledge graph via three tools for question answering, context retrieval, and semantic search.Last updatedApache 2.0
Related MCP Connectors
MCP server exposing the Backtest360 engine API as tools for AI agents.
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Pocket Agent (aipocketagent.com) MCP server — read tools for personas, apps, and product info.
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/BKSLab/vera_mcp_service'
If you have feedback or need assistance with the MCP directory API, please join our Discord server