Skip to main content
Glama

CallMCP — Phone Call MCP Server

Server Details

Phone call MCP server: AI agents place and answer real calls, text, email and WhatsApp via KaiCalls.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL
Repository
CallMCP/callmcp
GitHub Stars
1
Server Listing
CallMCP
ChatGPT
–
Claude
–

TDQS

B3.1/5.0

Scored across 199 tools

Disambiguation2/5

With 199 tools there are many near-duplicate pairs: rollback_config vs request_config_rollback, update_agent_config vs request_agent_update vs configure_agent_business_rules, send_sms vs send_message, buy_number vs request_number_purchase vs request_extra_number vs attach_number, and numerous *_approve / *_preview / *_accept terms tools in the agency namespace. The verbose descriptions do help distinguish most of them, but the boundaries require careful reading rather than being self-evident, and a few (two separate rollback paths) look functionally identical.

Naming Consistency3/5

Most tools follow snake_case verb_noun, but a large fraction are grouped under noun-first namespace prefixes (agency_billing_*, agency_care_*, agency_enrollment_*, agency_installation_*, agency_offer_*, agency_profile_*), breaking the predictable verb-first pattern. Several tools also multiplex multiple operations behind an action parameter (manage_callrail, get_callrail, get_agency_workspace, get_text_registration), which is a different convention from the one-tool-one-action majority.

Tool Count1/5

199 tools is an extreme surface for any single server and far exceeds what an agent can reliably select from. Even though the underlying domain is broad, many tools are hyper-granular variants of the same operation (five separate approval tools for one installation, eight agency_enrollment_* tools), suggesting decomposition that should have been consolidated.

Completeness4/5

Coverage is genuinely vast: agents, numbers, telephony setup, SMS/WhatsApp, campaigns, billing, agency/partner workflows, LSA and call tracking all have create/read/update/delete-ish lifecycles. A few notable gaps exist — submit_text_registration is explicitly non-functional, there is no delete_agent or delete_campaign, and error-recovery paths are scattered — but core workflows are end-to-end covered.

Available Tools

199 tools
add_team_phoneAdd Team PhoneA
DestructiveIdempotent
Inspect

Add a teammate's (or the owner's) cell to the phones that ring before Kai answers. Idempotent — a cell already listed is reported as already included. Owners and admins are also registered on the admin roster, so calling the business line from that cell reaches the admin secretary; a member only rings. The business's own forwarded-from office line is refused (forwarding_loop) because ringing it would bounce the call straight back. Requires the phone system to be set up first (set_up_phone_system).

Inputs: phone_number (required), name, role, business_id. Returns: code, error, member, success, +1 more

agency_billing_accept_termsAccept Wholesale TermsA
Idempotent
Inspect

Accepts published wholesale terms for the agency and applies their discount. Requires the agency owner, and the terms must be in effect and apply to this agency. It charges nothing and doesn't set up payment.

Inputs: termsId (required), partnerId (required). Returns: error, receipt, success

agency_billing_freeze_periodFreeze Wholesale Billing PeriodA
Idempotent
Inspect

Calculates and locks the wholesale statement for one closed calendar month (UTC) from the agency's billable client intervals. Requires the agency owner. Freezing the same month again returns the same period; it does not charge.

Inputs: end (required), start (required), partnerId (required). Returns: error, receipt, success

agency_billing_publish_termsPublish Wholesale TermsAInspect

Publishes a new set of wholesale commercial terms (discount, grace days, document and start date) for one agency, or for all agencies when partnerId is null. Platform commercial operators only. Each call publishes another version; agencies must still accept it.

Inputs: title (required), document (required), graceDays (required), partnerId (required), +2 more. Returns: error, receipt, success

agency_billing_record_adjustmentRecord Billing AdjustmentA
Idempotent
Inspect

Record an already-issued provider credit note or debit invoice against an existing agency billing line. Platform finance operators only: requires the existing admin key and wildcard scope; agency owner status is insufficient. Verifies exact provider receipt, currency and amount before recording bookkeeping. Creates no invoice, payment or subscription.

Inputs: lineId (required), reason (required), partnerId (required), amountCents (required), +2 more. Returns: error, receipt, success

agency_billing_set_automatic_collectionSet Automatic CollectionA
DestructiveIdempotent
Inspect

Turns monthly automatic collection of wholesale charges on or off under the accepted terms. Requires the agency owner and accepted terms; it cannot be turned off while any client is on an active partner plan. It charges nothing by itself.

Inputs: accepted (required), partnerId (required). Returns: error, receipt, success

agency_billing_set_planSet Client Partner PlanA
DestructiveIdempotent
Inspect

Puts a partner-created client on an agency-billed plan, or stops it when plan is null. Requires the agency owner who is also a client admin; starting a plan needs accepted terms and a ready collection method. Stopping parks the client service, which detaches its phone numbers from the voice agent under the existing parking policy.

Inputs: plan (required), partnerId (required), businessId (required). Returns: error, receipt, success

agency_billing_setup_collectionSet Up Wholesale Payment MethodA
Idempotent
Inspect

Creates the agency's customer record at the payment provider if needed and returns a hosted link where the owner adds a payment method. Requires the agency owner and accepted terms. It charges nothing, and the method is ready only after the provider confirms it.

Inputs: partnerId (required), offerId. Returns: error, receipt, success

agency_care_launch_reviewSend Review Request TextsA
Destructive
Inspect

Launches the approved review-request campaign, queuing text messages to the listed customers from the business number. Requires the client owner, the sms:write scope, accepted set to true and the fingerprint from preview_review. A campaign that is already sending can't be launched again.

Inputs: partnerId (required), fromNumber (required), milestones (required), minimumDays (required), +5 more. Returns: error, receipt, success

agency_care_prepare_reviewPrepare Review Request CampaignA
Idempotent
Inspect

Saves the approved review-request texts as a draft campaign and reserves the listed customers. Requires the client owner, the sms:write scope, accepted set to true and the fingerprint from preview_review. It sends nothing; launch_review sends it.

Inputs: partnerId (required), fromNumber (required), milestones (required), minimumDays (required), +5 more. Returns: error, receipt, success

agency_care_preview_reviewPreview Review Request TextsA
Read-onlyIdempotent
Inspect

Shows the exact review-request text, sender number and recipients for customers with a completed service, with a fingerprint for approval. Requires the client owner, the sms:write scope, and an SMS review installation where Kai is confirmed as the review tool. It sends nothing and saves nothing.

Inputs: partnerId (required), fromNumber (required), milestones (required), minimumDays (required), +5 more. Returns: error, receipt, success

agency_enrollment_approve_ownerApprove Owner EnrollmentA
Idempotent
Inspect

Records the client owner's approval of the exact offer and intake facts on their enrollment link. Requires the owner who claimed the link, the session's current revision and its fingerprint. It does not enroll; the agency still enrolls the batch.

Inputs: partnerId (required), sessionId (required), fingerprint (required), expectedRevision (required), +1 more. Returns: error, receipt, success

agency_enrollment_claim_ownerClaim Owner Enrollment LinkA
Idempotent
Inspect

Links the signed-in client owner to their enrollment link using its token. The user's verified email must match the owner email on the link. It approves nothing.

Inputs: token (required), partnerId (required), sessionId (required), idempotencyKey. Returns: error, receipt, success

agency_enrollment_createCreate Client Enrollment BatchA
Idempotent
Inspect

Creates an enrollment session for 1-50 existing or new clients against a published offer version and returns one owner approval link per new client. Requires an agency owner, admin or operator with access to each existing client, and an idempotency key; a replay returns the session without the links. It sends no email and installs nothing.

Inputs: entries (required), partnerId (required), offerVersionId (required), ownerEmail, +1 more. Returns: error, receipt, success

agency_enrollment_enrollEnroll Clients in OfferA
Idempotent
Inspect

Commits the previewed batch: creates new client businesses, records owner approvals and queues package installations for every ready client; installations later configure each client voice agent. Requires an agency owner, admin or operator who created the session, its idempotency key, and the fingerprint and revision from preview. Clients that are not ready are reported with their next step instead of being installed.

Inputs: partnerId (required), sessionId (required), approvalIds (required), fingerprint (required), +2 more. Returns: error, receipt, success

agency_enrollment_finish_self_serviceFinish Self-Service EnrollmentA
Idempotent
Inspect

Completes a self-service enrollment after the owner has approved the current intake: creates the client business and queues its package installations, which later configure the business's voice agent. Only the owner who started it can finish it. Repeating it returns the recorded result.

Inputs: partnerId (required), sessionId (required), idempotencyKey. Returns: error, receipt, success

agency_enrollment_owner_saveSave Owner Intake FactsA
Idempotent
Inspect

Lets the client owner replace the intake facts on their own enrollment link. Requires the owner who claimed the link and the session's current revision. Saving clears any earlier owner approval, so the owner must approve again.

Inputs: facts (required), partnerId (required), sessionId (required), expectedRevision (required), +1 more. Returns: error, receipt, success

agency_enrollment_previewPreview Client EnrollmentA
Idempotent
Inspect

Checks every client in the batch for missing facts, owner approval and payer conflicts, and returns what enrolling would install, with the fingerprint and approval IDs needed to enroll. Requires an agency owner, admin or operator. It records the preview on the session but installs nothing.

Inputs: partnerId (required), sessionId (required), idempotencyKey. Returns: error, receipt, success

agency_enrollment_revokeRevoke Enrollment SessionA
DestructiveIdempotent
Inspect

Revokes an enrollment session and all of its owner links so nothing more can be approved or enrolled from it. Requires the session creator or an agency owner/admin. Installations that were already enrolled are not removed.

Inputs: partnerId (required), sessionId (required), idempotencyKey. Returns: error, receipt, success

agency_enrollment_saveSave Client Enrollment BatchA
DestructiveIdempotent
Inspect

Replaces the client entries of an uncommitted enrollment session. Requires the session creator (or an agency owner/admin) and the current session revision. Saving revokes all outstanding owner approval links for the batch, so owners must be sent new links.

Inputs: entries (required), partnerId (required), sessionId (required), expectedRevision (required), +1 more. Returns: error, receipt, success

agency_enrollment_start_self_serviceStart Self-Service EnrollmentA
Idempotent
Inspect

Starts a business owner's own enrollment in a published agency offer, using the business name and intake facts. Requires a signed-in user session with a verified email and an idempotency key; the same key replays the same session. Nothing is installed until the owner approves and finishes.

Inputs: name (required), facts (required), offerVersionId (required), idempotencyKey. Returns: error, receipt, success

agency_installation_apply_updateApply Installation UpdateA
DestructiveIdempotent
Inspect

Applies an approved update and re-queues setup, which replaces the client's live voice agent configuration. Requires agency write access or the client owner, a resolved update with no open conflicts, fresh owner approval, and (unless this client is the canary) an active canary on the same release. Applying an already-applied update changes nothing.

