@spekoai/mcp-calls 0.1.1 → 0.2.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spekoai/mcp-calls",
3
- "version": "0.1.1",
3
+ "version": "0.2.1",
4
4
  "description": "Place real, disclosed phone calls to businesses straight from your coding agent — the Speko \"AI calls for devs\" MCP. Single self-contained package: `npx @spekoai/mcp-calls init` to set up.",
5
5
  "mcpName": "ai.speko/mcp-calls",
6
6
  "type": "module",
package/server.json CHANGED
@@ -4,13 +4,13 @@
4
4
  "title": "Speko — AI Calls for Devs",
5
5
  "description": "Place real, disclosed outbound phone calls to businesses straight from your coding agent.",
6
6
  "repository": { "url": "https://github.com/SpekoAI/mcp-dev-calls", "source": "github" },
7
- "version": "0.1.1",
7
+ "version": "0.2.1",
8
8
  "websiteUrl": "https://speko.ai",
9
9
  "packages": [
10
10
  {
11
11
  "registryType": "npm",
12
12
  "identifier": "@spekoai/mcp-calls",
13
- "version": "0.1.1",
13
+ "version": "0.2.1",
14
14
  "transport": { "type": "stdio" },
15
15
  "environmentVariables": [
16
16
  {
@@ -6,7 +6,6 @@ description: >-
6
6
  hours/availability/pricing, or chase an order. Teaches the lookup → dial_token →
7
7
  make_call workflow, the mandatory AI disclosure, the business-lines-only + quiet-hours
8
8
  rails, and how to report the call OUTCOME honestly. Not for personal/consumer calls.
9
- disable-model-invocation: true
10
9
  ---
11
10
 
12
11
  # Speko Calls — placing real, disclosed business calls
@@ -32,7 +31,7 @@ way to pass a raw phone number — that's a safety boundary, not a limitation.
32
31
  - **Confirm the business and the objective with the user.** A call is a real-world action.
33
32
  - Pass the user's name as `caller_name` (the disclosure says "on behalf of `<caller_name>`").
34
33
  - Write `objective` as ONE clear transactional goal:
35
- *"Ask if there's a table for 4 at 8pm tonight and book it under Amirlan."*
34
+ *"Ask if there's a table for 4 at 8pm tonight and book it under John."*
36
35
 
37
36
  ## The rails (enforced server-side — you cannot override them)
38
37
  - **Business lines only** — mobiles are blocked (carrier line-type check).
@@ -49,10 +48,18 @@ objective as a single transactional question and retry, or tell the user it isn'
49
48
  on the wire (no telephony leg), it returns **`not_connected`** — do **not** report that
50
49
  as success. Run `check_call_readiness` and tell the user the deployment's outbound
51
50
  trunk / caller-ID may need setup.
52
- - The `OUTCOME:` line is the answer (e.g. *"table for 4 at 8pm, booked under Amirlan"*).
51
+ - The `OUTCOME:` line is the answer (e.g. *"table for 4 at 8pm, booked under John"*).
53
52
  Relay it plainly and offer the transcript.
54
53
 
54
+ ## Personal calls — `call_number` (opt-in)
55
+ If the user wants to call a **specific number they give you** (e.g. a friend), use
56
+ `call_number(phone_number, objective, caller_name, recipient_name?)` — not the business
57
+ flow. It needs the operator to have set `SPEKO_ALLOW_DIRECT_DIAL=1` (if off, it returns
58
+ how to enable it). Mobiles are allowed here; the AI disclosure, quiet hours, and no-spam
59
+ screen still apply. Only ever call a number the user **explicitly provides and has
60
+ consent to call** — never one you guessed. For businesses, use `lookup_business` instead.
61
+
55
62
  ## Don't
56
- - Don't invent or hardcode phone numbers — only server-minted `dial_token`s dial.
63
+ - Don't invent or guess phone numbers — `make_call` dials only a server-minted `dial_token`; `call_number` dials only a number the user explicitly gave you.
57
64
  - Don't retry after a pre-dial rejection without fixing the objective first.
58
65
  - Don't promise a call will connect — report what actually happened.