noholdplease MCP
A public MCP server you can plug into any AI agent to place real phone calls. A human operator makes the call; your agent gets the result. Three tools, no auth.
R&D — no SLA, daily cap, may break
Install — pick your path
Two ways in, depending on whether your client runs locally or in the browser.
Path A — stdio clients
For: Claude Desktop, Cursor, Cline, Continue, Zed, NanoClaw, OpenAI Agent SDK, terminal Claude Code.
Drop the @lobsai/mcp npm wrapper into your client's MCP config.
It runs locally via npx and bridges stdio to lobs's HTTP endpoint:
{
"mcpServers": {
"lobs": {
"command": "npx",
"args": ["-y", "@lobsai/mcp"],
"env": {
"LOBS_USER_ID": "your-stable-id"
}
}
}
}
Pick any stable string for LOBS_USER_ID — it scopes your tasks
to a partition. Phone digits (16263102445) are the convention
for human users; arbitrary strings work fine for bots.
Path B — web clients
For: claude.ai with Custom Connectors (no terminal, no install).
Settings → Connectors → Add custom MCP connector. Paste the endpoint URL directly — lobs speaks streamable-HTTP MCP natively, no wrapper needed:
URL: https://lobs-ai--lobs-mcp-serve.modal.run/mcp Header: X-User-Id: your-stable-id
If the connector UI doesn't expose a custom-header field, your tasks
land in the shared anon partition. Fine for one-off testing;
not for production multi-user.
Either path exposes the same three tools (create_call_task,
get_task_status, cancel_task) to your agent.
The three tools
create_call_task
Spawn a phone-call task for a human operator.
| Argument | Type | Required | Description |
|---|---|---|---|
user_goal | string | yes | What you want the call to accomplish. |
target_phone | string | one of | The number to dial, if you have it. |
target_lookup_query | string | one of | A business or place name. The operator resolves the number. |
notes | string | no | Anything else the operator should know. |
user_phone | string | no | E.164 phone for an SMS reply on terminal state. Omit if you want polling-only. |
Returns { task_id, status: "in_progress", summary }.
get_task_status
Read one task's current state.
| Argument | Type | Required | Description |
|---|---|---|---|
task_id | string | yes | The id returned by create_call_task. |
Returns { task_id, status, notes, result, updated_at, ... }.
Status is one of open, in_progress,
done, failed.
Cross-user reads return 404 — you can only see tasks under the X-User-Id you sent.
cancel_task
Mark a task failed with a cancellation note.
| Argument | Type | Required | Description |
|---|---|---|---|
task_id | string | yes | The id to cancel. |
reason | string | no | Optional reason — appended as an operator-visible note. |
Auth — none today
Send X-User-Id (the npm wrapper and the connector both do
this for you) with any string. It scopes your tasks to a partition with
that id. There is no token, no signup, no validation. The id is
self-asserted; nothing stops a caller from claiming any id.
We may add real authentication later. For now, this is R&D infrastructure with a global capacity cap (see Rate limits below).
Rate limits
A global daily cap of 50 task creations across
all callers. After that, create_call_task returns
429 Too Many Requests until UTC midnight. Other
tools (get_task_status, cancel_task) are
unlimited.
Operator capacity is human-bound. Be respectful of their time — each task is a real phone call by a real person.
Build a custom agent (advanced)
If you're building your own agent runtime that speaks HTTP MCP natively
(Claude Agent SDK with type: 'http', or raw JSON-RPC), you can
skip both install paths and hit the endpoint directly:
https://lobs-ai--lobs-mcp-serve.modal.run/mcp
Streamable-HTTP transport (the FastMCP standard).
Claude Agent SDK config:
mcpServers: {
lobs: {
type: 'http',
url: 'https://lobs-ai--lobs-mcp-serve.modal.run/mcp',
headers: { 'X-User-Id': 'your-stable-id' },
},
}
Raw curl to list the tools:
curl -X POST https://lobs-ai--lobs-mcp-serve.modal.run/mcp \
-H "X-User-Id: your-stable-id" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Contact
Built by noholdplease. Bugs and feedback welcome — text the line on the home page or open an issue.