Skip to content

MCP Server

Control Rymi with natural language. The @rymi/mcp package connects your AI assistant directly to your Rymi account. Create agents, inspect calls, validate configs, and go live without opening the dashboard or writing a single HTTP request.

Works with Claude Desktop, Claude Code, Cursor, Windsurf, or any MCP-compatible client.

How it works

You (natural language)

AI client (Claude, Cursor, etc.)
    ↓  MCP tool calls
mcp.rymi.live  ←  you sign in (OAuth), or pass an API key

Rymi API

The MCP server translates your plain-English instructions into typed Rymi API calls. The AI figures out which tools to chain. You describe what you want.

Quickstart — Claude (no API key)

Add Rymi as a custom connector and sign in. Nothing to install, no key to paste.

  1. Open claude.ai → Settings → Connectors

  2. Add custom connector, name it Rymi, and paste this URL:

    https://mcp.rymi.live/mcp
  3. Connect, and sign in to Rymi when the browser opens.

Paste the URL exactly — no trailing slash. OAuth identifies the server by that string, and …/mcp/ is a different one.

What you're approving

Signing in grants the connector everything you can do in Rymi, acting as you — including placing calls that spend credits, and (if you're an owner or admin) billing and API keys. The consent screen spells this out. Revoke any time from Settings.

Quickstart — API key

For clients without OAuth, CI, or scripts. Point at the same host and pass a secret key as a Bearer token.

json
{
  "mcpServers": {
    "rymi": {
      "type": "http",
      "url": "https://mcp.rymi.live/",
      "headers": {
        "Authorization": "Bearer rymi_your_secret_key"
      }
    }
  }
}
json
// ~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "rymi": {
      "type": "http",
      "url": "https://mcp.rymi.live/",
      "headers": {
        "Authorization": "Bearer rymi_your_secret_key"
      }
    }
  }
}

Get your API key from the Rymi dashboard → Settings → API Keys. Publishable keys (rymi_pk_…) are rejected — they ship to browsers and never carry tool access.

Run it locally (npm)

Run the server on your own machine instead of the hosted endpoint. The @rymi/mcp package is a standalone MCP server you launch with npx. No clone, no build. It talks to the Rymi REST API directly and speaks stdio by default, which is what Claude Desktop, Claude Code, and Cursor expect for a local server.

json
{
  "mcpServers": {
    "rymi": {
      "command": "npx",
      "args": ["-y", "@rymi/mcp"],
      "env": {
        "RYMI_API_KEY": "rymi_your_secret_key"
      }
    }
  }
}
json
{
  "mcpServers": {
    "rymi": {
      "command": "npx",
      "args": ["-y", "@rymi/mcp"],
      "env": {
        "RYMI_API_KEY": "rymi_your_secret_key"
      }
    }
  }
}

