mcp-prov
mcp-prov
Локальный MCP-прокси на Python, который оборачивает существующий MCP-сервер в n8n (экземпляр обеспечения Metrotel). Добавляет кэш, логирование, составной инструмент диагностики и собственную Bearer-аутентификацию, не затрагивая бэкенд.
Образ в Docker Hub: metrotel/mcp-prov
🌐 Говорит на stdio (Claude Code / встроенные клиенты) или HTTP (Claude Desktop и другие)
🔐 Изолирует upstream-токен: никогда не выходит к клиенту
⚡ Кэш в памяти 60 с для идемпотентных чтений (конфигурация через переменную окружения)
📝 JSON-lines лог каждого вызова инструмента (
tool,args,cached,duration_ms,error)🛠 Открывает 32 upstream-инструмента + составной инструмент
diagnostico_completo♻️ Переинициализирует сессию, если upstream её закрывает (известная ошибка n8n MCP)
🚀 Развёртывание: Docker / Docker Swarm / Kubernetes / systemd user unit / автономный Python
💾 Том
/dataдля постоянных логов (и будущего кэша)
Зачем это нужно
MCP-сервер, встроенный в поток n8n Metrotel, закрывает long-poll SSE
после периода бездействия, и такие клиенты, как mcp-remote, начинают
шумные повторные попытки. Кроме того, upstream-токен хранился в открытом виде в JSON-конфигах.
Этот прокси:
Устраняет long-poll: каждый вызов инструмента открывает собственный HTTP-запрос к upstream и закрывает его по завершении.
Изолирует upstream-токен (
X-Prov-MCP-Key): он живёт только в env-файле прокси, а не в конфигах Claude Desktop / Claude Code.Добавляет кэш для повторяющихся чтений (например, один и тот же
contexto_servicioнесколько раз за несколько минут).Добавляет составной инструмент, который объединяет несколько upstream-инструментов и возвращает сводку — избавляет модель от необходимости оркестрировать 3 вызова, когда можно запросить один.
Related MCP server: rancher-mcp
Требования
Python 3.10+
uv(рекомендуется, илиpip)Сетевой доступ к upstream MCP-серверу и действительный заголовок
X-Prov-MCP-Key
Быстрый старт
Docker (рекомендуется, без локальной сборки)
docker run -d --name prov-mcp -p 8767:8767 \
-e PROV_MCP_KEY='pmcc_...' \
-e PROV_MCP_AUTH_TOKEN='pmcp_...' \
-v prov-data:/data \
--restart unless-stopped \
metrotel/mcp-prov:0.2.2Или с docker-compose.yml из репозитория:
git clone https://github.com/datacenter-metrotel/mcp-prov.git
cd mcp-prov
cp .env.example .env && chmod 600 .env # editá .env
docker compose up -dЛог сохраняется в томе prov-data (смонтирован в /data/logs):
docker exec prov-mcp tail -f /data/logs/calls.logНативный HTTP-режим (без Docker)
git clone https://github.com/datacenter-metrotel/mcp-prov.git
cd mcp-prov
cp .env.example .env
chmod 600 .env
# editá .env con los valores reales
# Arrancar en foreground
uvx --from . prov-mcp-proxy
# server escuchando en http://0.0.0.0:8767/mcpПроверка:
KEY=$(grep '^PROV_MCP_AUTH_TOKEN=' .env | cut -d= -f2)
curl -sS -L -X POST http://127.0.0.1:8767/mcp \
-H "Authorization: Bearer $KEY" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
--data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1"}}}'Режим stdio (для Claude Code / Cursor или других клиентов, которые запускают процесс)
export PROV_MCP_KEY='pmcc_...'
export PROV_MCP_TRANSPORT=stdio
uvx --from . prov-mcp-proxyИ в .mcp.json (Claude Code):
{
"mcpServers": {
"prov": {
"command": "uvx",
"args": ["--from", "/ruta/al/repo", "prov-mcp-proxy"],
"env": { "PROV_MCP_KEY": "${PROV_MCP_KEY}" }
}
}
}Развёртывание в Kubernetes / Docker Swarm
Kubernetes с
envFrom.secretRef+PersistentVolumeClaim: см.k8s/README.md.Docker Swarm с зашифрованными секретами в raft + том: см.
swarm/README.md.
Развёртывание как systemd user unit
Шаблон в systemd/prov-mcp-proxy.service.example:
mkdir -p ~/.config/systemd/user ~/.config/prov-mcp-proxy
cp systemd/prov-mcp-proxy.service.example ~/.config/systemd/user/prov-mcp-proxy.service
cp .env.example ~/.config/prov-mcp-proxy/env
chmod 600 ~/.config/prov-mcp-proxy/env
# editá ~/.config/prov-mcp-proxy/env con los valores reales
systemctl --user daemon-reload
systemctl --user enable --now prov-mcp-proxy.service
systemctl --user status prov-mcp-proxy.serviceЧтобы процесс переживал перезагрузки без входа в систему:
sudo loginctl enable-linger $USER.
Использование из Claude Desktop
Отредактировать claude_desktop_config.json:
{
"mcpServers": {
"prov": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"http://<HOST_IP>:8767/mcp",
"--allow-http",
"--transport", "http-only",
"--header", "Authorization:Bearer <PROV_MCP_AUTH_TOKEN>"
]
}
}
}Пути к конфигу:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux (community):
~/.config/Claude/claude_desktop_config.json
Полный пример см. в examples/claude_desktop_config.example.json.
Переменные окружения
Переменная | Обязательная | По умолчанию | Описание |
| ✅ | — | Заголовок |
| ✅ (если | — | Bearer-токен, который MCP-клиенты должны передавать в |
| ❌ |
| Конечная точка upstream |
| ❌ |
|
|
| ❌ |
| Адрес привязки HTTP-слушателя |
| ❌ |
| Порт |
| ❌ |
| Путь конечной точки |
| ❌ |
| TTL кэша в секундах (0 = выкл.) |
| ❌ |
| Каталог для JSON-lines лога |
Доступные инструменты
Все инструменты upstream переэкспонируются как есть (на момент написания — 32), плюс один составной:
diagnostico_completo(service_number)— вызываетcontexto_servicio→Topologia→ (если подпродукт ISI)ISI_Check_IPи возвращает сгруппированную сводку. Полезен как «точка входа» для быстрой диагностики услуги по её номеру.
Подробности об upstream-инструментах см. в коллекции Postman в
postman/.
Кэш
Инструменты, которые никогда не кэшируются (активные эффекты или изменчивые данные):
Ping_toolATA_Test_1,ATA_Test_2,ATA_Test_3Gestion_ACSObtener_backup_equipo
Остальные попадают в кэш с настраиваемым TTL (по умолчанию 60 с). Ключ включает имя инструмента + SHA1-хэш нормализованных аргументов.
Лог
Каждый вызов инструмента записывается в ~/.cache/prov_mcp_proxy/calls.log как
строка JSON с ts, tool, args, cached, duration_ms, error.
Автоматическая ротация 5 МБ × 3.
Безопасность
См. SECURITY.md. Вкратце:
Bearer обязателен в HTTP-режиме (промежуточное ПО Starlette).
Upstream-токен никогда не покидает прокси.
Env-файл с учётными данными имеет
chmod 600и не входит в git..envв.gitignore.
Лицензия
MIT — см. LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Open-source Zapier/n8n alternative as an MCP server: agents build, run and debug your workflows.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
Related MCP Servers
- AlicenseAqualityBmaintenanceA stdio MCP proxy that connects to one or more upstream MCP servers and exposes their tools, resources, and prompts through a single endpoint with a configurable middleware pipeline.146 npm3MIT
- AlicenseNot gradedqualityDmaintenanceA standalone MCP server that exposes Rancher-side tools, forwards Authorization headers or uses configured credentials, and supports HTTP and stdio transports.MIT
- AlicenseNot gradedqualityAmaintenanceLifts local stdio MCP servers into remote Streamable HTTP endpoints for cloud-hosted AI clients, with bearer-token auth and tool policy filtering.3 npmMIT
- AlicenseNot gradedqualityAmaintenanceA local stdio MCP server that authenticates to remote OAuth-protected MCP servers using the client_credentials grant, handling token acquisition and request forwarding.179 npm2Apache 2.0