MCP Tool Manager
MCP Tool Manager
Готовая к продакшену, AI-нативная система реестра инструментов и управления агентами, построенная на протоколе Model Context Protocol (MCP).
📖 Оглавление
Related MCP server: mcp-tool-gateway
Что это?
MCP Tool Manager — это платформа с двумя серверами, которая решает самые сложные эксплуатационные проблемы в AI-интегрированных инструментальных системах:
Проблема | Решение |
LLM тратят окна контекста на огромные ответы API | Побайтовый бюджет для каждого инструмента с корректной сигнализацией об усечении |
Сбои вышестоящих API каскадом влияют на LLM | Автоматический выключатель для каждого инструмента (CLOSED → OPEN → HALF-OPEN) |
Все данные теряются при перезапуске сервера | Автоматические периодические дисковые снимки, восстанавливаемые при запуске |
Атаки перебором / инъекциями на API-шлюз | Детектор угроз 10 семейств + многоуровневое ограничение частоты запросов + автоматическая блокировка IP |
Невозможность сквозной трассировки запроса | Заголовок X-Trace-ID, распространяемый по всем уровням и до вышестоящих API |
Инструменты/агенты, зарегистрированные только в энергозависимой памяти | Журнал вызовов, сохраняемый в файлы + JSON-конфигурации агентов + снимки состояния |
Обзор архитектуры
┌─────────────────────────────────────────────────────────────────────────┐
│ MCP Tool Manager Platform │
│ │
│ ┌──────────────────────┐ ┌────────────────────────────────────┐ │
│ │ Manager Server │ │ Hardened MCP Server │ │
│ │ src/server │ │ mcp-server-project │ │
│ │ │ │ │ │
│ │ • REST API (CRUD) │ │ • MCP Protocol endpoint │ │
│ │ • JWT + API key auth │ │ • Agent API key auth + expiry │ │
│ │ • Tool registry │ │ • Circuit breaker per tool │ │
│ │ • Agent management │ │ • Retry + exponential backoff │ │
│ │ • Credential vault │ │ • Response cache (TTL per tool) │ │
│ │ • Audit log │ │ • Context window limiting │ │
│ │ • State snapshots │ │ • File-persisted call log │ │
│ │ • WebSocket events │ │ • 10-family threat detection │ │
│ │ • Response cache │ │ • Admin /metrics endpoint │ │
│ └──────────┬───────────┘ └──────────────┬─────────────────────┘ │
│ │ │ │
│ ┌──────────▼───────────┐ ┌──────────────▼─────────────────────┐ │
│ │ React Dashboard │ │ Claude Desktop / LLM Agent │ │
│ │ src/dashboard │ │ (connects via MCP SDK) │ │
│ └──────────────────────┘ └────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ Cross-cutting: X-Trace-ID · Rate Limiting · Helmet CSP · │ │
│ │ Structured Logging · Connection Limit · Compression │ │
│ └──────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘Структура проекта
mcp/
├── .env.example # Template — copy to .env and fill in values
├── .gitignore # Excludes .env, node_modules, logs, snapshots
├── package.json # Root scripts — start both servers, CLI, tests
├── README.md # This file
├── REPORT.md # Full technical capability report
├── CHANGELOG.md # Version history
│
├── src/
│ ├── server/ # Manager Server (REST API)
│ │ ├── index.js # Entry point — snapshot restore + server start
│ │ ├── app.js # Express app — all middleware wired
│ │ ├── routes/
│ │ │ ├── tools.js # CRUD + test execution for tools
│ │ │ ├── agents.js # Agent management + tool discovery
│ │ │ ├── auth.js # Login, register, API key management
│ │ │ ├── credentials.js # Encrypted credential vault
│ │ │ └── monitoring.js # Stats, audit log, cache, snapshot status
│ │ ├── middleware/
│ │ │ ├── auth.js # JWT + API key auth + RBAC
│ │ │ └── error-handler.js # Typed errors + global handler
│ │ ├── storage/
│ │ │ ├── in-memory-store.js # All in-memory Maps + operations
│ │ │ ├── seeder.js # Initial data (skipped if snapshot exists)
│ │ │ └── state-snapshot.js # Periodic disk snapshots (JSON files)
│ │ ├── utils/
│ │ │ ├── trace.js # X-Trace-ID middleware
│ │ │ ├── context-limit.js # Response byte budget + pagination guard
│ │ │ ├── response-cache.js # node-cache wrapper + TTL presets
│ │ │ ├── encryption.js # AES-256-CBC for credential vault
│ │ │ └── logger.js # Levelled logger (error/warn/info/debug)
│ │ └── websocket.js # Real-time events via WebSocket
│ │
│ ├── dashboard/ # React + Vite management UI
│ │ ├── src/
│ │ │ ├── pages/ # Dashboard, Tools, Agents, Monitoring, Settings
│ │ │ ├── components/ # Sidebar, Topbar, ToastContainer
│ │ │ ├── services/api.js # Axios client for Manager Server
│ │ │ └── styles/ # global.css, sidebar.css
│ │ └── vite.config.js
│ │
│ ├── sdk/
│ │ └── index.js # Developer SDK — npm-publishable client
│ │
│ └── cli/
│ └── index.js # Admin CLI (17 commands)
│
├── mcp-server-project/ # Hardened MCP Server
│ ├── package.json
│ ├── src/
│ │ ├── server.js # Boot sequence — all 7 security layers
│ │ ├── mcp-protocol.js # MCP spec endpoint (/mcp/tools, /mcp/invoke)
│ │ ├── routes/
│ │ │ ├── invoke.js # Tool invocation (retry + CB + cache + limit)
│ │ │ ├── info.js # Tool discovery per agent
│ │ │ └── metrics.js # Admin monitoring endpoint
│ │ ├── middleware/
│ │ │ ├── auth.js # Agent auth + expiry + scope + disabled check
│ │ │ ├── trace.js # X-Trace-ID attachment
│ │ │ └── context-limit.js # Response byte budget
│ │ ├── state/
│ │ │ ├── call-log.js # Disk-persisted call log (NDJSON)
│ │ │ ├── circuit-breaker.js # Per-tool CLOSED/OPEN/HALF state machine
│ │ │ └── response-cache.js # TTL cache with auto-eviction
│ │ ├── loaders/
│ │ │ ├── registry.js # Central tool+agent in-memory registry
│ │ │ ├── tool-loader.js # Loads *.json from /tools/
│ │ │ ├── agent-loader.js # Loads *.json from /agents/
│ │ │ └── credential-loader.js # Merges .env + JSON credentials
│ │ └── watcher.js # chokidar hot-reload on /tools/ and /agents/
│ ├── security/
│ │ ├── middleware/
│ │ │ ├── security-headers.js # Strict Helmet CSP + CORS
│ │ │ ├── rate-limiter.js # 3-tier rate limiting + IP auto-block
│ │ │ └── threat-detector.js # 10-family injection/attack detector
│ │ └── logger/
│ │ └── security-log.js # Structured security event log (5 levels)
│ ├── tools/ # Tool definition JSON files
│ ├── agents/ # Agent definition JSON files
│ ├── credentials/ # .env and JSON secrets (gitignored)
│ ├── logs/ # Security log + call log (gitignored)
│ └── security-tests/ # Attack simulation suite + benchmark
│
├── snapshots/ # Manager server state snapshots (gitignored)
└── examples/ # Example tool/agent JSON filesБыстрый старт
Предварительные требования
Требование | Версия |
Node.js | ≥ 16.0.0 |
npm | ≥ 7.0.0 |
Git | любая |
1. Клонирование
git clone https://github.com/YOUR_USERNAME/mcp-tool-manager.git
cd mcp-tool-manager2. Установка зависимостей
# Root (Manager Server + CLI + SDK)
npm install
# Dashboard
cd src/dashboard && npm install && cd ../..
# MCP Server
cd mcp-server-project && npm install && cd ..3. Настройка
# Manager Server
cp .env.example .env
# Edit .env with your JWT_SECRET, ENCRYPTION_KEY, etc.
# MCP Server
cp mcp-server-project/credentials/.env.example mcp-server-project/credentials/.env
# Edit credentials/.env with your agent keys and tool API keys4. Запуск
# Terminal 1 — Manager Server (port 5000)
npm run dev:server
# Terminal 2 — React Dashboard (port 3000)
npm run dev:dashboard
# Terminal 3 — MCP Server (port 5001 by default)
cd mcp-server-project && npm start5. Доступ
Интерфейс | URL |
Дашборд | |
API менеджера | |
Статус менеджера | |
MCP-сервер | |
Статус MCP | |
Метрики MCP |
Учётные данные по умолчанию (Manager)
Email: admin@mcp-tool-manager.dev
Password: admin123⚠️ Немедленно смените их в продакшене через переменные окружения
ADMIN_USERNAME/ADMIN_PASSWORD.
Справочник по конфигурации
Сервер менеджера (.env)
# Core
NODE_ENV=development
MCP_SERVER_PORT=5000
MCP_SERVER_HOST=localhost
LOG_LEVEL=info
# Auth
JWT_SECRET=your-super-secret-key-min-32-chars
JWT_EXPIRY=24h
ENCRYPTION_KEY=your-encryption-key-exactly-32-ch
# Context Window
MCP_MAX_RESPONSE_BYTES=65536 # 64 KB default response budget
MCP_MAX_PAGE_SIZE=100 # Max items per paginated endpoint
# Scalability
MCP_MAX_CONNECTIONS=500 # TCP connection limit
SNAPSHOT_DIR=./snapshots # State persistence directory
SNAPSHOT_INTERVAL_SECS=60 # Save state every 60 seconds
SNAPSHOT_RESTORE=true # Restore state on startup
# Cache TTLs (seconds)
CACHE_TTL_TOOL_LIST=30
CACHE_TTL_TOOL_ITEM=60
CACHE_TTL_AGENT_LIST=30
CACHE_TTL_STATS=10
CACHE_TTL_ACTIVITY=300
# Future (not yet wired — provide connection string to enable)
DATABASE_URL=postgresql://user:password@localhost:5432/mcp_tools
REDIS_URL=redis://localhost:6379MCP-сервер (mcp-server-project/credentials/.env)
# Agent API Keys (convention: AGENT_<AGENTID_UPPERCASE>_KEY)
AGENT_MY_AGENT_KEY=your-agent-secret-key
# Tool credentials (referenced by credential_ref in tool JSON)
OPENAI_API_KEY=sk-...
WEATHER_API_KEY=...
SLACK_BOT_TOKEN=xoxb-...
# Admin
ADMIN_KEY=your-admin-key-for-metrics-endpoint
# Server
MCP_PORT=5001
MCP_MAX_CONNECTIONS=200
MCP_MAX_RESPONSE_BYTES=32768 # 32 KB default per tool responseПоля JSON инструмента (MCP-сервер)
{
"name": "my_tool",
"description": "Human-readable description for the LLM",
"endpoint_url": "https://api.example.com/endpoint",
"method": "POST",
"credential_ref": "MY_API_KEY",
"parameters": {
"type": "object",
"properties": {
"query": { "type": "string", "description": "Search query" }
},
"required": ["query"]
},
"cache_ttl_seconds": 60,
"max_response_bytes": 8192,
"retry_max": 3,
"timeout_ms": 10000,
"circuit_failure_threshold": 5,
"circuit_open_window_ms": 30000
}Поля JSON агента (MCP-сервер)
{
"agent_id": "my-agent",
"allowed_tools": ["weather_lookup", "send_email"],
"expires_at": "2027-01-01T00:00:00Z",
"disabled": false
}Справочник по API
Сервер менеджера (http://localhost:5000)
Аутентификация
Метод | Путь | Авторизация | Описание |
POST |
| — | Получить JWT-токен |
POST |
| — | Создать учётную запись |
GET |
| ✅ | Текущий пользователь + API-ключи |
POST |
| ✅ | Сгенерировать новый API-ключ |
DELETE |
| ✅ | Отозвать API-ключ |
Инструменты
Метод | Путь | Авторизация | Описание |
GET |
| ✅ | Список инструментов (с пагинацией) |
POST |
| ✅ | Зарегистрировать новый инструмент |
GET |
| ✅ | Детали инструмента |
PUT |
| ✅ | Обновить инструмент |
DELETE |
| ✅ | Удалить инструмент |
POST |
| ✅ | Проверить вызов инструмента |
Агенты
Метод | Путь | Авторизация | Описание |
GET |
| ✅ | Список агентов |
POST |
| ✅ | Зарегистрировать агента |
GET |
| ✅ | Детали агента |
PUT |
| ✅ | Обновить агента |
DELETE |
| ✅ | Удалить агента |
POST |
| ✅ | Обнаружить инструменты для агента |
Мониторинг
Метод | Путь | Авторизация | Описание |
GET |
| — | Проверка работоспособности |
GET |
| ✅ | Полная статистика системы + кэш + снимок |
GET |
| ✅ | Реальная почасовая шкала вызовов (24 часа) |
GET |
| ✅ | Топ N инструментов по количеству вызовов |
GET |
| ✅ | Записи аудита |
GET |
| ✅ | Доля попаданий в кэш + записи |
GET |
| ✅ | Временная метка последнего снимка + счётчики |
MCP-сервер (http://localhost:5001)
Метод | Путь | Авторизация | Описание |
GET |
| — | Проверка работоспособности |
GET |
| AGENT_KEY | Список инструментов для вызывающего агента |
GET |
| ADMIN_KEY | Все инструменты + все агенты |
GET |
| — | Список инструментов, совместимых с Claude Desktop |
POST |
| — | Вызов по протоколу MCP |
POST |
| AGENT_KEY | Прямой вызов инструмента |
GET |
| ADMIN_KEY | Полная панель мониторинга |
GET |
| — | Облегчённая проверка работоспособности |
GET |
| ADMIN_KEY | Последняя история вызовов |
План реализации
В этом разделе представлена полная дорожная карта — что уже реализовано, что находится в процессе и что требует инфраструктурных решений.
Этап 1 — Фундамент ✅ Завершено
REST API сервера менеджера (инструменты, агенты, аутентификация, учётные данные, мониторинг)
Хранилище в памяти с полными CRUD-операциями
Двойная аутентификация JWT + API-ключи с RBAC
Хранилище учётных данных AES-256-CBC
React-дашборд (страницы «Инструменты», «Агенты», «Мониторинг», «Настройки»)
Трансляция событий в реальном времени через WebSocket
SDK для разработчиков (
src/sdk/index.js)Административный CLI с 17 командами (
src/cli/index.js)Конечная точка протокола MCP (совместимо с Claude Desktop)
Реестр инструментов/агентов на основе файлов с горячей перезагрузкой (
chokidar)Журнал аудита с кольцевым буфером
Этап 2 — Усиление безопасности ✅ Завершено
Детектор угроз 10 семейств (SQL/NoSQL/XSS/SSRF/Shell/Template/Path/CMDi/Null/Header-инъекции)
Блокировка сканеров по user-agent (sqlmap, nikto, nmap, Burp Suite, 20+ сканеров)
Трёхуровневое ограничение частоты запросов (глобальный + строгий + замедление скорости)
Автоматическая блокировка IP после перебора (20+ попыток)
Структурированный журнал событий безопасности с 5 уровнями серьёзности
Строгий CSP от Helmet (
defaultSrc: 'none')Срок действия ключа агента + флаг отключения
Контроль областей действия (middleware
requireScope)Логирование безопасности при сбоях аутентификации + нарушениях области действия
Набор тестов безопасности + бенчмарк (сравнение защищённой и незащищённой версий)
Этап 3 — Эксплуатационные возможности ✅ Завершено (в этом релизе)
X-Trace-ID — уникальный коррелятор запросов, распространяемый через все уровни и до вышестоящих API
Circuit Breaker — CLOSED/OPEN/HALF-OPEN для каждого инструмента (настраиваемые пороги)
Повторные попытки с экспоненциальной задержкой — 200ms → 400ms → 800ms, пропускает ошибки 4xx
Кэш ответов — TTL для каждого инструмента/типа данных, отслеживание доли попаданий, инвалидация по префиксу
Ограничение окна контекста — побайтовый бюджет для каждого инструмента, корректное усечение с сигнализацией
Защита пагинации — глобальное ограничение
?limit(по умолчанию максимум 100 элементов)Снимки состояния — атомарная периодическая запись, восстановление при запуске (инструменты/агенты/пользователи переживают перезапуск)
Защита лимита соединений — разрыв TCP-сокетов сверх настраиваемого максимума
Ограничение частоты запросов активировано (Manager) — 300 общих + 15 на аутентификацию в минуту на IP
Реальный мониторинг — шкала активности на основе реальных данных о вызовах (убран mock на Math.random())
Конечная точка
/metrics(MCP) — полная админ-панель (вызовы, кэш, circuit breakers, память)node-cache активирован (Manager) — предустановленные TTL для каждого типа данных, отслеживание доли попаданий
/api/monitoring/cacheи/api/monitoring/snapshot— новые конечные точки
Этап 4 — Постоянное хранение и распределение 🔲 Ожидает ваших данных
Для этого требуется инфраструктура.
pgиioredisуже установлены — нужны только строки подключения.
PostgreSQL — перенести
in-memory-store.jsна постоянную базу данныхтаблицы
tools,agents,users,api_keys,credentials,audit_logПул подключений через
pg(DATABASE_URLуже есть в.env.example)
Redis — общее хранилище для ограничения частоты запросов + сессий + кэша ответов
Заменить node-cache на ioredis для безопасности мультиинстансного развёртывания
Общий список блокировки IP для всех экземпляров сервера
(
REDIS_URLуже есть в.env.example)
Горизонтальное масштабирование — после подключения Redis и Postgres развернуть N экземпляров за nginx
Этап 5 — Опыт разработчика 🔲 Опционально
Автогенерация спецификации OpenAPI/Swagger (
swagger-jsdoc)Валидация схемы окружения через
zodпри запуске (быстрый отказ при отсутствующей конфигурации)JWT refresh-токены + чёрный список
Экспорт метрик в Prometheus (конечная точка
/metrics/prometheus)Распределённая трассировка OpenTelemetry
Матрица совместимости инструментов
WebSocket-дашборд для отображения состояния circuit breaker в реальном времени
Модель безопасности
Сервер менеджера
Request
│
├── X-Trace-ID attachment (Layer 0)
├── Helmet strict CSP (Layer 1)
├── Global rate limit 300/min (Layer 2a)
├── Auth rate limit 15/min on /api/auth (Layer 2b)
├── Body size limit 2 MB (Layer 3)
├── Context window budget (Layer 4)
├── Pagination guard max 100 items (Layer 5)
├── JWT / API key verification (per-route)
└── RBAC role check (per-route)MCP-сервер
Request
│
├── X-Trace-ID attachment (Layer 0)
├── Strict Helmet CSP (Layer 1)
├── IP block list check (Layer 2)
├── Body size guard (Layer 3)
├── Context window budget (Layer 4)
├── HTTP method whitelist (Layer 5)
├── Scanner user-agent block (Layer 6)
├── Global rate limit + speed slow-down (Layer 7)
├── 10-family threat detection (Layer 8)
├── Agent API key auth + expiry + disabled check (per-route)
├── Tool scope enforcement (per-route)
├── Circuit breaker check (per-tool)
├── Response cache lookup (per-tool)
└── Retry + context limit on upstream call (per-tool)Мониторинг и наблюдаемость
Доступные данные
Источник | Что показывает |
| Обзор системы, статистика кэша, информация о снимках, конфигурация лимита контекста |
| Реальная почасовая шкала за 24 часа (количество успехов и ошибок) |
| Топ инструментов по количеству вызовов + процент успеха |
| Все действия администратора (создание/удаление инструментов, добавление/удаление агентов) |
| Процент попаданий в кэш, количество записей, вытеснения |
| Временная метка последнего снимка + количество записей |
| Состояния автоматического выключателя, журнал вызовов, статистика кэша, системная память |
| Аптайм + память (лёгкий зонд) |
| Полная история вызовов: trace ID, агент, инструмент, задержка, успешность, повторные попытки |
| Все события безопасности: сбои AUTH, угрозы, лимиты запросов, срабатывания автоматического выключателя |
| Последний снимок: временная метка + количество для всех типов данных |
Поток X-Trace-ID
Client → [generates or passes X-Trace-ID]
→ Manager/MCP Server [attaches to req.traceId, echoes in X-Trace-ID response header]
→ Security log entries [include traceId]
→ Call log entries [include traceId]
→ Upstream API call [X-Trace-ID forwarded in headers]
→ Response [traceId in JSON body]Дорожная карта
v2.1 (Следующий)
Подключить PostgreSQL для постоянного хранения
Подключить Redis для распределённого ограничения частоты запросов и кэша
Проверка схемы окружения через
zodпри запуске
v2.2
JWT refresh token + чёрный список
Экспорт метрик Prometheus
Ограничение частоты запросов по API-ключам (не на основе IP)
v3.0
Полная спецификация OpenAPI
Распределённая трассировка OpenTelemetry
Федеративная идентичность агентов на основе OAuth2/OIDC
Участие в разработке
См. CONTRIBUTING.md о стратегии ветвления, процессе PR и руководстве по стилю кода.
Лицензия
MIT © MCP Tool Manager Team
Полную оценку технических возможностей см. в REPORT.md.
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
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to discover and execute tools via a secure MCP server with JWT authentication, RBAC, rate limiting, and audit logging.1MIT
- AlicenseNot gradedqualityCmaintenanceA secure tool-execution plane for agentic AI that enforces JWT authentication, rate limiting, prompt-injection inspection, and audit logging, while ingesting downstream OpenAPI endpoints as MCP tools.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to access a unified catalog of tools from various APIs (OpenAPI, GraphQL, MCP, Google Discovery) through the MCP protocol.MIT

AgentsGateofficial
AlicenseNot gradedqualityAmaintenanceEnables AI agents to securely call MCP tools with risk scoring, checkpoints, rollback, and approval workflows.134MIT
Related MCP Connectors
Hosted MCP endpoint with realistic fake data for prototyping agents. 12 tools, no setup.
Free public MCP for AI agents — 193 tools, 44 workflows. No API key.
Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.
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/Nagendda/MCP-Tool-Manager'
If you have feedback or need assistance with the MCP directory API, please join our Discord server