Connect with MCP
Add OneLi to Claude, ChatGPT, Cursor, VS Code or any MCP client.
What the connector is
The connector is an MCP server: one URL you add to your AI agent (Claude, Grok, ChatGPT, Cursor or an agent you wrote). Once connected it can open phone calls for you, follow them and answer when the voice agent consults it, and also run your whole system: build and edit agents, have them make outbound calls, read their calls, and manage their knowledge bank and WhatsApp. The connection is to your own OneLi account only.
https://mcp.oneli.io/mcpThe transport is Streamable HTTP. Sign-in is OAuth (the default: a consent screen on oneli.io) or an API key in the Authorization header, in clients that let you set headers.
Claude (web and desktop)
- On the agent connection page, copy the connector URL.
- In Claude (web or desktop), open Customize in the sidebar, and on the Connectors tab press + Add → Add custom connector, give it a name (for example OneLi), paste the address under MCP server URL and press Continue. (In older versions this was under Settings → Connectors.)
- The OneLi consent screen opens. Sign in with the same account if asked, and press Approve and connect.
- Back in the chat, write: “Use OneLi to verify the connection”. The agent answers with your account and the minutes left.
- To open a call, just ask, for example: “Call the garage at 03-1234567 and book a service tomorrow after 17:00, up to ₪400”.
Claude Code
claude mcp add --transport http oneli https://mcp.oneli.io/mcp
# then, inside Claude Code, run /mcp and choose oneli to sign in/mcp opens the OneLi consent screen in your browser. To connect with an API key instead of OAuth, see below.
ChatGPT
In ChatGPT, add a remote MCP server through Developer mode in the connectors settings: create a new connector, paste https://mcp.oneli.io/mcp and choose OAuth. ChatGPT does not support a static header, so OAuth is the only option. Menu names and availability vary by ChatGPT plan and version.
Cursor
// ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project)
{
"mcpServers": {
"oneli": { "url": "https://mcp.oneli.io/mcp" }
}
}On first use Cursor asks you to sign in and opens the consent screen.
VS Code
// .vscode/mcp.json
{
"servers": {
"oneli": { "type": "http", "url": "https://mcp.oneli.io/mcp" }
}
}Start the server from the MCP servers list in VS Code and approve the sign-in.
Connecting with an API key
The MCP server also accepts an API key as Authorization: Bearer oli_…. This suits code, headless environments and agent frameworks (Integrations). Without the header, the client falls back to OAuth.
| Client | Configuration |
|---|---|
| Claude Code | claude mcp add --transport http oneli https://mcp.oneli.io/mcp --header "Authorization: Bearer $ONELI_API_KEY" |
| Cursor | {"mcpServers":{"oneli":{"url":"https://mcp.oneli.io/mcp","headers":{"Authorization":"Bearer ${env:ONELI_API_KEY}"}}}} |
| VS Code | {"inputs":[{"type":"promptString","id":"oneli-key","description":"OneLi API key","password":true}],"servers":{"oneli":{"type":"http","url":"https://mcp.oneli.io/mcp","headers":{"Authorization":"Bearer ${input:oneli-key}"}}}} |
| Codex CLI | [mcp_servers.oneli] url = "https://mcp.oneli.io/mcp" bearer_token_env_var = "ONELI_API_KEY" |
| Gemini CLI | {"mcpServers":{"oneli":{"httpUrl":"https://mcp.oneli.io/mcp","headers":{"Authorization":"Bearer oli_…"}}}} |
httpUrl, because url means SSE there.Any other MCP client
Any client with Streamable HTTP and OAuth 2.1 with PKCE (S256) and dynamic client registration can connect. The client discovers the authorization server from the 401 response with WWW-Authenticate, registers itself and opens the consent screen on oneli.io. If the client lets you set headers, you can use an API key instead.
The consent screen
The consent screen on oneli.io shows the client’s name and the address it returns to. Return addresses on claude.ai, claude.com, chatgpt.com, chat.openai.com, cursor.com, vscode.dev and local addresses are recognised. Anything else is shown as unverified, so approve only a client you know.
Tools
| Tool | Input | What it does | Main output |
|---|---|---|---|
verify_connection | - | Checks the chat is connected to your account. Returns the email, plan, minutes left this month and renewal date. | email, plan, minutes_left, renews_at |
create_call_task | to_number, goal, instructions?, max_price_ils?, max_cost_ils (3), opening_line?, idempotency_key? | Starts a call. max_price_ils: above it the voice agent consults you. opening_line: the first sentence (up to 300 characters). Clients that support MCP Apps show a live call card in the chat. | task_id, status, goal, to_number, created |
get_call_events | task_id, after_event_id (0), limit (≤100, 50) | New events after the cursor (transcript, consultation, end, cost), plus any consultation waiting for a decision. | status, task_status, outcome, revision, events, next_cursor, pending_consultation |
watch_call | task_id, after_event_id (0), wait_s (20, ≤25) | The recommended way to supervise a call: returns each line the moment it is said, flags details the voice agent stated that the other side never said, and says what to do next. Call it again and again until the call ends. | events, next_cursor, pending_consultation, next_action |
get_call_status | task_id | Current status, outcome and instruction revision. | status, outcome, status_detail, revision, pending_consultation |
get_call_transcript | task_id | The whole conversation in order: who spoke and what was said, with the status, outcome and summary. Best after the call ends. | status, outcome, summary, transcript, content_deleted |
respond_to_consultation | consultation_id, decision, reason | Answers a consultation: approve, decline or ask_user. Only the first answer before the deadline counts. | status, decision | existing_decision |
send_call_instruction | task_id, instruction (≤1000), expected_revision?, urgent? | A new instruction mid-call, for example to switch to English. Applies from the voice agent’s next turn. | command_id, revision, status |
cancel_call_task | task_id | Cancels a queued call, or hangs up an active one. | status: cancelled | cancel_requested |
list_calls | - | Up to 20 recent calls with outcome, duration and cost. | tasks |
Every tool returns readable text plus structured content. Text that comes from the call (from the other side or the summary) appears between «» and is marked as data, not instructions, so the agent does not act on requests spoken during the call.
Your profile (name, who the call is on behalf of, background) is attached to every call on the server, including calls the agent opens. The agent itself cannot read it or change your plan or spending limits.
Build your own voice agent from the chat
Besides calls for you, the chat (Claude, ChatGPT, Grok or any MCP client) can build and manage your own voice agents, the same agents you build in the agent studio: create one from a template, show all its settings, change any of them, test it in a text conversation, and put it live or pause it. Every change shows up in the studio at once, and the other way round.
Create an agent
Describe the business and what the agent should do. The chat asks what is missing, creates the agent as a draft and shows all its settings:
Create a voice agent for Danny's Pizza in Tel Aviv that answers incoming calls:
- Goal: take a complete order (what, how many, address and time)
- Opening: "Hi, you've reached Danny's Pizza! What would you like to order?"
- Menu: Margherita ₪49, Mushroom ₪55, delivery ₪15
- A male voice, short answers, and a Supervisor that checks prices against the menuSee every setting
Ask: “Show me all the settings of the pizza agent”. get_voice_agent returns everything, grouped like the studio’s pages: the agent (direction, goal, context, language, tone), opening, the conversation steps with the situations in each, the Supervisor, sections and rules, knowledge, tools and webhooks, variables, voice and brain, and call settings (time limits, turn-taking, hearing, memory and recording), plus what still blocks going live.
Change settings
Ask in words, for example “Add a step that asks for the address and time”, “Switch to a female voice and cap calls at 5 minutes” or “Make the agent speak English”. The chat reads the agent and sends update_voice_agent only what changes. Lists (steps, knowledge, rules) replace the whole list, so it also sends what stays, with its ids. It looks like this:
update_voice_agent {
"agent_id": "va_…",
"steps": [
{ "id": "st_…", "name": "Opening" },
{ "name": "The order", "ask": "What would you like to order?", "knowledge": ["Menu"],
"situations": [{ "when": "They ask for something not on the menu", "do": "Say politely we don't have it and suggest something from the menu." }] },
{ "name": "Wrap-up", "say": "Thanks, your order is on its way!" }
],
"supervisor": { "enabled": true, "instructions": "Make sure every price she says is from the menu.", "knowledge": ["Menu"] },
"limits": { "max_s": 300, "wrap_at_s": 240 }
}Test and go live
“Test the agent: call as a customer who wants two Margheritas to 10 Rothschild”. The chat plays the caller with test_voice_agent and shows you the replies. When you are happy, “Put the agent live” (deploy_voice_agent). The chat puts it live only after you confirm.
Manage everything: calls, knowledge and WhatsApp
The chat can also do everything the assistant on the site does: have the agent make an outbound call, read its calls and improve it, manage its knowledge bank, see every agent’s WhatsApp, read chats, send messages, and manage templates, rules and auto-reply. Before a call, a send or a delete it asks you.
| Tool | Input | What it does | Main output |
|---|---|---|---|
list_voice_agents | - | The voice agents you built in the studio: id, name, status (draft, live, paused), direction and number. | agents |
get_voice_agent | agent_id, lang? | Every setting of one agent as readable text you can show as is, plus the full config and what still blocks going live. | agent (config, missing) |
list_voice_agent_options | lang? | What an agent can be built from: templates, voices, tools, models, Supervisor models, transcribers, languages and memory fields. | templates, voices, tools, llms, models, languages |
create_voice_agent | template, name?, + any update_voice_agent field | Creates a new agent from a template (sales, appointments, support, blank) as a draft, optionally with its settings in the same call. | agent |
update_voice_agent | agent_id, goal?, context?, opening_line?, steps?, supervisor?, knowledge?, voice_id?, language?, direction?, limits?, … | Changes any setting: goal, context, opening line, steps and situations, Supervisor, sections, rules, knowledge, tools and webhooks, variables, voice, brain, language, direction, limits, memory and recording. Lists you send replace the whole list. | agent (config, missing) |
test_voice_agent | agent_id, messages, session_id? | A test conversation in text: the chat plays the caller and gets the agent’s next reply and the tools it used. | reply, tools, ended |
deploy_voice_agent | agent_id | Puts the agent live (it answers its number, if it has one). Only after you confirm. If something is missing, says what to fix. | status, number |
pause_voice_agent | agent_id | Pauses a live agent. Its settings stay. | status |
delete_voice_agent | agent_id, confirmed | Deletes an agent for good (its number is freed, its monthly payment cancelled). Only after your explicit yes. | deleted |
call_with_voice_agent | agent_id, to, variables?, idempotency_key? | The agent calls someone now, with values for its {{variables}}. Only while it is live and after you confirm the number. | call_id, status |
voice_agent_call_status | agent_id, call_id? | Where an outbound call is (dialing, ringing, in call, ended), or the latest outbound calls. | call | calls |
list_agent_calls | agent_id, limit? | The agent’s recent calls (incoming, outgoing and tests) with a short summary. | calls |
get_agent_call | agent_id, task_id | One call as it happened: the transcript, the Supervisor’s notes and what the agent asked it. For review and improvement. | lines, summary |
search_clients | q?, agent_id?, stage?, hot? | Search the clients of all your agents: name, phone, email, need and next step, with the stage and the AI's score. | clients |
get_client | agent_id, key | One client whole: the AI profile (what they want, their goal, the next step), every call and WhatsApp message on one timeline, and notes. | client |
update_client | agent_id, key, stage?, note? | Set the client's stage, fix their details or add a note. | client |
analyze_client | agent_id, key | A fresh AI read of all the client's calls and messages. | insights |
list_agent_knowledge · add_agent_knowledge · search_agent_knowledge · remove_agent_knowledge | agent_id, … | The agent’s knowledge bank: list, add (text, a link or an objection), search the way a call does, and remove. | items | results |
list_whatsapp · whatsapp_status | agent_id? | Every agent’s WhatsApp, or one agent’s: connected or not, the number and auto-reply. | agents | account |
list_whatsapp_chats · get_whatsapp_chat | agent_id, chat_id? | The agent’s WhatsApp chats, and the messages of one chat. | chats | messages |
send_whatsapp | agent_id, to | chat_id, text | template_id, params?, confirmed | Sends a WhatsApp from the agent’s number. Only after you approve the recipient and the message. | message_id |
whatsapp_templates · whatsapp_automations · set_whatsapp_auto_reply | agent_id, op, … | WhatsApp templates, rules (a keyword, an ad click…) and auto-reply, for the whole number or one chat. | templates | automations | account |
list_phone_menus · get_phone_menu · save_phone_menu · link_number · list_number_calls | menu_id?, name, menu, number_id, agent_id | menu_id | A key-press menu on a number ("press 1 for sales, 2 for a person"): list, read, create and update, point a number at an agent or a menu, and the number’s call log. The person’s number must be Israeli. | menus | menu | number | calls |
list_connected_apps | - | The apps you connected (Gmail, Google Calendar, HubSpot…) that an agent’s Supervisor can use. | connected |
Use cases
Once connected, ask in words. A few examples that work in Claude, Grok, ChatGPT and any MCP client:
Grok or Claude scores leads, and your agent calls them
The assistant reads your leads (a sheet, a CRM, email or a file), scores them for fit and urgency, shows you the list, and after your approval has your own voice agent call each lead with call_with_voice_agent, passing the name and what they asked for as variables. Then it follows the calls and sums up who to follow up.
Read the leads in the sheet "Leads – October". Score each 1–10 for fit and urgency and show me the top 10 with one line why.
After I approve: for each lead, OneLi call_with_voice_agent with the "Sales" agent (list_voice_agents), with variables name and interest.
Follow each call (voice_agent_call_status), then write the result and the next step back into the sheet.Improve the agent from its real calls
The assistant reads the agent’s latest calls, points at what went wrong with a quote and a time, proposes changes and applies only the ones you approve.
Read the Sales agent’s last 5 calls. What went wrong? Each point with a short quote and its time. Propose changes and apply only what I approve.WhatsApp after a call
After a call the assistant drafts a follow-up from the agent’s number (or an approved template outside the 24-hour window) and sends only after you approve each message.
For every Sales agent call that ended today where the customer asked for details: draft a short WhatsApp with the details, show me, and send only after my yes.Keep the knowledge up to date
Add a price list, FAQs or a page from your site to the agent, and check what it will find when asked.
Add https://example.com/prices to the Support agent, then search its knowledge for "how much is delivery" and show me what it finds.Your own product on OneLi
A CRM, a lead system or a platform for your customers: with an API key (REST or the MCP server) create an agent per customer, fill its knowledge, start outbound calls and read the transcripts.
Managing and disconnecting
- On the agent connection page, under Connected agents (סוכנים מחוברים), you see each agent, when it connected and when it was last used.
- Disconnecting revokes access immediately. A call already in progress runs to the end, but the agent cannot open new calls.
- Every call the agent opens also appears on the site with its transcript, and counts toward your plan’s minutes.
- Up to 20 active connections per account, agents and API keys together.