Skip to content

Repository files navigation

CALL-E Integrations

CALL-E is your AI agent for getting phone work done.

Tell CALL-E your goal, and it handles the phone task end-to-end: it plans, calls, adapts in real time, follows through, and improves along the way.

Use CALL-E directly, or integrate it into agents, platforms, and business systems through Skills, Plugins, SDKs, or APIs.

New users get 20 free calls to get started. Sign up now!

Website · Docs · Try on ClawHub · Discord

npmCodexClaude CodeCursorOpenClawHermes AgentMCP

Quick Start

The fastest path — paste this into any AI agent (Claude Code, Codex, Cursor, and more):

Install CALL-E for me: https://open.heycall-e.com/document/mcp-archive/CALL-E-installation-guide.md

Your agent handles the rest.

SDK — five lines to your first call:

import{CalleClient}from"@call-e/calle";// pnpm add @call-e/calleconstclient=newCalleClient({apiKey: "your_api_key"});constcall=awaitclient.calls.createAndWait({task: "Call +15550123456 and confirm tomorrow's 9am appointment.",});console.log(call.status,call.taskCompleted);

Contents


What is CALL-E?

CALL-E automates goal-driven phone tasks that scripted voice bots cannot handle.

Traditional calling platforms use prebuilt bots optimized for high-volume, repetitive scripts. CALL-E is different: you describe a goal, and CALL-E figures out how to achieve it over the phone. It handles natural conversation, adapts to unexpected responses, and returns a structured result when the call ends.

This makes CALL-E practical for tasks where a rigid script would fail — appointment confirmations, research calls, follow-ups, lead qualification.

Call lifecycle:

flowchart LR
A["Goal + phone number"] --> B["Plan"]
B --> C{"Details\ncomplete?"}
C -- "Missing info" --> D["Clarify"]
D --> B
C -- "Confirmed" --> E["Dial"]
E --> F["Live conversation"]
F --> G["Structured result\n+ transcript\n+ summary"]
Loading

Capabilities

CapabilityDescription
Live Task ProgressTrack a call from planning to completion: status, activity history, outcomes, and next steps
Smart Goal ClarificationCALL-E asks for missing details — recipient, timing, language, success criteria — before dialing
Managed Call ExecutionHandles number setup, outbound dialing, monitoring, and result capture
Structured ResultsReturns summaries, transcripts, and schema-validated structured data you can act on directly
Scheduled and Batch CallingSchedule individual calls or send a batch task to multiple recipients
In-Task OptimizationAdapts call strategy based on prior attempts within the same task
Real-World Voice HandlingManages live pickup, voicemail, call screening, hold, transfers, silence, and interruptions
Multiple Integration PathsAgent plugins, MCP, SDKs, APIs, and enterprise systems
Safety and GovernanceNumber governance, rate limits, concurrency controls, blocklists, kill switches, redacted logs, and audit trails

In Development

Goal-Driven Long Tasks — CALL-E plans a multi-step task end-to-end: it designs the calling approach, executes the calls, learns from real outcomes, and continuously improves its strategy over time. This goes beyond single calls — CALL-E learns how to achieve each phone-based goal more reliably across attempts. This feature is under active development and not yet generally available.

Get Started

Choose the integration path that fits your use case:

Use caseIntegrationStart here
Use CALL-E inside Claude Code, Codex, Cursor, OpenClaw, Hermes, or any skills.sh agentAgent installAgent Install
Connect any Streamable HTTP MCP clientMCPMCP
Call CALL-E from a TypeScript or Python SDKSDKSDK
Call CALL-E from any backendDeveloper APIAPI

Agent Install

Paste this single prompt into your agent for automatic setup:

Install CALL-E for me: https://open.heycall-e.com/document/mcp-archive/CALL-E-installation-guide.md

Works in Claude Code, Codex, Cursor, and any agent that can run shell commands. The linked guide stays up to date, so the prompt never changes.

For manual setup, expand the table below or see the full install guide.

MCP

CALL-E exposes a Streamable HTTP MCP endpoint. Any compatible MCP client can connect, authorize via OAuth, and run CALL-E with three tools.

Endpoint:

https://seleven-mcp-sg.airudder.com/mcp/openagent_oauth

Transport: Streamable HTTP

Tool flow:

sequenceDiagram
participant Client as MCP Client
participant CE as CALL-E
participant Phone
Client->>CE: plan_call(goal, phone)
CE-->>Client: plan_id, confirm_token, ready_to_run=true
Note over Client: User confirms intent
Client->>CE: run_call(plan_id, confirm_token)
CE-->>Client: run_id
CE-)Phone: Outbound call
Note over Client,CE: Wait ~60s, then poll while call is in progress
loop Until terminal status
Client->>CE: get_call_run(run_id)
CE-->>Client: status, activity, transcript
end
Loading

Tools:

