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 installed
Maintenance
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
- AlicenseNot gradedqualityCmaintenanceA 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
- AlicenseBqualityBmaintenanceMCP 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.831211MIT
- AlicenseNot gradedqualityCmaintenanceA 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.606Apache 2.0
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
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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