The server reads your key from the RYMI_API_KEY environment variable (it exits immediately if it's missing).

Local server options

Variable / flagEffect
RYMI_API_KEYRequired. Your Rymi secret key.
RYMI_MCP_READONLY=1Restrict to read-only tools. Hides every mutating tool, including create_call, batch_call, and publish_agent.

stdio only

@rymi/mcp speaks stdio. --transport http and RYMI_MCP_PORT were removed in 2.0.0 — the hosted endpoint above serves HTTP, with OAuth and role-based tool gating the local server never had.

Mutating tools are on unless you turn them off

A local @rymi/mcp server exposes the full write surface — including publish_agent, create_call, and batch_call — by default, with RYMI_MCP_READONLY=1 as the single switch that hides them all at once. In shared or automated environments, run it with that flag set. The hosted endpoint instead filters by tenant role — see Mutating tools and what limits them.

Available tools

These are the tools your AI can invoke once connected. They cover the full lifecycle: discover → preview → build → attach a number → reach → observe → feed knowledge → audit → measure.

Agents

ToolWhat it does
list_agentsList all your voice agents
get_agentFetch a single agent's full config
create_agentCreate a new voice agent. Supports supported_languages (multi-language), STT/LLM/TTS model selection, per-channel fallbacks, and custom endpoints
update_agentModify an existing agent's config (same fields as create)
clone_agentDuplicate an agent (great for A/B variants)
delete_agentPermanently remove an agent
apply_agent_changesDry-run a change-set. Validates without saving
validate_agent_publishCheck if an agent passes all publish requirements
preview_stackResolve the per-language model stack (STT/LLM/TTS) + blockers/warnings before saving
enrich_companyAuto-generate a company description from a URL
generate_agent_draftGenerate a full agent config from a plain-English prompt
publish_agentMake an agent live (write)

Discovery

ToolWhat it does
list_llm_optionsFull catalog of available LLMs and voices
list_voicesVoices only, filterable by provider or model_id. Far smaller payload than list_llm_options

Calls (read-only)

ToolWhat it does
list_callsBrowse all calls across the account
list_active_callsCalls currently in progress
get_callDetails, participants, duration, and cost for one call
get_call_summaryPost-call summary
get_call_transcriptFull transcript
get_call_recordingRecording metadata / playback URL
get_call_queue_statsOutbound queue statistics
reprocess_callRe-run post-call intelligence for a call
list_calls_for_agentCall history scoped to one agent

Call control (write)

ToolWhat it does
end_callHang up an in-progress call
add_call_participantAdd a participant to a live call (warm transfer / conference)

Numbers, telephony & keys

ToolWhat it does
list_numbersAll numbers on the account and their attached agent
register_numberRegister a number, optionally attaching it to an agent
attach_numberRoute an existing number to an agent
remove_numberRemove a number from the account
telephony_statusWhether a carrier is connected, and which
list_telephony_numbersNumbers available on the connected carrier
list_publishable_keysBrowser-safe keys (prefixes only, never full secrets)

Compliance: Do-Not-Call

ToolWhat it does
list_dncList numbers on the Do-Not-Call registry
check_dncCheck whether numbers are blocked, without adding them (read-only)
add_dncAdd a single number to the registry (write)
add_dnc_batchAdd up to 1000 numbers at once (write)
remove_dncRemove a number, re-enabling outbound to it (write)

Webhooks

ToolWhat it does
list_webhooksList registered webhook endpoints
create_webhookRegister an endpoint for event delivery (write)
update_webhookChange an endpoint's URL, events, or secret (write)
delete_webhookRemove a webhook endpoint (write)

Knowledge & history

ToolWhat it does
list_knowledge_sourcesRAG sources attached to an agent
add_knowledge_sourceAdd a source from raw text or a URL
delete_knowledge_sourceRemove a source
list_agent_changesRecorded config-change history
undo_agent_changeRevert a single change to its previous value

Insight

ToolWhat it does
get_usage_summaryRemaining voice minutes, Studio AI usage, post-call usage
list_agent_templatesPublished template catalog. Use a template's defaults to seed create_agent
run_evalsRun the evaluation suite (synthetic or live)
list_eval_runsPast evaluation runs for an agent
get_eval_runA single run with per-scenario scores

Billing & cost

ToolWhat it does
estimate_call_costEstimate a custom stack's cost (stt_model/llm_model/tts_model + duration_seconds) before dialing (read-only)
set_auto_rechargeConfigure automatic balance top-ups (write)
set_spend_alertsConfigure spend-threshold and low-balance alerts (write)

Multi-language agents

To build a bilingual agent, pass supported_languages (e.g. ["hi-IN", "en-US"]) to create_agent. Call preview_stack first to confirm the language set resolves to a valid model stack. Some languages may fall back to a different provider.

Example prompts

Once connected, talk to your AI client:

Build an agent from scratch

"Create a receptionist agent for BrightSmile Dental. Warm and professional tone. Grab the company info from brightsmile.example.com."

The AI will chain: list_llm_optionsenrich_companygenerate_agent_draftcreate_agent


Tweak an existing agent

"Switch my Support agent to the Charon voice and update it to GPT-4o."

The AI will chain: list_agentsapply_agent_changesupdate_agent


Validate before going live

"Is my agent abc-123 ready to publish?"

The AI calls: validate_agent_publish → surfaces any missing fields or config issues


Voice agents creating voice agents

A deployed Rymi agent with this MCP wired in can respond to a caller in real time: "Set up a new booking agent for my dental clinic" → the agent calls create_agent directly. No human in the loop required.

Capability discovery

Before mutating an agent, ask the server what is allowed. Each of these is a read-only call, safe to chain from any prompt:

ToolDiscovers
list_llm_optionsLLM, STT, TTS, and voice options the current tenant can use
list_agentsExisting agents the connected key can see
get_agentThe full config + runtime-affecting fields for one agent
apply_agent_changesWhether a proposed change-set would validate (dry-run, no save)
validate_agent_publishWhether an agent passes every publish requirement, with reason codes for any blockers
list_calls_for_agentRecent call history, including statuses and reason codes

The AI should resolve "what can this agent do" by calling get_agent + validate_agent_publish rather than guessing from the prompt. Errors carry machine-readable codes you can branch on; treat the human-readable message as display copy and the code as the routing key.

Mutating tools and what limits them

The write tools have real-world effects: publish_agent goes live to end users, and create_call / batch_call dial real numbers and spend credits. What restrains them depends on which server you're talking to.

Hosted (mcp.rymi.live) — tools are filtered by your tenant role, the same policy the Studio assistant uses, whether you connect over OAuth or with an API key:

Your roleWhat's exposed
owner / adminEvery tool, including account-scoped ones (billing, keys, numbers, DNC)
memberAgent-scoped tools only; account-scoped writes are not registered at all

Local (npx @rymi/mcp) — no role filtering. Every tool is exposed 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.

Role is not a sandbox

Role filtering bounds the tool surface, not the credential. An API key or OAuth token remains valid against the REST API directly, where the same permissions apply as any other client. Treat MCP access as equivalent to handing over your own account access, and use a member-role account for anything that shouldn't touch billing.

Carrier connect/disconnect and publishable-key creation/revocation are intentionally not available over MCP. They enter credentials and change standing configuration, so do them from the dashboard.