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: 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-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.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to access a unified catalog of tools from various APIs (OpenAPI, GraphQL, MCP, Google Discovery) through the MCP protocol.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to securely call MCP tools with risk scoring, checkpoints, rollback, and approval workflows.
    134
    MIT

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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