Inputs: updateId (required), partnerId (required), fingerprint (required), installationId (required), +1 more. Returns: error, receipt, success

agency_installation_approveApprove Client Facts or ScriptA
Idempotent
Inspect

Records the client owner approving either the intake facts or the voice script they reviewed. Requires the client owner and the matching hash from owner_preview. It does not install anything by itself.

Inputs: subject (required), partnerId (required), sessionId (required), businessId (required), +1 more. Returns: error, receipt, success

agency_installation_approve_handoffApprove Staff HandoffA
Idempotent
Inspect

Records the client owner approving the exact staff handoff they reviewed. Requires the client owner and the fingerprint from preview_handoff.

Inputs: partnerId (required), installationId (required), expectedRevision (required), fingerprint. Returns: error, receipt, success

agency_installation_approve_route_receiptAcknowledge Route Test ReceiptA
Idempotent
Inspect

Records the client owner acknowledging the route test receipt they reviewed. Requires the client owner who received the notification and the fingerprint from preview_route_receipt. It does not place any call.

Inputs: partnerId (required), installationId (required), expectedRevision (required), fingerprint. Returns: error, receipt, success

agency_installation_approve_updateApprove Installation UpdateA
Idempotent
Inspect

Records the client owner approving the updated script of a proposed update. Requires the client owner, the updateId and its fingerprint. It does not apply the update.

Inputs: updateId (required), partnerId (required), fingerprint (required), installationId (required), +1 more. Returns: error, receipt, success

agency_installation_exportExport Installation ConfigurationA
Read-onlyIdempotent
Inspect

Returns the installation release, intake facts, approved script, staff sheet and checks for handoff or records. Requires client membership or agency assignment to the client. It changes nothing.

Inputs: partnerId (required), installationId (required), expectedRevision (required), accepted, +1 more. Returns: error, receipt, success

agency_installation_offboardOffboard InstallationA
DestructiveIdempotent
Inspect

Starts offboarding: stops the package's jobs, revokes its future automation authority and turns off its scheduled reports. Requires the client owner, accepted set to true and the fingerprint from preview_offboard. The phone number, connections, billing plan and history are kept.

Inputs: partnerId (required), installationId (required), expectedRevision (required), accepted, +1 more. Returns: error, receipt, success

agency_installation_opt_into_canaryOpt Installation into CanaryA
Idempotent
Inspect

Marks the client's installation as a canary, so it can receive package updates before other clients of the same agency. Requires the client owner and accepted set to true. It applies no update by itself.

Inputs: accepted (required), partnerId (required), installationId (required), expectedRevision (required). Returns: error, receipt, success

agency_installation_owner_previewPreview Client Facts and ScriptA
Read-onlyIdempotent
Inspect

Shows the client owner the exact intake facts and voice script prepared for their business, with the hashes needed to approve each. Only the client owner can view it, and only after the agency prepared a complete preview. It changes nothing.

Inputs: partnerId (required), sessionId (required), businessId (required). Returns: error, receipt, success

agency_installation_pausePause InstallationA
DestructiveIdempotent
Inspect

Pauses an installation so its package setup and scheduled package work stop. Requires agency write access to the client or the client owner, and the current revision. It does not delete anything; use retry to queue it again.

Inputs: partnerId (required), installationId (required), expectedRevision (required), accepted, +1 more. Returns: error, receipt, success

agency_installation_preview_handoffPreview Staff HandoffA
Read-onlyIdempotent
Inspect

Returns the staff handoff for an installation with a fingerprint for approval. Requires client membership or agency assignment to the client. It changes nothing.

Inputs: partnerId (required), installationId (required), expectedRevision (required), fingerprint. Returns: error, receipt, success

agency_installation_preview_offboardPreview Installation OffboardingA
Read-onlyIdempotent
Inspect

Shows what offboarding would stop and what it keeps (phone number, sender, connections, billing plan and history), with a fingerprint for approval. Only the client owner can view it. It changes nothing.

Inputs: partnerId (required), installationId (required), expectedRevision (required), accepted, +1 more. Returns: error, receipt, success

agency_installation_preview_route_receiptPreview Route Test ReceiptA
Read-onlyIdempotent
Inspect

Returns the evidence that a real call reached the client's voice line and produced a delivered lead notification, with a fingerprint for acknowledgement. Only for voice intake installations whose training is complete, and only the client owner who received that notification can view it. It changes nothing.

Inputs: partnerId (required), installationId (required), expectedRevision (required), fingerprint. Returns: error, receipt, success

agency_installation_preview_updatePreview Installation UpdateA
Idempotent
Inspect

Prepares a proposed update to a newer published offer version, or a rollback to an earlier installation revision, and lists any conflicts with client changes. Requires agency write access to the client or the client owner. It saves the proposal for review but does not apply it; client facts are always kept.

Inputs: partnerId (required), installationId (required), expectedRevision (required), offerVersionId, +1 more. Returns: error, receipt, success

agency_installation_resolve_updateResolve Update ConflictsA
Idempotent
Inspect

Chooses, for each conflicting setting in a proposed package update, whether to keep the client's current value or use the package value, and saves the resolved update. Requires the client owner and the update's fingerprint; client facts cannot be overridden this way. It does not apply the update, and the resolved version needs fresh owner approval.

Inputs: choices (required), updateId (required), partnerId (required), fingerprint (required), +2 more. Returns: error, receipt, success

agency_installation_retryRetry InstallationAInspect

Re-queues an installation so setup runs again, clearing its last error; setup configures the client's voice agent. Requires agency write access to the client or the client owner, and the current revision.

Inputs: partnerId (required), installationId (required), expectedRevision (required), accepted, +1 more. Returns: error, receipt, success

agency_installation_revoke_approvalRevoke Client ApprovalA
DestructiveIdempotent
Inspect

Withdraws one of the client owner's earlier approvals. Requires the client owner. Work that depends on that approval waits until it is approved again.

Inputs: partnerId (required), approvalId (required), businessId (required). Returns: error, receipt, success

agency_installation_run_scenariosRun Installation Test ScenariosA
DestructiveIdempotent
Inspect

Run approved verification scenarios for an existing client installation at its expected revision using voice agent compute under existing entitlement. Requires current assigned client authority, current owner approval and evals:write. Saves test evidence and can incur irreversible usage charges; a new request key can run and charge again. Makes no real customer calls.

Inputs: partnerId (required), requestId (required), installationId (required), expectedRevision (required). Returns: error, receipt, success

agency_offer_archiveArchive Agency OfferA
DestructiveIdempotent
Inspect

Archives an offer so it can no longer be published or used for new enrollments. Requires an agency owner or admin and the current offer revision. Existing installations are not removed.

Inputs: offerId (required), partnerId (required), expectedRevision (required). Returns: error, receipt, success

agency_offer_previewPreview Agency OfferA
Read-onlyIdempotent
Inspect

Builds the publishable manifest and sales kit for an offer draft and returns its fingerprint and revision for publishing. Requires an agency owner or admin. It saves nothing and fails if a package release, variant or claim is not supported.

Inputs: offerId (required), partnerId (required). Returns: error, receipt, success

agency_offer_publishPublish Agency OfferA
Idempotent
Inspect

Publishes the previewed offer as a new immutable version and returns its enrollment link. Requires an agency owner or admin, plus the fingerprint and revision from preview; partner-billed offers also need billing collection to be ready. Publishing the same fingerprint again returns the existing version.

Inputs: offerId (required), partnerId (required), fingerprint (required), expectedRevision (required). Returns: error, receipt, success

agency_offer_saveSave Agency Offer DraftAInspect

Creates a new offer draft, or replaces an existing draft when offerId and its current revision are given. Requires an agency owner or admin. Saving changes only the draft; clients see nothing until it is published.

Inputs: draft (required), partnerId (required), offerId, expectedRevision. Returns: error, receipt, success

agency_profile_accept_inviteAccept Agency InvitationA
Idempotent
Inspect

Joins the agency using the token from an invite link. The signed-in user must have a verified email that matches the invited address, and the invite must be unexpired and not revoked. Accepting the same invite again is a no-op.

Inputs: token (required), partnerId (required). Returns: error, receipt, success

agency_profile_assignAssign Staff Member to ClientA
Idempotent
Inspect

Gives an active agency staff member access to one client business with the admin or member business role. Requires an agency owner or admin who can manage that client; only the owner can assign an admin staff member. Assigning an existing assignment again changes nothing.

Inputs: userId (required), partnerId (required), businessId (required), businessRole (required). Returns: error, receipt, success

agency_profile_bootstrapCreate Agency ProfileA
Idempotent
Inspect

Registers a new agency for the signed-in user and makes them its owner, using the given brand and support details. Requires a signed-in user session with a verified email; an API key cannot create an agency. Repeating it for an agency that already exists does not create a second one.

Inputs: brand (required), support (required). Returns: error, receipt, success

agency_profile_inviteInvite Agency Team MemberAInspect

Creates a staff invitation for an email address with the admin, operator or reader role and returns a one-time invite link that expires in 7 days. Requires an agency owner or admin; only the owner can invite an admin. It sends no email; the returned link is delivered by whoever created the invite.

Inputs: role (required), email (required), partnerId (required). Returns: error, receipt, success

agency_profile_issue_keyIssue Agency API KeyAInspect

Creates a new API key for yourself in this agency, limited to the requested scopes, and returns the secret once. Readers cannot get write scopes, only the agency owner can get billing:write, and a delegated key cannot issue a key broader than itself. Each call creates another key (up to 20 active per user).

Inputs: name (required), scopes (required), partnerId (required). Returns: error, receipt, success

agency_profile_revoke_inviteRevoke Agency InvitationA
DestructiveIdempotent
Inspect

Cancels a pending staff invitation so its link can no longer be used. Requires an agency owner or admin. It does not remove anyone who already accepted; revoke_member does that.

Inputs: inviteId (required), partnerId (required). Returns: error, receipt, success

agency_profile_revoke_memberRemove Agency Team MemberA
DestructiveIdempotent
Inspect

Removes a staff member from the agency: revokes their membership, all their client assignments, their accepted invites and every API key issued to them through the agency. Requires an agency owner or admin; only the owner can remove an admin, and the owner cannot be removed.

Inputs: userId (required), partnerId (required). Returns: error, receipt, success

agency_profile_unassignRemove Staff Member from ClientA
DestructiveIdempotent
Inspect

Removes a staff member's agency assignment to one client business, and removes the business membership if this assignment created it. Requires an agency owner or admin; only the owner can unassign an admin. It does not remove the person from the agency.

Inputs: userId (required), partnerId (required), businessId (required). Returns: error, receipt, success

agency_profile_updateUpdate Agency ProfileA
DestructiveIdempotent
Inspect

Replaces the agency brand, support details and requested commercial mode. Requires an agency owner or admin and the current profile revision; a stale revision is rejected. It does not change any published offer.