ToolWhat it does
plan_callCreates or refines a call plan. Does not place a call. Returns plan_id, confirm_token, and ready_to_run.
run_callStarts the planned call. Requires the exact plan_id and confirm_token from the preceding plan_call. Can place a real phone call.
get_call_runReads run status, activity, summary, and transcript. Read-only. After a call starts, wait ~60 seconds before the first poll, then every 5–10 seconds until terminal.

For OAuth details, tool details, and MCP setup, see the MCP guide.

SDK

CALL-E server SDKs are available for TypeScript and Python. Use them in trusted backend services, workers, and automation systems.

Install:

# TypeScript
pnpm add @call-e/calle
# Python
pip install calle-ai

Set your API key:

export CALLE_API_KEY="calle_live_key"

Get your API key from the CALL-E dashboard.

TypeScript:

import{CalleClient}from"@call-e/calle";constclient=newCalleClient({apiKey: process.env.CALLE_API_KEY!});constcall=awaitclient.calls.createAndWait({task: "Call <E164_PHONE> and confirm whether they can attend Friday lunch.",resultSchema: {type: "object",required: ["can_attend"],properties: {can_attend: {type: "string",enum: ["yes","no","unknown"]},},},});console.log(call.status);console.log(call.taskCompleted);console.log(call.completionConfidence);console.log(call.structuredResult);console.log(call.evidence);

Python:

importosfromcalleimportCalleClientclient=CalleClient(api_key=os.environ["CALLE_API_KEY"])
call=client.calls.create_and_wait(
task="Call <E164_PHONE> and confirm whether they can attend Friday lunch.",
result_schema={
"type": "object",
"required": ["can_attend"],
"properties": {
"can_attend": {"type": "string", "enum": ["yes", "no", "unknown"]},
},
},
)
print(call["status"])
print(call["task_completed"])
print(call["structured_result"])
print(call["evidence"])

API

The CALL-E Developer API provides direct HTTP access for any trusted backend, worker, or workflow system.

Set credentials:

export CALLE_API_KEY="calle_live_key"export CALLE_BASE_URL="https://api.heycall-e.com"

Endpoints:

MethodPathDescription
POST/v1/callsCreate a one-recipient or batch call task.
GET/v1/calls/{call_id}Read status, summaries, structured results, and transcripts.
GET/v1/calls/{call_id}/eventsList developer-facing call events.
POST/calle/webhookReceive terminal call result webhooks.

Create a call:

curl "$CALLE_BASE_URL/v1/calls" \
--request POST \
--header "Authorization: Bearer $CALLE_API_KEY" \
--header "Content-Type: application/json" \
--header "Idempotency-Key: wf_123_friday_lunch" \
--data '{ "task": "Call each recipient and ask whether they can attend Friday lunch.", "recipients": [ { "phones": ["<E164_PHONE>"], "region": "US", "locale": "en-US" } ], "result_schema": { "type": "object", "required": ["completed_count"], "properties": { "completed_count": { "type": "integer" } } }, "recipient_result_schema": { "type": "object", "required": ["can_attend"], "properties": { "can_attend": { "type": "string", "enum": ["yes", "no", "unknown"] } } }, "metadata": { "workflow_run_id": "wf_123" }, "webhook_url": "https://example.com/calle/webhook" }'

Read a result:

curl "$CALLE_BASE_URL/v1/calls/call_123" \
--header "Authorization: Bearer $CALLE_API_KEY"

Terminal call result:

Example response
{
"status": "completed",
"task_completed": true,
"completion_confidence": { "score": 0.92, "label": "high" },
"evidence": ["The recipient said they can attend Friday lunch."],
"structured_result": { "completed_count": 1 },
"recipients": [
{
"structured_result": { "can_attend": "yes" },
"attempts": [
{
"transcript_turns": [
{ "offset_seconds": 0, "speaker": "bot", "text": "Hi, I am calling about Friday lunch." },
{ "offset_seconds": 4, "speaker": "user", "text": "Yes, I can attend." }
]
}
]
}
]
}

For authentication, webhooks, and the full reference, see the API docs.


Supported Regions and Languages

Use these country codes with the SDK and API recipient settings.

CountryCountry CodeCalling CodeLanguagesLine Region
United States of AmericaUS+1EnglishLocal
SingaporeSG+65EnglishLocal
MalaysiaMY+60English, ChineseLocal
IndiaIN+91English, HindiLocal
United Arab EmiratesAE+971English, ArabicLocal
AustraliaAU+61EnglishLocal
CanadaCA+1EnglishInternational
United Kingdom of Great Britain and Northern IrelandGB+44EnglishInternational
Viet NamVN+84Vietnamese, EnglishInternational
GermanyDE+49English, GermanInternational
JapanJP+81Japanese, EnglishInternational
FranceFR+33French, EnglishInternational
MexicoMX+52Spanish, EnglishLocal
BrazilBR+55Portuguese, EnglishLocal
IndonesiaID+62EnglishInternational
PhilippinesPH+63EnglishInternational
KenyaKE+254EnglishInternational
NetherlandsNL+31EnglishInternational
PolandPL+48Polish, EnglishInternational
BangladeshBD+880Bengali, EnglishInternational
NigeriaNG+234EnglishInternational
OmanOM+968English, ArabicInternational
ThailandTH+66English, ThaiInternational
NamibiaNA+264EnglishInternational
CameroonCM+237English, FrenchInternational
MozambiqueMZ+258English, PortugueseInternational
Saudi ArabiaSA+966English, ArabicInternational
FinlandFI+358EnglishInternational
UkraineUA+380English, UkrainianInternational
Sri LankaLK+94English, TamilInternational
BotswanaBW+267EnglishInternational
PakistanPK+92English, UrduInternational
TurkeyTR+90TurkishInternational
HondurasHN+504English, SpanishInternational

