Skip to main content
Glama
milad13711
by milad13711

Exir MCP Server

MCPホスト(Claude、ChatGPT、またはその他のMCP互換エージェント)とExir CRM API(内部ではPerfex CRM)の間に位置する、マルチテナント対応のModel Context Protocolゲートウェイです。

                    ┌──────────────────────┐
                    │   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. Transport — MCPホストがBearerアクセストークンを添えてPOST /mcp(Streamable HTTP)リクエストを送信します。

  2. OAuth 2.1 / OIDCsrc/auth/oidc.ts)— トークンの署名、発行者(issuer)、オーディエンス、有効期限が、IDプロバイダーのJWKSに対して検証されます。未検証のトークンはこの層より下に到達することはありません。

  3. Tenant Resolversrc/tenant/tenantResolver.ts)— テナントIDは検証済みトークンのクレームから読み取られ、そのテナントのExir CRM接続情報(ベースURL + APIキー)にマッピングされます。リクエストがテナントの境界を越えることは決してありません。

  4. Rate Limitersrc/middleware/rateLimiter.ts)— リクエストはテナントごとにスロットリングされるため、共有デプロイメント上で、ある大量リクエストを送る呼び出し元が別の呼び出し元を枯渇させることはありません。

  5. Tool Registrysrc/tools/)— このリクエストに対するMCPサーバーは、登録済みのすべてのツール(src/mcp/server.ts)を以下のものでラップして構築されます:

    • Permission Enginesrc/permissions/permissionEngine.ts)— トークンのOAuthスコープをツールの必須スコープと照合します。

    • Input Validation — すべてのツールはzodスキーマを宣言します。無効な入力はCRMに到達する前に拒否されます。

    • Audit Loggersrc/audit/auditLogger.ts)— すべての呼び出し(許可、拒否、成功、エラー)が、テナント、主体、ツール名、結果とともに記録されます。

  6. Internal APIsrc/crm/perfexClient.ts)— テナントスコープのHTTPクライアントが実際のExir CRM API(Perfex CRMのREST API、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. src/tools/配下の該当ファイル(新しいCRMドメインの場合は新しいファイル)に、namedescriptionrequiredScopezodinputSchema、およびPerfexClientを呼び出すhandler(crm, input)を指定したregistry.register({...})呼び出しを追加します。

  2. 新しいファイルの場合は、src/tools/index.tsbuildToolRegistry()に組み込みます。

  3. tests/tools.test.tsに、ツールが登録されていることと、そのスキーマが不正な入力を拒否することを検証するテストを追加します。

他の場所での変更は不要です。権限付与、検証、監査は、src/mcp/server.tsによって登録済みのすべてのツールに汎用的に適用されます。

マルチテナンシー

src/tenant/tenantResolver.tsには、開発用のフォールバックとしてEnvTenantStoreが同梱されており、すべてのテナントIDを.env内の単一のCRM接続情報に解決します。実際のマルチテナントデプロイメントでは、テナントディレクトリ(Postgres、設定サービスなど)に対してTenantStoreインターフェースを実装し、テナントIDを{ baseUrl, apiKey }にマッピングして、src/http/app.tstenantResolver(myStore)に渡します。

セキュリティに関する注意事項

  • テナントIDは、暗号学的に検証されたアクセストークンのクレームからのみ信頼され、クライアントが指定したヘッダーからは決して信頼されません。ただし、信頼できる内部ネットワークの呼び出し元(例:ローカル開発)のためにTENANT_HEADER_FALLBACK=trueが明示的に設定されている場合は除きます。

  • テナントごとのCRM APIキーがログに記録されることはありません(src/logger.tsAuthorization*.apiKey*.tokenをマスクします)。

  • すべてのツール呼び出しは2回検証されます。1回目はMCP SDKがツールのJSONスキーマに対して検証し、2回目はハンドラー内のzod.safeParseが検証します。CRM APIの呼び出しが行われる前です。

  • サーバーはステートレスに動作します(sessionIdGenerator: undefined)。HTTPリクエストごとに新しいMCPサーバーインスタンスが作成され、そのリクエストの検証済みテナントと権限にスコープされるため、テナント間で漏洩する可能性のある共有セッション状態は存在しません。

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