Inputs: brand (required), support (required), partnerId (required), commercialMode (required), +1 more. Returns: error, receipt, success

agency_report_configureSchedule Activity Report EmailsA
DestructiveIdempotent
Inspect

Sets the weekly or monthly activity report email schedule for an installation and replaces the previous recipient list. Requires the client owner; recipients must be verified members of the client's business. The first report is sent by the scheduled job, not by this call.

Inputs: cadence (required), partnerId (required), recipients (required), installationId (required), +1 more. Returns: error, receipt, success

agency_report_generateGenerate Activity ReportA
Destructive
Inspect

Generate and save an activity report snapshot for an existing client installation at its expected revision. Requires current client membership and agency access. Queues report email for due owner-approved subscriptions to existing verified client members and advances their schedule; queued does not mean delivered.

Inputs: partnerId (required), installationId (required), expectedRevision (required). Returns: error, receipt, success

agency_support_acknowledgeAcknowledge Agency IncidentA
Idempotent
Inspect

Marks an agency incident as acknowledged and assigns its follow-up to you. Requires an agency owner, admin or operator. It does not resolve the incident; recovery is confirmed separately.

Inputs: partnerId (required), incidentId (required). Returns: error, receipt, success

agency_support_complete_exerciseComplete Training ExerciseA
Destructive
Inspect

Save completion evidence for a named operational exercise on an existing client installation. Requires current assigned client authority. Replaces any previous proof reference and completion time for that exercise; does not prove live customer delivery.

Inputs: exercise (required), partnerId (required), installationId (required). Returns: error, receipt, success

agency_support_measureRecord Agency Work MeasurementAInspect

Records time spent or money for one client (setup, support, fulfillment, provider cost or retail receipt) with a note. Requires an agency owner, admin or operator with write access to that client. Each call adds a new record.

Inputs: kind (required), note (required), partnerId (required), businessId (required), +2 more. Returns: error, receipt, success

answer_call_questionAnswer Call QuestionA
Idempotent
Inspect

Send the person's answer to a live call's pending_question, or decline. Send only what they said; answered once.

Inputs: call_id (required), answer, decline, question_id. Returns: code, error, call_id, success, +2 more

approve_email_campaignApprove Email CampaignA
Idempotent
Inspect

The business owner approves one exact revision of a drafted email campaign, named by campaign_id and the fingerprint returned by draft_email_campaign or get_email_campaign. A changed draft has a new fingerprint and needs a new approval. Sends nothing; launch_email_campaign queues it. Business owner only.

Inputs: business_id (required), campaign_id (required), fingerprint (required). Returns: id, code, error, action, +4 more

attach_numberAttach Phone NumberA
DestructiveIdempotent
Inspect

Assign a phone number already in the KaiCalls registry pool to a business (and optionally route it directly to an agent). Does NOT purchase a new number; search_available_numbers and buy_number handle purchases.

Inputs: phone_number (required), agent_id, business_id. Returns: error, number, success, business_id

attach_own_twilio_numberAnswer A Number From Your Own Twilio AccountAInspect

Have a voice agent answer calls on ONE number from the business's own connected Twilio account, calls only. Reads only that number. dry_run defaults to true and changes nothing: it returns would_change (the number's VoiceUrl and VoiceMethod) and the fields left unchanged. With dry_run false, only that number's VoiceUrl and VoiceMethod change; its text settings (SmsUrl, SmsMethod, SmsApplicationSid, StatusCallback) are read back afterwards and must be unchanged, so a texting setup another service runs on the account keeps working. Refuses a number a Twilio app answers, and a number another service answers unless replace_existing_voice is true. Uses one plan line. Requires admin role.

Inputs: agent_id (required), phone_number (required), dry_run, business_id, +1 more. Returns: after, error, before, dry_run, +4 more

buy_numberBuy Phone NumberA
DestructiveIdempotent
Inspect

Request a real phone-number purchase. This is APPROVAL-GATED: the carrier bills immediately on execution, so the tool only prepares a request for authenticated owner review. Caller-supplied human_confirmed, dashboard_session, or system_policy fields never authorize execution. Returns the stored request and a review URL for the owner; while approval is pending, no number has been purchased. Existing entitlement and carrier reservation checks still apply. In the acquisition flow this follows set_owner_phone, which saves a reachable owner number or records a decline.

Inputs: phone_number (required), actor, reason, dry_run, +6 more. Returns: code, error, result, status, +7 more

cancel_email_campaignCancel Email CampaignA
DestructiveIdempotent
Inspect

Stop an email campaign so nothing more is sent from it. Emails already delivered stay delivered. Needs campaign_id and the fingerprint of its current revision. Business owner only.

Inputs: business_id (required), campaign_id (required), fingerprint (required). Returns: id, code, error, action, +4 more

check_call_statusCheck Call StatusA
Read-onlyIdempotent
Inspect

Check the status of a call by its ID: while it is live, the latest turns of the conversation (live_transcript) and any question Kai is waiting on (pending_question); after, a voicemail message left, or the business calling back. Also takes the intent_id of a call scheduled for calling hours and says when it goes out

Inputs: call_id (required). Returns: call, error, success, live_transcript, +1 more

check_email_senderCheck Email Sending DomainA
Destructive
Inspect

Re-check a sending domain's DNS records with the email delivery provider now and replace its saved verification proof; may finish provider inbound routing, inbox and webhook setup. Returns what is still missing; an empty list means the sender is ready. Sends no email. Any member of the business may check.

Inputs: sender_id (required), business_id (required). Returns: id, code, error, action, +4 more

choose_customer_routeChoose Customer RouteA
DestructiveIdempotent
Inspect

APPROVAL-GATED. After private-test proof is complete, save forwarding, published_number, both, or testing. This unlocks the command center but does not claim customer coverage; selected customer routes remain pending until independently verified. Forwarding is optional; testing keeps the existing private-test result without connecting a customer route.

Inputs: choice (required), business_id (required), idempotency_key (required), activation_session_id (required), +2 more. Returns: error, routes, status, success, +6 more

configure_agent_business_rulesConfigure Agent Business RulesA
DestructiveIdempotent
Inspect

Safely add or replace a named operational rules section inside an agent inbound prompt, then route the prompt patch through the governed agent.patch broker. It covers cross-business handoffs, callback language, alert promises, and client-specific operating rules, and leaves the rest of the prompt unchanged.

Inputs: rules (required), agent_id (required), mode, actor, +7 more. Returns: code, error, result, status, +8 more

configure_staff_alertsConfigure Staff AlertsA
DestructiveIdempotent
Inspect

Save the business's alert contacts and post-call escalation rules. Read get_operational_settings first: each list you send (notification_phone, notification_email, escalation_rules) replaces the whole saved list, so include the entries to keep. Listed phones get after-call summary texts and escalation texts (one-recipient alerts go to the first phone); listed emails get escalation emails. Saving does not prove delivery.

Inputs: dry_run, business_id, escalation_rules, sms_notifications, +3 more. Returns: error, dry_run, success, settings, +3 more

confirm_notification_destinationConfirm Activation Notification DestinationA
DestructiveIdempotent
Inspect

APPROVAL-GATED. Save the owner-approved phone number (SMS) or email address where KaiCalls sends the owner the result of their first test call, for the exact active activation session. Once that test call's record is ready, KaiCalls sends a real text or email to that destination through its messaging provider; saving the destination alone is not proof anything was delivered. Replaces any destination saved earlier for the session.

Inputs: channel (required), business_id (required), destination (required), idempotency_key (required), +2 more. Returns: error, status, attempt, success, +4 more

connect_agentConnect External AgentA
DestructiveIdempotent
Inspect

Connect an external agent to a business and its signed event outbox. Requires current business admin membership, an assigned Kai agent, and agents:write, sms:write, webhooks:write. New SMS/WhatsApp conversations route to the external agent; explicit handoffs win. Grants no additional permissions and does not activate unregistered channels. Use a stable idempotency_key; replacements require expected_revision. The signing secret is returned only for a non-replayed connect. External realtime voice and email execution are not connected by this operation.

Inputs: agent_id (required), webhook_url (required), idempotency_key (required), external_agent_id (required), +5 more.

connect_whatsappConnect WhatsAppA
Idempotent
Inspect

Get the one link a business owner opens to put WhatsApp on their KaiCalls number. They sign in to Facebook as an admin of the business's Meta Business account and verify the number; the business owns its WhatsApp account. Uses the business's oldest KaiCalls line unless phone_number names another of its lines. Returns the same link while it is still valid (up to 3 days). Owner or admin only. Creates nothing billable and connects nothing by itself: get_whatsapp_status reports the connection after the owner finishes, and WhatsApp is not connected until it says so.

Inputs: business_id (required), phone_number. Returns: error, created, success, whatsapp

create_agentCreate AgentAInspect

Create a new KaiCalls agent — the secretary that answers this business’s calls (the live voice agent plus KaiCalls records) — with a system prompt, greeting, voice, and model. Its starting settings are saved as version 1 and each later change as a new version (list_config_versions); rollback_config restores a version's greeting, voice, prompt, model and summary/scoring. Compliance: KaiCalls automatically applies state-aware AI-disclosure and consent handling to every agent it provisions, and flags high-risk business categories for extra review.

Inputs: name (required), business_id (required), model, voice, +5 more. Returns: agent, error, script, success, +2 more

create_campaignCreate CampaignA
Destructive
Inspect

Create an outbound call campaign (cadence + lead batch) and optionally launch it immediately. Launching queues calls for the orchestrator; existing TCPA/consent gating still applies at dial time. Requires admin role on the business.

Inputs: name (required), cadence_config (required), launch, agent_id, +3 more. Returns: error, queued, success, campaign, +3 more

create_checkoutCreate or Resume CheckoutA
Idempotent
Inspect

Create, or reuse, a secure payment page hosted by Stripe where the business owner pays for a KaiCalls plan from list_plans with their own card. Needs business_id, plan_id and an idempotency_key: retrying with the same key returns the same page, and choosing a different plan needs a new key. This tool charges nothing; only the owner can pay, by opening the page themselves. It never proves payment or that the phone line is live: get_checkout_status reports payment for the returned session_id.

Inputs: plan_id (required), business_id (required), idempotency_key (required). Returns: url, error, status, success, +1 more

create_customer_workspaceCreate Customer WorkspaceAInspect

Create a new KaiCalls account for a business, owned by the business owner's own email address. It lets a partner or helper set up KaiCalls for a business owner. The account starts without a plan or phone number: the result includes a link the owner opens themselves to choose a plan and add their card, and the line is set up only after they pay. This tool charges nothing. By default the caller is added as an admin of the new account so they can continue setup (get_setup_checklist lists the steps); join_as_admin false skips that. partner_code credits a referring partner and does not apply to a partner's own account. Fails, creating nothing, if the email already has a KaiCalls account.

Inputs: owner_email (required), business_name (required), city, state, +6 more. Returns: error, success, business_id, owner_email, +3 more

