Skip to main content
Glama
milad13711
by milad13711

Сервер 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   │
                    └──────────────────┘

Как обрабатывается запрос

  1. Транспорт — MCP-хост отправляет POST /mcp (Streamable HTTP) запрос с Bearer токеном доступа.

  2. OAuth 2.1 / OIDC (src/auth/oidc.ts) — подпись токена, издатель, аудитория и срок действия проверяются с помощью JWKS-ключей поставщика удостоверений. Непроверенные токены никогда не достигают слоёв ниже.

  3. Резолвер тенантов (src/tenant/tenantResolver.ts) — идентификатор тенанта считывается из утверждения (claim) в проверенном токене и сопоставляется с подключением к Exir CRM этого тенанта (base URL + API key). Запросы никогда не могут пересекать границы тенантов.

  4. Ограничитель запросов (src/middleware/rateLimiter.ts) — запросы ограничиваются для каждого тенанта, чтобы один шумный вызывающий не мог лишить ресурсов другого в рамках общего развёртывания.

  5. Реестр инструментов (src/tools/) — MCP-сервер для этого запроса создаётся путём оборачивания каждого зарегистрированного инструмента (src/mcp/server.ts) с помощью:

    • Механизма разрешений (src/permissions/permissionEngine.ts) — проверяет OAuth-скоупы токена на соответствие требуемому скоупу инструмента.

    • Проверки входных данных — каждый инструмент объявляет zod схему; недопустимые входные данные отклоняются до обращения к CRM.

    • Журнала аудита (src/audit/auditLogger.ts) — каждый вызов (разрешённый, отклонённый, успешный или ошибочный) записывается с указанием тенанта, субъекта, имени инструмента и результата.

  6. Внутренний 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

Добавление нового инструмента

  1. Добавьте вызов registry.register({...}) в соответствующий файл в src/tools/ (или создайте новый файл для новой предметной области CRM) с указанием name, description, requiredScope, zod inputSchema и handler(crm, input), который вызывает PerfexClient.

  2. Если это новый файл, подключите его в buildToolRegistry() в src/tools/index.ts.

  3. Добавьте тест в 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-запроса в рамках проверенного тенанта и его разрешений, поэтому общее состояние сессии между тенантами отсутствует.

F
license - not found
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

  • F
    license
    Not graded
    quality
    A
    maintenance
    A 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.
    57
  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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
  • A
    license
    B
    quality
    B
    maintenance
    MCP server that connects AI assistants to the Conexa business management system, enabling CRUD operations on sales, customers, plans, contracts, charges, and more via 83 tools.
    83
    121
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A security-hardened MCP gateway that enables AI agents to call LLM APIs (Gemini, OpenAI, Claude, etc.) using ephemeral proxy tokens, eliminating exposure of real API keys.
    60
    6
    Apache 2.0

View all related MCP servers

Related MCP Connectors

  • Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.

  • Phone, SMS & email for AI agents — one remote MCP endpoint, OAuth login, zero install.

  • MCP Server for agents to onboard, pay, and provision services autonomously with InFlow

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/milad13711/Exir-MCP-Connector'

If you have feedback or need assistance with the MCP directory API, please join our Discord server