MCP server reference
CallForMe is a remote MCP server over streamable HTTP at https://callforme.tel/mcp with standard OAuth sign-in. Adding it shows a Connect step that creates your account in one click. It has ten tools, including place_call, get_call, answer_question and share_call. Clients without OAuth can use /mcp/open or a personal key URL.
Endpoint
https://callforme.tel/mcp
Remote MCP, streamable HTTP, stateless, with standard MCP authorization (OAuth).
Connecting
When you add the URL, your client shows a Connect, Authenticate or Sign in step. A browser tab opens and closes by itself. There's no email, no form and no card. That creates your CallForMe account, and the client keeps the token for every later session.
The only other step is one setup link, the first time your agent places a real call, to add $10. After that every chat just calls. A second agent's first link recognizes you and links it to the same account in one click. See how setup links work.
Clients without OAuth
| Endpoint | Auth | Behavior |
|---|---|---|
https://callforme.tel/mcp |
OAuth | The default. One click to connect. |
https://callforme.tel/mcp/open |
None | Works anywhere. Your agent gets a setup link in each new session unless it saves the account_key it receives and passes it back. |
https://callforme.tel/mcp/k/<your key> |
Key in the URL | Create a key on the account page. Calls go straight to your account. |
https://callforme.tel/mcp + header |
Authorization: Bearer cfm_... |
Same key, sent as a header instead of in the URL. |
On any endpoint, place_call also accepts "account_key": "cfm_..." and "setup_code": "k7m2q" (after the user finishes a setup link).
Tools
| Tool | Arguments | Account | Returns |
|---|---|---|---|
place_call |
phone (required), goal (required), business_name, details, questions, on_behalf_of, callback_number, constraints, voicemail_message, transfer_to, language, setup_code, account_key |
Balance needed to dial (demo line is free) | calling, needs_setup, or blocked |
get_call |
call_id, wait_seconds (0 to 50) |
Yes | Status, transcript, pending question, answers, outcome, duration, cost |
answer_question |
call_id, answer |
Yes | Confirms the answer was passed to the voice assistant |
hang_up |
call_id |
Yes | Ends the call |
plan_call |
Same as place_call without setup_code and account_key |
No | Opening line, checklist, likely uncovered questions, open-now check, cost estimate |
find_business |
query, near |
No | Name, phone, address, open now, hours today, rating |
share_call |
call_id, public (default true) |
Yes | A public link at https://callforme.tel/c/<id>. Pass public: false to turn it off. |
list_calls |
limit |
Yes | Your recent calls |
account |
none | Yes | Balance, auto-reload setting, top-up link |
pricing |
none | No | Current prices |
place_call to the demo line, Maple Street Pizza at +1 469 770 7412 (a fictional restaurant), needs no payment: up to 5 free calls a day per user.
There's also a get_setup helper for the setup flow: after the user finishes a setup link, your agent can call it with the code instead of passing setup_code to place_call again. See setup links.
place_call arguments
| Argument | Type | Notes |
|---|---|---|
phone |
string | Required. US or Canadian number. E.164 (+19725550100) is safest. |
goal |
string | Required. One sentence with the outcome you want. |
business_name |
string | Used in the call and in results. |
details |
string | Facts the assistant may share: names, order numbers, car model. |
questions |
string[] | What you want answered. Each comes back in answers. |
on_behalf_of |
string | The requester's name. Used in the opener. |
callback_number |
string | A number the business can use to reach the requester. |
constraints |
string | Limits, like "don't agree to more than $200". |
voicemail_message |
string | Left only if the call reaches voicemail. Without it, the assistant hangs up on voicemail. |
transfer_to |
string | The requester's phone. They're patched in when a human answers. |
language |
string | Defaults to en. |
setup_code |
string | From a needs_setup response, after the user finishes the link. |
account_key |
string | A cfm_ key, if not sent another way. |
place_call responses
{ "status": "calling", "call_id": "call_8f2k1" }
{
"status": "needs_setup",
"setup_url": "https://callforme.tel/go/k7m2q",
"setup_code": "k7m2q",
"message_for_user": "To place this call, open https://callforme.tel/go/k7m2q and add $10. Then tell me when you're done."
}
{ "status": "blocked", "reason": "This number has asked not to receive automated calls." }
On /mcp/open, the first successful place_call after setup also includes account_key (cfm_...), shown once. Save it. OAuth and personal-key connections don't need to.
get_call response
{
"status": "ended",
"transcript": [
{ "role": "business", "text": "Nonna's, this is Kate." },
{ "role": "assistant", "text": "Hi Kate, I'm an automated assistant calling on behalf of Jordan..." }
],
"pending_question": null,
"answers": {
"Is there a booth?": "No, window table instead."
},
"outcome": {
"success": true,
"summary": "Booked 4 at 7:45pm Friday under Jordan.",
"confirmation_number": null,
"price_quoted": null,
"appointment_time": "Friday 7:45pm",
"next_steps": "None."
},
"duration_s": 58,
"cost_usd": 1.00
}
status moves through queued, ringing, in_progress, ended. The transcript shape above is illustrative; the fields listed in this section are the contract.
Mid-call questions
When the business asks something the assistant doesn't know, get_call returns a pending_question string. Reply with:
{ "call_id": "call_8f2k1", "answer": "Use 469-555-0199." }
on answer_question. The assistant waits on the line up to about 60 seconds. If there's no answer within about 50 seconds, it tells the business it'll call back.
Sharing a call
share_call makes a read-only page for one ended call at https://callforme.tel/c/<id>, with the transcript and result. Phone numbers and email addresses are hidden. The response is { "ok": true, "url": "...", "message": "..." }. Call it again with "public": false to take the page down.
{ "call_id": "call_8f2k1", "public": true }
Prompts
The server ships MCP prompts your agent can use as starting points:
| Prompt | For |
|---|---|
quotes |
Call several places and compare |
reservation |
Book a table or appointment |
cancel |
Cancel a membership or service |
hold-for-me |
Wait on hold, patch you in |
negotiate-bill |
Ask for a lower bill |
check-stock |
See who has something in stock |
Recommended loop
find_businessif you don't have the number.plan_calland fill any gaps it lists.place_call. Ifneeds_setup(first real call only), showmessage_for_userand wait.place_callagain withsetup_code. On/mcp/open, saveaccount_key.get_callwithwait_seconds: 50untilended. Answer anypending_question.- Report
answersandoutcometo the user. Offershare_callif they want to show someone.
Limits
US and Canadian numbers only. 911, 988, 211, 311, other N11 and 900/976 numbers are blocked. Up to 3 calls to the same number per account per day. Calls end at 30 minutes. See safety and disclosure.
Questions
What does the Connect step do?
It's standard MCP OAuth. A browser tab opens and closes by itself, with no email, form or card, and that creates your account. The first real call then shows one setup link to add $10.
Does the server keep session state?
No. It's stateless streamable HTTP. Every request carries its own auth token, so any client that speaks remote MCP works.
How long should get_call wait?
Pass wait_seconds up to 50. The call returns early when the status changes or a pending_question appears.
My client doesn't support OAuth. Can I still connect?
Yes. Use https://callforme.tel/mcp/open, which needs no sign-in, or create a key on the account page and use https://callforme.tel/mcp/k/<your key> or the header Authorization: Bearer cfm_....
Add CallForMe to your agent
One URL for any MCP agent. No key needed to install.