{
  "markdown": "<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/SkillfulAgents/dialmcp-connector/main/assets/wordmark.png\" alt=\"DialMCP\" width=\"360\">\n</p>\n\n<h1 align=\"center\">DialMCP Connector</h1>\n\n<p align=\"center\">\n  <strong>Give your AI agent a phone.</strong><br>\n  Open-source connector for <a href=\"https://dialmcp.com\">DialMCP</a> — the hosted MCP server that lets AI agents place real phone calls from your own verified number.\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/SkillfulAgents/dialmcp-connector/actions/workflows/ci.yml\"><img src=\"https://github.com/SkillfulAgents/dialmcp-connector/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"MIT License\"></a>\n  <a href=\"https://modelcontextprotocol.io\"><img src=\"https://img.shields.io/badge/MCP-Streamable%20HTTP-black.svg\" alt=\"MCP\"></a>\n</p>\n\n---\n\n## What this is\n\n**DialMCP** is a remote MCP server at `https://mcp.dialmcp.com/mcp`. Any client that speaks\n[Streamable HTTP](https://modelcontextprotocol.io/specification/basic/transports) with OAuth can connect to\nit directly — no install, no API keys. **You do not need this package for those clients.**\n\nThis repository exists for two reasons:\n\n1. **A stdio bridge for clients that only support local servers.** Some MCP clients still can't talk to\n   remote servers. `dialmcp-connector` launches a local stdio server that proxies to the hosted endpoint and\n   handles the OAuth browser flow for you.\n2. **The open, canonical documentation of the DialMCP integration** — tool schemas, client configs, the\n   `server.json` registry manifest, and the safety model — in one auditable place.\n\nThe hosted calling service itself is closed-source. This connector is MIT-licensed and contains no\nproprietary logic: it is a thin transport shim over a public endpoint.\n\n## Quick start\n\n### Direct connection (preferred)\n\nIf your client supports remote MCP servers, skip this package entirely:\n\n```\nURL:        https://mcp.dialmcp.com/mcp\nTransport:  Streamable HTTP\nAuth:       OAuth 2.1 (sign in with your phone number)\n```\n\n<details>\n<summary><strong>Claude Code</strong></summary>\n\n```bash\nclaude mcp add --transport http dialmcp https://mcp.dialmcp.com/mcp\n# add --scope user to enable it in every project\n```\n</details>\n\n<details>\n<summary><strong>Codex</strong> — <code>~/.codex/config.toml</code></summary>\n\n```toml\n[mcp_servers.dialmcp]\nurl = \"https://mcp.dialmcp.com/mcp\"\n```\n</details>\n\n<details>\n<summary><strong>claude.ai / Claude Desktop</strong></summary>\n\nSettings → Connectors → Add custom connector → paste `https://mcp.dialmcp.com/mcp`.\n</details>\n\n<details>\n<summary><strong>Gamut</strong></summary>\n\nSettings → Connectors → Add MCP server → paste the URL (HTTP / OAuth) → complete SMS verification.\n</details>\n\nOn first connect a browser window opens for sign-in. Verify your phone number with an SMS code — that\nnumber becomes your caller ID.\n\n### Via this connector (stdio-only clients)\n\n```bash\nnpx dialmcp-connector\n```\n\nOr in an MCP client config:\n\n```json\n{\n  \"mcpServers\": {\n    \"dialmcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"dialmcp-connector\"]\n    }\n  }\n}\n```\n\nSee [`examples/`](examples/) for ready-to-paste configs.\n\n## Tools\n\n| Tool | Description |\n|---|---|\n| `place_call` | Start an outbound phone call to a US or Canadian number with a stated objective. Returns immediately with a call ID — the call runs asynchronously. |\n| `get_call` | Fetch the current state of a call: status, live progress, and once finished the transcript, recording link, and structured resolution. Poll this after `place_call`. |\n| `end_call` | Hang up an in-progress call immediately. |\n| `list_calls` | List recent calls for the authenticated user with their statuses and outcomes. |\n\nThe API is **async by design**: `place_call` returns instantly with a call ID and your agent polls\n`get_call`, so a multi-minute call never trips a client's tool timeout.\n\nWhen a call completes, `get_call` returns a structured resolution — `achieved`, `partially_achieved`, or\n`not_achieved` — with a summary, any commitments the other party made, suggested follow-ups, a\nturn-by-turn transcript, and a signed link to the audio recording.\n\nDuring the call the service presses keys through automated phone trees, waits silently through hold music,\nand detects voicemail — hanging up rather than leaving a message.\n\n## Safety model\n\nEvery protection is enforced **server-side**, not as model instructions the agent could talk itself out of.\n\n- **Disclosure.** Every call opens by stating it's an AI assistant, who it's calling for, and that the line\n  is recorded — before the ask. Compliance is independently verified against each transcript and logged. The\n  agent never denies being an AI, and ends the call if the callee objects.\n- **Your real number.** Calls present your own SMS-verified caller ID. Nothing is spoofed, and recipients\n  can call you back.\n- **Rate limits.** 1 concurrent call · 3/hour · 10/day · max 2/day to the same destination · 6-minute\n  default and 10-minute hard cap, watchdog-enforced. Bulk calling is impossible by construction.\n- **Time and place.** 8:00–21:00 destination local time (TCPA-aligned), US and Canada only. Unknown time\n  zones are treated conservatively.\n- **Non-bypassable blocklist.** Emergency services (911), premium-rate lines (900/976), and high-fraud\n  ranges can never be dialed.\n- **Permanent opt-outs.** Do-not-call requests are confirmed on the call, caught by a second independent\n  transcript review, stored permanently, and enforced platform-wide across every user. Public self-serve\n  opt-out at <https://mcp.dialmcp.com/opt-out> — no account needed.\n- **Objective screening.** An independent reviewer screens each call's stated objective for harassment,\n  deception, or fraud before dialing. The agent states only facts supplied in the task.\n- **Prohibited uses.** Telemarketing, cold outreach, robocalling, surveys, lead generation, debt\n  collection, and political outreach are barred by the [Terms](https://dialmcp.com/terms).\n\nFull detail: <https://dialmcp.com/safety.html>\n\n## Requirements\n\n- Node.js 18 or newer (only if you use the stdio bridge)\n- A US or Canadian mobile number for SMS verification\n- Users must be 18 or older\n\n## Links\n\n- Website — <https://dialmcp.com>\n- Safety and anti-spam — <https://dialmcp.com/safety.html>\n- Privacy — <https://dialmcp.com/privacy>\n- Terms — <https://dialmcp.com/terms>\n- Do-not-call opt-out — <https://mcp.dialmcp.com/opt-out>\n- Support — <support@dialmcp.com>\n\n## Releasing\n\nEvery release publishes to two places: **npm** (`dialmcp-connector`) and the\n[official MCP Registry](https://registry.modelcontextprotocol.io) (`com.dialmcp/dialmcp`). Both are\nautomated by [`.github/workflows/release.yml`](.github/workflows/release.yml).\n\n### Cutting a release\n\n1. Bump `version` in **both** `package.json` and `server.json` — `npm run validate:manifest` fails if they\n   disagree, and CI runs it on every push.\n2. Merge to `main`.\n3. Run the Release workflow manually (**Actions → Release → Run workflow**, `dry_run` left checked) and let\n   it go green. This packs the tarball and validates `server.json` against the live registry schema without\n   publishing anything.\n4. Publish a GitHub Release tagged `vX.Y.Z`. The tag must match `package.json` or the workflow stops before\n   publishing.\n\nStep 3 is worth the two minutes: **registry versions are immutable and cannot be unpublished.** A bad\nversion can only be superseded by a higher one or marked deprecated.\n\n### What the workflow does\n\n| Job | Runs on | Steps |\n|---|---|---|\n| `publish` | releases **and** manual dry runs | typecheck → validate manifest → build → smoke test → tag/version match → `npm publish --provenance` → `mcp-publisher validate` |\n| `registry` | releases only | wait for npm propagation → `mcp-publisher login dns` → `mcp-publisher publish` |\n\n`--provenance` attaches a signed attestation linking the tarball back to the commit and workflow run that\nbuilt it, which is why the job needs `id-token: write`.\n\nThe registry publish is a **separate job** for two reasons. It has to wait for npm: the registry proves\nownership by fetching the freshly published version and reading its `mcpName` field, which 404s until npm\npropagates (the job retries for ~2.5 minutes). And it holds the signing key, which is scoped to the whole\n`com.dialmcp` namespace rather than this one package — so it lives in a protected environment. Keeping that\nenvironment off the `publish` job is deliberate: its branch policy only admits `v*` tags, and applying it\njob-wide would block manual dry runs from `main` outright.\n\n### One-time setup\n\n| What | Where | Why |\n|---|---|---|\n| `NPM_TOKEN` | repository secret | automation token with publish rights on `dialmcp-connector` |\n| `MCP_REGISTRY_PRIVATE_KEY` | secret on the `release` environment | Ed25519 key, base64; authenticates the registry publish |\n| `release` environment | deployment branch policy → tags → `v*` | keeps the namespace key off untagged runs |\n| `v=MCPv1; k=ed25519; p=<public key>` | TXT record on the **apex** of `dialmcp.com` | how the registry verifies domain ownership |\n\nThe TXT record goes on the bare domain, SPF-style — a `_mcp.` selector is not read and fails with an opaque\nsignature error. Signatures carry a ±15s timestamp window, so the runner's clock must be accurate.\n\n## Contributing\n\nIssues and pull requests are welcome for the connector, docs, and client configs. Bugs in the hosted\nservice itself are best sent to <support@dialmcp.com>. Please read [SECURITY.md](SECURITY.md) before\nreporting anything security-related.\n\n## License\n\nMIT © Datawizz Inc. See [LICENSE](LICENSE).\n",
  "bytes": 9745,
  "sha": "e96d6c61773bcc2d58bb1a2bb4a55223d12928eb0c09190bb62b0f325b52618b",
  "repo_slug": "skillfulagents/dialmcp-connector",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_com_dialmcp_dialmcp_ad85d711/readme"
}