create_evalCreate Agent Test ScenarioAInspect

Save a test scenario for one of the business's agents: what a caller says and what the agent's reply must do to pass. run_eval then grades the agent against it. Saving places no call and changes nothing on the agent.

Inputs: name (required), pass_if (required), agent_id (required), caller_says (required), +2 more. Returns: eval, error, success

delete_webhookDelete WebhookB
DestructiveIdempotent
Inspect

Remove a business outbound webhook by ID.

Inputs: id (required), business_id. Returns: error, message, success, business_id

detach_numberDetach Phone NumberB
DestructiveIdempotent
Inspect

Release a phone number from a business back to the unassigned registry pool.

Inputs: phone_number (required), business_id. Returns: error, success, business_id, released_phone_number

detach_own_twilio_numberStop Answering A Number From Your Own Twilio AccountA
DestructiveIdempotent
Inspect

Stop a voice agent answering a number from the business's own connected Twilio account and put back the call setting (VoiceUrl and VoiceMethod) the number had before it was attached. The number is never released from the account and its text settings are not touched. Requires admin role.

Inputs: phone_number (required), business_id. Returns: error, success, detached, restored, +1 more

disconnect_agentDisconnect External AgentA
DestructiveIdempotent
Inspect

Disconnect the external agent and disable its webhook atomically. Requires current business admin membership and agents:write, sms:write, webhooks:write. Pass the stored expected_revision. Inherited conversations return to Kai; explicit handoffs remain.

Inputs: expected_revision (required), business_id.

draft_email_campaignDraft Email CampaignAInspect

Save an email campaign for the owner to review: a subject, a plain-text body, the customers to email (lead_ids, each with recorded email permission) and the verified sender. Returns the campaign id and the fingerprint of this exact revision. Sends nothing; the owner approves it with approve_email_campaign and it only goes out after launch_email_campaign. Needs an admin of the business. Campaign email only goes from the business’s own verified sending domain, to customers with recorded email permission who are not on the do-not-email list, within the daily amount the business’s Kai level allows.

Inputs: text (required), subject (required), lead_ids (required), sender_id (required), +3 more. Returns: id, code, error, action, +4 more

find_voicesFind Voices for an AgentAInspect

Find the three voices that best match a plain description of what the owner wants (for example 'a Southern man who can also speak Spanish' or 'warm older woman, calm'), and get a page link where the owner can play each one in English and Spanish, pick one to switch the agent's voice, and undo within 24 hours. Show the owner the page link; nothing changes until they pick. The link expires in 7 days.

Inputs: agent_id (required), description (required), locale, business_id. Returns: error, voices, success, page_url, +1 more

get_activation_statusGet Activation StatusA
Read-onlyIdempotent
Inspect

Read current call readiness and persisted private-test proof for one accessible business. Only a currently entitled owner with a coherent assigned number gets the existing private-test setup link. Missing entitlement, incomplete setup or stale sessions do not authorize a call. It cannot assert or advance proof. A completed private test is separate from customer-route coverage; forwarding is optional and does not define whether the assigned phone works.

Inputs: business_id, oauth_transaction_id, activation_session_id, origin_conversation_id, +1 more. Returns: error, proof, state, routes, +9 more

get_agency_workspaceRead agency workspaceC
Read-onlyIdempotent
Inspect

Read assigned installations, grouped support incidents, accepted billing evidence (also billing:read), or inventory one authorized client's saved facts and actual channel readiness. Suggestions and unknowns remain explicit.

Inputs: resource (required), partnerId (required), after, businessId. Returns: error, state, success

get_agent_configGet Agent ConfigurationA
Read-onlyIdempotent
Inspect

Read an agent's settings as the owner edits them: the editable inbound, outbound and text prompts, greeting, voice (with its list_voices id when it has one), model, call length, transfer settings, and the call summary and lead score instructions. Read this before update_agent_config: inbound_prompt there replaces the whole prompt, so edit the text returned here.

Inputs: agent_id (required), business_id. Returns: agent, error, success

get_agent_connectionGet Agent ConnectionB
Read-onlyIdempotent
Inspect

Discover the external agent connection, signed webhook configuration, scoped API operation catalog, channel readiness and remaining runtime requirements. Requires agents:read, sms:read and webhooks:read. Configuration does not prove delivery or recipient consent.

Inputs: business_id.

get_analyticsGet AnalyticsA
Read-onlyIdempotent
Inspect

Get a dashboard summary (lead counts by status, conversion rate, call volume and duration, top agents, and business outcomes by type) over a recent time window.

Inputs: days. Returns: calls, error, leads, agents, +4 more

get_balanceGet BalanceA
Read-onlyIdempotent
Inspect

Get plan terms and usage for accessible businesses. No-card trials report 25 lifetime minutes, zero price and no overage; paid plans report the mapped subscription price and billing-cycle usage. Answered-call allowance usage is the raw billable call count, matching dashboard and right-sizing. A separate weighted count is informational only, not allowance consumption or right-sizing. Phone allowance includes purchased extra lines. A balance does not prove activation or inbound routing. Unavailable billing data returns an error.

Inputs: no named parameters. Returns: error, success, businesses

get_billing_contactsGet Invoice Email RecipientsA
Read-onlyIdempotent
Inspect

Read who gets the monthly invoice email for a business. Every paid invoice is always emailed to the business owner (returned masked); up to 3 extra addresses, such as a bookkeeper or office inbox, get the same email.

Inputs: business_id. Returns: error, success, business_id, owner_email, +3 more

get_business_infoGet Business InfoA
Read-onlyIdempotent
Inspect

Read back what a business already has: profile details, how many agents are configured, and recent call volume. This shows whether a business number that answers missed calls already exists. When the business has no working phone line yet, next_step names the tool that sets one up.

Inputs: business_id. Returns: error, success, business, next_step, +2 more

get_business_verificationGet Business Verification DocumentsA
Read-onlyIdempotent
Inspect

Read tenant-scoped business-verification document references, pending/approved/rejected staff-review states and secure upload requirements. No file bytes, storage paths, signed URLs or tax identifiers. Uploads happen on the secure owner page, by an admin; rejected documents can be corrected and uploaded again. Internal staff verification is separate from carrier registration. Reviewer notes are returned as staff-written data.

Inputs: business_id (required). Returns: error, success, has_more, documents, +3 more

get_call_disclosuresGet Call DisclosuresA
Read-onlyIdempotent
Inspect

Read the recording notice and AI notice callers hear before the greeting, and when each plays: always, state_gated (only for callers in states whose law calls for it, e.g. all-party-consent states for recording), or never. Shows the defaults when the business has not set its own.

Inputs: business_id. Returns: error, success, settings, is_default, +1 more

get_callrailRead CallRail setupA
Read-onlyIdempotent
Inspect

Read a business's CallRail call-tracking setup. action=status returns the connected CallRail account, which CallRail companies feed which business, every company the saved key can see (with its company_id), and the businesses you can link them to. action=list_trackers (with link_id from status) returns that company's tracking numbers, where each one rings now, and whether it already rings a KaiCalls line. If nothing is connected yet, ask the person for their CallRail API key and use manage_callrail connect.

Inputs: business_id (required), action, link_id. Returns: error, success

get_call_recordingGet Call RecordingA
Read-onlyIdempotent
Inspect

Get the real call recording URL for a call so reviewers can listen to the voice/audio instead of relying only on the transcript.

Inputs: call_id (required). Returns: call, error, success, recording_available

get_change_historyGet Agent Change HistoryA
Read-onlyIdempotent
Inspect

List an agent's recent config-change audit trail (change_type, change_source, old/new value, timestamp) — the same change log the owner hears when they call their line and ask what changed. Every change KaiCalls makes to an agent (via update_agent_config, configure_agent_business_rules, the owner's call-in line, or the dashboard) is logged here. Rows carry no version number; to undo a change, pick a version from list_config_versions and use rollback_config.

Inputs: agent_id (required), limit. Returns: error, changes, success, agent_id

get_channel_statusGet Channel StatusA
Read-onlyIdempotent
Inspect

Read customer channel setup. Phone calls report configured number resources only: state configured or needs_setup, with canSend/canReceive null because operational availability is unknown. SMS has state not_checked and null send/receive flags; shared_setup_state retains the existing configuration summary, not recipient-specific permission. Registration detail requires billing:read; this SMS-scope summary reads no new billing details. Other channels retain their existing states and flags. private_test_readiness checks owner-private call setup only when the token also has agents:read; otherwise it is not_checked with reconnect scope guidance. Private testing does not establish customer coverage or outbound call permission, which remain not_checked. Email includes separate managedEmail campaign sender readiness; a connected mailbox does not prove campaign approval or delivery. Read-only; changes nothing.

Inputs: business_id (required). Returns: error, success, channels, business_id, +3 more

get_checkout_statusGet Checkout StatusA
Read-onlyIdempotent
Inspect

Read a Stripe-verified subscription checkout receipt for a business you own. Requires business_id and session_id from checkout. Confirmed billing does not prove agent, number, or call activation; get_activation_status reports setup proof. This tool never creates checkout or retries provisioning.

Inputs: session_id (required), business_id (required). Returns: error, success, checkout, billing_only, +1 more

get_conversationGet SMS ConversationB
Read-onlyIdempotent
Inspect

Get a single SMS conversation thread by ID.

Inputs: conversation_id (required). Returns: error, success, conversation

get_email_campaignGet Email CampaignA
Read-onlyIdempotent
Inspect

Read a business's email campaigns: its sending addresses and their setup readiness, recent campaigns with status, revision fingerprint and outcome counts, and the customers who can be emailed (recorded consent, not on the do-not-email list). Pass campaign_id for one campaign, or sender_id for the DNS records that sending address's domain needs. Read-only; any member of the business can read.

Inputs: business_id (required), sender_id, campaign_id. Returns: code, error, records, senders, +3 more

get_extra_number_statusGet Extra Number Request StatusB
Read-onlyIdempotent
Inspect

Read an owner-authorized extra-number request. Billing, assignment and live activation are distinct. Unknown checkout or provider outcomes retain the original request and number, so no replacement purchase is needed or started.

Inputs: request_id (required), business_id (required).

get_inboxGet InboxA
Read-onlyIdempotent
Inspect

Answer "what did I miss?" in one read: the business's calls since a moment (default the last 24 hours, at most 30 days) with who called and what they wanted, every unheard voicemail with its transcript, texts that came in (needs sms:read), and open to-dos and callbacks. Read-only. Follow up with get_transcript, send_message to reply, or list_recent_calls / list_sms_messages to search further back.

Inputs: since, business_id. Returns: calls, error, since, texts, +5 more

get_leadGet LeadA
Read-onlyIdempotent
Inspect

Get full details for a single lead by ID, including the latest AI lead score and explanation.

Inputs: lead_id (required). Returns: lead, error, success

get_lsa_account_reportget lsa account reportA
Read-onlyIdempotent
Inspect

