AgentPhone MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | Port for HTTP mode (default: 3000). | |
| AGENTPHONE_API_KEY | No | Your AgentPhone API key. Required for stdio mode; for HTTP mode, can be passed via Authorization header instead. | |
| AGENTPHONE_BASE_URL | No | Override the API base URL (default: https://api.agentphone.ai). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| account_overviewA | Get a complete snapshot of your AgentPhone account: agents, phone numbers, webhook status, and usage limits. |
| list_numbersA | List all phone numbers in your account, each with its ID, status, country, and assigned agent. |
| buy_numberA | Purchase a new phone number. This is a paid purchase that charges the account's balance. area_code requests a specific region (e.g. '415' for San Francisco); agent_id attaches it on purchase. Requires confirm=true to proceed. |
| send_messageA | Send an SMS or iMessage from one of your agent's phone numbers, or react to a message. The agent must have at least one phone number attached. If the agent has multiple numbers, number_id or from_number selects which one to send from. iMessage extras (silently ignored on SMS): reply_to_message_id threads the reply under an earlier message, and send_style adds an expressive screen/bubble effect. To react to a message instead of sending one, set reaction and react_to_message_id (iMessage only); to_number and body are not needed in that case. |
| get_messagesA | Get SMS messages for a specific phone number, identified by its number ID. Returns individual messages rather than grouped conversation threads. |
| list_callsA | List recent calls. Scope by agent_id or number_id, or use status/direction/search to filter globally. When agent_id or number_id is passed, status/direction/search filters are not applied. Returns call summaries including each call's ID, direction, participants, and status. |
| get_callA | Get details and transcript for a specific call, identified by its call ID. Pass wait=true to block until an in-progress call finishes before returning. |
| make_callA | Initiate an outbound, webhook-driven phone call where your backend handles the conversation logic. The agent must have a phone number attached and a webhook configured. Every call automatically opens with an automated-assistant disclosure (added server-side and not removable). |
| make_conversation_callA | Place a phone call where the AI has an autonomous conversation about a given topic — scheduling, surveys, follow-ups, etc. No webhook setup needed. The agent must have a phone number attached. Every call automatically opens with an automated-assistant disclosure (added server-side; cannot be disabled via topic or initial_greeting). By default this blocks until the call finishes and returns the full transcript. Set wait=false for fire-and-forget. |
| list_agentsA | List all agents with their phone numbers and voice configuration. An agent is required before you can make calls — it owns phone numbers and handles voice/SMS. |
| create_agentA | Create a new agent. An agent owns phone numbers and handles calls/SMS. A newly created agent has no phone number until one is attached. Set voice_mode to 'hosted' with a system_prompt for autonomous AI voice calls, or 'webhook' (default) to forward call transcripts to your webhook URL. |
| update_agentA | Update an agent's configuration — name, description, voice settings, instructions, greeting, call transfer, or voicemail. Only provided fields are updated. Switching voice_mode to 'hosted' requires a system_prompt. |
| delete_agentA | Delete an agent permanently. Phone numbers attached to it are kept but unassigned. This cannot be undone. |
| get_agentA | Get details for a specific agent including its phone numbers, voice configuration, and instructions. |
| attach_numberB | Attach a phone number to an agent so the agent handles calls/SMS on that number. Takes an agent ID and a phone number ID. |
| detach_numberB | Detach a phone number from an agent. The number is kept in your account but becomes unassigned. |
| list_voicesA | List available voices for agents. Each voice has a voice_id used in an agent's voice field. |
| list_conversationsA | List SMS conversations. Optionally filter by agent_id to see conversations for a specific agent. Each conversation is a thread between your number and an external contact, with its ID, participant, message count, and last-message preview. |
| get_conversationB | Get a specific SMS conversation with full message history, identified by its conversation ID. |
| update_conversationA | Set metadata on a conversation. Use this to store custom state, tags, or context that persists between messages. Pass null to clear metadata. |
| list_contactsA | List saved contacts (your address book). Optionally filter with a search term that matches name or phone number. |
| manage_contactA | Create, update, or delete a saved contact. Set
contact_id refers to a saved contact. |
| get_usageA | Get account usage statistics. By default returns a summary with number usage plus message, call, and webhook volume. Use breakdown='daily' or 'monthly' for time-series data. |
| get_webhookA | Get the webhook configuration. Pass agent_id to get an agent-specific webhook, or omit for the project-level default. |
| set_webhookA | Set a webhook URL to receive inbound messages and call events. Pass agent_id to set a webhook for a specific agent (overrides project default). Omit agent_id to set the project-level webhook for all agents. The webhook secret is returned — use it to verify signatures. |
| delete_webhookA | Remove a webhook. Pass agent_id to remove an agent's webhook (falls back to project default). Omit agent_id to remove the project-level webhook. |
| test_webhookA | Send a test event to verify a webhook is working. Returns the HTTP status code and response time. Pass agent_id to test that agent's webhook. Omit to test the project-level webhook. |
| list_webhook_deliveriesA | View recent webhook delivery history. Shows which events were delivered, HTTP status codes, and timing. Pass agent_id to see deliveries for that agent's webhook. Omit for project-level. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 28 tools
Most tools have clearly distinct resource+action targets, and the two call tools (make_call vs make_conversation_call) are well-differentiated by their descriptions. Minor overlap exists in the messaging domain where get_messages (raw per-number messages) could be confused with get_conversation (threaded history), but descriptions clarify the boundary.
The set overwhelmingly follows a consistent verb_noun pattern (list_agents, create_agent, get_webhook, send_message). The main deviations are account_overview (noun-first) and manage_contact (a bundled multi-operation CRUD tool) versus the otherwise granular per-verb style.
28 tools is on the heavy side of the recommended range, though the domain (agents, numbers, calls, SMS, conversations, contacts, webhooks, usage) is genuinely broad. Almost every tool earns its place with little redundancy, but the count pushes into borderline-heavy territory.
Coverage is strong: full CRUD for agents and contacts, complete webhook lifecycle (get/set/delete/test/deliveries), and call/message/conversation operations. The notable gap is the phone-number lifecycle — buy_number exists but there is no release/delete or update number operation.