Skip to main content
Glama

MCP Hub — универсальная экосистема MCP-сервера и коннекторов

Самостоятельно размещаемый хаб, который объединяет коннекторы MCP (Model Context Protocol) в единую конечную точку для ваших ИИ-клиентов — с веб-интерфейсом в стиле App Store, установкой в один клик, живыми журналами и мониторингом состояния.

Claude Desktop / Cursor ──Bearer key──▶  ┌─────────────────────┐
                                        │   MCP Hub (:3000)    │──▶ github (npx)
                                        │  /mcp   /api  Web UI │──▶ postgres (npx)
Web browser ──session cookie──▶         └─────────┬───────────┘──▶ slack (npx) …
                                                  ▼
                                            PostgreSQL 16

Быстрый старт

A. Локально / обычный Docker

cp .env.example .env
# edit .env — set POSTGRES_PASSWORD (and optionally MASTER_ENCRYPTION_KEY / SESSION_SECRET)
docker compose up -d --build

B. Portainer (веб-редактор)

  1. Stacks → Add stack → Web editor и вставьте portainer-stack.yml.

  2. Добавьте переменную окружения POSTGRES_PASSWORD (в разделе Environment variables) перед развёртыванием.

  3. Разверните — образ загружается с Docker Hub (xeniak10/mcp-hub:latest), сборка не требуется.

Откройте http://:3000 — при первом посещении вам будет предложено создать учётную запись администратора (bootstrap). Затем:

  1. Перейдите в Marketplace, установите, например, GitHub, вставьте токен → дочерний процесс коннектора запускается в фоне.

  2. Перейдите в Settings → создайте API-ключ.

  3. Укажите вашему ИИ-клиенту на хаб:

{
  "mcpServers": {
    "hub": {
      "url": "http://localhost:3000/mcp",
      "headers": { "Authorization": "Bearer mcp_YOUR_KEY" }
    }
  }
}

Все инструменты коннекторов отображаются с пространством имён: github__create_issue, postgres__query, …

Related MCP server: open-connector-pro

Что вы получаете

  • Marketplace — 71 встроенный коннектор для разработчиков (GitHub, GitLab, Postgres, Kubernetes, Sentry…) и для бизнес-команд — CRM (Salesforce, HubSpot, Pipedrive), ERP/бухгалтерия (Odoo, QuickBooks, Xero), служба поддержки (Zendesk, Freshdesk, ServiceNow), коммуникации (Microsoft 365, Email IMAP/SMTP, Twilio, Slack, Teams files), продуктивность (Google Sheets, Notion, Airtable) и наблюдаемость (Dynatrace). Установка в один клик, форма конфигурации на основе схемы, фоновый запуск зависимостей через npx/uvx внутри контейнера хаба. Поиск, фильтры по категориям и сортировка (сначала официальные / самые устанавливаемые / по имени).

  • Репозитории сообщества коннекторов — вставьте URL публичного GitHub-репозитория в Marketplace (раздел "Community repos"), и каждый допустимый манифест коннектора в нём будет получен, проверен и объединён в ваш каталог (с пространством имён community:owner/repo/<id>, кэшируется офлайн в томе данных). index.json в корне репозитория явно перечисляет файлы; в противном случае проверяются корневые *.json. Новые записи появляются после перезапуска хаба.

  • Пользовательские коннекторы — поместите JSON-манифест в ./connectors/ (или в том connectors), и он появится в маркетплейсе после перезапуска. См. connectors/example.json.example.

  • Панель управления — живые статусные бейджи (работает / запускается / ошибка / остановлен), плитки статистики, поиск по экземплярам, массовые Restart all / Stop all с подтверждением.

  • Детали коннектора — переименование экземпляров на месте, визуальный редактор конфигурации, живой предпросмотр инструментов (tools/list через запущенный процесс) с копированием имён инструментов по клику, просмотр журналов в реальном времени (WebSocket tail) с фильтрами по уровню/тексту, режимом следования и загрузкой журнала.

  • Светлая и тёмная темы — переключатель в боковой панели; сохраняется для каждого браузера.

  • Горячие клавиши — / фокусирует поиск · g d панель управления · g m маркетплейс · g s настройки · Esc закрывает диалоги/снимает фокус с поиска.

  • Готовность к PWA — устанавливаемый манифест + SVG-фавиконка.

  • Резервное копирование и восстановление — экспорт всех установленных коннекторов и конфигураций в один JSON-файл; импорт восстанавливает их на новом экземпляре (страница Settings).

  • Управление учётной записью — смена пароля (выход на всех других устройствах), список активных сессий с IP/user-agent, отзыв любой сессии.

  • Оповещения об ошибках — задайте ERROR_WEBHOOK_URL, и хаб отправляет JSON-оповещение всякий раз, когда коннектор переходит в состояние ошибки (работает со Slack, Discord, Teams, универсальными приёмниками; период охлаждения 5 минут на коннектор).

  • Watchdog — упавшие процессы перезапускаются с экспоненциальной задержкой; проверка работоспособности каждые 30 секунд; восстановление при загрузке возвращает всё, что было включено до перезапуска.

  • Обновления — в Settings отображается текущая версия и проверяются релизы GitHub / теги Docker Hub каждые 6 часов (или по кнопке Check now). Когда выходит новая версия, вы получаете в один клик точную команду обновления для вашего типа развёртывания.

  • Необязательное автообновление — включите сайдкар Watchtower с помощью docker compose --profile autoupdate up -d: он ежечасно загружает новые образы xeniak10/mcp-hub и пересоздаёт только контейнер приложения (он ограничен метками, поэтому никогда не затрагивает вашу базу данных).

  • Мониторинг и эксплуатация — неаутентифицированный GET /healthz для проверок доступности; GET /api/meta сообщает версию + git-коммит (показывается в нижнем колонтитуле Settings); трафик по API-ключам на /mcp ограничен 120 запросами в минуту на ключ.

  • Безопасность — конфигурации зашифрованы AES-256-GCM в состоянии покоя, пароли argon2id, cookie-сессии, хешированные API-ключи, ограничение скорости входа, журнал аудита.