Read the authorized advertiser's live Google Local Services aggregate account report, including actual spend, currency and charged lead totals. Requires linked manager-account access. Dates are calendar dates inclusive at both ends. Source may lag by 30 minutes. Connected phone calls means duration over 30 seconds; responsiveness is the previous 90 days. This is not signed-case revenue or lead-rating reporting.

Inputs: end_date (required), start_date (required), business_id (required), connection_id (required). Returns: error, success

get_lsa_conversationsget lsa conversationsA
Read-onlyIdempotent
Inspect

Read the latest 200 synced Google LSA conversation events for an LSA lead, including customer and advertiser messages. History is as current as the last sync.

Inputs: lead_id (required), business_id (required). Returns: error, success

get_lsa_reportget lsa reportA
Read-onlyIdempotent
Inspect

Report LSA lead counts, types, observed statuses, ratings and credit counts for an explicit UTC window (start inclusive, end exclusive). Includes sync freshness and completeness. Removed unrated leads are counted separately because they cannot be rated here. Financial amounts, signed cases and response-time metrics are unavailable in this source and cannot be derived from counts.

Inputs: end (required), start (required), business_id (required). Returns: error, success

get_lsa_setupget lsa setupB
Read-onlyIdempotent
Inspect

Inspect Google LSA account selection and sync freshness, with setup steps. Saved configuration never proves a live workflow. Cloud-project production access is not shown here; Google Cloud reports it.

Inputs: business_id (required). Returns: error, success

get_meetingGet MeetingsA
Read-onlyIdempotent
Inspect

List the meetings Kai was sent into (newest first), or one meeting by id with its live status, minutes used and summary, plus the plan's remaining meeting minutes this month.

Inputs: id, business_id. Returns: error, success, meetings, allowance

get_nimbataRead Nimbata setupB
Read-onlyIdempotent
Inspect

Read a business's Nimbata call-tracking setup: the connected Nimbata account, which Nimbata projects feed which business (with when each last synced and how many calls matched), the projects the saved token can see, and the businesses you can link them to.

Inputs: business_id (required), action. Returns: error, success

get_operational_settingsGet Operational SettingsB
Read-onlyIdempotent
Inspect

Read the business-level operational setup of a live account: staff alert recipients, SMS/email alert flags, escalation rules, textable send-link entries, and assigned agent voice/model/greeting metadata.

Inputs: business_id. Returns: error, agents, success, business, +4 more

get_own_caller_idGet Own Caller IDB
Idempotent
Inspect

Which number Kai's outbound calls show: the person's own verified number or the KaiCalls line. Also confirms a verification started with start_own_caller_id once the person has typed the code. state is none, pending, verified or failed.

Inputs: business_id. Returns: error, success, own_caller_id

get_phone_flowGet Phone FlowA
Read-onlyIdempotent
Inspect

Read how calls ring on the business's hosted phone system: which cells and desk phones ring, for how many seconds, and whether after-hours callers go straight to Kai. Reconciled from the phone system on every call. Returns 409 when the hosted phone system is not set up for this business.

Inputs: business_id. Returns: flow, line, error, success, +3 more

get_phone_system_statusGet Phone System StatusA
Read-onlyIdempotent
Inspect

Read saved phone-system configuration: extension, resource IDs (never secrets), assigned line, and agreement. phone_system_configuration.configuration_allows_calls means provisioned resources plus a permitting agreement only; it does not verify calls can connect. ready_for_calls is null because operational availability is unknown. private_test_readiness uses the existing owner-private call setup authority only with agents:read; otherwise not_checked. Customer coverage and outbound call permission remain not_checked. This read differs from the shared phone-system API configuration flag and changes nothing.

Inputs: business_id. Returns: ids, line, error, success, +10 more

get_scam_screeningGet Scam Call ScreeningA
Read-onlyIdempotent
Inspect

Read how the business screens scam calls: the mode (off; label, the default, which answers every call and marks likely scams in the call log; or screen, which sends callers with a strong scam sign to a take-a-message screen), the numbers that are never screened, and the most recent calls caught as scams.

Inputs: business_id. Returns: error, success, settings, is_default, +2 more

get_setup_checklistGet Setup ChecklistA
Read-onlyIdempotent
Inspect

Read where one business stands on setup: plan, phone number, texting registration, WhatsApp, call and lead alerts, connected mailbox for follow-up email, and email campaign sender. Each step has a state (done, in_progress, needs_owner, needs_action or unavailable) and one next action: either the tool that moves it forward, or the page the owner must open for steps only they can do, such as paying, typing their EIN or signing in to Facebook or Google. Read-only; changes nothing and contacts no one.

Inputs: business_id (required). Returns: error, success, checklist

get_setup_recovery_statusGet Setup Recovery StatusB
Read-onlyIdempotent
Inspect

Read an owner-authorized setup recovery request by its business and idempotency key. Running requests are never automatically stolen, including stale requests. A ready receipt does not prove live activation.

Inputs: business_id (required), idempotency_key (required).

get_text_registrationGet Text RegistrationA
Read-onlyIdempotent
Inspect

Read where a business stands on its own carrier registration for business texting: saved details (never the EIN; only whether one is on file), payment, filing stage, whether sales texts are allowed, and the one next step. In MCP, known excludes fields the canonical flow still requires the owner to confirm; suggestions preserves those nonprivate values and available provenance. missing is the ordered outstanding field-question list, with missing_value or confirmation_required reasons; next_question is its first item. question_progress counts field questions including next, not website screens. Website screens group several fields and may include a private identity step; unequal counts can be valid. The MCP presentation separates configured registration/enrollment from recipient-specific sending permission and delivery, which remain not_checked. A null own registration does not prove an enrolled platform route cannot text; configured lines do not prove a send is authorized. Dashboard/API presentation is unchanged. Read-only.

Inputs: business_id (required). Returns: addon, error, known, chasers, +15 more

get_transcriptGet TranscriptB
Read-onlyIdempotent
Inspect

Get the transcript and summary of a completed call

Inputs: call_id (required). Returns: call, error, success, transcript, +3 more

get_trust_levelGet Trust LevelA
Read-onlyIdempotent
Inspect

Read one business's KaiCalls trust level (Sprout, Verified, Trusted, Pro, Partner): the current level, the steps to the next one with progress, what each level unlocks, today's outbound calls and texts against current effective account limits, and any hold. Badge progress does not itself establish higher call or text caps. focus 'ladder' explains every level; focus 'level' with level explains one. Read-only: returns saved standing or computes missing/stale standing without saving it or sending notifications. recheck_trust_level recomputes and saves current standing. Levels are earned, never set: no tool can raise one.

Inputs: focus, level, business_id. Returns: held, line, next, error, +13 more

get_usageGet API UsageB
Read-onlyIdempotent
Inspect

List recent API usage events (endpoint, method, status code, cost) for the caller's account.

Inputs: end, limit, start. Returns: error, usage, success, has_more

get_webhookGet Webhook ConfigurationA
Read-onlyIdempotent
Inspect

List the configured outbound webhook(s) for a business, including supported event types.

Inputs: business_id. Returns: error, events, success, webhooks, +1 more

get_whatsapp_statusGet WhatsApp StatusA
Read-onlyIdempotent
Inspect

Check whether WhatsApp is connected on a business's KaiCalls number, read live from the carrier. Connected only once the number is verified for WhatsApp; otherwise says whether the owner's link is still waiting, expired or failed.

Inputs: business_id (required). Returns: error, success, connected, connections

join_callJoin CallA
DestructiveIdempotent
Inspect

Join a live errand call. take_over connects the person's own phone; listen returns a signed-in dashboard link.

Inputs: mode (required), call_id (required). Returns: mode, error, call_id, success, +3 more

join_meetingSend Kai Into a MeetingA
Idempotent
Inspect

Send Kai into a Zoom, Google Meet, Microsoft Teams or Webex meeting by its link. Kai joins under the agent name, takes notes, and emails the owner a summary when the meeting ends. If the meeting has a waiting room, the host must admit Kai. In the default listen mode it answers out loud when someone says its name and counts against the plan's monthly meeting minutes (a business whose plan includes none gets its first hour free, once); avatar mode joins with a talking video face and counts one avatar meeting.

Inputs: meeting_url (required), mode, agent_id, bot_name, +4 more. Returns: error, meeting, success

launch_call_campaignLaunch Call CampaignA
Destructive
Inspect

Start or resume an existing outbound call campaign so Kai begins calling its leads. Needs campaign_id and agent_id (an agent assigned to the same business), the calls:write scope and an admin role in the business. Queues the campaign's pending calls within its call windows; real people get phone calls once it runs. A queued result does not mean any call was answered or completed. pause_call_campaign stops it. Not for email campaigns.

Inputs: agent_id (required), campaign_id (required), business_id. Returns: error, action, queued, success, +5 more

launch_email_campaignLaunch Email CampaignA
Destructive
Inspect

Queue an owner-approved email campaign for sending to real customers, within its daily limit. Business owner only. Emails cannot be unsent once delivered; cancel_email_campaign stops what has not gone out yet. A queued result is not proof any email was delivered. Campaign email only goes from the business’s own verified sending domain, to customers with recorded email permission who are not on the do-not-email list, within the daily amount the business’s Kai level allows.

Inputs: business_id (required), campaign_id (required). Returns: id, code, error, action, +4 more

leave_meetingTake Kai Out of a MeetingA
DestructiveIdempotent
Inspect

Have Kai leave a video meeting it is in, or stop trying to join one. Kai drops out of the live call for everyone in it and stops taking notes; this cannot be undone, and joining again takes a new join_meeting request. Notes taken so far are kept and can be read with get_meeting.

Inputs: id (required), business_id. Returns: error, meeting, success

list_agentsList AgentsA
Read-onlyIdempotent
Inspect

List the KaiCalls agents on the authenticated account. Shows whether this business already has a secretary answering its calls.

Inputs: limit, offset, business_id. Returns: count, error, limit, agents, +5 more

list_campaignsList CampaignsB
Read-onlyIdempotent
Inspect

List outbound call campaigns for the authenticated business.

Inputs: limit, offset, status. Returns: count, error, limit, offset, +5 more

list_config_versionsList Agent Config VersionsA
Read-onlyIdempotent
Inspect

List the saved versions of an agent's settings, newest first: what saved each one (source), what changed (diff_summary), who (created_by) and which version a rollback came from. Secrets are never included. Pass version to fetch one version's full saved settings (config_snapshot). That snapshot holds the compiled prompt; to edit the prompt, read get_agent_config instead.

Inputs: agent_id (required), limit, version. Returns: error, success, version, agent_id, +1 more

list_conversationsList SMS ConversationsA
Read-onlyIdempotent
Inspect

List SMS conversation threads (counterparty timeline metadata) for the authenticated business, most recent first.

Inputs: limit. Returns: error, success, has_more, conversations

list_evalsList Agent EvalsA
Read-onlyIdempotent
Inspect

