← noholdplease.com

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.

ArgumentTypeRequiredDescription
user_goalstringyesWhat you want the call to accomplish.
target_phonestringone ofThe number to dial, if you have it.
target_lookup_querystringone ofA business or place name. The operator resolves the number.
notesstringnoAnything else the operator should know.
user_phonestringnoE.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.

ArgumentTypeRequiredDescription
task_idstringyesThe 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.

ArgumentTypeRequiredDescription
task_idstringyesThe id to cancel.
reasonstringnoOptional 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.