@spekoai/mcp-calls 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -0
- package/dist/index.js +1920 -0
- package/dist/index.js.map +1 -0
- package/package.json +38 -0
- package/server.json +33 -0
- package/skills/speko-calls/SKILL.md +58 -0
package/README.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# @spekoai/mcp-calls
|
|
2
|
+
|
|
3
|
+
**Place real, _disclosed_ phone calls to businesses — straight from your coding agent.**
|
|
4
|
+
|
|
5
|
+
> _"call Sakura Sushi and ask if they have a table for 4 at 8pm — my name is Amirlan"_
|
|
6
|
+
> → the agent dials, opens with _"Hi, this is an AI assistant calling on behalf of Amirlan…"_,
|
|
7
|
+
> and the `OUTCOME:` (booked / not available) lands back in your terminal.
|
|
8
|
+
|
|
9
|
+
A [Model Context Protocol](https://modelcontextprotocol.io) server for Claude Code, Claude
|
|
10
|
+
Desktop, and any MCP client. Powered by [Speko](https://speko.ai).
|
|
11
|
+
|
|
12
|
+
## Setup — one command
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npx @spekoai/mcp-calls@latest init
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
The wizard opens the Speko dashboard for an API key, verifies it, writes the MCP into your
|
|
19
|
+
client config (Claude Code or Claude Desktop), and installs a companion skill. Then just ask
|
|
20
|
+
your agent to call a business.
|
|
21
|
+
|
|
22
|
+
It runs **single-process**: give it your `SPEKO_API_KEY` and it calls `api.speko.dev`
|
|
23
|
+
directly — no separate server to run.
|
|
24
|
+
|
|
25
|
+
<details><summary>Manual / CI setup</summary>
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Claude Code
|
|
29
|
+
claude mcp add speko-calls --scope user --env SPEKO_API_KEY=sk_... -- npx -y @spekoai/mcp-calls
|
|
30
|
+
```
|
|
31
|
+
```jsonc
|
|
32
|
+
// Claude Desktop — claude_desktop_config.json
|
|
33
|
+
{ "mcpServers": { "speko-calls": {
|
|
34
|
+
"command": "npx", "args": ["-y", "@spekoai/mcp-calls"], "env": { "SPEKO_API_KEY": "sk_..." }
|
|
35
|
+
} } }
|
|
36
|
+
```
|
|
37
|
+
Get a key at [platform.speko.dev](https://platform.speko.dev). To route through a hosted
|
|
38
|
+
backing server instead of running in-process, set `SPEKO_MCP_SERVER_URL`.
|
|
39
|
+
</details>
|
|
40
|
+
|
|
41
|
+
## Tools
|
|
42
|
+
|
|
43
|
+
| Tool | What it does |
|
|
44
|
+
| --- | --- |
|
|
45
|
+
| `lookup_business(name, location?)` | Resolve a business → dialable candidates + a signed `dial_token` per callable one. The only path that can authorize a call. |
|
|
46
|
+
| `make_call(dial_token, objective, caller_name, context?)` | Place the disclosed, objective-scoped call; wait for it to finish; return the `OUTCOME` + transcript. Honest `connected`/`answered`/`not_connected`. |
|
|
47
|
+
| `check_call_readiness()` | Read-only preflight: auth, credit balance, outbound caller-ID. Never dials. |
|
|
48
|
+
|
|
49
|
+
## Safety
|
|
50
|
+
|
|
51
|
+
Every call opens with a **non-removable AI disclosure**. **Business lines only** (carrier
|
|
52
|
+
line-type check). **Transactional objectives only** — selling, promotion, surveys,
|
|
53
|
+
fundraising, and campaigning are refused. **Quiet hours** 08:00–21:00 in the destination's
|
|
54
|
+
local time. `make_call` is authorized only by a fresh, single-use, signed `dial_token` from
|
|
55
|
+
`lookup_business` — a raw phone number can never dial.
|
|
56
|
+
|
|
57
|
+
## Links
|
|
58
|
+
|
|
59
|
+
- Dashboard / API keys — [platform.speko.dev](https://platform.speko.dev)
|
|
60
|
+
- Source & issues — [github.com/SpekoAI/mcp-dev-calls](https://github.com/SpekoAI/mcp-dev-calls)
|
|
61
|
+
|
|
62
|
+
MIT © SpekoAI
|