@rymi/mcp 2.8.2 → 2.9.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 (2) hide show
  1. package/dist/index.js +47 -18
  2. package/package.json +2 -1
package/dist/index.js CHANGED
@@ -187,6 +187,7 @@ var init_studioCatalog = __esm({
187
187
  "llama-4-scout",
188
188
  "deepseek-v4-flash",
189
189
  "deepseek-v4-pro",
190
+ "grok-4.7",
190
191
  "grok-4-1-fast",
191
192
  "grok-3-mini",
192
193
  "grok-3-mini-fast",
@@ -250,6 +251,7 @@ var init_studioCatalog = __esm({
250
251
  ],
251
252
  tts: [
252
253
  "aura-2",
254
+ "flux-tts",
253
255
  "gemini-2.5-pro-preview-tts",
254
256
  "sonic-3.5",
255
257
  "sonic-turbo",
@@ -1837,7 +1839,7 @@ var init_agentConfigSchema = __esm({
1837
1839
  },
1838
1840
  // ── Runtime Timing ──────────────────────────────────────────────────────
1839
1841
  { key: "maxTurnLength", label: "Max Turn Length", description: "Maximum number of conversational turns.", default: 50, type: { kind: "number", min: 1, max: 200 }, apiPath: "advanced.maxTurnLength", section: "advanced", editableIn: "both" },
1840
- { key: "postSilenceHangup", label: "Post-Silence Hangup", description: "Hang up after this many seconds of silence.", default: 30, type: { kind: "number", min: 1, max: 6e4, unit: "s" }, apiPath: "advanced.postSilenceHangup", section: "advanced", editableIn: "both" },
1842
+ { key: "postSilenceHangup", label: "Post-Silence Hangup", description: "Hang up after this many seconds of silence.", default: 60, type: { kind: "number", min: 1, max: 6e4, unit: "s" }, apiPath: "advanced.postSilenceHangup", section: "advanced", editableIn: "both" },
1841
1843
  { key: "silencePromptMaxCount", label: "Silence Check-ins", description: "How many times the agent checks on a silent caller before the silence goodbye.", default: 2, type: { kind: "number", min: 1, max: 3 }, apiPath: "advanced.silencePromptMaxCount", section: "advanced", editableIn: "both" },
1842
1844
  { key: "silenceHangupMessage", label: "Silence Goodbye", description: "Exact line spoken before a silence hangup. Leave empty to let the agent say a short goodbye in the caller's language.", default: "", type: { kind: "string", maxLength: 200 }, apiPath: "advanced.silenceHangupMessage", section: "advanced", editableIn: "both" },
1843
1845
  { key: "maxCallDuration", label: "Max Call Duration", description: "Hard limit on call length.", default: 600, type: { kind: "number", min: 30, max: 7200, unit: "s" }, apiPath: "advanced.maxCallDuration", section: "advanced", editableIn: "both" },
@@ -2502,6 +2504,7 @@ var init_pricing = __esm({
2502
2504
  "llama-4-scout": 56e-5,
2503
2505
  "deepseek-v4-flash": 34e-5,
2504
2506
  "deepseek-v4-pro": 418e-5,
2507
+ "grok-4.7": 64e-4,
2505
2508
  "grok-4-1-fast": 56e-5,
2506
2509
  "grok-3-mini": 64e-5,
2507
2510
  "grok-3-mini-fast": 48e-5,
@@ -2531,10 +2534,12 @@ var init_pricing = __esm({
2531
2534
  "Qwen/Qwen2.5-72B-Instruct": 22e-4,
2532
2535
  "deepseek-ai/DeepSeek-V3": 14e-4,
2533
2536
  "sarvam-30b": 10526e-8,
2534
- "sarvam-105b": 77053e-8,
2535
- "sarvam-105b-conversations": 77053e-8,
2537
+ "sarvam-105b": 0.01024,
2538
+ // measured 2026-10-25, see rates.py
2539
+ "sarvam-105b-conversations": 0.01024,
2536
2540
  // TTS
2537
2541
  "aura-2": 0.027,
2542
+ "flux-tts": 0.0405,
2538
2543
  "gemini-2.5-flash-preview-tts": 0.015,
2539
2544
  "gemini-3.1-flash-tts-preview": 0.015,
2540
2545
  "gpt-4o-mini-tts": 0.015,
@@ -7092,6 +7097,7 @@ __export(dist_exports, {
7092
7097
  populatedFocusedStudioSections: () => populatedFocusedStudioSections,
7093
7098
  pronunciationSupport: () => pronunciationSupport,
7094
7099
  providerIdsForTool: () => providerIdsForTool,
7100
+ providerRequiresExplicitVoice: () => providerRequiresExplicitVoice,
7095
7101
  publishRequiredKeys: () => publishRequiredKeys,
7096
7102
  readFocusedSectionField: () => readFocusedSectionField,
7097
7103
  readFromPayload: () => readFromPayload,
@@ -7202,6 +7208,7 @@ var require_dist = __commonJS({
7202
7208
  keyAllowsTool: () => keyAllowsTool2,
7203
7209
  opsToolCatalog: () => opsToolCatalog2,
7204
7210
  resolveToolDisposition: () => resolveToolDisposition,
7211
+ toolAnnotations: () => toolAnnotations2,
7205
7212
  withWorkspaceParam: () => withWorkspaceParam2
7206
7213
  });
7207
7214
  module2.exports = __toCommonJS2(index_exports);
@@ -7239,20 +7246,20 @@ var require_dist = __commonJS({
7239
7246
  var agentConfigFields = {
7240
7247
  system_prompt: import_zod.z.string().optional().describe("Full system prompt for the agent. If given without persona/playbook, the server auto-structures it."),
7241
7248
  voice: import_zod.z.string().optional().describe('Voice ID (e.g. "Aoede", "Charon"). Call list_llm_options for valid values. Leave empty for realtime LLMs and Deepgram TTS, which carry their own voice.'),
7242
- language: import_zod.z.string().optional().describe('Primary BCP-47 language tag (e.g. "hi-IN", "en-US").'),
7243
- supported_languages: import_zod.z.array(import_zod.z.string()).optional().describe('All BCP-47 languages the agent should handle, e.g. ["hi-IN","en-US"] for a bilingual agent. The primary `language` is added automatically if omitted here.'),
7244
- llm_provider: import_zod.z.enum(import_shared_types.AGENT_LLM_PROVIDERS).optional(),
7245
- llm_model: import_zod.z.string().optional().describe('LLM model id from list_llm_options (e.g. "gemini-2.5-flash", "sarvam-105b").'),
7246
- llm_fallback_provider: import_zod.z.string().nullable().optional().describe("Fallback LLM provider; null clears it."),
7247
- llm_fallback_model: import_zod.z.string().nullable().optional().describe("Fallback LLM model; null clears it."),
7248
- stt_provider: import_zod.z.string().optional().describe('Speech-to-text provider (e.g. "deepgram", "sarvam").'),
7249
- stt_model: import_zod.z.string().optional(),
7250
- stt_fallback_provider: import_zod.z.string().nullable().optional(),
7251
- stt_fallback_model: import_zod.z.string().nullable().optional(),
7252
- tts_provider: import_zod.z.string().optional().describe('Text-to-speech provider (e.g. "elevenlabs", "sarvam", "cartesia").'),
7253
- tts_model: import_zod.z.string().optional(),
7254
- tts_fallback_provider: import_zod.z.string().nullable().optional(),
7255
- tts_fallback_model: import_zod.z.string().nullable().optional(),
7249
+ language: import_zod.z.string().optional().describe('Primary BCP-47 language tag (e.g. "hi-IN", "en-US"). For managed agents, must belong to the SKU\u2019s supported_languages.'),
7250
+ supported_languages: import_zod.z.array(import_zod.z.string()).optional().describe('All BCP-47 languages the agent should handle, e.g. ["hi-IN","en-US"] for a bilingual custom agent. Fixed to [language] by the plan for managed agents.'),
7251
+ llm_provider: import_zod.z.enum(import_shared_types.AGENT_LLM_PROVIDERS).optional().describe("LLM provider (custom agents only; fixed by the plan for managed agents)."),
7252
+ llm_model: import_zod.z.string().optional().describe('LLM model id from list_llm_options (e.g. "gemini-2.5-flash", "sarvam-105b"). Fixed by the plan for managed agents.'),
7253
+ llm_fallback_provider: import_zod.z.string().nullable().optional().describe("Fallback LLM provider; null clears it. Fixed by the plan for managed agents."),
7254
+ llm_fallback_model: import_zod.z.string().nullable().optional().describe("Fallback LLM model; null clears it. Fixed by the plan for managed agents."),
7255
+ stt_provider: import_zod.z.string().optional().describe('Speech-to-text provider (e.g. "deepgram", "sarvam"). Fixed by the plan for managed agents.'),
7256
+ stt_model: import_zod.z.string().optional().describe("Speech-to-text model id. Fixed by the plan for managed agents."),
7257
+ stt_fallback_provider: import_zod.z.string().nullable().optional().describe("Fallback STT provider. Fixed by the plan for managed agents."),
7258
+ stt_fallback_model: import_zod.z.string().nullable().optional().describe("Fallback STT model. Fixed by the plan for managed agents."),
7259
+ tts_provider: import_zod.z.string().optional().describe('Text-to-speech provider (e.g. "elevenlabs", "sarvam", "cartesia"). Fixed by the plan for managed agents.'),
7260
+ tts_model: import_zod.z.string().optional().describe("Text-to-speech model id. Fixed by the plan for managed agents."),
7261
+ tts_fallback_provider: import_zod.z.string().nullable().optional().describe("Fallback TTS provider. Fixed by the plan for managed agents."),
7262
+ tts_fallback_model: import_zod.z.string().nullable().optional().describe("Fallback TTS model. Fixed by the plan for managed agents."),
7256
7263
  custom_llm_url: import_zod.z.string().nullable().optional().describe("Self-hosted LLM endpoint (https:// or wss://). Enterprise only; null clears."),
7257
7264
  custom_voice_url: import_zod.z.string().nullable().optional().describe("Self-hosted TTS endpoint (https:// or wss://). Enterprise only; null clears."),
7258
7265
  custom_voice_mode: import_zod.z.enum(["rymi", "openai-compat"]).optional().describe("Wire format for custom_voice_url."),
@@ -8982,6 +8989,26 @@ var require_dist = __commonJS({
8982
8989
  }
8983
8990
  };
8984
8991
  }
8992
+ var DESTRUCTIVE_NAMES = /* @__PURE__ */ new Set([
8993
+ "end_call",
8994
+ "undo_agent_change",
8995
+ "regenerate_share_link",
8996
+ "rotate_campaign_intake"
8997
+ ]);
8998
+ var ACRONYMS = { dnc: "DNC", llm: "LLM" };
8999
+ function titleOf(name) {
9000
+ const words = name.split("_").map((w) => ACRONYMS[w] ?? w);
9001
+ return words.join(" ").replace(/^./, (c) => c.toUpperCase());
9002
+ }
9003
+ function toolAnnotations2(tool) {
9004
+ const readOnly = tool.risk === "read";
9005
+ return {
9006
+ title: titleOf(tool.name),
9007
+ readOnlyHint: readOnly,
9008
+ destructiveHint: !readOnly && (DESTRUCTIVE_NAMES.has(tool.name) || tool.routes.some((r) => r.startsWith("DELETE "))),
9009
+ openWorldHint: !readOnly
9010
+ };
9011
+ }
8985
9012
  }
8986
9013
  });
8987
9014
 
@@ -9011,7 +9038,8 @@ function withToolErrors(handler) {
9011
9038
  // package.json
9012
9039
  var package_default = {
9013
9040
  name: "@rymi/mcp",
9014
- version: "2.8.2",
9041
+ mcpName: "io.github.rymi-live/rymi-mcp",
9042
+ version: "2.9.0",
9015
9043
  description: "Rymi MCP server \u2014 manage AI voice agents via Model Context Protocol",
9016
9044
  license: "MIT",
9017
9045
  author: "Rymi AI <engineering@rymi.live>",
@@ -9107,6 +9135,7 @@ async function createServer(apiKey2, options = {}) {
9107
9135
  tool.name,
9108
9136
  tool.description,
9109
9137
  tool.input,
9138
+ (0, import_ops_tools.toolAnnotations)(tool),
9110
9139
  withToolErrors(async (params) => {
9111
9140
  const result2 = await tool.run(rymi, params);
9112
9141
  return { content: [{ type: "text", text: JSON.stringify(result2, null, 2) }] };
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@rymi/mcp",
3
- "version": "2.8.2",
3
+ "mcpName": "io.github.rymi-live/rymi-mcp",
4
+ "version": "2.9.0",
4
5
  "description": "Rymi MCP server — manage AI voice agents via Model Context Protocol",
5
6
  "license": "MIT",
6
7
  "author": "Rymi AI <engineering@rymi.live>",