@rymi/mcp 2.5.0 → 2.6.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 +6 -2
- package/dist/index.js +92 -4
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -63,7 +63,7 @@ Run the server on your own machine — it speaks **stdio** by default and talks
|
|
|
63
63
|
}
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
-
> **Options:** `RYMI_MCP_READONLY=1` hides every mutating tool (including `create_call`, `batch_call`, `publish_agent`). `RYMI_WORKSPACE` makes the local server act in that workspace (sent as the `Rymi-Workspace` header). On the hosted endpoint, send the `Rymi-Workspace` header on the HTTP request instead.
|
|
66
|
+
> **Options:** `RYMI_MCP_READONLY=1` hides every mutating tool (including `create_call`, `batch_call`, `publish_agent`). `RYMI_WORKSPACE` makes the local server act in that workspace (sent as the `Rymi-Workspace` header). On the hosted endpoint, send the `Rymi-Workspace` header on the HTTP request instead. Every tool also takes an optional `workspace` argument, so one connection can act in any workspace it can reach, such as an agency's client workspaces.
|
|
67
67
|
>
|
|
68
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
69
|
|
|
@@ -137,7 +137,11 @@ Run the server on your own machine — it speaks **stdio** by default and talks
|
|
|
137
137
|
</tr>
|
|
138
138
|
<tr>
|
|
139
139
|
<td><b>Workspaces</b></td>
|
|
140
|
-
<td><code>list_workspaces</code> · <code>create_workspace</code> · <code>get_workspace_usage</code></td>
|
|
140
|
+
<td><code>list_workspaces</code> · <code>create_workspace</code> · <code>update_workspace</code> · <code>get_workspace_usage</code> · <code>list_workspace_members</code> · <code>add_workspace_member</code> · <code>remove_workspace_member</code></td>
|
|
141
|
+
</tr>
|
|
142
|
+
<tr>
|
|
143
|
+
<td><b>Compliance settings</b></td>
|
|
144
|
+
<td><code>get_compliance_settings</code> · <code>update_compliance_settings</code></td>
|
|
141
145
|
</tr>
|
|
142
146
|
</table>
|
|
143
147
|
|
package/dist/index.js
CHANGED
|
@@ -373,7 +373,8 @@ var require_dist = __commonJS({
|
|
|
373
373
|
__export2(index_exports, {
|
|
374
374
|
defineTool: () => defineTool,
|
|
375
375
|
opsToolCatalog: () => opsToolCatalog2,
|
|
376
|
-
resolveToolDisposition: () => resolveToolDisposition
|
|
376
|
+
resolveToolDisposition: () => resolveToolDisposition,
|
|
377
|
+
withWorkspaceParam: () => withWorkspaceParam2
|
|
377
378
|
});
|
|
378
379
|
module2.exports = __toCommonJS2(index_exports);
|
|
379
380
|
function defineTool(def) {
|
|
@@ -1669,6 +1670,80 @@ var require_dist = __commonJS({
|
|
|
1669
1670
|
month: import_zod13.z.string().regex(/^\d{4}-\d{2}$/).optional().describe("YYYY-MM; default this month")
|
|
1670
1671
|
},
|
|
1671
1672
|
run: (client, params) => client.workspaces.usage(params.workspace_id, { month: params.month })
|
|
1673
|
+
}),
|
|
1674
|
+
defineTool({
|
|
1675
|
+
name: "update_workspace",
|
|
1676
|
+
description: "Rename a workspace, change its operating country, or set a client workspace's monthly spend cap in credits (1 credit = $0.01; null removes the cap). Calls in that client workspace stop at the cap until next month.",
|
|
1677
|
+
scope: "account",
|
|
1678
|
+
risk: "write",
|
|
1679
|
+
input: {
|
|
1680
|
+
workspace_id: import_zod13.z.string().describe("Workspace id from list_workspaces"),
|
|
1681
|
+
name: import_zod13.z.string().min(1).max(80).optional().describe("New name"),
|
|
1682
|
+
operating_country: import_zod13.z.string().length(2).nullable().optional().describe('ISO-3166 alpha-2 country, e.g. "IN"; null clears it'),
|
|
1683
|
+
spend_cap_cents_monthly: import_zod13.z.number().int().min(0).nullable().optional().describe("Client workspaces only: monthly cap in credits; null removes it")
|
|
1684
|
+
},
|
|
1685
|
+
run: (client, { workspace_id, ...patch }) => client.workspaces.update(workspace_id, patch)
|
|
1686
|
+
}),
|
|
1687
|
+
defineTool({
|
|
1688
|
+
name: "list_workspace_members",
|
|
1689
|
+
description: "People in a workspace and their roles (owner, admin, client).",
|
|
1690
|
+
scope: "account",
|
|
1691
|
+
risk: "read",
|
|
1692
|
+
input: { workspace_id: import_zod13.z.string().describe("Workspace id from list_workspaces") },
|
|
1693
|
+
run: (client, params) => client.workspaces.listMembers(params.workspace_id)
|
|
1694
|
+
}),
|
|
1695
|
+
defineTool({
|
|
1696
|
+
name: "add_workspace_member",
|
|
1697
|
+
description: "Add a person by email. A client workspace takes the client role (sees calls and minutes, edits contacts, the do-not-call list, knowledge and the transfer number); other workspaces take admin. Someone without a Rymi account gets an invite email.",
|
|
1698
|
+
scope: "account",
|
|
1699
|
+
risk: "sensitive",
|
|
1700
|
+
input: {
|
|
1701
|
+
workspace_id: import_zod13.z.string().describe("Workspace id from list_workspaces"),
|
|
1702
|
+
email: import_zod13.z.string().email().describe("Their email address"),
|
|
1703
|
+
role: import_zod13.z.enum(["admin", "client"]).optional().describe("Defaults to the role the workspace takes")
|
|
1704
|
+
},
|
|
1705
|
+
run: (client, { workspace_id, ...member }) => client.workspaces.addMember(workspace_id, member)
|
|
1706
|
+
}),
|
|
1707
|
+
defineTool({
|
|
1708
|
+
name: "remove_workspace_member",
|
|
1709
|
+
description: "Remove a person's access to a workspace. The owner can't be removed.",
|
|
1710
|
+
scope: "account",
|
|
1711
|
+
risk: "sensitive",
|
|
1712
|
+
input: {
|
|
1713
|
+
workspace_id: import_zod13.z.string().describe("Workspace id from list_workspaces"),
|
|
1714
|
+
user_id: import_zod13.z.string().describe("user_id from list_workspace_members")
|
|
1715
|
+
},
|
|
1716
|
+
run: (client, params) => client.workspaces.removeMember(params.workspace_id, params.user_id)
|
|
1717
|
+
})
|
|
1718
|
+
];
|
|
1719
|
+
var import_zod14 = require("zod");
|
|
1720
|
+
var rules = import_zod14.z.object({
|
|
1721
|
+
calling_hours: import_zod14.z.object({ start_hour: import_zod14.z.number().int().min(0).max(23), end_hour: import_zod14.z.number().int().min(1).max(24) }).nullable().optional().describe("Callee-local calling hours; null = any hour"),
|
|
1722
|
+
dnc_check: import_zod14.z.boolean().optional().describe("Check the workspace do-not-call list before calls"),
|
|
1723
|
+
require_voice_consent: import_zod14.z.boolean().optional().describe("Require recorded voice consent on the contact"),
|
|
1724
|
+
recording_notice: import_zod14.z.boolean().optional().describe("Recording notice default for new agents"),
|
|
1725
|
+
destination_countries: import_zod14.z.array(import_zod14.z.string().length(2)).nullable().optional().describe("Countries this workspace may call; null = all supported"),
|
|
1726
|
+
apply_to_single_calls: import_zod14.z.boolean().optional().describe("Also apply hours and consent to single calls")
|
|
1727
|
+
}).partial();
|
|
1728
|
+
var complianceTools = [
|
|
1729
|
+
defineTool({
|
|
1730
|
+
name: "get_compliance_settings",
|
|
1731
|
+
description: "Read the workspace's compliance settings: operating country, callee-local calling hours, do-not-call check, voice consent, recording-notice default and allowed destination countries. Compliance is the customer's responsibility; these settings help.",
|
|
1732
|
+
scope: "account",
|
|
1733
|
+
risk: "read",
|
|
1734
|
+
input: {},
|
|
1735
|
+
run: (client) => client.compliance.getSettings()
|
|
1736
|
+
}),
|
|
1737
|
+
defineTool({
|
|
1738
|
+
name: "update_compliance_settings",
|
|
1739
|
+
description: "Change the workspace's compliance settings. Setting operating_country fills every setting not already edited from that country's preset. Blocked calls fail with destination_not_allowed, outside_calling_hours or no_voice_consent.",
|
|
1740
|
+
scope: "account",
|
|
1741
|
+
risk: "write",
|
|
1742
|
+
input: {
|
|
1743
|
+
operating_country: import_zod14.z.string().length(2).nullable().optional().describe('ISO country, e.g. "IN"'),
|
|
1744
|
+
rules: rules.optional()
|
|
1745
|
+
},
|
|
1746
|
+
run: (client, params) => client.compliance.updateSettings(params)
|
|
1672
1747
|
})
|
|
1673
1748
|
];
|
|
1674
1749
|
var import_agentTools2 = (init_agentTools(), __toCommonJS(agentTools_exports));
|
|
@@ -1705,13 +1780,26 @@ var require_dist = __commonJS({
|
|
|
1705
1780
|
...billingTools,
|
|
1706
1781
|
...campaignTools,
|
|
1707
1782
|
...shareLinkTools,
|
|
1708
|
-
...workspaceTools
|
|
1783
|
+
...workspaceTools,
|
|
1784
|
+
...complianceTools
|
|
1709
1785
|
].map((t) => ({ ...t, run: async (client, params) => redactToolSecrets(await t.run(client, params)) }));
|
|
1710
1786
|
var names = /* @__PURE__ */ new Set();
|
|
1711
1787
|
for (const tool of opsToolCatalog2) {
|
|
1712
1788
|
if (names.has(tool.name)) throw new Error(`Duplicate ops tool name: ${tool.name}`);
|
|
1713
1789
|
names.add(tool.name);
|
|
1714
1790
|
}
|
|
1791
|
+
var import_zod15 = require("zod");
|
|
1792
|
+
var WORKSPACE = import_zod15.z.string().optional().describe("Act in this workspace, e.g. one of your client workspaces (id from list_workspaces). Default: the workspace this connection uses.");
|
|
1793
|
+
function withWorkspaceParam2(tool) {
|
|
1794
|
+
return {
|
|
1795
|
+
...tool,
|
|
1796
|
+
input: { ...tool.input, workspace: WORKSPACE },
|
|
1797
|
+
run: (client, params) => {
|
|
1798
|
+
const { workspace, ...rest } = params;
|
|
1799
|
+
return tool.run(typeof workspace === "string" && workspace ? client.withWorkspace(workspace) : client, rest);
|
|
1800
|
+
}
|
|
1801
|
+
};
|
|
1802
|
+
}
|
|
1715
1803
|
}
|
|
1716
1804
|
});
|
|
1717
1805
|
|
|
@@ -1741,7 +1829,7 @@ function withToolErrors(handler) {
|
|
|
1741
1829
|
// package.json
|
|
1742
1830
|
var package_default = {
|
|
1743
1831
|
name: "@rymi/mcp",
|
|
1744
|
-
version: "2.
|
|
1832
|
+
version: "2.6.0",
|
|
1745
1833
|
description: "Rymi MCP server \u2014 manage AI voice agents via Model Context Protocol",
|
|
1746
1834
|
license: "MIT",
|
|
1747
1835
|
author: "Rymi AI <engineering@rymi.live>",
|
|
@@ -1809,7 +1897,7 @@ function createServer(apiKey2) {
|
|
|
1809
1897
|
version: package_default.version
|
|
1810
1898
|
});
|
|
1811
1899
|
const isReadOnly = process.env.RYMI_MCP_READONLY === "1";
|
|
1812
|
-
for (const tool of import_ops_tools.opsToolCatalog) {
|
|
1900
|
+
for (const tool of import_ops_tools.opsToolCatalog.map(import_ops_tools.withWorkspaceParam)) {
|
|
1813
1901
|
if (isReadOnly && tool.risk !== "read") continue;
|
|
1814
1902
|
server2.tool(
|
|
1815
1903
|
tool.name,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rymi/mcp",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "Rymi MCP server — manage AI voice agents via Model Context Protocol",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Rymi AI <engineering@rymi.live>",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@modelcontextprotocol/sdk": "^1.11.1",
|
|
47
|
-
"@rymi/node": "^2.
|
|
47
|
+
"@rymi/node": "^2.5.0",
|
|
48
48
|
"zod": "^3.23.0"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|