List saved test scenarios for an agent (or all accessible agents). A new agent has none; create_eval adds one.

Inputs: agent_id. Returns: error, evals, success

list_knowledgeList Agent KnowledgeB
Read-onlyIdempotent
Inspect

List agent knowledge base entries for a business.

Inputs: query, category, business_id. Returns: error, success, knowledge

list_leadsList LeadsA
Read-onlyIdempotent
Inspect

List leads for the authenticated business, with optional status/source/agent filters. Includes the latest AI lead score when available.

Inputs: limit, offset, source, status, +1 more. Returns: count, error, leads, limit, +5 more

list_lsa_leadslist lsa leadsB
Read-onlyIdempotent
Inspect

List synced Google LSA leads, charge and credit states, source IDs and rating details. The returned LSA lead id identifies the lead in LSA commands; the separate lead_id field links to the CRM.

Inputs: business_id (required), limit, offset. Returns: error, success

list_numbersList Phone NumbersA
Read-onlyIdempotent
Inspect

List phone numbers assigned to the accessible business(es), with capability and compliance flags. Assignment does not prove a successful inbound test or customer coverage. get_activation_status reports current readiness and private-test proof. Forwarding is an optional customer route.

Inputs: business_id. Returns: error, numbers, success

list_observability_eventsList Observability EventsB
Read-onlyIdempotent
Inspect

List a business-scoped timeline of compact call-runtime events and redacted integration-delivery attempts. Uses bounded keyset pagination.

Inputs: to, from, limit, cursor, +13 more. Returns: error, events, success, pagination, +1 more

list_overage_chargesList Overage ChargesA
Read-onlyIdempotent
Inspect

List the per-period overage-minutes ledger (older per-minute-overage plans only; current plans carry no overage). GET /v1/balance/get_balance only returns an aggregate; this returns the underlying per-period ledger rows.

Inputs: to, from, limit, status, +1 more. Returns: error, charges, success, business_id

list_plansList PlansA
Read-onlyIdempotent
Inspect

Read the canonical public KaiCalls plan catalog, monthly USD prices and allowances. Does not select a plan, create checkout, or change billing.

Inputs: no named parameters. Returns: error, plans, success

list_productsList Agent ProductsC
Read-onlyIdempotent
Inspect

List a business's agent product catalog.

Inputs: query, category, inventory, business_id. Returns: error, success, products

list_recent_callsList Recent CallsA
Read-onlyIdempotent
Inspect

List and search the business's calls, newest first, each with who called (when known) and a short summary of what they wanted. Search by caller phone, by words in the call summary ("water heater", "quote"), and by date window; filters combine. Use get_transcript for the full call.

Inputs: after, limit, phone, query, +4 more. Returns: calls, count, error, limit, +5 more

list_rightsize_recommendationsList Plan Right-Size RecommendationsA
Read-onlyIdempotent
Inspect

List per-period automatic plan right-size decisions, including the dry_run -> notified -> (kept | applied | superseded) lifecycle. Answers "is this business about to get right-sized".

Inputs: to, from, limit, action, +2 more. Returns: error, success, business_id, recommendations

list_sms_messagesList SMS MessagesA
Read-onlyIdempotent
Inspect

Read SMS and WhatsApp message evidence for accessible businesses (sms:read), including provider message ID, carrier status, delivery/failure timestamps and failure code. Filter by business_id, conversation or direction, and search by phone number (either side), words in the message, and date window. Provider acceptance is not delivery; delivered_at and carrier status record delivery. Uses offset pagination.

Inputs: after, limit, phone, query, +5 more. Returns: count, error, limit, offset, +5 more

list_subscription_historyList Subscription Change HistoryB
Read-onlyIdempotent
Inspect

List the business plan and price changes, newest first: upgrades, downgrades, add-ons and automatic right-size moves.

Inputs: to, from, limit, source, +2 more. Returns: error, changes, success, business_id

list_tool_execution_logsList Tool Execution LogsA
Read-onlyIdempotent
Inspect

List per-call voice-agent tool execution traces — outcome, latency, timeout, and a redacted result preview for each routed tool call. Answers "did this tool call actually work".

Inputs: to, from, limit, call_id, +4 more. Returns: logs, error, success, business_id

list_voicemailsList VoicemailsA
Read-onlyIdempotent
Inspect

List recent voicemails for the authenticated business, including transcripts and recording URLs.

Inputs: limit, offset. Returns: count, error, limit, offset, +4 more

list_voicesList Voice CatalogA
Read-onlyIdempotent
Inspect

List the curated, credential-free voice catalog (id, display name, accent, language, gender, sample URL) used to configure agent voices.

Inputs: gender, language, provider. Returns: error, voices, success

list_workflow_templatesList Workflow TemplatesA
Read-onlyIdempotent
Inspect

List the cadence/campaign workflow templates KaiCalls can run (standard, aggressive, nurture, custom), including each template's retry interval, defaults (call windows, days, attempts), and a ready-to-use cadence_config example. The cadence_config examples match the shape create_campaign accepts, including multi-step sequences with launch=true. Static catalog — no per-business state.

Inputs: no named parameters. Returns: error, usage, success, defaults, +2 more

make_callMake CallA
Destructive
Inspect

Place an outbound call through a KaiCalls AI agent: call back a customer who previously called this business, give the owner a voice preview, or call on the owner's behalf (a landlord, clinic, pharmacy, school or utility) with the task in context. For a customer callback, pass the existing lead_id and callback goal in context. Kai verifies the business's inbound-call consent for the exact destination; a verified callback can go directly to a cell phone without connecting the owner. Contact existence alone is not callback permission, and opt-outs still block calls. A call never proves inbound routing or advances activation. report_language sets the language the result is reported in, and Kai then confirms exact details for that reader; Kai speaks call_language (English by default) on the phone. A new account's first call to a US or Canada business line is free; after that the account needs a plan. Kai calls businesses, not personal cell phones, on a free call. For a business that answers on a cell phone, connect_me has Kai ring the person's own saved phone and connect them, so they do the talking. While the call runs, check_call_status shows its live_transcript and send_call_note steers Kai. hold_for_me has Kai wait on hold at a business and connect the person when someone answers. An idempotency_key makes the request safely retryable. Only to is required: with no agent_id the account's one agent places the call.

Inputs: to (required), name, context, lead_id, +11 more. Returns: call, error, success, replayed, +7 more

manage_callrailSet up CallRailA
DestructiveIdempotent
Inspect

Connect CallRail call tracking to a business's line. Order: (1) connect {api_key, account_id?}; (2) get_callrail status lists the companies the key can see; (3) link_company {company_id, target_business_id?} once per business; (4) set_writeback {enabled}; (5) get_callrail list_trackers; (6) route_tracker only after the owner says yes. The API key: the person may paste their CallRail API v3 key straight into this chat. Take it and pass it as api_key; do not send them elsewhere to paste it. KaiCalls stores it encrypted and never returns it. One agency-level key serves every company that CallRail login can see, so connect once and link each firm with its own link_company. They create the key in CallRail under Integrations > API Keys > Create API V3 Key, signed in as a login that can see every company to link. CallRail shows the key only once. If they would rather paste it themselves: https://www.kaicalls.com/dashboard/settings/connections?connector=callrail. If connect answers choose_account, call it again with one of the returned account ids. link_company subscribes that CallRail company's calls: calls Kai answers get the CallRail source, campaign, keyword and landing page, and Kai's outcome is written back to CallRail as a KaiCalls tag, a summary note and good_lead when Kai qualified the caller. route_tracker {link_id, tracker_id, mode} changes where a live tracking number rings: mode kai_answers sends every call to Kai; business_first sends it to a KaiCalls line that rings the owner first so Kai takes only the misses. restore_tracker puts the earlier destination back. Leaving numbers unrouted is tracking-only. unlink_company {link_id}; disconnect. Requires current admin role on every business involved. Changing a tracker changes a live phone line: confirm with the owner first.

Inputs: action (required), business_id (required), mode, api_key, +7 more. Returns: error, success

manage_nimbataSet up NimbataA
DestructiveIdempotent
Inspect

Connect Nimbata call tracking to a business's line. connect {api_token} checks and saves a Nimbata personal API token (Agency plan; one token can serve many businesses). link_project {project_id, target_business_id?} attaches that Nimbata project's calls to a business and adds KaiCalls tags to the project: calls Kai answers get Nimbata's source, UTM and click ids, and Kai's outcome is written back to the Nimbata call as a KaiCalls tag, a KaiCalls qualified tag when Kai qualified the caller, and a summary comment. unlink_project {link_id}; set_writeback {enabled}; disconnect. Requires current admin role on every business involved. Routing stays in Nimbata: add the KaiCalls number to the project's call flow there.

Inputs: action (required), business_id (required), enabled, link_id, +3 more. Returns: error, success

pause_call_campaignPause Call CampaignA
DestructiveIdempotent
Inspect

Pause an outbound call campaign. Stops its queued and scheduled calls and cancels pending call attempts; a call already in progress may finish. Leads are kept and the campaign can be resumed later with launch_call_campaign. Needs campaign_id, the calls:write scope and an admin role in the business. Pausing an already paused campaign changes nothing.

Inputs: campaign_id (required), business_id. Returns: error, action, queued, success, +5 more

rate_lsa_leadrate lsa leadA
DestructiveIdempotent
Inspect

Submit an authorized, truthful Google LSA quality survey and return Google's actual bonus-credit decision. This is not a guaranteed refund or the retired manual dispute workflow. Requires admin role and a stable retry key. Each rating is a per-lead survey answer based on that lead, not a bulk dissatisfaction claim. The reason must match the positive/negative rating; OTHER requires a comment. Neutral takes no reason.

Inputs: rating (required), lead_id (required), business_id (required), idempotency_key (required), +2 more. Returns: error, success

recheck_trust_levelRecheck Trust LevelA
Destructive
Inspect

Recompute one business's KaiCalls trust level now from its live account activity (card on file, paid bills, days active, real customer calls) and save the result, the same recheck the dashboard runs, for example right after the owner adds a card. Returns the same view as get_trust_level plus whether the level moved up or down. Requires current business membership. Replaces the saved derived state, may record level-change history and may email the current owner when standing changes. It can only reflect what the account has earned; it never sets or raises a level by request.

Inputs: focus, level, business_id. Returns: held, line, next, error, +13 more

remove_own_caller_idRemove Own Caller IDA
DestructiveIdempotent
Inspect

Stop showing the person's own number on Kai's calls; calls show the KaiCalls line again. Business owner only.

Inputs: business_id. Returns: error, removed, success

report_issueReport an IssueAInspect

Report a problem with your KaiCalls agent, phone number, billing, or account. Saves the report to your change history and notifies KaiCalls support so a person can follow up on anything broken or not working as expected.

Inputs: summary (required), description (required), category, severity, +2 more. Returns: error, success, category, severity, +3 more