Notes

  • Local means calls are placed using a local phone line for the destination country or region.
  • International means calls are currently placed using CALL-E's international phone numbers and are primarily intended for testing. For production use with a local phone number, contact the CALL-E team to enable a local line for the destination country.

Examples

Runnable demos are in examples/:

ExampleWhat it shows
Standard MCP OAuth clientsTypeScript and Python clients connecting to CALL-E via standard MCP OAuth over Streamable HTTP. Good starting point for any new MCP client.
CALL-E broker login MCP clientsTypeScript and Python clients using CALL-E brokered login, local token caching, and MCP HTTP calls. Useful when the environment cannot complete a browser OAuth flow.
Python batch runnerPython JSONL batch runner using calle CLI auth state, FastMCP, Rich output, and MCP tool-call metadata. Demonstrates processing multiple call tasks from a file.

These are starting-point demos, not the canonical SDK or API contract.


Troubleshooting

If installation, authentication, or MCP tool verification fails, see the CALL-E troubleshooting guide.

Common issues covered:

  • Cursor sandbox network restrictionsCONNECT tunnel failed, response 403 means the Cursor agent shell is blocking outbound HTTPS. Fix: switch Cursor Auto-Run Mode to Run Everything (Unsandboxed) in Cursor Settings → Agents.
  • calle auth login failures — fetch failures, login errors, and token cache issues.
  • Missing MCP tools — how to confirm that plan_call, run_call, and get_call_run are available after install.

Repository Structure

This is a multi-ecosystem integration monorepo. Each integration has its own package and marketplace entry point.

PathPurpose
packages/cliShared calle CLI. Handles authentication, token caching, MCP tool discovery, and call workflow shortcuts. Used by all agent integrations.
packages/coreShared core library used across packages.
packages/codex-pluginCodex plugin providing the $calle skill.
packages/claude-pluginClaude Code plugin providing the /calle:calle skill.
packages/cursor-pluginCursor plugin bundling the MCP server config, calle skill, and real-call safety rule.
packages/openclaw-cli-skillOpenClaw CALL-E skill source.
packages/skills-sh-skillskills.sh compatible CALL-E skill package.
skills/calle/Portable calle skill for public skills.sh search and install.
examples/Runnable MCP client demos.
docs/Integration guides, install docs, and troubleshooting.

For layout rules and marketplace naming conventions, see docs/agent-integration-layout.md.


Telemetry

The calle CLI sends best-effort usage telemetry to help diagnose installation, authentication, and tool availability issues.

What is collected: anonymous installation ID, CLI version, integration source (e.g. claude/claude_code_plugin/<version>), command stage, outcome, error type, and server host hash.

What is never collected: phone numbers, call goals, OAuth tokens, broker login URLs, transcripts, or contact data.

Opt out with any of:

DO_NOT_TRACK=1 calle auth status
CALLE_TELEMETRY=0 calle auth status
calle auth status --no-telemetry

Broker and MCP requests still create service-side security, audit, and operational logs required to run calls.


Development

Requires Node >=22 and pnpm >=10.18.3, Changesets, and GitHub Actions.

pnpm install
pnpm check
pnpm test
pnpm pack:dry-run
Package-specific checks
pnpm --filter @call-e/core check
pnpm --filter @call-e/core test
pnpm --filter @call-e/cli check
pnpm --filter @call-e/cli test
pnpm --filter @call-e/codex-plugin check
pnpm --filter @call-e/codex-plugin test
pnpm --filter @call-e/claude-plugin check
pnpm --filter @call-e/claude-plugin test
pnpm --filter @call-e/cursor-plugin check
pnpm --filter @call-e/cursor-plugin test
pnpm --filter @call-e/openclaw-cli-skill check
pnpm --filter @call-e/openclaw-cli-skill test
pnpm --filter @call-e/skills-sh-skill check
pnpm --filter @call-e/skills-sh-skill test
pnpm run check:examples

For user-visible package changes, add a changeset. The release workflow publishes changed @call-e/* packages to npm and maintains the @call-e/codex-plugin@latest and @call-e/claude-plugin@latest install aliases.

See CONTRIBUTING.md for pull request guidelines.


Community

About

call-e integrations for phone calling and real-world outreach across OpenClaw, Codex, and other agent platforms.

Resources

Code of conduct

Contributing

Security policy

Stars

71 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages