MCP tools
The fourteen typed tools and the resources an AI client gets for operating a phone, plus how calls are labelled.
The PhoneGate MCP server gives an AI client typed tools for the phone. It speaks Streamable HTTP and sits behind the MCP bearer rule.
Tools
| Area | What the client can do |
|---|---|
| Status | Read the current status of the phone. |
| SMS | Read, sync and send messages. |
| Calls | Dial, answer and hang up. |
| Audio | Fetch the last 1 to 10 seconds of line audio as a WAV file. |
| Transcript | Read the live transcript, or wait for new utterances. |
| Speech | Speak text into the active call through text-to-speech. |
| Contacts | Search and sync contacts. |
| Waiting | Block until an incoming call arrives and return the caller number. |
The tools that act on the real world, send_sms, dial_phone, answer_call, hang_up and speak_text, are marked as having external effects. A client that supports it can ask for confirmation before running them.
Resources and events
Besides tools, the server publishes resources a client can read: device status, recent SMS, the call transcript, recent call audio, contacts, the incoming-call event and the call lifecycle.
Clients that support MCP subscriptions get resource-update events for calls, transcripts and contacts automatically. For clients that do not wake a model on a notification, two blocking tools are the dependable choice:
wait_for_incoming_callwait_for_transcript
Call provenance
Every call gets a stable call_id, a direction and an origin. The two fields are independent.
| Origin | When |
|---|---|
network |
An incoming GSM call with no dial before it |
mcp |
Dialled through the dial_phone tool |
web |
Dialled from the browser panel |
jobhunter, manual, api |
Dialled through the REST API, labelled by the client, api if it said nothing |
unknown |
The origin could not be determined, for example after a server restart |
direction is incoming, outgoing or unknown. A call found already in progress after a restart is unknown, because its direction cannot be recovered reliably.
dial_phone accepts optional context fields: a correlation id, an application id, a vacancy id and a company. They are stored with the call and passed to any system that reads the call events, which is how JobHunter links a phone call to the application it belongs to.
The lifecycle event moves through pending, ringing, active and ended, and carries the full call record each time.