Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

AI assistants (MCP)

The phone system exposes an MCP (Model Context Protocol) server: an AI assistant, whether Claude, ChatGPT, Le Chat or any other MCP client, uses the API operations with the rights of an API key. You ask it in plain language “who called yesterday after 6 pm?”, it calls the operations it needs and answers you.

Before you start

  • Server address: https://<portal address>/api/v1/mcp, over streamable HTTP. In the examples below, replace portal.example with your portal’s address.
  • API key: create one on the API page (API keys); it only sees and changes your own space. The MCP client sends it in the Authorization: Bearer <key> header.
  • Rights: the assistant has exactly the key’s rights. Choose the narrowest role that is enough, read-only to start with. Every write is recorded in the audit log, on the mcp channel, in the key’s name.
  • One key per tool: revoking it cuts off that tool alone.
  • Secret: don’t paste the key into a conversation. Put it in the tool’s configuration, or better in an environment variable (CENTREX_KEY below).
  • Data sent: API responses (call log, numbers, user names) go to the assistant’s provider. Check that this use is compatible with your GDPR commitments, in particular towards your staff.
  • Network: tools installed on your computer (Claude Code, Claude Desktop, Codex, Vibe) reach the portal from your computer. Web assistants (claude.ai, Le Chat, OpenAI API) reach it from their provider’s servers: the portal must be reachable from the internet.

Claude

Claude Code: one command, then /mcp in Claude Code to check the connection.

claude mcp add --transport http centrex https://portal.example/api/v1/mcp \
  --header "Authorization: Bearer $CENTREX_KEY"

Claude Desktop: go through the mcp-remote bridge (Node.js required). Add this server to claude_desktop_config.json (Settings menu, Developer, Edit Config), then restart the app.

{
  "mcpServers": {
    "centrex": {
      "command": "npx",
      "args": ["mcp-remote", "https://portal.example/api/v1/mcp",
               "--header", "Authorization:${CENTREX_AUTH}"],
      "env": { "CENTREX_AUTH": "Bearer <key>" }
    }
  }
}

claude.ai (web and mobile): a custom connector accepts a fixed key only if your Claude organization has access to request headers (in beta). The organization owner then adds the connector with the Authorization header and the value Bearer <key>. Otherwise, use Claude Desktop or Claude Code.

OpenAI

ChatGPT: its connectors accept only OAuth or no authentication. It can’t use an API key for now.

Codex (command line and editor extension): add the server to ~/.codex/config.toml, export CENTREX_KEY before starting Codex, then check with codex mcp list.

[mcp_servers.centrex]
url = "https://portal.example/api/v1/mcp"
bearer_token_env_var = "CENTREX_KEY"

OpenAI API (Responses), for your own integrations: declare the server in the request’s tools. allowed_tools limits the operations offered to the model, and require_approval makes you approve each call.

"tools": [{
  "type": "mcp",
  "server_label": "centrex",
  "server_url": "https://portal.example/api/v1/mcp",
  "authorization": "<key>",
  "require_approval": "always"
}]

Mistral

Le Chat: a workspace administrator opens Connectors, Add Connector, Custom MCP Connector tab. They give a name without spaces (centrex) and the server address, then choose HTTP Bearer Token authentication and paste the key.

Vibe (command line): add the server to ~/.vibe/config.toml, and export CENTREX_KEY before starting Vibe.

[[mcp_servers]]
name = "centrex"
transport = "http"
url = "https://portal.example/api/v1/mcp"
api_key_env = "CENTREX_KEY"
api_key_header = "Authorization"
api_key_format = "Bearer {token}"

Other MCP clients

Any MCP client that sends a fixed header works. Usual configuration:

{
  "mcpServers": {
    "centrex": {
      "type": "http",
      "url": "https://portal.example/api/v1/mcp",
      "headers": { "Authorization": "Bearer <key>" }
    }
  }
}

Each operation of your space’s API (documentation at /api/docs/en on the portal) is a tool with the same name (listerAppels, reglerRenvois…). With the Accept-Language: en header, tool descriptions and error details are in English.

Example requests

  • “Who called yesterday after 6 pm, and who answered?”
  • “How many missed calls this week, extension by extension?”
  • “Forward extension 102 to 06 12 34 56 78.”
  • “Which extensions aren’t connected right now?”

The portal also has its own assistant, with nothing to set up.

To cut off an assistant’s access, revoke its key on the API page.