Skip to main content
Glama
Nagendda

MCP Tool Manager

by Nagendda

MCP Tool Manager

Готовая к продакшену, AI-нативная система реестра инструментов и управления агентами, построенная на протоколе Model Context Protocol (MCP).

Node.js License: MIT MCP Security


📖 Оглавление

  1. Что это?

  2. Обзор архитектуры

  3. Структура проекта

  4. Быстрый старт

  5. Справочник по конфигурации

  6. Справочник по API

  7. План реализации

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

  9. Мониторинг и наблюдаемость

  10. Дорожная карта

  11. Участие в разработке


Related MCP server: AgentsGate

Что это?

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-manager

2. Установка зависимостей

# 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 keys

4. Запуск

# 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 start

5. Доступ

Интерфейс

URL

Дашборд

http://localhost:3000

API менеджера

http://localhost:5000

Статус менеджера

http://localhost:5000/api/monitoring/health

MCP-сервер

http://localhost:5001

Статус MCP

http://localhost:5001/health

Метрики MCP

http://localhost:5001/metrics/health

Учётные данные по умолчанию (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:6379

MCP-сервер (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

/api/auth/login

—

Получить JWT-токен

POST

/api/auth/register

—

Создать учётную запись

GET

/api/auth/me

✅

Текущий пользователь + API-ключи

POST

/api/auth/api-keys

✅

Сгенерировать новый API-ключ

DELETE

/api/auth/api-keys/:key

✅

Отозвать API-ключ

Инструменты

Метод

Путь

Авторизация

Описание

GET

/api/tools

✅

Список инструментов (с пагинацией)

POST

/api/tools

✅

Зарегистрировать новый инструмент

GET

/api/tools/:id

✅

Детали инструмента

PUT

/api/tools/:id

✅

Обновить инструмент

DELETE

/api/tools/:id

✅

Удалить инструмент

POST

/api/tools/:id/test

✅

Проверить вызов инструмента

Агенты

Метод

Путь

Авторизация

Описание

GET

/api/agents

✅

Список агентов

POST

/api/agents

✅

Зарегистрировать агента

GET

/api/agents/:id

✅

Детали агента

PUT

/api/agents/:id

✅

Обновить агента

DELETE

/api/agents/:id

✅

Удалить агента

POST

/api/agents/:id/tools

✅

Обнаружить инструменты для агента

Мониторинг

Метод

Путь

Авторизация

Описание

GET

/api/monitoring/health

—

Проверка работоспособности

GET

/api/monitoring/stats

✅

Полная статистика системы + кэш + снимок

GET

/api/monitoring/activity

✅

Реальная почасовая шкала вызовов (24 часа)

GET

/api/monitoring/top-tools

✅

Топ N инструментов по количеству вызовов

GET

/api/monitoring/audit-log

✅

Записи аудита

GET

/api/monitoring/cache

✅

Доля попаданий в кэш + записи

GET

/api/monitoring/snapshot

✅

Временная метка последнего снимка + счётчики

MCP-сервер (http://localhost:5001)

Метод

Путь

Авторизация

Описание

GET

/health

—

Проверка работоспособности

GET

/info

AGENT_KEY

Список инструментов для вызывающего агента

GET

/info/all

ADMIN_KEY

Все инструменты + все агенты

GET

/mcp/tools

—

Список инструментов, совместимых с Claude Desktop

POST

/mcp/invoke/:tool

—

Вызов по протоколу MCP

POST

/invoke/:toolName

AGENT_KEY

Прямой вызов инструмента

GET

/metrics

ADMIN_KEY

Полная панель мониторинга

GET

/metrics/health

—

Облегчённая проверка работоспособности

GET

/metrics/calls

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)

Мониторинг и наблюдаемость

Доступные данные

Источник

Что показывает

GET /api/monitoring/stats

Обзор системы, статистика кэша, информация о снимках, конфигурация лимита контекста

GET /api/monitoring/activity

Реальная почасовая шкала за 24 часа (количество успехов и ошибок)

GET /api/monitoring/top-tools

Топ инструментов по количеству вызовов + процент успеха

GET /api/monitoring/audit-log

Все действия администратора (создание/удаление инструментов, добавление/удаление агентов)

GET /api/monitoring/cache

Процент попаданий в кэш, количество записей, вытеснения

GET /api/monitoring/snapshot

Временная метка последнего снимка + количество записей

GET /metrics (MCP, admin)

Состояния автоматического выключателя, журнал вызовов, статистика кэша, системная память

GET /metrics/health (MCP, public)

Аптайм + память (лёгкий зонд)

logs/calls.ndjson (MCP)

Полная история вызовов: trace ID, агент, инструмент, задержка, успешность, повторные попытки

logs/security.log (MCP)

Все события безопасности: сбои AUTH, угрозы, лимиты запросов, срабатывания автоматического выключателя

snapshots/meta.json (Manager)

Последний снимок: временная метка + количество для всех типов данных

Поток 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.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to securely call MCP tools with risk scoring, checkpoints, rollback, and approval workflows.
    17 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to safely call enterprise tools through a governed MCP gateway with permission enforcement, blast-radius controls, input validation, and a full audit trail for every invocation.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables organizations to centrally govern agent tool access by exposing authorized MCP tools through a unified endpoint with search and execute functions, while enforcing function-level permissions, credential modes, and auditability.
    MIT