request_agent_updateRequest Agent Change With ApprovalA
DestructiveIdempotent
Inspect

Change a live agent's name, greeting, prompts, voice, model, call length or call transfer through the approval-gated path, for changes made on the owner's behalf that need a recorded approval. Needs agent_id, at least one field to change and the owner's confirmed approval. Callers hear the change on their next call. Direct edits by the owner go through update_agent_config. Returns needs_user_input, needs_approval, pending_approval, executed, denied or unsupported; only executed means the change was made.

Inputs: agent_id (required), idempotency_key (required), name, actor, +21 more. Returns: code, error, intent, result, +9 more

request_config_rollbackRequest Agent Rollback With ApprovalA
DestructiveIdempotent
Inspect

Put a live agent back on a saved earlier version of its configuration (listed by list_config_versions), with the owner's confirmed approval. Replaces the current live configuration; callers hear the restored version on their next call. Needs agent_id and version_number or version_id. Returns needs_user_input, needs_approval, pending_approval, executed, denied or unsupported; only executed means the change was made.

Inputs: agent_id (required), idempotency_key (required), actor, reason, +7 more. Returns: code, error, intent, result, +9 more

request_email_senderRequest Email Sending DomainA
Destructive
Inspect

Set up a sending address for a business's email campaigns on a domain the business controls (for example mail.example.com). Registers the domain with the email delivery provider and returns the DNS records the owner must add where the domain is hosted. May replace an existing reply address, enabled state and sending limit, and may provision provider inbound routing, inbox and webhook. Sends no email. The sender becomes ready on its own once the records verify; check_email_sender re-checks now. Needs an admin of the business. Campaign email only goes from the business’s own verified sending domain, to customers with recorded email permission who are not on the do-not-email list, within the daily amount the business’s Kai level allows.

Inputs: from (required), domain (required), reply_to (required), business_id (required). Returns: id, code, error, action, +4 more

request_emergency_addressSet Emergency (911) AddressA
DestructiveIdempotent
Inspect

Set the emergency (E911) service address for one of the business's phone numbers with the phone carrier, so a 911 call from that line reaches the right dispatcher. Needs phone_number, the full street address and disclosure_acknowledged true after the owner reads the 911 notice, plus the owner's confirmed approval. Replaces any address on file for that number. Returns needs_user_input, needs_approval, pending_approval, executed, denied or unsupported; only executed means the change was made.

Inputs: address (required), phone_number (required), idempotency_key (required), disclosure_acknowledged (required), +7 more. Returns: code, error, intent, result, +9 more

request_extra_numberReview an Extra NumberA
Idempotent
Inspect

Reserve an exact pool number and request an owner-only browser review of its recurring extra-line price. Requires numbers:write and billing:write. It never charges included or prepaid capacity; included allocation goes through attach_number. This tool does not approve payment or prove activation.

Inputs: agent_id (required), business_id (required), phone_number (required), idempotency_key (required).

request_human_approvalRequest Human ApprovalA
Destructive
Inspect

Ask a named principal for a specific decision using the provisioned voice approval channel. Requires restricted approvals:write, a configured callback host and signing secret. Returns dispatch status; the signed callback carries the decision and evidence. No approval is implied by dispatch. SMS-only delivery is unavailable.

Inputs: source (required), channel (required), summary (required), expires_at (required), +9 more.

request_number_purchaseRequest Phone Number PurchaseA
DestructiveIdempotent
Inspect

Buy a specific available phone number for the business from the phone carrier, with the owner's confirmed approval. The carrier bills the number to the business right away. Available numbers come from search_available_numbers. Optionally connects it to agent_id. Returns needs_user_input, needs_approval, pending_approval, executed, denied or unsupported; only executed means the change was made.

Inputs: phone_number (required), idempotency_key (required), actor, reason, +6 more. Returns: code, error, intent, result, +9 more

request_transcript_webhookSend Call Transcripts to a WebhookA
DestructiveIdempotent
Inspect

Create or update a webhook that receives the business's completed-call events (which can include transcripts) at a URL the business controls. Needs webhook_url and the owner's confirmed approval because call data leaves KaiCalls. A new webhook's signing secret is returned once. Returns needs_user_input, needs_approval, pending_approval, executed, denied or unsupported; only executed means the change was made.

Inputs: webhook_url (required), idempotency_key (required), id, actor, +9 more. Returns: code, error, intent, result, +9 more

retry_activation_notificationRetry Activation NotificationA
DestructiveIdempotent
Inspect

APPROVAL-GATED. Send the owner's activation notification again, as a real text or email through KaiCalls' messaging provider, for the exact active activation session. Only retries a channel whose last attempt failed or has waited long enough; an attempt whose outcome is unknown is never blindly resent. Requires a new idempotency_key.

Inputs: channel (required), business_id (required), idempotency_key (required), activation_session_id (required), +1 more. Returns: error, status, attempt, success, +2 more

retry_setupReconcile Existing SetupA
DestructiveIdempotent
Inspect

Reconcile database pointers for an existing imported signup phone reservation. Owner-only, entitlement-checked, single-flight and idempotent. Never creates agents, buys numbers, changes provider routing or sends messages. PBX, missing imports, and stale claims return review blockers. Reusing the same key reads or replays the outcome; a failed request is held for review before a new key is accepted. Ready means database agreement, not activation.

Inputs: agent_id (required), business_id (required), idempotency_key (required).

rollback_configRollback Agent ConfigurationA
DestructiveIdempotent
Inspect

Request a rollback to a saved version of the agent settings. It restores the version's greeting, voice, prompt (and the editable prompt copy, when the version saved one), model and call summary/scoring. Transfer settings, call length, tools and speech recognition stay as they are; the result lists what was and was not restored. When the business owner or an admin is signed in through this connector, the rollback applies immediately; otherwise the owner approves it from a review link. Targets are listed by list_config_versions. The rollback is itself saved as a new version, and secrets are never copied.

Inputs: agent_id (required), actor, reason, dry_run, +7 more. Returns: code, error, result, status, +9 more

run_evalRun Agent EvalA
Destructive
Inspect

Run a saved test scenario against one of the business's agents and grade the agent's replies: pass eval_id for one scenario, or agent_id for every scenario saved for that agent (see list_evals). The test is a simulated text conversation with the agent's current live configuration; no phone call is placed, no customer is contacted and the agent's configuration is not changed. Each run uses paid voice-agent provider capacity and is recorded with its result. Returns pass or fail per scenario with the grader's reasons.

Inputs: wait, eval_id, agent_id, max_wait_ms. Returns: error, total, failed, passed, +6 more

save_text_registration_detailsSave Text Registration DetailsA
DestructiveIdempotent
Inspect

Save a business's legal name, entity type, industry, website, address, authorized contact and what it will text (service only, or service and sales) for its own carrier registration. Business owner, or an admin of the business (such as the partner that created the workspace) preparing it for the owner. Each field holds an answer from the owner; anything omitted is filled from what is already on file (see get_text_registration known). Answers can be saved one at a time: answers given so far are kept, and while questions remain the result lists saved_steps, missing and next_question. The owner can finish here or on the registration page. Never takes the EIN: the owner types it on the registration page returned as setup_url. Each saved answer replaces the value on file for that field. Refused once a filing is already with the carriers. Charges nothing and files nothing.

Inputs: business_id (required), city, state, street, +12 more. Returns: error, saved, missing, success, +7 more

search_available_numbersSearch Available NumbersA
Read-only
Inspect

Search the carrier for phone numbers available to purchase (live number inventory). In the acquisition flow this follows set_owner_phone, which saves a reachable owner number or records a decline.

Inputs: limit, country, area_code, business_id. Returns: error, success, available_numbers

send_call_noteSend Call NoteAInspect

Send Kai a short note on a live call it is making for the person, to steer it: a detail to mention, a question to add, a preference. Kai uses it on its next turn without reading it out. It never overrides Kai's honesty and disclosure rules. Up to 10 notes a call.

Inputs: note (required), call_id (required). Returns: code, error, call_id, success, +1 more

send_lsa_replysend lsa replyA
DestructiveIdempotent
Inspect

Send an authorized text reply inside an existing Google LSA message lead through the Ads API. This contacts the customer. Requires current business admin role and a stable idempotency_key. A retry with the same key is deduplicated; pending/unknown writes are blocked. Provider acceptance does not prove customer delivery. Attachments are unsupported.

Inputs: lead_id (required), message (required), business_id (required), idempotency_key (required). Returns: error, success

send_messageSend MessageA
Destructive
Inspect

Send one message to a business's customer on the channel you choose: a text (sms) from one of the business's agent lines, or a WhatsApp message from its connected WhatsApp number. The same consent, Do-Not-Call, quiet-hours and rate gates as the dashboard apply, and a refusal says which one. sms needs from_agent_id; whatsapp needs a number the owner connected to WhatsApp (pass from when there is more than one) and a customer who messaged that number in the last 24 hours. Email is not sent here; draft_email_campaign drafts a campaign the owner reviews and approves. business_id is required when the account has more than one business. The result reports that the provider accepted the message, not that it was delivered.

Inputs: to (required), body (required), channel (required), from, +4 more. Returns: id, to, code, from, +6 more

send_smsSend SMSA
Destructive
Inspect

Send a text from an agent's phone line through the governed messaging API. Provide from_agent_id, to, and message. For the immediate confirmation a customer just requested on a booking form, add purpose: booking_confirmation, the form's actual sms_consent: true, and idempotency_key; this records service consent and allows the requested confirmation after hours. Booking alerts to this business's active admin phone use purpose: booking_alert and idempotency_key. Explicit opt-outs, content controls and rate limits remain enforced. Use dispatch_policy: queue_if_needed to defer ordinary messages outside their allowed window. Optionally link lead_id; it must belong to this business and match the recipient phone.

Inputs: to (required), message (required), from_agent_id (required), lead_id, +9 more. Returns: to, from, error, success, +1 more

set_billing_contactsSet Invoice Email RecipientsA
Idempotent
Inspect

Replace the extra addresses that get the monthly invoice email (at most 3; an empty list clears them). The business owner always keeps getting every invoice and cannot be removed. Requires the current owner role on the business.

Inputs: emails (required), business_id. Returns: error, success, business_id, extra_emails, +1 more

set_branded_caller_idSet Branded Caller IDA
Idempotent
Inspect

File the business name that landlines show when the business's number calls out (caller ID name). Included with the business's own text registration once it is paid; charges nothing. Business owner only. The name must be at most 15 characters, start with a letter, and use only letters, numbers, periods, commas and spaces (get_text_registration returns a suggestion in branded_caller_id.suggestedName). Files with the carriers once the business profile is approved; review then takes a day or two and carriers show it within 72 hours. US local numbers only. The result confirms the filing, not that the name is showing on calls.

Inputs: business_id (required), display_name (required). Returns: error, charged, success, branded_caller_id

set_business_hoursSet Business HoursA
DestructiveIdempotent
Inspect

Change the business's opening hours, timezone, or one-off closed dates ("we're closed Friday the 27th"). Same change as the dashboard's hours page, admin role required. Only the days you pass change; every other day keeps what it had. A day is { open: 'HH:MM', close: 'HH:MM' } in 24-hour time, or { closed: true }. closed_dates adds dates the business is shut; reopen_dates removes them. Call routing that follows business hours uses the new hours from the next call. Returns the saved week as read back.

Inputs: hours, timezone, business_id, closed_dates, +1 more. Returns: error, success, holidays, timezone, +3 more

set_call_disclosuresSet Call DisclosuresA
DestructiveIdempotent
Inspect

Change the recording notice or AI notice callers hear before the greeting, or when each plays. The next call uses the new wording. Requires the business owner. Turning a notice to never can break recording or AI-disclosure law for callers in states that require one; state_gated is the safe default. Every change is logged with the previous value.

Inputs: dry_run, business_id, ai_disclosure_mode, ai_disclosure_enabled, +4 more. Returns: error, dry_run, success, previous, +2 more

set_conversation_ownerSet Conversation OwnerA
Idempotent
Inspect

Set who answers a customer's text conversation. owner 'ai' (the default): Kai replies. 'human': Kai stays quiet and the business owner answers. 'external': Kai stays quiet and the business's own system answers; it receives the sms.received webhook and replies with send_message or POST /v1/messages. With external_reply_timeout_seconds (external only, 60 to 86400), Kai answers a message nothing replied to in that time. Messages are always stored and sms.received always fires. Pass conversation_id for one conversation, or phone for every conversation the business has with that customer. Re-sending the same owner changes nothing.

Inputs: owner (required), phone, business_id, conversation_id, +1 more. Returns: code, error, owner, success, +4 more

set_owner_phoneSet Owner PhoneA
DestructiveIdempotent
Inspect

Saves the owner's own mobile number on the business record (the number Kai texts whenever it takes a call for the owner) so Kai can ring it first and so activation/forwarding follow-ups can reach a human — connecting a number alone does not prove the owner can be reached. In the acquisition flow this step comes before search_available_numbers and buy_number (#2086). US numbers only; normalized to E.164 and rejected if it cannot be validated as a US mobile/landline number. When ring_first is true (default), also configures ring-first routing so calls hit this cell before overflowing to the secretary — the same path used at signup. declined=true, in place of owner_phone, records a caller who declines to give a number as an inquiry: a KaiCalls lead, with no provisioned business or number.

Inputs: declined, ring_first, business_id, owner_phone, +2 more. Returns: error, status, success, next_step, +5 more

set_scam_screeningSet Scam Call ScreeningA
DestructiveIdempotent
Inspect

Change how the business screens scam calls, or which numbers are never screened. mode: off, label (default; nothing is blocked) or screen (callers with a strong scam sign, such as a caller ID the carrier could not verify or a number already caught scamming, get a short screen that takes their name and reason instead of the normal line). Known customers and the team are never screened. allowlist replaces the whole list. Requires an admin of the business. The next call uses the change.

Inputs: mode, dry_run, allowlist, business_id. Returns: error, dry_run, success, previous, +2 more

set_up_businessCustomize Business LineA
Idempotent
Inspect

Optional line customization: sets the business name and greeting Kai answers with, as the owner requested. Not required to make calls, and never changes payment, usage or fraud limits. Extra business details are optional; no business-qualification questionnaire is needed. An existing business greeting is left unchanged.

Inputs: business_name (required), website, business_id, what_you_sell, +1 more. Returns: error, changed, success, business_id, +3 more

set_up_phone_systemSet Up Phone SystemA
DestructiveIdempotent
Inspect

Turn the business's number into a hosted phone system: Kai is installed as extension 700, the owner's mobile joins the list of phones to ring first, and calls reach Kai when nobody picks up. Idempotent and resumable — a re-run reuses everything already created and reports it under reused. Needs a complete US street address on file (the emergency-services and tax location) and the owner's mobile: when either is missing the tool fails with code missing_address or missing_owner_mobile plus required_field and next_action naming exactly what is missing, which business_address or owner_mobile accepts. Returns the status shape (existing setup IDs, extension and the phone-system line) and next_step, the owner's next action in one line (forward your line here / dial 700 from any office phone).

Inputs: persona, business_id, owner_mobile, business_address. Returns: ids, code, line, error, +11 more

set_webhookSet WebhookB
Destructive
Inspect

Create or update a business outbound webhook (URL + subscribed events). Returns a webhook secret on first creation only.

Inputs: webhook_url (required), id, events, preset, +7 more. Returns: error, events, message, success, +3 more

share_call_exampleShare Call ExampleA
Idempotent
Inspect

Owner only: publish a finished errand call as a redacted transcript example (no audio, business shown as a category). Call once for a preview, show it, then confirm with its preview_hash.

Inputs: call_id (required), title, errand, confirm, +3 more. Returns: code, error, preview, success, +3 more

start_own_caller_idStart Own Caller IDAInspect

Let Kai's outbound calls show a number the person already owns (their cell or an old main line) instead of a KaiCalls line, so people recognize who is calling. A verification call goes to that number and returns a code; the person answers and types the code on the keypad. Then get_own_caller_id confirms it. Ownership is proven only by that call. US and Canada numbers. Business owner only. Charges nothing. Callbacks to the shown number reach that phone, not Kai. use_by_default (default true) shows it on every call unless make_call asks for caller_id 'business_line'. Starting a new number replaces the old one.

Inputs: phone_number (required), business_id, use_by_default. Returns: error, charged, success, own_caller_id, +1 more

start_text_registration_checkoutStart Text Registration CheckoutAInspect

Create the payment link for a business's own carrier registration (a one-time filing fee plus a monthly campaign fee). Business owner only, and only once the details and the EIN are saved. An admin who prepared the details gets owner_required with owner_handoff_url: the page the owner opens to type the EIN, review and confirm. Returns checkout_url for the owner to open and pay; nothing is charged by this tool, and filing starts only after payment. A checkout_url means neither payment nor filing. On a plan that includes registration there is nothing to pay: the tool sends it to the carriers straight away and returns included_in_plan and filed true instead of a link, so that path requires confirm_submission true, which records that the owner reviewed and confirmed the saved details and external submission. Submission is not carrier approval. The tool takes no EIN, document contents, credentials or legal attestations.

Inputs: business_id (required), confirm_submission (required). Returns: error, filed, charged, success, +4 more

submit_text_registrationText Registration Submission AvailabilityA
Destructive
Inspect

Reserved submission contract; execution is currently unavailable and returns submission_unavailable without filing. Shared durable reservation and unknown-outcome reconciliation across dashboard, checkout and cron are prerequisites. Preparation and status are handled by get_text_registration and save_text_registration_details. Saving corrected details does not resubmit existing rejected provider objects: operator reconciliation is required. Another entry point or a new paid registration would duplicate the filing. It accepts no tax identifiers, credentials, file contents or legal attestations. Owner membership and billing:write required.

Inputs: business_id (required), confirm_submission (required), expected_updated_at (required). Returns: error, success, prerequisite, submission_attempted

sync_lsasync lsaA
Destructive
Inspect

Sync an explicitly selected connected LSA advertiser. Requires current business admin role. Syncing runs lead ingestion, and existing business speed-to-lead configuration may contact the new leads it finds.

Inputs: business_id (required), connection_id (required). Returns: error, success

unshare_call_exampleUnshare Call ExampleB
DestructiveIdempotent
Inspect

Owner only: take a shared call example down.

Inputs: call_id (required). Returns: code, error, success, unshared, +1 more

update_agent_configUpdate Agent ConfigurationA
DestructiveIdempotent
Inspect

Edit an agent's live runtime configuration — greeting/first message, inbound or SMS prompt, the after-call summary and lead-score instructions, voice, language model, max call duration, and call-transfer settings — routed through the governed update broker so every change keeps the consent + audit trail (a versioned config snapshot and change history). Read get_agent_config first; inbound_prompt replaces the whole prompt. Each applied change is saved as a version (list_config_versions); rollback_config can restore a version's greeting, voice, prompt, model and summary/scoring, but not transfer settings or call length. Mutating changes need an idempotency_key. When the business owner or an admin is signed in through this connector, their own changes apply immediately. High-impact live changes made with an API key or on someone else's behalf queue for the owner's review instead (the owner is notified with a review link). configure_agent_business_rules edits a single named operational-rules section.

Inputs: agent_id (required), name, actor, model, +18 more. Returns: code, error, result, status, +8 more

update_phone_flowUpdate Phone FlowA
DestructiveIdempotent
Inspect

Replace how calls ring on the business's hosted phone system with a full phone flow: { version: 1, hours: { mode: 'always' | 'business_hours', afterHours: 'kai' }, ring: { members: [{ kind: 'cell', phone: E.164, label, requirePressOne } | { kind: 'desk_phone' | 'user', userId, label }], timeoutSeconds: 5-120 }, overflow: 'kai' }. Applied idempotently (only real differences are written); every member passes the forwarding-loop guard; business_hours mode derives the schedule from the business hours already on file. Because it replaces the whole flow, the input is the full flow as get_phone_flow returns it, with changes applied.

Inputs: flow (required), business_id. Returns: flow, error, changes, success, +1 more

upsert_knowledgeCreate or Update Agent KnowledgeA
Destructive
Inspect

Create a new agent knowledge base entry, or update one when id is provided. Creating requires title, content, and content_type.

Inputs: id, tags, title, content, +3 more. Returns: error, success, knowledge

upsert_leadCreate or Update LeadA
Destructive
Inspect

Create a new lead or update existing leads for the authenticated business, routed through the governed leads API (business access-checked, usage-logged, and audited). To create one, pass lead with at least one of name/phone/email plus optional status/source/notes/agent_id/etc. To update, pass updates: an array of { id, ...fields } for one or many existing leads (status, name, phone, email, notes, address, city, state, zip). Updates are access-checked per row and report partial success.

Inputs: lead, updates, business_id. Returns: lead, error, failed, results, +3 more

upsert_productCreate or Update Agent ProductA
Destructive
Inspect

Create a new product row, or update one when id is provided. Creating requires name and business_id. Pass quantity to set/update inventory.

Inputs: id, sku, name, price, +5 more. Returns: error, product, success

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to place phone calls for reservations, appointments, confirmations, and inquiries through a self-hosted MCP server, with language support and learning capabilities.
      60 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      A hosted MCP server that enables AI agents to place real phone calls from a verified caller ID, with async call management and built-in safety controls.
      56 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      An MCP server that gives AI agents hands to make phone calls, send messages, and handle CRM/task workflows. It runs with a simulated provider for zero-cost testing and can switch to real providers like Twilio and ElevenLabs.
      MIT
    Try in Browser

    Glama MCP Gateway

    Add one secure layer between your agents and this server.