Ranla MCP server
Expose Ranla to Cursor, Claude Code, or any MCP client with a curated tool surface.
Package: ranla-mcp on npm
Version: 0.6.0
Docs index for agents: llms.txt · Agent Skills · Agent skill notes
For Ranla branding, use ranla-mcp (npx ranla-mcp) with RANLA_API_KEY=rnl_…. Arc tools call the app host (app.ranla.ai); mail tools call api.ranla.ai.
Transports
| Mode | How to run | Auth |
|---|---|---|
| stdio (default) | npx -y ranla-mcp |
Env RANLA_API_KEY=rnl_… |
| HTTP (local) | npx -y ranla-mcp --http --port 3000 |
Authorization: Bearer rnl_… per request |
| HTTP (hosted) | https://mcp.ranla.ai/mcp |
OAuth (recommended) or Authorization: Bearer rnl_… |
Local HTTP listens on http://127.0.0.1:3000/mcp by default (--host / --port override). GET /health is unauthenticated (local and hosted).
Hosted OAuth (recommended)
Remote MCP clients (Cursor, Claude Code) can connect without pasting an API key:
- Add the hosted URL only —
https://mcp.ranla.ai/mcp(noheadersblock). - The client discovers OAuth via
WWW-Authenticate+/.well-known/oauth-protected-resource. - Sign in on
app.ranla.ai, approve access, and the client receives tokens.
Authorization server metadata: https://app.ranla.ai/.well-known/oauth-authorization-server
Bearer rnl_… still works for scripts, CI, and advanced setups.
Install in Cursor (stdio)
- Create an API key in the dashboard (or use Get started → Copy setup prompt / Install in Cursor).
- Add to
.cursor/mcp.json(or global~/.cursor/mcp.json):
{
"mcpServers": {
"@supersend/ranla": {
"command": "npx",
"args": ["-y", "ranla-mcp"],
"env": {
"RANLA_API_KEY": "rnl_your_key_here"
}
}
}
}- Restart Cursor. The tools appear in Agent chat.
Optional: set SUPERSENDTX_API_URL when pointing at a local app (http://localhost:3003/api).
The dashboard Install in Cursor button generates a deeplink with your key pre-filled.
Cursor (HTTP)
Terminal:
npx -y ranla-mcp --http --port 3000.cursor/mcp.json (URL + Bearer; exact shape depends on Cursor version):
{
"mcpServers": {
"@supersend/ranla": {
"url": "http://127.0.0.1:3000/mcp",
"headers": {
"Authorization": "Bearer rnl_your_key_here"
}
}
}
}Replit (hosted remote)
One-click install of the hosted server (OAuth — no API key in the link):
App-side sends in a Replit project still use Secrets + code — see Replit builder guide.
Cursor (hosted remote)
OAuth (recommended): no local process, no API key in config.
{
"mcpServers": {
"@supersend/ranla": {
"url": "https://mcp.ranla.ai/mcp"
}
}
}Cursor runs the browser OAuth flow on first connect.
Bearer (advanced): dashboard Copy hosted MCP JSON pre-fills your key.
{
"mcpServers": {
"@supersend/ranla": {
"url": "https://mcp.ranla.ai/mcp",
"headers": {
"Authorization": "Bearer rnl_your_key_here"
}
}
}
}Health check: GET https://mcp.ranla.ai/health
Claude Code
# stdio
claude mcp add --transport stdio supersendtx -- npx -y ranla-mcp
# HTTP (local — start --http server first)
claude mcp add --transport http supersendtx http://127.0.0.1:3000/mcp
# HTTP (hosted)
claude mcp add --transport http supersendtx https://mcp.ranla.ai/mcpExport RANLA_API_KEY=rnl_… for stdio. For HTTP (local or hosted), configure Bearer headers in the client.
Tools
All tools call the supersendtx SDK (no duplicate HTTP).
| Tool | Purpose |
|---|---|
send_email |
POST /emails |
list_emails / get_email |
List or fetch sends |
list_domains / create_domain |
Domain inventory |
apply_domain_dns / verify_domain |
DNS apply + verify |
list_webhooks / create_webhook / delete_webhook |
Webhook endpoints |
list_suppressions / add_suppression / remove_suppression |
Suppression list |
list_templates / get_template |
Templates by id or alias |
send_test_webhook_event |
POST /emails/test (CI / webhook sink) |
get_deliverability |
Best-effort metrics (7d / 30d) |
Arc (growth agent)
Talk to Arc from Claude / Cursor without opening the dashboard. Mutations go through Arc; read tools are talk-mode only.
| Tool | Purpose |
|---|---|
arc_ensure_thread / arc_list_threads |
Durable MCP thread |
arc_message |
Send text to Arc; waits for the turn (sync JSON) |
arc_list_approvals / arc_approve / arc_reject |
HITL without the UI |
arc_<tool> |
Read-only growth tools (audience, campaigns list, health, …) |
arc_request_connection |
Connect-card for a missing integration slot |
Example flow: arc_ensure_thread → arc_message (“draft a re-activation campaign”) → if gated, arc_list_approvals → arc_approve.
Set SUPERSENDTX_APP_URL (or RANLA_APP_URL) when the app host is not the default. Do not point Arc at the transactional API host.
send_email
Inputs: from, to, subject, optional html / text / reply_to.
Sandbox: if from is [email protected], recipients must match the account email.
send_test_webhook_event
Inputs:
event(required) — e.g.email.bounced,email.delivered- optional
email_id(msg_…) - optional
deliver(default true) — enqueue to subscribed webhooks
Install
npx -y ranla-mcp
npx -y ranla-mcp --http --port 3000
npx -y ranla-mcp
# or
npm install -g ranla-mcpFor agents without MCP, use the dashboard Copy setup prompt flow, Agent Skills, or agent-skill.md with llms.txt.
The package is also listed on Smithery for agent discovery.