> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect Orbit to Claude and Cursor via MCP

> Use the Orbit MCP server to send SMS, make calls, trigger campaigns, and query your CPaaS data directly from Claude Desktop, Claude Code, or Cursor — no UI required.

# Connect Orbit to Claude and Cursor via MCP

The Orbit MCP server exposes every core CPaaS capability as a tool that any
[Model Context Protocol](https://modelcontextprotocol.io) client can call. You
can send an SMS, initiate a voice call, trigger a campaign, or check delivery
analytics with a single natural-language prompt — without leaving your IDE or
the Claude chat window.

**Twilio has no MCP server as of May 2026.** Orbit's is the first
production-grade CPaaS MCP server with write-heavy agentic coverage
(send, dial, campaign, journey, agent handoff) rather than just read-only
lookups.

***

## Prerequisites

* An Orbit account at [orbit.devotel.io](https://orbit.devotel.io)
* An API key from **Dashboard → Settings → API Keys** (live: `dv_live_sk_*`;
  sandbox: `dv_test_sk_*`)
* Node.js 18 or later on your local machine (required to run `npx`)

***

## Claude Desktop

1. Open or create `~/Library/Application Support/Claude/claude_desktop_config.json`
   (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows).

2. Add the `orbit` server block:

```json theme={null}
{
  "mcpServers": {
    "orbit": {
      "command": "npx",
      "args": ["-y", "@devotel/mcp-server"],
      "env": {
        "ORBIT_API_KEY": "dv_live_sk_xxxxxxxxxxxxxxxx"
      }
    }
  }
}
```

3. Restart Claude Desktop. The Orbit tools appear in the tool selector on the
   next conversation.

4. Verify the connection: type **"List my Orbit campaigns"** in a new chat.
   Claude calls `list_campaigns` and returns your campaign list.

***

## Cursor

1. Open **Cursor Settings → Features → MCP → Add new MCP server** and fill in:

   | Field   | Value                                       |
   | ------- | ------------------------------------------- |
   | Name    | `orbit`                                     |
   | Type    | `command`                                   |
   | Command | `npx -y @devotel/mcp-server`                |
   | Env     | `ORBIT_API_KEY=dv_live_sk_xxxxxxxxxxxxxxxx` |

2. Alternatively, add `.cursor/mcp.json` to your project root:

```json theme={null}
{
  "mcpServers": {
    "orbit": {
      "command": "npx",
      "args": ["-y", "@devotel/mcp-server"],
      "env": {
        "ORBIT_API_KEY": "dv_live_sk_xxxxxxxxxxxxxxxx"
      }
    }
  }
}
```

Cursor reloads MCP config on file save. Test with `@orbit` in Cursor AI chat:
**"Using orbit, send an SMS to +14155551234 saying 'Hello from Cursor'."**

***

## Claude Code (CLI)

Add to your project's `.claude/settings.json`:

```json theme={null}
{
  "mcpServers": {
    "orbit": {
      "command": "npx",
      "args": ["-y", "@devotel/mcp-server"],
      "env": {
        "ORBIT_API_KEY": "dv_live_sk_xxxxxxxxxxxxxxxx"
      }
    }
  }
}
```

Or set the env var globally and run the server inline:

```bash theme={null}
export ORBIT_API_KEY=dv_live_sk_xxxxxxxxxxxxxxxx
claude mcp add orbit -- npx -y @devotel/mcp-server
```

***

## Sandbox mode

Use a sandbox key (`dv_test_sk_*`) to exercise every tool without incurring
real charges. Sandbox calls are logged in Orbit under **Settings → API Logs →
sandbox** but no SMS is actually sent, no call is dialled, and no number is
purchased.

***

## Available tools (38)

| Tool                         | What it does                                                    |
| ---------------------------- | --------------------------------------------------------------- |
| `send_sms`                   | Send an SMS on any registered number                            |
| `send_whatsapp`              | Send a WhatsApp message (template or freeform)                  |
| `send_email`                 | Send a transactional email                                      |
| `send_template`              | Send an approved template on any channel                        |
| `voice_call`                 | Initiate an outbound voice call                                 |
| `purchase_number`            | Buy a phone number (auto-attaches compliance profile)           |
| `search_numbers`             | Browse available DIDs by country / type / pattern               |
| `list_campaigns`             | List campaigns (filter by status)                               |
| `start_campaign`             | Kick off a draft or scheduled campaign                          |
| `list_journeys`              | List published flows (journeys) by status                       |
| `start_journey`              | Enrol a contact or list into a published flow                   |
| `list_agents`                | List deployed AI agents                                         |
| `agent_handoff_to_human`     | Escalate an AI conversation to a human agent                    |
| `lookup_contact`             | Find a contact by phone, email, or free-text                    |
| `create_contact`             | Create or upsert a contact record                               |
| `update_contact`             | Update fields on an existing contact (name/email/phone/consent) |
| `identify_contact`           | Upsert a contact by email/phone with traits (CDP identify)      |
| `track_event`                | Record a CDP event on a contact's customer-360 timeline         |
| `cdp_track`                  | Record a CDP domain event for segment / journey triggers        |
| `cdp_identify`               | Set / merge traits on a known contact (CDP identify)            |
| `list_segments`              | List contact segments with counts                               |
| `create_segment_from_prompt` | Build a segment from a natural-language description             |
| `list_templates`             | List approved templates for a channel                           |
| `get_message_status`         | Check delivery status of a sent message                         |
| `analytics_summary`          | Aggregated delivery KPIs for a time window                      |
| `check_balance`              | Current account credit balance                                  |
| `kb_query`                   | Semantic search of the tenant's knowledge base                  |
| `analyze_text`               | Sentiment / language / intent / PII analysis                    |
| `create_support_ticket`      | Open a helpdesk ticket (Zendesk / Intercom)                     |
| `create_calendar_event`      | Schedule a calendar event                                       |
| `add_memory`                 | Store a memory item for an agent + contact pair                 |
| `search_memory`              | Semantic search over stored memories                            |
| `list_memories`              | List all memories for an agent + contact pair                   |
| `delete_memory`              | Delete a single memory item                                     |
| `delete_contact_memories`    | Delete all memories for a contact (GDPR Art 17)                 |
| `video_create_room`          | Create a video room (scheduled or instant) + host token         |
| `video_send_invite`          | Issue a guest invite token + .ics email for a video room        |
| `video_end_session`          | Force-end an active video room (disconnect all participants)    |

***

## Example prompts

**Send a quick SMS:**

> "Using Orbit, send an SMS to +44 7700 900 123 saying 'Your order has shipped.'"

**Initiate a test call:**

> "Using Orbit, call +14155551234 from my primary number and record it."

**Campaign health check:**

> "Using Orbit, show me the analytics for the last 7 days and list any running campaigns."

**Agent + segment workflow:**

> "Using Orbit, create a segment called 'VIP Europe' for customers in Germany who haven't ordered in 60 days, then send them the 'reactivation\_v2' WhatsApp template."

***

## Security

* **Read-only mode:** set `MCP_TOOLS_ALLOW_LIST` to only the GET tools to
  prevent any writes from the LLM session.
* **Budget cap:** set `MCP_TOOLS_BUDGET_LIMIT_USD=5` to refuse chargeable
  calls that would exceed \$5 in the session.
* **Deny specific tools:** `MCP_TOOLS_DENY_LIST=purchase_number,voice_call`
  to block high-impact tools while keeping all others available.

All chargeable calls emit a JSON-Lines audit entry to stderr — pipe stderr to
your log sink to retain a full trace of what the LLM did.

***

## Troubleshooting

| Symptom                             | Fix                                                                                                                                                                                                               |
| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ORBIT_API_KEY rejected by API`     | Key is invalid or was generated for a different environment. Regenerate in **Dashboard → Settings → API Keys**.                                                                                                   |
| Tools not showing in Claude Desktop | Config JSON is invalid (trailing comma, wrong path). Validate with `cat` + `jq`. Restart Claude Desktop after fixing.                                                                                             |
| `voice_call` returns 403            | The API key lacks `voice:write` scope. Re-generate with all scopes enabled.                                                                                                                                       |
| Double-charges on retry             | This should not happen — the MCP server attaches an `Idempotency-Key` on every chargeable POST. File a bug at [github.com/dddFEDDDDDd/devotel-cpaas/issues](https://github.com/dddFEDDDDDd/devotel-cpaas/issues). |
