Exir MCP Server
Сервер Exir MCP
Многопользовательский шлюз Model Context Protocol, который располагается между MCP-хостами (Claude, ChatGPT или любой другой MCP-совместимый агент) и API Exir CRM (Perfex CRM под капотом).
┌──────────────────────┐
│ ChatGPT / Agent │
│ Claude / Other Host │
└──────────┬────────────┘
│
MCP / HTTPS
│
▼
┌────────────────────────────────┐
│ Exir MCP Server │
│ │
│ OAuth 2.1 / OIDC │
│ Tenant Resolver │
│ Permission Engine │
│ Tool Registry │
│ Audit Logger │
│ Rate Limiter │
│ Input Validation │
└───────────────┬─────────────────┘
│
Internal API
│
▼
┌────────────────────────────────┐
│ Exir CRM API │
│ │
│ Customers / Leads / Sales │
│ Tasks / Projects / Tickets │
│ Invoices / Contracts / ... │
└───────────────┬─────────────────┘
│
▼
┌──────────────────┐
│ Customer Tenant │
│ Data / Database │
└──────────────────┘Как обрабатывается запрос
Транспорт — MCP-хост отправляет
POST /mcp(Streamable HTTP) запрос сBearerтокеном доступа.OAuth 2.1 / OIDC (
src/auth/oidc.ts) — подпись токена, издатель, аудитория и срок действия проверяются с помощью JWKS-ключей поставщика удостоверений. Непроверенные токены никогда не достигают слоёв ниже.Резолвер тенантов (
src/tenant/tenantResolver.ts) — идентификатор тенанта считывается из утверждения (claim) в проверенном токене и сопоставляется с подключением к Exir CRM этого тенанта (base URL + API key). Запросы никогда не могут пересекать границы тенантов.Ограничитель запросов (
src/middleware/rateLimiter.ts) — запросы ограничиваются для каждого тенанта, чтобы один шумный вызывающий не мог лишить ресурсов другого в рамках общего развёртывания.Реестр инструментов (
src/tools/) — MCP-сервер для этого запроса создаётся путём оборачивания каждого зарегистрированного инструмента (src/mcp/server.ts) с помощью:Механизма разрешений (
src/permissions/permissionEngine.ts) — проверяет OAuth-скоупы токена на соответствие требуемому скоупу инструмента.Проверки входных данных — каждый инструмент объявляет zod схему; недопустимые входные данные отклоняются до обращения к CRM.
Журнала аудита (
src/audit/auditLogger.ts) — каждый вызов (разрешённый, отклонённый, успешный или ошибочный) записывается с указанием тенанта, субъекта, имени инструмента и результата.
Внутренний API (
src/crm/perfexClient.ts) — HTTP-клиент в рамках тенанта вызывает реальный API Exir CRM (REST API Perfex CRM, аутентификация через заголовокauthtoken) и возвращает результат обратно вверх по цепочке как выходные данные инструмента.
Related MCP server: Nervora
Структура проекта
src/
auth/oidc.ts OAuth 2.1 / OIDC bearer-token verification
tenant/tenantResolver.ts Tenant lookup + per-tenant CRM connection details
permissions/permissionEngine.ts Scope-based authorization
audit/auditLogger.ts Structured audit trail for every tool call
middleware/rateLimiter.ts Per-tenant rate limiting
crm/perfexClient.ts Internal API client to the Exir CRM API
tools/ Tool Registry + one file per CRM domain
customers.ts leads.ts tasks.ts invoices.ts
mcp/server.ts Wires tools -> permissions -> validation -> audit -> CRM
http/app.ts Express app: /healthz, POST /mcp
index.ts Process entrypoint
tests/ Vitest unit tests (permission engine, tool registry)Начало работы
npm install
cp .env.example .env # fill in OIDC_ISSUER, CRM_API_BASE_URL, CRM_API_KEY, ...
npm run dev # ts-node/tsx dev server on :3333Сборка и запуск для продакшена:
npm run build
npm startИли через Docker:
docker compose up --buildЗапуск тестов:
npm testДобавление нового инструмента
Добавьте вызов
registry.register({...})в соответствующий файл вsrc/tools/(или создайте новый файл для новой предметной области CRM) с указаниемname,description,requiredScope,zodinputSchemaиhandler(crm, input), который вызываетPerfexClient.Если это новый файл, подключите его в
buildToolRegistry()вsrc/tools/index.ts.Добавьте тест в
tests/tools.test.ts, проверяющий, что инструмент зарегистрирован и его схема отклоняет некорректные входные данные.
Больше никаких изменений не требуется — разрешения, проверка и аудит применяются автоматически к каждому зарегистрированному инструменту через src/mcp/server.ts.
Мультитенантность
src/tenant/tenantResolver.ts поставляется с запасным вариантом EnvTenantStore для разработки, который сопоставляет каждый идентификатор тенанта с единственным подключением к CRM из .env. Для реальных мультитенантных развёртываний реализуйте интерфейс TenantStore на основе вашего каталога тенантов (Postgres, конфигурационный сервис и т.д.), сопоставляя идентификатор тенанта -> { baseUrl, apiKey }, и передайте его в tenantResolver(myStore) в src/http/app.ts.
Заметки по безопасности
Идентификатор тенанта всегда берётся только из утверждения в криптографически проверенном токене доступа, никогда — из заголовка, предоставленного клиентом, если только
TENANT_HEADER_FALLBACK=trueне задан явно для доверенных внутренних вызывающих (например, при локальной разработке).Ключи API CRM для каждого тенанта никогда не логируются (
src/logger.tsскрываетAuthorization,*.apiKey,*.token).Каждый вызов инструмента проверяется дважды: сначала MCP SDK по JSON-схеме инструмента, затем
zod.safeParseвнутри обработчика, прежде чем будет сделан любой запрос к CRM API.Сервер работает без сохранения состояния (
sessionIdGenerator: undefined): новый экземпляр MCP-сервера создаётся для каждого HTTP-запроса в рамках проверенного тенанта и его разрешений, поэтому общее состояние сессии между тенантами отсутствует.
This server cannot be deployed
Maintenance
Related MCP Connectors
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
Let AI agents query data and act across all your business apps via MCP.
Multi-tenant MCP gateway for AI commerce. One connection, every store.
Multi-tenant MCP gateway for AI commerce. One connection, every store.
Related MCP Servers
- FlicenseNot gradedqualityAmaintenanceA production-ready MCP gateway and control plane that provides credential vault, policy engine, audit logging, and managed runtime for routing tool calls between AI agents and downstream MCP servers.58-
- AlicenseNot gradedqualityDmaintenanceA secure MCP gateway for enterprise AI tool execution, enabling governed invocation of business tools with authentication, RBAC, audit logging, PII redaction, and async processing.Apache 2.0
- AlicenseNot gradedqualityDmaintenanceProvides a secure MCP gateway for AI agents to access APIs without exposing raw credentials, with scoped access, audit logging, and OAuth support.MIT
- AlicenseNot gradedqualityDmaintenanceA multi-tenant MCP server that exposes DataCrazy CRM REST API as 63 auto-generated tools, allowing AI assistants to query leads, conversations, pipelines, and more through natural language.MIT