add_my_channel
ChatGPTSave the human's own mobile number or email so texts or emails from that address to their Openline number are owner instructions. Phone: add_my_channel(kind='phone', address='+1...') or address as a list. Email: the sign-in email is already saved. add_my_channel(kind='email', address='ada@gmail.com') or address as a list adds other addresses. Each address is saved immediately. There is no confirmation code. Do not pass a token.
approve_agent_run
ChatGPTExecute the drafted actions of a dry-run agent run (sends, callbacks) exactly as drafted. Do not pass a token.
auth_status
ChatGPTCheck whether this MCP client is signed in to Openline. Do not pass a token or OTP. If not signed in, Openline returns HTTP 401 so the host starts OAuth. Do not ask for a code in chat.
call_phone
ChatGPTPlace an outbound call from the user's Openline number; a voice agent speaks on the call. The other person just answers — they do not verify anything. Required: to (E.164 number or a saved contact name), goal (what to accomplish). voice is optional (quartz, ripple, vesper, willow, stone, gleam, meridian, bossa, tempo, beacon, delta, cinder, marin, cedar); omit it and gleam is used. background_noise is optional (off, office, cafe, street): a quiet bed under the agent. Omit it and the call stays quiet. When persona is omitted, the call uses the person who matches that voice. Pass everything the user told you about the call so the prompt is complete: persona (object: name, company, role, personality), context (facts, offers, or background the agent may use), style (tone, pacing, persistence, e.g. 'friendly, push hard, do not give up'), constraints (things never to say or do), next_step (what to steer toward, e.g. book a test drive), language (if not English). outcome_schema: what structured data you need back, either a preset name (default, booking, lead_qualification, message_taken, reminder, support_case, quote, survey, screening) or an object of field -> description; the agent collects these and get_call returns them under 'outcome'. target_person (who to ask for if someone else answers), privacy (what never to disclose to third parties), disclose_ai (if_asked | always | never_volunteer), on_drop (redial_once | followup | none), on_complete (list: email_summary_to_user, sms_recap_to_peer, notify_user, agent_followup - the reply agent sends the agreed recap/next step by text or email after a real conversation), on_no_answer (list: sms - text them once a day from the dialling number when the call is not answered/busy/voicemail/failed; no_answer_text overrides the default wording), available_slots (user's free times), callee_timezone (IANA), reference_call_id + include_transcript (memory | excerpt | full) to continue an earlier call. Omitting reference_call_id starts a new call: the agent still knows earlier calls with this number and does not open as a follow-up. Optional: polish (true = an LLM tightens the generated prompt, adds ~2 s), wait (true = block until the call ends). Do not pass a token.
cancel_recurring_outreach
ChatGPTCancel a recurring outreach chain. It will not contact the person again. Do not pass a token.
cancel_scheduled_call
ChatGPTCancel a pending scheduled call by scheduled_call_id. Do not pass a token.
cancel_scheduled_message
ChatGPTCancel a scheduled SMS or email that has not run. schedule_id is the id returned when it was booked. Do not pass a token.
connect
ChatGPTStart or confirm Openline sign-in. Do not pass email, OTP, or token. If not signed in, Openline returns HTTP 401 so the MCP host opens the OAuth redirect. The human signs in on Openline's page. If already signed in, returns the session email.
disconnect_email
ChatGPTDisconnect and disable a provisioned inbox. Argument: account_id from list_email_accounts. Do not pass a token.
disconnect_phone
ChatGPTRelease the user's Openline phone number. Call history is kept. Optional: account_id from get_phone_number. Do not pass a token.
get_agent_run
ChatGPTOne agent run with its full step trace (model turns, tool calls and results, drafts). Do not pass a token.
get_call
ChatGPTRead one call: status, voicemail text, contact snapshot, and full transcript. While status is queued, ringing, or in_progress, turns is empty and note says the transcript will be available after the call ends. Argument: call_id from list_calls. Do not pass a token.
get_contact
ChatGPTLook up a customer by contact_id, phone_number, email, or name. Returns identities (all phones/emails), tags, consent flags (do_not_call/do_not_text/do_not_email), details, and a memory summary. Do not pass a token.
get_credits
ChatGPTCredit balance for this billing cycle (calendar month, UTC): allowance, top-ups, spent, balance, resets_at, and spend by kind (call minutes, GPT-Live minutes, SMS segments, emails, LLM tokens, rentals) with cost and credits. 1 credit = 1 US cent. When a tool returns insufficient_credits, tell the human the balance and reset date; do not retry. Optional cycle 'YYYY-MM'. Do not pass a token.
get_customer_history
ChatGPTEverything Openline knows about one customer, token-budgeted, for personalising outreach: rolling memory (summary, facts, promises, open items, sentiment trend), a timeline of recent calls/texts/emails with summaries and outcomes, consent flags, and last_contacted_at. Identify by contact_id, email, or phone. budget_tokens (default 1500) trims oldest history first; include limits sections (memory, calls, texts, emails, consent). Do not pass a token.
get_email
ChatGPTRead the full body of one email plus thread_summary (how many earlier messages with this person, when) and a reply hint (account_id, reply_to_message_id, to, subject). Before replying, call get_email_thread so you have the whole exchange, then send_email with the reply hint. Argument: message_id from list_emails. Do not pass a token.
get_email_thread
ChatGPTThe whole conversation with one customer before you reply: every email (bodies with quoted history stripped), text, call summary, and agent reply, oldest first. Target by message_id (from list_emails/get_email), thread_id, contact_id, or contact_email. Returns items (structured, with UTC timestamps), turns (role user = the customer, each starting with <timestamp>...</timestamp>; role assistant = what was sent on the user's behalf) ready to drop into your context, now (current UTC time), and reply (account_id, reply_to_message_id, to, subject) to pass to send_email so the answer leaves from the inbox that received it and threads correctly. Do not pass a token.
get_inbound_policy
ChatGPTEffective inbound policy for one endpoint (account_id) or for every endpoint when omitted, plus the defaults. Do not pass a token.
get_message
ChatGPTRead one SMS: body, status, and peer number. Argument: message_id from list_messages. Do not pass a token.
get_phone_number
ChatGPTReturn the signed-in user's Openline phone number. If none exists yet, one is created automatically (US local DID). Anyone can call this number; the agent answers. Do not pass a token.
get_recurring_outreach
ChatGPTOne outreach chain: its wake-ups, the agent runs they started, and the calls tied to it. Do not pass a token.
import_contacts
ChatGPTBulk-import customers. rows: list of objects with any of name, phone, email, tags (list or comma string), notes, plus free-form fields (company, role, ...). Rows are merged into existing contacts by phone or email identity; a person known by both becomes one contact. Max 2000 rows per call. Returns imported/merged/skipped counts and tag totals. Do not pass a token.
list_agent_runs
ChatGPTWhat the reply agent did on the user's behalf: runs with trigger, status (queued|running|done|escalated|failed|dry_run), and summary. Filter by contact_id, thread_id, status. Do not pass a token.
list_calls
ChatGPTList recent calls for the signed-in user (inbound and outbound). Optional: limit (max 25), direction (inbound|outbound), status. Do not pass a token.
list_contacts
ChatGPTList the user's customers/contacts, newest activity first, with keyset pagination. Filters: tags (list or comma string; all must match), has_email, has_phone, updated_since (ISO). include_memory=true adds a one-line memory summary and last_contacted_at per contact. Pass the returned next_cursor to get the next page. limit up to 200. Do not pass a token.
list_credit_ledger
ChatGPTItemised credit charges for a cycle, newest first (kind, reference, units, cost, credits). Optional cycle, kind, limit. Do not pass a token.
list_email_accounts
ChatGPTList Openline inboxes for the signed-in user. Returns account_id, email address, provider ('openline'), and status. An inbox is created automatically on first send_email or list_emails. Do not pass a token.
list_emails
ChatGPTRead recent messages from the user's Openline inbox. If none exists yet, one is created automatically. Optional: account_id, limit (max 25), unread_only, query (email address or free text). Pass contact_id (or contact_email) to get the cached conversation with one customer instead, both directions, newest first; optional since (ISO). Do not pass a token.
list_followups
ChatGPTThings the voice agent promised, was asked for, or wants the user to know: callbacks, info to send, status checks, reminders. Optional: status (pending|done|scheduled|failed|cancelled), call_id, limit. Do not pass a token.
list_messages
ChatGPTList recent SMS messages for the signed-in user (inbound and outbound). Optional: limit (max 25), direction (inbound|outbound), peer (E.164). Do not pass a token.
list_my_channels
ChatGPTShow the Openline numbers/addresses assigned to the user and their verified personal channels. Do not pass a token.
list_recurring_outreach
ChatGPTList recurring outreach chains for this account. Optional status: active, paused, completed, abandoned, expired, cancelled. Do not pass a token.
list_scheduled_calls
ChatGPTList upcoming (pending) scheduled calls, or pass status=done|cancelled|missed|failed for history. Do not pass a token.
list_scheduled_messages
ChatGPTList this user's scheduled SMS and email. Optional kind: sms or email. Do not pass a token.
logout
ChatGPTSign this MCP client out of Openline. Uses the host Bearer token. Do not pass a token. The human must call connect again (OAuth) to sign back in.
mark_do_not_contact
ChatGPTRecord that a customer asked not to be contacted again. Identify by contact_id, phone, or email; channels is a subset of calls, texts, emails (default all); quote their words. Future sends on those channels are refused. Do not pass a token.
pause_recurring_outreach
ChatGPTPause a recurring outreach chain. Nothing is sent until it is resumed. Do not pass a token.
pause_thread
ChatGPTThe user takes over a customer conversation: no agent replies or automatic texts for this contact until until ('in 2 days', 'tomorrow 9am', ISO; default 7 days). Inbound messages still notify the user. Do not pass a token.
remove_contact
ChatGPTDelete one saved customer. Pass contact_id, phone_number (E.164), and/or email; every identifier you pass must belong to the same contact. Their calls, texts, emails, scheduled calls, and follow-ups stay, but are no longer linked to a contact. Do not pass a token.
remove_my_channel
ChatGPTRemove a verified personal phone or email so texts or mail from it are no longer owner commands. One address: kind plus address. Several of the same kind: address as a list. All phones or all emails: kind and all=true. Every personal channel: all=true. Does not disconnect an Openline number or inbox. Do not pass a token.
resume_recurring_outreach
ChatGPTResume a paused outreach chain and schedule the next wake-up. Do not pass a token.
resume_thread
ChatGPTHand a paused customer conversation back to the endpoint policy. Do not pass a token.
run_thread_agent
ChatGPTHave Openline's reply agent act on one customer conversation under your instruction, e.g. 'answer their question about delivery and offer Thursday', using the same history, persona, consent, and tools it uses for automatic replies. Target by contact_id or thread_id. allowed_actions narrows what it may do (reply_same_channel, schedule_callback, mark_do_not_contact, notify_user, search, call_phone, email_new_address, send_sms_other_number, save_contact, remove_contact, schedule_message); default is the endpoint policy. dry_run=true drafts sends without executing; approve_agent_run executes them. Returns the run with its trace. Do not pass a token.
save_contact
ChatGPTSave or update a customer. Pass phone_number (E.164) and/or email; optional name, tags, and details (JSON object: company, role, relationship, language, timezone, notes). Merges into an existing contact that shares the phone or email. Do not pass a token.
schedule_call
ChatGPTSchedule an outbound call for later, e.g. 'call them back next month about the EQ pricing'. Arguments: to, run_at (ISO-8601 with offset, or 'in 2 hours', 'tomorrow 3pm', 'next month'), goal, plus any call_phone brief fields (persona, voice, context, style, outcome_schema, ...). voice is optional (quartz, ripple, vesper, willow, stone, gleam, meridian, bossa, tempo, beacon, delta, cinder, marin, cedar); omit it and gleam is used. background_noise is optional (off, office, cafe, street): a quiet bed under the agent. Omit it and the call stays quiet. When persona is omitted, the booked call uses the person who matches that voice. reference_call_id makes this a follow-up to that earlier call (summary, promises, key quotes); omit it to start a new call that still knows earlier calls with this number and does not open as a follow-up. include_transcript memory|excerpt|full controls how much of the referenced call is included. callee_timezone (IANA) keeps the call inside the callee's 8am-9pm window. max_attempts > 1 retries on no answer. Do not pass a token.
schedule_email
ChatGPTSchedule one email for later. Arguments: to, subject, body, run_at (ISO-8601 with offset, or 'in 2 hours', 'tomorrow 3pm'). Optional: contact_id, account_id, callee_timezone (IANA). Books a one-shot workflow schedule; the email is sent at that time. Do not pass a token.
schedule_sms
ChatGPTSchedule one SMS for later. Arguments: to (E.164 or a saved contact name), body, run_at (ISO-8601 with offset, or 'in 2 hours', 'tomorrow 3pm', 'next month'). Optional: contact_id, from_account_id, callee_timezone (IANA). Books a one-shot workflow schedule; the text is sent at that time. A time inside quiet hours moves to when they end. Do not pass a token.
search_conversations
ChatGPTFull-text search across past call transcripts, call summaries, SMS, and emails. Arguments: query; optional contact (E.164 or saved name) to scope to one person, since (ISO date), channel (call_turn|call_summary|sms|email), limit. Returns matching lines with surrounding context. Do not pass a token.
send_email
ChatGPTSend an email from the user's Openline inbox. If none exists yet, one is created automatically. Arguments: to, subject, body (to may be empty when contact_id is given). Optional: account_id (if multiple inboxes), reply_to_message_id, contact_id (links the message to that customer's history and drives consent), idempotency_key (repeat sends with the same key return the first message instead of sending again; use e.g. '<campaign>:<contact_id>' when looping over customers), unsubscribe (default true: adds an unsubscribe footer + List-Unsubscribe header; set false for one-off transactional replies). The first successful send may include tell_the_user: explain that to the user (verified personal emails, what they are, and that they can name one or more addresses to verify with no code). Errors: do_not_email (customer opted out), email_invalid (bounced), rate_limited with retry_after_sec. Do not pass a token.
send_emails
ChatGPTSend several emails in one call; each item is {to?, contact_id?, subject, body, idempotency_key?, unsubscribe?}. Same consent, caps, and idempotency rules as send_email, applied per item; returns per-item results in order (ok or error with retry_after_sec). Stops early when rate_limited and reports the remaining items as skipped so you can retry them. No composition happens here; write each message yourself. Max 100 items. The first successful batch may include tell_the_user once on the result: explain that to the user. Do not pass a token.
send_sms
ChatGPTSend an SMS from one of the user's Openline numbers. Arguments: to (E.164 number or a saved contact name; may be empty when contact_id is given), body. Optional: contact_id, from_account_id (which of the user's numbers sends; default primary), idempotency_key (repeat sends with the same key are not re-sent). Errors: do_not_text, rate_limited / quiet_hours with retry_after_sec. Do not pass a token.
send_sms_batch
ChatGPTSend several texts in one call; each item is {to?, contact_id?, body, idempotency_key?}. Same rules as send_sms per item; returns per-item results in order and stops early on rate_limited (remaining items reported as skipped). Max 100 items. Do not pass a token.
set_account_profile
ChatGPTGive one of the user's numbers or inboxes a default identity so every call, text, and email from it is consistent. account_id from list_my_channels / list_email_accounts / get_phone_number. Optional: persona {name, company, role}, signature (appended to emails), disclose_ai (if_asked | always | never_volunteer), quiet_hours {start, end, tz} (no calls in that local window), daily_cap (max sends per day from this endpoint), style (default tone). A call brief still overrides persona/style/disclose_ai. Do not pass a token.
set_contact_policy
ChatGPTPer-customer overrides on top of the endpoint policy, e.g. {"sms": {"on_reply": "notify"}} to never auto-reply to this person, or {"agent": {"allowed_actions": [...]}}. calls, after_hours, or unknown_callers may be voicemail only after set_voicemail_message has stored this user's greeting; this tool does not accept the sentence. Pass {} to clear. Do not pass a token.
set_inbound_policy
ChatGPTDecide what happens when customers call, text, or email one of the user's numbers or inboxes. account_id from list_my_channels / list_email_accounts. policy is a partial object merged into the current one. Phone endpoint keys: calls (agent|voicemail|reject), after_hours (agent|voicemail|reject) with business_hours {start, end, tz, days}, unknown_callers (screen|agent|voicemail|reject), missed_calls (callback_followup|sms_sorry|none), after_call_followup (none|agent). Voicemail plays the greeting from set_voicemail_message and does not run an agent; that tool must be called first. sms {on_reply: notify|agent|agent_and_notify|auto_reply_text|ignore, unknown_senders: screen|agent|ignore, auto_reply_text}. Email endpoint keys: on_reply, unknown_senders, auto_reply_text. Shared: agent {allowed_actions, escalate_on, budget {max_steps, max_runs_per_thread_per_hour}, caller_limits {calls|sms|email: {max_per_interaction, max_per_day}}, standing_instructions}, notify {mode: immediate|digest_hourly|digest_daily, channels, urgency_floor}. caller_limits caps callbacks, texts, and emails an inbound caller (not a verified owner channel) can ask the agent to send to themselves. Defaults are 3 per call or inbound message and 10 per rolling day; 0 blocks that kind. Defaults otherwise: replies only notify the owner; opt in to agent. Do not pass a token.
set_voicemail_message
ChatGPTSet this user's voicemail greeting. message is the sentence to play. Openline turns it into audio, checks the audio matches that sentence, and stores one greeting for the user. Call this before setting calls, after_hours, or unknown_callers to voicemail. Voicemail mode plays that audio and does not run an agent. Do not pass a token.
start_recurring_outreach
ChatGPTKeep contacting one saved contact until an objective is met (for example, until they agree to repay). Openline calls, texts, and emails over time, reschedules itself, and stops at the deadline or when the goal is met. Use call_phone, send_sms, or send_email for a single contact. Do not use this tool for a one-off call, text, or email. deadline is required (phrase or ISO, at most 30 days). limits may only lower the defaults (max_attempts 100, max_contacts_per_day 20, max_calls_per_7d 100 outbound calls placed by this chain, min_gap_minutes 2, at most 240). Do not pass a token.
tag_contacts
ChatGPTAdd or remove tags on contacts, selected by contact_ids or by an existing tags filter. Arguments: add (list), remove (list), contact_ids (list) or tags_filter (list). Do not pass a token.