Конфигурация

Переменная

Обязательная

Описание

POSTGRES_PASSWORD

✅

Пароль для встроенного PostgreSQL

MASTER_ENCRYPTION_KEY

–

openssl rand -hex 32. Автоматически генерируется в /app/data/master.key, если пусто

SESSION_SECRET

–

Пусто = случайный при каждой загрузке (пользователи выходят при перезапуске)

APP_PORT

–

Порт хоста (по умолчанию 3000)

LOG_RETENTION_LINES

–

Размер кольцевого буфера на коннектор (по умолчанию 5000)

LOG_RETENTION_DAYS

–

Лимит возраста журнала (по умолчанию 7)

ERROR_WEBHOOK_URL

–

URL для POST JSON-оповещений, когда коннектор переходит в состояние ошибки

Тома: pgdata (база данных), app-data (мастер-ключ + состояние), npx-cache (кэш зависимостей коннекторов — ускоряет перезапуски).

Обновление

Хаб не может заменить собственный контейнер, поэтому обновление — это одна команда на хосте:

docker compose pull app && docker compose up -d --no-deps --force-recreate app

(Settings → Updates копирует её для вас, когда доступна новая версия. В Portainer используйте Stack → Pull and redeploy.) Хотите полностью автоматически?

docker compose --profile autoupdate up -d

Это запускает Watchtower рядом с хабом; каждый час он проверяет Docker Hub и пересоздаёт контейнер приложения, когда существует более новый образ (--cleanup удаляет старые образы). Ваши данные хранятся в томах, поэтому обновления проходят без потерь.

Разработка

npm install
npm run dev        # server (watch) + web (vite dev server on :5173, proxied /api + /mcp)
npm run typecheck  # all workspaces
npm run build      # shared → server → web

Стек: npm workspaces · Fastify 5 · @modelcontextprotocol/sdk · PostgreSQL 16 · Vite + React 18 + Tailwind CSS v4 + TanStack Query.

Структура

packages/
  shared/   types shared by server & web (manifests, API DTOs, WS events)
  server/   Fastify app: auth, registry (connector manifests), ConnectorManager,
            unified /mcp proxy, log pipeline, SQL migrations
  web/      React SPA served statically by the server in production

Добавление коннектора

Без пересборки (рекомендуется): скопируйте connectors/example.json.example в connectors/<your-id>.json, заполните манифест (argv команды с плейсхолдерами {env.NAME}

  • форма конфигурации JSON-schema) и перезапустите хаб. Недопустимые файлы пропускаются с предупреждением в журналах; пользовательские идентификаторы, конфликтующие со встроенными, игнорируются.

Из GitHub-репозитория: Marketplace → Community repos → вставьте owner/repo (или полный URL github.com). Хаб получает index.json из корня репозитория (массив путей к файлам) или возвращается к корневым *.json-файлам, проверяет каждый по той же схеме, что и манифесты в томах, и кэширует их под идентификаторами community:owner/repo/<id> — так они никогда не могут перекрыть встроенные и продолжают работать офлайн после первой загрузки. Управление/удаление репозиториев в том же разделе; изменения применяются при следующем перезапуске.

Встроенный: создайте packages/server/src/registry/connectors/<id>.ts, экспортирующий ConnectorManifest, и зарегистрируйте его в src/registry/index.ts. Он появится в маркетплейсе сразу после пересборки.

Сводка REST API

Endpoint

Auth

Описание

GET /healthz

–

Проверка работоспособности (только ping БД, без деталей)

POST /api/auth/bootstrap · login · logout

–/session

Учётная запись при первом запуске, вход/выход

GET /api/meta

session

{version, commit} текущей сборки

POST /api/auth/change-password

session

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

GET /api/auth/sessions · DELETE /:id

session

Список/отзыв активных сессий

GET /api/marketplace

session

Записи каталога с количеством установок

GET/POST /api/community/repos · DELETE /:repo

session

Управление репозиториями коннекторов сообщества

POST /api/connectors · PUT/DELETE /:id

session

Установка / переименование / удаление

PUT /api/connectors/:id/config

session

Сохранение зашифрованной конфигурации

POST /api/connectors/:id/enable·disable·restart

session

Жизненный цикл

POST /api/connectors/restart-all · stop-all

session

Массовые операции

GET /api/connectors/:id/tools

session

Живой список инструментов из запущенного процесса

GET /api/logs/:id?after= + WS stream

session

Хвост журнала

GET/POST /api/keys · DELETE /:id

session

Управление API-ключами

GET /api/backup · POST /api/backup/restore

session

Экспорт/импорт конфигурации

POST /mcp

Bearer key or session

Единая конечная точка MCP (120 запросов/мин на ключ)

Все изменяющие конечные точки записывают в журнал аудита.

Примечания

  • Коннекторы работают как дочерние процессы внутри контейнера хаба (npx -y pkg@version или uvx). Docker-сокет не монтируется. Коннекторы на Python требуют uvx — он установлен в образ времени выполнения.

  • Конечная точка MCP — это stateless Streamable HTTP (/mcp) — подходит любой HTTP MCP-клиент.

  • Ресурсы доступны по адресу connector://<slug>/<original-uri>.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers