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, replaceportal.examplewith 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
mcpchannel, 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_KEYbelow). - 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.