@rymi/mcp 0.6.2 → 2.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.
Files changed (3) hide show
  1. package/README.md +106 -35
  2. package/dist/index.js +1522 -876
  3. package/package.json +3 -2
package/README.md CHANGED
@@ -1,12 +1,35 @@
1
+ <div align="center">
2
+
1
3
  # @rymi/mcp
2
4
 
3
- MCP server for [Rymi](https://rymi.live) — lets any MCP-capable AI client (Claude Desktop, Claude Code, Cursor, or a Rymi voice agent) create and manage AI voice agents without writing HTTP code.
5
+ ### The [**Rymi**](https://rymi.live) MCP server — create and manage AI voice agents from any MCP-capable client.
6
+
7
+ Point Claude Desktop, Claude Code, Cursor, or a Rymi voice agent at this server and manage your entire voice-agent fleet — agents, calls, numbers, knowledge, and usage — without writing a line of HTTP code.
8
+
9
+ [![npm version](https://img.shields.io/npm/v/@rymi/mcp?color=6366f1&label=npm&logo=npm)](https://www.npmjs.com/package/@rymi/mcp)
10
+ [![npm downloads](https://img.shields.io/npm/dm/@rymi/mcp?color=8b5cf6&logo=npm)](https://www.npmjs.com/package/@rymi/mcp)
11
+ [![MCP](https://img.shields.io/badge/Model_Context_Protocol-compatible-8b5cf6)](https://modelcontextprotocol.io)
12
+ [![license](https://img.shields.io/badge/license-MIT-22d3ee)](./LICENSE)
13
+
14
+ [**Documentation**](https://docs.rymi.live/api/mcp) · [**Dashboard**](https://rymi.live) · [**Node SDK**](https://www.npmjs.com/package/@rymi/node) · [**Python SDK**](https://pypi.org/project/rymi/)
15
+
16
+ </div>
17
+
18
+ ---
4
19
 
5
- ## Two ways to run it
20
+ ## 🚀 Two ways to run it
6
21
 
7
- ### Hosted (no install)
22
+ ### ☁️ Hosted — no install, no API key
8
23
 
9
- Point your client at `https://mcp.rymi.live` and pass your API key as a Bearer token.
24
+ Add `https://mcp.rymi.live/mcp` as a custom connector and sign in. In Claude:
25
+ **Settings → Connectors → Add custom connector**. Paste the URL exactly — no
26
+ trailing slash, since OAuth identifies the server by that string.
27
+
28
+ Signing in grants the connector everything **you** can do in Rymi, acting as
29
+ you. Revoke any time from Settings.
30
+
31
+ Clients without OAuth (and CI) can pass a secret key against the same host
32
+ instead:
10
33
 
11
34
  ```json
12
35
  {
@@ -22,9 +45,9 @@ Point your client at `https://mcp.rymi.live` and pass your API key as a Bearer t
22
45
  }
23
46
  ```
24
47
 
25
- ### Local (npm)
48
+ ### 💻 Local — via npx
26
49
 
27
- Run the server on your own machine with `npx` — it speaks **stdio** by default and talks to the Rymi REST API directly. The key is read from the `RYMI_API_KEY` environment variable.
50
+ Run the server on your own machine — it speaks **stdio** by default and talks to the Rymi REST API directly. The key is read from the `RYMI_API_KEY` environment variable.
28
51
 
29
52
  ```json
30
53
  {
@@ -40,46 +63,94 @@ Run the server on your own machine with `npx` — it speaks **stdio** by default
40
63
  }
41
64
  ```
42
65
 
43
- **Options:** `RYMI_MCP_READONLY=1` hides every mutating tool (including `create_call`, `batch_call`, `publish_agent`); `--transport http` + `RYMI_MCP_PORT` serve over HTTP instead of stdio.
44
-
45
- ## Tools
46
-
47
- **Agents:** `list_agents` · `get_agent` · `create_agent` · `update_agent` · `delete_agent` · `clone_agent` · `apply_agent_changes` · `generate_agent_draft` · `enrich_company` · `validate_agent_publish` · `preview_stack`
48
-
49
- **Discovery:** `list_llm_options` · `list_voices`
50
-
51
- **Knowledge & history:** `list_knowledge_sources` · `add_knowledge_source` · `delete_knowledge_source` · `list_agent_changes` · `undo_agent_change`
66
+ > **Options:** `RYMI_MCP_READONLY=1` hides every mutating tool (including `create_call`, `batch_call`, `publish_agent`).
67
+ >
68
+ > This package speaks **stdio** only. `--transport http` was removed in 2.0.0 — use the hosted endpoint above, which the local server could never match on auth (it has no OAuth, and no per-key tool gating).
69
+
70
+ ## 🧰 Tools
71
+
72
+ <table>
73
+ <tr><th>Group</th><th>Tools</th></tr>
74
+ <tr>
75
+ <td><b>Agents</b></td>
76
+ <td><code>list_agents</code> · <code>get_agent</code> · <code>create_agent</code> · <code>update_agent</code> · <code>delete_agent</code> · <code>clone_agent</code> · <code>apply_agent_changes</code> · <code>generate_agent_draft</code> · <code>enrich_company</code> · <code>validate_agent_publish</code> · <code>preview_stack</code></td>
77
+ </tr>
78
+ <tr>
79
+ <td><b>API tools & secrets</b></td>
80
+ <td><code>list_agent_tools</code> · <code>add_agent_tool</code> · <code>update_agent_tool</code> · <code>remove_agent_tool</code> · <code>list_tool_secrets</code> · <code>set_tool_secret</code></td>
81
+ </tr>
82
+ <tr>
83
+ <td><b>Share link</b></td>
84
+ <td><code>get_share_link</code> · <code>set_share_link</code> · <code>regenerate_share_link</code></td>
85
+ </tr>
86
+ <tr>
87
+ <td><b>Discovery</b></td>
88
+ <td><code>list_llm_options</code> · <code>list_voices</code></td>
89
+ </tr>
90
+ <tr>
91
+ <td><b>Knowledge & history</b></td>
92
+ <td><code>list_knowledge_sources</code> · <code>add_knowledge_source</code> · <code>delete_knowledge_source</code> · <code>list_agent_changes</code> · <code>undo_agent_change</code></td>
93
+ </tr>
94
+ <tr>
95
+ <td><b>Insight</b></td>
96
+ <td><code>get_usage_summary</code> (minutes-based) · <code>list_agent_templates</code> · <code>run_evals</code> · <code>list_eval_runs</code> · <code>get_eval_run</code></td>
97
+ </tr>
98
+ <tr>
99
+ <td><b>Calls</b> <sub>(read-only)</sub></td>
100
+ <td><code>list_calls</code> · <code>list_active_calls</code> · <code>get_call</code> · <code>get_call_summary</code> · <code>get_call_transcript</code> · <code>get_call_recording</code> · <code>get_call_queue_stats</code> · <code>reprocess_call</code> · <code>list_calls_for_agent</code></td>
101
+ </tr>
102
+ <tr>
103
+ <td><b>Numbers</b></td>
104
+ <td><code>list_numbers</code> · <code>register_number</code> · <code>attach_number</code> · <code>remove_number</code></td>
105
+ </tr>
106
+ <tr>
107
+ <td><b>Telephony</b> <sub>(read-only)</sub></td>
108
+ <td><code>telephony_status</code> · <code>list_telephony_numbers</code></td>
109
+ </tr>
110
+ <tr>
111
+ <td><b>Keys</b> <sub>(read-only)</sub></td>
112
+ <td><code>list_publishable_keys</code></td>
113
+ </tr>
114
+ </table>
115
+
116
+ ### ⚠️ Gated tools
117
+
118
+ `create_call` and `batch_call` place **real, billable** outbound calls; `publish_agent` flips an agent **live** to end users.
119
+
120
+ What restrains them depends on which server you're talking to.
121
+
122
+ - **Hosted** `mcp.rymi.live` — tools are filtered by your **tenant role**, on both OAuth and API keys. An `owner`/`admin` sees everything; a `member` gets agent-scoped tools only, with account-scoped writes (billing, keys, numbers, DNC) never registered. `RYMI_MCP_READONLY` does not apply there.
123
+ - **Local** `@rymi/mcp` — no role filtering. Full write surface unless you start it with `RYMI_MCP_READONLY=1`, which hides every mutating tool at once. That flag is set by whoever *starts* the server, so it guards a local run you configure, not a key you hand out.
124
+
125
+ Either way, role filtering bounds the **tool surface**, not the credential: a key or token stays valid against the REST API directly. Treat MCP access as equivalent to handing over your own account access.
52
126
 
53
- **Insight:** `get_usage_summary` (minutes-based) · `list_agent_templates` · `run_evals` · `list_eval_runs` · `get_eval_run`
54
-
55
- **Calls (read-only):** `list_calls` · `list_active_calls` · `get_call` · `get_call_summary` · `get_call_transcript` · `get_call_recording` · `get_call_queue_stats` · `reprocess_call` · `list_calls_for_agent`
56
-
57
- **Numbers:** `list_numbers` · `register_number` · `attach_number` · `remove_number`
58
-
59
- **Telephony (read-only):** `telephony_status` · `list_telephony_numbers`
127
+ > Carrier connect/disconnect and publishable-key creation/revocation are intentionally **not** exposed over MCP (they enter credentials and change standing configuration) — do those from the dashboard.
60
128
 
61
- **Keys (read-only):** `list_publishable_keys`
129
+ ## ⚙️ Configuring an agent
62
130
 
63
- **Gated tools** (`create_call`, `batch_call` place real, billable outbound calls; `publish_agent` flips an agent live to end users):
131
+ `create_agent` and `update_agent` accept the full agent configuration surface. Always call `list_llm_options` first to get valid model and voice IDs.
64
132
 
65
- - **Hosted** `mcp.rymi.live` — disabled by default; enable per API key from the dashboard.
66
- - **Local** `@rymi/mcp` — enabled by default; pass `RYMI_MCP_READONLY=1` (or use a read-only key) to hide all mutating tools.
133
+ <details>
134
+ <summary><b>Configuration reference</b></summary>
67
135
 
68
- > Carrier connect/disconnect and publishable-key creation/revocation are intentionally **not** exposed over MCP (they enter credentials and change standing configuration) — do those from the dashboard.
136
+ <br>
69
137
 
70
- ## Configuring an agent
138
+ Agents created over MCP are **custom** agents — you choose the model stack and they're billed at component cost + a flat $0.02/min platform fee. (Managed "Rymi-Curated" SKUs are picked from the dashboard.)
71
139
 
72
- `create_agent` and `update_agent` accept the full agent configuration surface. Always call `list_llm_options` first to get valid model and voice IDs.
73
-
74
- - **Multi-language / bilingual** — set `supported_languages` to every BCP-47 tag the agent should handle, e.g. `["hi-IN","en-US"]`. The primary `language` is merged in automatically. The server resolves the per-language model stack for you; some languages may require a higher `agent_role`.
140
+ - **Multi-language / bilingual** — set `supported_languages` to every BCP-47 tag the agent should handle, e.g. `["hi-IN","en-US"]`. The primary `language` is merged in automatically. The server resolves the per-language model stack for you; some languages may fall back to a different provider.
75
141
  - **Model stack** — pin `llm_provider` + `llm_model`, and optionally `stt_provider`/`stt_model` and `tts_provider`/`tts_model`. Realtime LLMs (and Deepgram TTS) carry their own voice, so leave `voice` empty for those.
76
142
  - **Fallbacks** — `llm_fallback_*`, `stt_fallback_*`, `tts_fallback_*` set a secondary provider/model per channel. Pass `null` to clear.
77
143
  - **Self-hosted endpoints** (Enterprise) — `custom_llm_url`, `custom_voice_url` (+ `custom_voice_mode`), `custom_transcriber_url`. `https://` or `wss://` only; `null` clears.
78
- - **`agent_role`** — the cost/capability tier (`operator` → `concierge`). `concierge` unlocks realtime models. The chosen LLM model must fit the role's cost ceiling.
79
144
  - **`persona`** — note that `callerPersonas` entries are objects of shape `{ type, approach, detectedWhen }`, not plain strings.
80
145
 
81
- `provider_config` is server-derived (recomputed from role + supported languages on every write) and is not accepted as an input.
146
+ `provider_config` is server-derived (recomputed from the resolved stack + supported languages on every write) and is not accepted as an input.
147
+
148
+ </details>
149
+
150
+ ## 📖 Documentation
151
+
152
+ Full reference and guides: [**docs.rymi.live/api/mcp**](https://docs.rymi.live/api/mcp)
82
153
 
83
- ## Documentation
154
+ ## 📄 License
84
155
 
85
- [docs.rymi.live/api/mcp](https://docs.rymi.live/api/mcp)
156
+ [MIT](./LICENSE) © Rymi