#MCP server
The VanceTel MCP server exposes the phone system to AI agents over the Model Context Protocol. Connect it to Claude Code, Claude Desktop, or any MCP-compatible agent and the model can send a text, look up or create a contact, and check a message's status as tool calls inside its own loop — using the same API key and the same actions you would call over REST.
The MCP server is a thin, agent-facing wrapper over the public API. It performs the same write- and action-oriented operations and respects the same key scopes — it does not expose anything the REST API doesn't.
#What an agent can do
Once connected, an agent can drive the phone system without leaving its conversation:
- Send a text — dispatch an SMS/MMS from one of your numbers (mirrors
POST /messages). - Look up a contact — resolve a person by phone or name for caller ID and context.
- Create a contact — add someone to the shared softphone directory on the fly (mirrors
POST /contacts). - Check a message's status — fetch a message by id to see whether it delivered, so the agent can decide what to do next.
Everything the agent does also appears in the softphone app in real time, so a human stays in the loop.
#Connect the server
Add an mcpServers entry to your MCP client config. The example below is illustrative — pass your API key through the environment, never inline in shared config.
{
"mcpServers": {
"netexem": {
"command": "npx",
"args": ["-y", "@netexem/mcp-server"],
"env": {
"NETEXEM_API_KEY": "sk_live_…"
}
}
}
}A remote (HTTP) MCP endpoint follows the same shape, with a url instead of a command:
{
"mcpServers": {
"netexem": {
"url": "https://api.netexem.com/v1/mcp",
"headers": {
"Authorization": "Bearer sk_live_…"
}
}
}
}The API key carries full account access. Keep it in an environment variable or secret manager and never commit it to a shared repo. See Authentication.
#Tools it exposes
The server registers a small set of tools, each mapped to a real API capability. Names are illustrative:
| Tool | What it does | API equivalent |
|---|---|---|
send_message | Send an SMS/MMS from one of your numbers | POST /messages |
find_contact | Resolve a contact by phone or name | GET /contacts/{id} |
create_contact | Create a contact in the shared directory | POST /contacts |
get_message | Read a message's status and content | GET /messages/{id} |
Phone numbers follow E.164 format, e.g. +15551234567. A send_message call looks like this from the agent's perspective:
{
"name": "send_message",
"arguments": {
"from": "+15551234567",
"to": "+15557654321",
"body": "Hello from the agent"
}
}#How it fits with the rest of the API
The MCP server complements — it does not replace — the REST API and Webhooks:
- REST is for your own backend code and scheduled jobs.
- MCP is for AI agents acting interactively in a loop.
- Webhooks push inbound messages and delivery receipts to your endpoint, each HMAC-SHA256 signed, so your system can react to activity an agent didn't initiate.
A common pattern: an agent uses MCP to send a text, the recipient replies, and a message.received webhook drives the follow-up — keeping humans, agents, and your backend on the same conversation.
#Next steps
- MCP for AI workflows — what the MCP server unlocks across your stack
- Webhooks — react to inbound activity in real time
- Authentication — keys, scopes and rotation