MCP server

The CRM yourAI agents run on.

Connect Claude, ChatGPT, Cursor or your own agents to Orbit. They can read and update contacts, companies and deals, book meetings, run sequences and set up the CRM itself, with 116 tools scoped to the team and permissions you approve.

Book a demo
OAuth sign-in · No API keys to paste · Included on every plan

Your MCP server URL

https://orbitforms.ai/api/mcp

How it works

Connected in three steps.

Works with the AI assistants and coding agents you already use, and with any agent that speaks MCP over HTTP.

  1. 01
    Add the server

    Paste one URL into your assistant or agent. There are no API keys: it discovers OAuth and registers itself.

  2. 02
    Approve access

    Sign in to Orbit, pick the team, and choose exactly what the agent may read and write.

  3. 03
    Ask in plain words

    Build the CRM, work the pipeline, book meetings and follow up, from the chat you already use.

ClaudeChatGPTClaude CodeCursorVS CodeGemini CLIWindsurf
Orbit

No more weeks of setup

Set up and migrate your whole CRM in one conversation.

Building a CRM used to mean days of clicking through settings, then weeks of mapping CSV columns and fixing what didn’t import. Tell your agent how you sell and what you’re moving from. It builds the structure, imports the records and shows you what it did.

  • Shaped to how you sell

    Pipelines, stages, win probabilities, custom fields, lost reasons and saved views.

  • Everything comes with you

    Exports from HubSpot, Salesforce, Pipedrive or a spreadsheet: companies, contacts, deals, notes and tasks.

  • Change it in a sentence

    Add a field, split a stage or retag a segment whenever you need to.

Setup and migration guide
Claude· Orbit connected

We sell annual contracts: SDRs book demos, AEs close. Set Orbit up for that, then bring over everything in hubspot-export.csv.

  1. get_crm_schemaRead the current fields, pipelines and settings
  2. create_pipelineNew business: Demo booked, Discovery, Proposal, Negotiation, Won, Lost
  3. create_crm_fieldContract value, Renewal date, Seats and Lead source on deals
  4. update_crm_settingsRequire a lost reason, flag deals stale after 14 days
  5. create_company · create_contact · create_dealAccounts, people and open deals, linked together
  6. create_note · create_taskCall history and next steps carried over

Done. Your pipeline is live with every open deal in its stage. 12 rows had no email address, so I listed them for you to check.

What you can do

Ask an assistant. Or build your own agent.

Orbit is the system of record your AI SDR, enrichment job or coding agent reads from and writes back to, so nothing it learns lives in a side spreadsheet.

With an AI assistant

Claude, ChatGPT

  • Work the pipeline
    “Which deals over $20k haven’t moved in two weeks? Create a follow-up task for each owner.”
  • Prep for every call
    “Brief me on today’s meetings: who’s coming, their company, open deals and our notes.”
  • Book the meeting
    “Find a 30-minute slot with Marcus on Thursday and book it with priya@lumenstudio.example.”
  • Follow up at scale
    “Enroll everyone tagged webinar-oct in the post-webinar sequence.”
  • Keep the data clean
    “Mark every contact at acme.com as qualified and tag them Customer.”

With your own agents

Claude Code, Cursor, VS Code, Gemini CLI, Windsurf

  • Qualify every inbound lead
    “For each new submission, score it against our ICP, tag it, and open a deal for the good ones.”
  • Enrich accounts
    “Research each new company and fill in its industry, headcount and location.”
  • Run the migration
    “Read pipedrive-deals.csv, map the columns to our deal fields and import every open deal.”
  • Log the outcome
    “After each call, add a note to the deal and move it to the next stage.”
  • Wire Orbit into your product
    “Create a webhook for new form submissions and handle it in our Next.js API.”

Guides

Connect your assistant.

No API key needed. You sign in from your assistant and approve the permissions.

Connect Claude

  1. 1Open Customize, then Connectors, and search for OrbitForms in the directory.
  2. 2Not listed for you? Choose Add custom connector and paste the server URL.
  3. 3Sign in to Orbit when Claude asks, pick the team and approve the permissions.
https://orbitforms.ai/api/mcp/claude

Connect ChatGPT

  1. 1Open the plugin directory and search for OrbitForms, then choose Install.
  2. 2Not listed for you? Open chatgpt.com/plugins, choose Add custom MCP server, paste the URL and pick OAuth.
  3. 3Approve access on the Orbit consent screen.
https://orbitforms.ai/api/mcp

Connect Claude Code

  1. 1Run the command in your terminal.
  2. 2Open a session, run /mcp and choose Authenticate.
  3. 3Ask it to set up your pipeline, import a CSV or wire Orbit into your app.
claude mcp add --transport http orbit https://orbitforms.ai/api/mcp

Connect Cursor

  1. 1Open Cursor Settings, then MCP.
  2. 2Add a new server with the URL (type: http).
  3. 3Click the server to sign in and approve.
https://orbitforms.ai/api/mcp

Connect VS Code

  1. 1Open the Command Palette and run MCP: Add Server.
  2. 2Pick HTTP and paste the server URL.
  3. 3Start the server from the MCP view and sign in.
https://orbitforms.ai/api/mcp

Connect Gemini CLI

  1. 1Run the command in your terminal.
  2. 2Run /mcp auth orbit to sign in.
  3. 3Ask about a deal, a contact or this week’s meetings.
gemini mcp add --transport http orbit https://orbitforms.ai/api/mcp

Connect Windsurf

  1. 1Open Settings, then Cascade, then MCP servers.
  2. 2Add a server with the URL.
  3. 3Approve the connection in the browser.
https://orbitforms.ai/api/mcp

Security

Agents with guardrails. You stay in control.

Connected apps OAuth + PKCE
Claude Token refreshes on its ownRevoke
ChatGPT Token refreshes on its ownRevoke
Registered itself · no client ID or secret to copy

OAuth, not pasted keys

Assistants sign in through OAuth with PKCE and register themselves. Tokens refresh on their own and can be revoked at any time.

Allow Claude access toBrightloop
ContactsReadWrite
DealsReadWrite
TasksReadWrite
create_dealneeds Deals write · asks again

One team, your permissions

Every connection is limited to the team you pick and the permissions you approve on the consent screen.

Hosted assistant scopes Fixed
contacts:writedeals:writetasks:writenotes:writecrm:write
Delete contacts, companies, dealsNever
Delete forms or sequencesNever
Team members and billingNever
Same rate limits as the REST API

No delete scopes, ever

Hosted assistants never hold a delete scope, so they cannot delete contacts, companies, deals, forms or sequences, or manage team members and billing.

ToolsRead · Write · Outbound
list_dealsRead
update_contactWrite
enroll_contacts_in_sequenceOutbound
book_meetingOutbound
create_webhookOutbound
Outbound = email, invites and webhooks · asks first

Every tool is labeled

Each tool says whether it only reads, changes your Orbit data, or reaches outside Orbit, so assistants ask before sending email or booking.

Tools

All 116 tools.

Read tools only look. Write tools change your Orbit data. Outbound tools also email someone, send a calendar invite or post to a URL, so assistants ask before running them.

CRM setup

6 tools
  • Get CRM Schemaget_crm_schema

    Describe the team's whole CRM in one call: standard and custom fields for contacts, companies, deals, tasks and notes; pipelines with their stages and visibility; contact, company, deal and task settings with what each setting does; tags; team members (IDs and names for owners and assignees); and member groups (teams). Start here before configuring or writing CRM data.

    Read
  • Update CRM Settingsupdate_crm_settings

    Change settings for one object. contact: auto_link_company_by_domain. company: auto_create_from_contacts. deal: default_currency, lost_reasons, require_lost_reason, stale_after_days. task: default_due_days, default_assignee (creator, record_owner, none). Only the keys you pass change; unknown keys are rejected.

    Write
  • List Custom Fieldslist_crm_fields

    List the custom field definitions for contacts, companies or deals: field_name, label, type, options (for select fields) and description.

    Read
  • Create Custom Fieldcreate_crm_field

    Add a custom field to contacts, companies or deals. field_name defaults to a snake_case version of the label. Types: string, number, boolean, date, url; companies and deals also support select (pass options). The name and type cannot change later.

    Write
  • Update Custom Fieldupdate_crm_field

    Change a custom field's label, description, or the options of a select field. The field_name and type stay the same.

    Write
  • Delete Custom Fielddelete_crm_field

    Remove a custom field definition. Values already stored on records are kept (re-creating the field brings them back). Contact fields used by active workflows cannot be deleted.

    Write

Pipelines

10 tools
  • List Pipelineslist_pipelines

    List deal pipelines with their ordered stages (name, type open/won/lost, win probability, color) and visibility. One pipeline is the default.

    Read
  • Create Pipelinecreate_pipeline

    Create a deal pipeline. Pass stages in order (each with name, and optionally kind open/won/lost, probability 0-100, color); without stages a seven-stage starter set is created (Lead, Qualified, Meeting booked, Proposal, Negotiation, Won, Lost). Include at least one won and one lost stage so deals can close. Stage IDs are in the response and in list_pipelines. A team can have at most 50 pipelines.

    Write
  • Update Pipelineupdate_pipeline

    Rename a pipeline, change its position in the list, or make it the default (is_default: true).

    Write
  • Delete Pipelinedelete_pipeline

    Delete a pipeline and its stages. Refused while the pipeline has deals, or if it is the team’s only pipeline.

    Write
  • Add Pipeline Stagecreate_pipeline_stage

    Add a stage to a pipeline. Without position it goes before the won / lost stages.

    Write
  • Update Pipeline Stageupdate_pipeline_stage

    Change a stage's name, type (open/won/lost), win probability or color. Changing the type updates the status of deals already in the stage, so it needs deals:write as well as crm:write.

    Write
  • Delete Pipeline Stagedelete_pipeline_stage

    Delete a stage. If deals are in it, pass move_deals_to with another stage in the same pipeline and they move first; moving them needs deals:write as well as crm:write.

    Write
  • Reorder Pipeline Stagesreorder_pipeline_stages

    Set the order of a pipeline's stages. Pass every stage ID in the new order.

    Write
  • Get Pipeline Accessget_pipeline_access

    Show who can see a pipeline: visibility (everyone or restricted) and, when restricted, the user IDs and team (member group) IDs granted access. Workspace admins and the owner always see every pipeline. Pipeline IDs come from list_pipelines.

    Read
  • Set Pipeline Accessset_pipeline_access

    Set who can see a pipeline, its stages and its deals. visibility everyone opens it to the whole workspace; restricted limits it to the listed user IDs and team (member group) IDs, replacing any earlier list, and an empty list hides it from everyone except workspace admins and the owner. Only workspace admins can change this. Pipeline IDs come from list_pipelines, group IDs from list_member_groups, user IDs from get_crm_schema.

    Write

Saved views

4 tools
  • List Contact Viewslist_contact_views

    List saved views of the Contacts table: columns, pinned columns, AND/OR filter groups and sort.

    Read
  • Create Contact Viewcreate_contact_view

    Save a view of the Contacts table for the team. config: { columns: [column keys], pinned: [column keys], filters: [{ filters: [{ id, field, operator, value }], innerConjunction: "and"|"or", conjunction: "and"|"or" }], sort: { key, direction } }. Column keys: name, email, phone, company, job_title, qualification_status, status, owner, tags, submissions, forms, meetings, first_meeting, first_seen, last_activity, last_call, last_call_outcome, call_attempts, do_not_call, or cf: followed by a custom field_name (e.g. cf:industry). Filter fields: name, email, phone, company, jobTitle (text: contains, equals, not_equals, starts_with, ends_with, is_empty, is_not_empty); qualificationStatus (select: equals, not_equals, is_empty, is_not_empty; values qualified, unqualified, pending); lastCallOutcome (select: equals, not_equals, is_empty, is_not_empty; values no_answer, busy, failed, canceled, voicemail, voicemail_dropped, voicemail_left, connected, interested, not_interested, callback, meeting_booked, wrong_number, do_not_call); doNotCall (boolean: equals with value true or false, is_empty, is_not_empty); tag (tags: equals, not_equals, contains, is_empty, is_not_empty; value is a tag slug); submissionCount, formCount, meetingCount, callAttempts (number: equals, not_equals, greater_than, less_than, is_empty, is_not_empty); firstMeetingAt, firstSubmission, lastSubmission, lastCallAt (date YYYY-MM-DD: greater_than, less_than, equals, is_empty, is_not_empty); cf: followed by a custom field_name, with the operators of that field type. Unknown fields or operators are rejected. A team can have at most 200 saved views.

    Write
  • Update Contact Viewupdate_contact_view

    Rename a saved view, replace its config (same shape and filter vocabulary as create_contact_view), or change its position.

    Write
  • Delete Contact Viewdelete_contact_view

    Delete a saved contact view. Contacts are not affected.

    Write

Contacts

12 tools
  • List Contactslist_contacts

    List contacts for the team. Supports pagination, status filtering, free-text search (email, name, company), and filtering by tag slug. Returns contacts with their tags.

    Read
  • Get Contactget_contact

    Get a single contact by ID, including its tags, custom fields, and engagement counts.

    Read
  • Create Contactcreate_contact

    Create a new contact. Email is required and must be unique within the team. Returns 409 if a contact with the email already exists.

    Write
  • Update Contactupdate_contact

    Update fields on an existing contact (name, phone, company, job title, email, status, qualification status, owner, linked company, custom fields). Only provided fields are changed; custom_fields merges into the stored values and null removes one.

    Write
  • List Contact Tagslist_contact_tags

    List all contact tags for the team (name, slug, color, description).

    Read
  • Create Contact Tagcreate_contact_tag

    Create a new contact tag. Slug is derived from the name if not provided.

    Write
  • Add Tag to Contactadd_contact_tag

    Assign an existing tag to a contact, identified by tag_id or tag_slug.

    Write
  • Remove Tag from Contactremove_contact_tag

    Remove a tag from a contact, identified by tag_id or tag_slug.

    Write
  • Import Contactsimport_contacts

    Import a list of contacts in one call (1 to 1000 rows; 200 or fewer per call keeps responses quick). Each row needs an email. A row whose email already exists in the team follows duplicate_mode: fill_empty (default) only fills blank fields, overwrite replaces values, skip leaves the contact as is. Rows with a problem are reported in errors and left out; the rest are imported. Owners come from owner_user_id or owner_email (team members from get_crm_schema), tags are created when missing, and companies are linked (and created when missing) following link_companies. custom_fields keys must be defined contact fields unless create_missing_fields is true, which also needs the crm:write scope when it creates fields. A workflow runs only when workflow_id is passed; that needs the workflows:write scope, and the workflow must be active with a Contact added or form trigger. Its runs can send email to the imported contacts. Returns the import ID (see get_contact_import) with created, updated, unchanged, skipped and error counts; a failed call that already saved rows also returns import_id.

    Outbound
  • List Contact Importslist_contact_imports

    List contact imports, newest first, with status (processing, completed, failed, undoing, undone), duplicate mode, row counts (total, created, updated, unchanged, skipped, errors), workflow runs started, who started it and when it finished or was undone.

    Read
  • Get Contact Importget_contact_import

    Get one contact import by ID (from import_contacts or list_contact_imports): its counts and status plus the row-level errors (row number and message) and the tag it applied.

    Read
  • Merge Contactsmerge_contacts

    Merge two contacts (IDs from list_contacts). The primary contact survives and receives the secondary contact’s tags, notes, tasks, deals, meetings, bookings, sequence enrollments, sent emails and calls; where both are enrolled in the same sequence the secondary’s enrollment is stopped. The secondary contact is archived and cannot be merged again, and an archived contact cannot be the primary. For each field the primary’s value is kept and the secondary’s fills gaps, unless values names the winner (null clears a field). Returns the merged primary contact.

    Write

Companies

4 tools
  • List Companieslist_companies

    List companies. Filter by search (name or domain), exact domain, or owner.

    Read
  • Get Companyget_company

    Get a company with its custom fields, number of linked contacts and open deal value.

    Read
  • Create Companycreate_company

    Create a company. The domain (e.g. acme.com) is unique per team and lets contacts with matching emails be linked automatically.

    Write
  • Update Companyupdate_company

    Update a company. Only fields you pass change; null clears a field. custom_fields merges into existing values.

    Write

Deals

8 tools
  • List Dealslist_deals

    List deals with their company and contacts. Filter by pipeline, stage, status (open, won, lost), owner, company, contact or name search.

    Read
  • Get Dealget_deal

    Get a deal with its stage, status, amount, company, contacts and custom fields.

    Read
  • Create Dealcreate_deal

    Create a deal. With only stage_id, that stage's pipeline is used; without either, the default pipeline's first stage. Currency defaults to the team's deal setting. Link contacts with contact_ids. When the team requires a lost reason, pass lost_reason to create a deal in a lost stage.

    Write
  • Update Dealupdate_deal

    Update a deal. Set stage_id to move it (its status follows the stage type, and "Deal Stage Changed" workflows run). Moving to another pipeline needs both pipeline_id and stage_id. If the team requires a lost reason, include lost_reason when moving to a lost stage.

    Write
  • Add Contact to Dealadd_deal_contact

    Link a contact to a deal. With is_primary true it becomes the primary contact and the previous primary contact loses that role. Adding a contact that is already linked keeps its role.

    Write
  • Remove Contact from Dealremove_deal_contact

    Unlink a contact from a deal. The contact itself is not changed.

    Write
  • Get Deal Stage Historyget_deal_history

    List a deal's stage changes, newest first: the stage it left (null for its creation), the stage it entered, who moved it (the credential's owner for API moves; null for workflow and import moves) and when. Deal IDs come from list_deals.

    Read
  • Get Pipeline Summaryget_pipeline_summary

    Summarize a pipeline's deals: per stage the deal count, total amount and amount weighted by win probability; totals for open, won and lost deals; and how many open deals are stale under the team's stale_after_days setting. Without pipeline_id the default pipeline is used. Counts up to 10,000 deals; meta.truncated says when there were more.

    Read

Tasks

4 tools
  • List Taskslist_tasks

    List tasks, soonest due first. Filter by status (open, done), assignee, linked contact / company / deal, or due date range.

    Read
  • Create Taskcreate_task

    Create a task, optionally linked to a contact, company and/or deal. due_at and the assignee default from the team's task settings when left out.

    Write
  • Update Taskupdate_task

    Update a task. Set status to "done" to complete it or "open" to reopen it.

    Write
  • Delete Taskdelete_task

    Delete a task permanently. Linked records are not changed.

    Write

Notes

4 tools
  • List Noteslist_notes

    List notes on one contact, company or deal (pass exactly one ID). Pinned notes come first.

    Read
  • Create Notecreate_note

    Add a note to exactly one contact, company or deal.

    Write
  • Update Noteupdate_note

    Edit a note's text or pin / unpin it.

    Write
  • Delete Notedelete_note

    Delete a note permanently from its contact, company or deal.

    Write

Team

5 tools
  • List Teamslist_member_groups

    List the teams (member groups) inside the workspace: each with its ID, name and members (user IDs and names). Group IDs are used by set_pipeline_access; user IDs match team_members in get_crm_schema.

    Read
  • Create Teamcreate_member_group

    Create a team (member group) of workspace members, optionally with its first members. user_ids come from team_members in get_crm_schema; people outside the workspace are rejected. Workspace admins only; a workspace can have up to 100 teams.

    Write
  • Rename Teamupdate_member_group

    Rename a team (member group). group_id comes from list_member_groups. Workspace admins only.

    Write
  • Delete Teamdelete_member_group

    Delete a team (member group). Its members stay in the workspace; a pipeline restricted to it stays restricted to its other teams and people. Workspace admins only.

    Write
  • Set Team Membersset_member_group_members

    Replace the members of a team (member group) with the given user IDs: people not listed are removed, new ones added. user_ids come from team_members in get_crm_schema; people outside the workspace are rejected. Workspace admins only.

    Write

Workflows

13 tools
  • Get Workflow Schemaget_workflow_schema

    Describe how to build a workflow: every trigger and node type with its provider, the config fields each needs, the outputs it exposes to later nodes, plan requirements, and the graph rules. Read this before create_workflow.

    Read
  • List Workflowslist_workflows

    List workflows with status (draft, active, paused), trigger, node and run counts, queued submissions and whether unpublished changes exist. Filter by status or name.

    Read
  • Get Workflowget_workflow

    Get a workflow with its trigger config, nodes (type, provider, config; credentials such as webhook headers are shown as [REDACTED]) and edges, its status, and whether it has unpublished changes. Use the returned updated_at as expected_updated_at when updating.

    Read
  • Create Workflowcreate_workflow

    Create a workflow as a draft, optionally with its whole graph: nodes referenced by a key of your choosing and edges joining them (send edges whenever you send nodes). One trigger node, connected to at least one action node (automation, destination, agent, ai, enrichment). Activate it afterwards with activate_workflow. Node types and config come from get_workflow_schema; form, pipeline, stage and user IDs from the other list tools. Nodes that write CRM data need the matching write scope (contacts, deals, tasks, notes) and nodes that send lead data out of Orbit need contacts:read. Values shown as [REDACTED] by get_workflow cannot be copied into a new workflow: send the real value.

    Write
  • Update Workflowupdate_workflow

    Rename a workflow, change its description or trigger config, or replace its nodes and edges (the whole graph is replaced, so nodes and edges are sent together; node IDs that stay keep their history, and credentials shown as [REDACTED] by get_workflow keep their stored value when sent back exactly as read in a node whose ID, type, provider and URLs are unchanged; otherwise send the real value, as a save that would store [REDACTED] (a re-pointed node, an edited redacted URL) is refused with the node and field named). Graph changes are saved as a draft until activate_workflow is called again. Pass expected_updated_at from get_workflow to refuse the save if someone changed it meanwhile.

    Write
  • Activate Workflowactivate_workflow

    Validate and publish a workflow so it runs on its trigger. A draft becomes active; a paused workflow resumes (process_queue says what happens to submissions queued while it was paused: all, skip or none); an active workflow with unpublished changes publishes them. Returns the validation problems when the graph is not ready.

    Write
  • Pause Workflowpause_workflow

    Pause an active (published) workflow so new trigger events stop starting runs. Runs already in progress finish. Activate it again with activate_workflow. A draft that was never activated cannot be paused.

    Write
  • Run Workflowrun_workflow

    Run an active workflow now. With contact_ids, each contact becomes a run (the trigger must be Contact Added or Form Submission); the same contact_ids with the same idempotency_key never run twice (already_started counts them). With trigger_data, the workflow runs once with that data; every call starts a new run, and the response carries a trigger_key to find it with list_workflow_runs. Runs execute in the background and can send email, call integrations and change CRM data.

    Outbound
  • List Workflow Runslist_workflow_runs

    List a workflow's runs, newest first, with status (running, completed, failed, cancelled), trigger data and error. Use get_workflow_run for the per-node steps.

    Read
  • Get Workflow Runget_workflow_run

    Get one workflow run with every node step: status, input, output, error and timing. Run IDs come from list_workflow_runs or run_workflow.

    Read
  • List Agent Templateslist_agent_templates

    List AI agent templates (the instructions (system_prompt), qualification criteria and model an agent node runs with): the team's own plus shared ones. Template IDs go in an agent node's config.

    Read
  • Create Agent Templatecreate_agent_template

    Create an AI agent template with a instructions (system_prompt), qualification criteria (an object of your own shape) and a model. Use it from an agent node via its template ID.

    Write
  • Update Agent Templateupdate_agent_template

    Change an agent template's name, description, instructions (system_prompt), criteria or model. Only fields you pass change. Shared templates owned by other teams cannot be changed.

    Write

Forms & submissions

3 tools
  • List Formslist_forms

    List forms for the team with pagination and optional status filtering.

    Read
  • Get Formget_form

    Get a single form by ID, including its configuration and settings.

    Read
  • List Form Submissionslist_form_submissions

    List submissions for a form. Supports pagination, date-range filtering (since/until ISO dates), and status filtering (completed, partial).

    Read

Scheduling & meetings

9 tools
  • List Meetingslist_meetings

    List meetings for the team. Filter by status, start-time range (since/until ISO dates), or scheduling page.

    Read
  • Get Meetingget_meeting

    Get a single meeting by ID, including attendee, timing, and status details.

    Read
  • Update Meetingupdate_meeting

    Update a meeting: change its status (e.g. cancel, mark completed or no-show) and/or set internal notes. Cancelling notifies the attendee and updates the host’s connected calendar.

    Outbound
  • List Scheduling Pageslist_scheduling_pages

    List scheduling (booking) pages for the team, with optional status filtering.

    Read
  • Get Scheduling Pageget_scheduling_page

    Get a scheduling page by ID, including its event types.

    Read
  • List Event Typeslist_event_types

    List event types (meeting durations/locations) configured on a scheduling page.

    Read
  • List Availability Scheduleslist_availability_schedules

    List availability schedules (working hours and timezones) for the team, optionally filtered by user.

    Read
  • Get Available Slotsget_available_slots

    Get bookable time slots for a host on a given date — working hours intersected with their connected calendar free/busy. Pass event_type_id (from list_event_types) so duration, buffers, minimum notice, and round-robin/group rules apply. Requires the team to have a published scheduling page. Returns { available_slots: [{ start, end }] } in UTC ISO 8601.

    Read
  • Book Meetingbook_meeting

    Book a meeting on a host’s calendar. Find the scheduling page and event type first (list_scheduling_pages, list_event_types), then use get_available_slots and pass one of its returned slots as start/end — booking a taken or invalid slot returns 409. Creates the meeting, sends calendar invites to the host and attendee, and triggers configured workflows.

    Outbound

Sequences

8 tools
  • List Sequenceslist_sequences

    List email sequences for the team, with optional status filtering.

    Read
  • Get Sequenceget_sequence

    Get a sequence by ID, including its steps.

    Read
  • List Sequence Stepslist_sequence_steps

    List the steps of a sequence in order (emails, delays, conditions).

    Read
  • Get Sequence Analyticsget_sequence_analytics

    Get performance analytics for a sequence (sends, opens, clicks, replies, unsubscribes).

    Read
  • List Sequence Enrollmentslist_sequence_enrollments

    List contacts enrolled in a sequence, with optional enrollment-status filtering.

    Read
  • Enroll Contacts in Sequenceenroll_contacts_in_sequence

    Enroll one or more contacts (by contact ID, max 100) into a sequence so they start receiving its emails on the sequence schedule. Contacts already enrolled are skipped.

    Outbound
  • List Sequence Unsubscribeslist_sequence_unsubscribes

    List emails unsubscribed from sequences, with optional email search.

    Read
  • Add Sequence Unsubscribesadd_sequence_unsubscribes

    Add emails (max 100) to the sequence unsubscribe list, either for all sequences or a specific one. Active enrollments for those emails stop sending.

    Write

Dialer

24 tools
  • Get Dialer Settingsget_dialer_settings

    Read the team's power dialer settings (defaults when none are saved). caller_id: The workspace's default outbound number, used by anyone without a number of their own. Must be one of the phone numbers the workspace owns (list_phone_numbers; numbers are bought in Settings → Dialer). Admins only. ring_timeout_seconds (5-60): Seconds to let a number ring before treating it as no answer and moving on. auto_advance_delay_seconds (0-60): Seconds between one call ending and the next contact being dialed. wrap_up_seconds (0-300): After a conversation, seconds the outcome picker waits before saving "connected" and moving on. 0 waits for the person. voicemail_mode (live, drop, hangup): When a call reaches voicemail: live (the person hears it and decides), drop (play their default pre-recorded greeting after the beep, then move on) or hangup (hang up as soon as a machine is detected, then move on). machine_detection (true/false): Detect answering machines. Required for the drop and hangup voicemail modes and for transcribe_calls; when off, every answered call is treated as a person. record_calls (true/false): Record calls from the moment they are answered (dual channel). Recordings are listed on each call. recording_announcement (true/false): Play a short notice to the called party when they answer ('This call may be recorded for quality and training purposes') before connecting them. Only plays when record_calls is on. Helps with all-party-consent recording laws; it does not replace your own consent obligations. skip_recently_called_hours (0-720): Leave contacts called within this many hours out of new sessions. 0 never skips. max_attempts_per_contact (1-50 or null): Leave contacts with at least this many finished calls out of new sessions. Null means no limit. default_country: ISO 3166-1 alpha-2 country (e.g. US, GB) assumed for phone numbers stored without a country code. transcribe_calls (true/false): Transcribe recorded conversations (speaker-labelled) once the call ends. Needs record_calls and machine_detection (answering-machine detection is what keeps voicemail out of transcripts). Voicemail and unanswered calls are never transcribed. ai_call_feedback (true/false): After each transcribed conversation, have the AI coach write feedback for the rep: summary, what went well, what to improve, objections and next steps. Needs transcribe_calls. Each feedback uses one of the workspace's AI credits; calls are skipped, not failed, when no credits are left. ai_feedback_focus (text up to 2,000 characters, or null): Optional instructions for the AI coach: your sales methodology, products, what to look for. Up to 2,000 characters; null clears it. The AI cannot place calls: a person dials from the Dialer page using these settings.

    Read
  • Update Dialer Settingsupdate_dialer_settings

    Change one or more dialer settings; only the keys passed change and unknown keys are rejected. caller_id is the workspace's DEFAULT outbound number, used by anyone without a number assigned to them (assign_phone_number): admin-only, must be one of the numbers from list_phone_numbers, null clears it. voicemail_mode drop and hangup need machine_detection on. transcribe_calls needs record_calls and machine_detection on, and ai_call_feedback needs transcribe_calls on: turning a parent off is refused until its dependents are turned off in the same call. recording_announcement tells the called party the call may be recorded before connecting them (only when record_calls is on). ai_feedback_focus is free text (up to 2,000 characters) that steers the AI coach: methodology, products, what to look for; null clears it. This configures how a person dials; the AI cannot place calls, start a session or buy numbers.

    Write
  • List Caller IDslist_caller_ids

    The values caller_id in update_dialer_settings accepts: the workspace's own phone numbers in caller-ID form (phone_number, friendly_name, kind). Same numbers as list_phone_numbers, which also shows assignments, types and prices. Returns 503 when calling is not configured on this Orbit instance.

    Read
  • List Phone Numberslist_phone_numbers

    List the phone numbers the workspace owns, oldest first: phone_number, number_type (local or toll_free), friendly_name, country, capabilities, monthly_price_cents, status and assigned_user_id, plus a members map (user ID to name and email) for the assignees. The Dialer is part of every plan; the workspace rents its numbers and pays for usage (numbers $5/month (local) or $10/month (toll-free), and $0.02 per outbound minute), all on a separate Orbit Dialer subscription next to the plan. Numbers are bought and released by an admin in Settings → Dialer (dashboard only). Each rep's calls go out on the number assigned to them; reps without one use the workspace default (caller_id in get_dialer_settings), else the oldest number. The AI cannot buy, release or dial.

    Read
  • Assign Phone Numberassign_phone_number

    Assign one of the workspace's phone numbers to a team member (their calls then show that number), take it back with user_id null, and optionally relabel it with friendly_name. One number per person: 409 when they already hold one (unassign that first). Admins only. Number IDs come from list_phone_numbers, user IDs from team_members in get_crm_schema. Nothing is bought, released or dialed.

    Write
  • Get Calling Costsget_calling_costs

    What the workspace pays for calling, in cents. The Dialer is part of every plan; the workspace rents its numbers and pays for usage: active numbers by type (local, toll_free) and their monthly_cents; billable outbound minutes so far this calendar month and their cost (minutes and cents already reported for billing, pending_minutes and pending_cents not yet reported); transcript_minutes (minutes, cents, per_minute_cents, pending_minutes, pending_cents) transcribed so far this month; the list prices (numbers $5/month (local) or $10/month (toll-free), and $0.02 per outbound minute; prices.transcript_minutes_cents: $0.05 per transcribed minute (conversations only, when transcribe_calls is on)); feedback (calls the AI coach wrote feedback for this month, the AI credits they used and per_call_credits; feedback draws on the plan's AI credits, one per call); monthly_total_cents (numbers only; metered minutes and transcript minutes excluded); subscription (the separate Orbit Dialer subscription that carries the numbers and usage next to the plan: status none, active, canceling or past_due, cancel_at, current_period_end); and terms (the Dialer terms at /dialer-terms: version, accepted_version, accepted_at, accepted_by and current, whether an admin has accepted the version in force; asked once, with the workspace's first number). configured says whether numbers can be bought on this Orbit instance. The AI cannot buy or release numbers or accept the terms; an admin does that in Settings → Dialer.

    Read
  • Preview Call Listpreview_call_list

    Preview the call list a saved contact view would produce. Call lists ARE saved views of the Contacts table: build one with create_contact_view (filters, sort) or pick one from list_contact_views, then pass its ID here. Returns how many contacts match, how many are dialable (in dialing order) and how many are skipped and why: do_not_call, no_phone, invalid_phone, unsupported_country (the dialer only calls numbers in the United States), recently_called, max_attempts, duplicate_phone. The first few dialable contacts (name, email, phone) come back as sample only when the connection also has contacts:read or dialer:read; with crm:read alone the preview is counts only. A person then dials it from the Dialer page; this tool does not start calls.

    Read
  • List Dialer Sessionslist_dialer_sessions

    List dialing sessions (one person's run through a call list), newest first: the view it came from, who ran it, status (active, paused, completed, abandoned), how many contacts were queued, how many were skipped and why, and the settings in force. Sessions are started only by a person from the Dialer page; the AI reads them.

    Read
  • Get Dialer Sessionget_dialer_session

    Get one dialing session with its queue: each item carries the contact (name, email, company, call history), the number dialed, its status (queued, calling, done, skipped), skip reason, latest call ID and outcome. Session IDs come from list_dialer_sessions.

    Read
  • List Callslist_calls

    List calls the team has made, newest first, with status (initiated, ringing, in-progress, completed, busy, no-answer, failed, canceled), answered_by (human, machine, fax, unknown), outcome, notes, duration_seconds, recording_status and the contact, session and person involved. Outcomes: no_answer, busy, failed, canceled, voicemail, voicemail_dropped (set by the system from how the call ended) and connected, interested, not_interested, callback, meeting_booked, voicemail_left, wrong_number, do_not_call (picked after a conversation). Filter by contact, session, person, outcome and a started_at window.

    Read
  • Get Callget_call

    Get one call: who was dialed and by whom, from and to numbers, status, answered_by, outcome, notes, started/answered/ended times, duration_seconds, recording_status and recording duration, and whether a voicemail greeting was dropped. Call IDs come from list_calls or a session's items.

    Read
  • Update Call Outcomeupdate_call_outcome

    Set or correct the outcome and/or notes of a finished call (pass at least one). Outcomes: no_answer, busy, failed, canceled, voicemail, voicemail_dropped (set by the system from how the call ended) and connected, interested, not_interested, callback, meeting_booked, voicemail_left, wrong_number, do_not_call (picked after a conversation). Outcome do_not_call also adds the dialed number to the do-not-call list. The call's session item takes the new outcome too. This classifies a call that already happened; the AI cannot place calls.

    Write
  • Get Call Statisticsget_call_stats

    Call statistics for a window (default: the last 30 days): finished calls, how many reached a person and the reach rate, voicemails, total and average talk time, and breakdowns by outcome, by team member and by day. Optionally for one person or one session. truncated is true when the window held more than 20,000 calls.

    Read
  • Get Call Insightsget_call_insights

    A call's transcript and the AI coach's feedback, when the workspace has them turned on (transcribe_calls and ai_call_feedback in get_dialer_settings). Returns transcript_status and feedback_status (queued, processing, completed, failed, skipped), the speaker-labelled transcript as transcript_text ("Rep: …" / "Contact: …") and transcript_sentences (speaker, start and end seconds, text, confidence), transcript_language and transcript_minutes, and feedback: summary, score (1-10 or null), went_well, improve, objections (each with whether it was handled and a suggestion), next_steps, script_adherence against the script the session used (script_id) and a suggested_outcome to compare with the one the rep picked. Only conversations are transcribed: voicemail and unanswered calls have none. 404 until a transcript was requested for the call; poll while a status is queued or processing. Call IDs come from list_calls (each call carries an insights summary with the two statuses). Read-only: the AI cannot place calls.

    Read
  • Delete Call Recordingdelete_call_recording

    Delete a call's recording and transcript: the audio is removed at the carrier and the transcript and AI feedback at the transcription service, so the recording can no longer be played or downloaded and get_call_insights answers 404 for the call. The call itself (numbers, times, duration, outcome, notes) is kept, with recording_status "absent". Admins only; 409 when the call has neither a recording nor a transcript. Cannot be undone.

    Write
  • List Call Scriptslist_call_scripts

    List the team's call scripts, the default first then by name: id, name, content, is_default, who created and last changed it, and when. A call script is the text a rep reads during a call, shown beside the call on the Dialer page. Plain text with merge fields that are filled from the contact being dialed: {{first_name}} (first name), {{last_name}} (last name), {{full_name}} (full name), {{company}} (company), {{job_title}} (job title), {{email}} (email), {{phone}} (phone), {{rep_name}} (your name). Unknown fields stay as written. One script per team can be the default: new dialing sessions start with it unless the person picks another.

    Read
  • Get Call Scriptget_call_script

    Get one call script with its full content. A call script is the text a rep reads during a call, shown beside the call on the Dialer page. Plain text with merge fields that are filled from the contact being dialed: {{first_name}} (first name), {{last_name}} (last name), {{full_name}} (full name), {{company}} (company), {{job_title}} (job title), {{email}} (email), {{phone}} (phone), {{rep_name}} (your name). Unknown fields stay as written. One script per team can be the default: new dialing sessions start with it unless the person picks another. Script IDs come from list_call_scripts or a session's script_id.

    Read
  • Create Call Scriptcreate_call_script

    Write a new call script for the team. A call script is the text a rep reads during a call, shown beside the call on the Dialer page. Plain text with merge fields that are filled from the contact being dialed: {{first_name}} (first name), {{last_name}} (last name), {{full_name}} (full name), {{company}} (company), {{job_title}} (job title), {{email}} (email), {{phone}} (phone), {{rep_name}} (your name). Unknown fields stay as written. One script per team can be the default: new dialing sessions start with it unless the person picks another. Keep it short enough to read aloud: an opener, the reason for the call, two or three questions, and how to close; name at most 120 characters, content at most 20,000. is_default true makes it the script new sessions start with (the previous default loses the flag). Scripts are read by a person on a call; the AI cannot place calls.

    Write
  • Update Call Scriptupdate_call_script

    Change a call script's name, content and/or default flag (pass at least one). Content replaces the whole script, so send the complete text. A call script is the text a rep reads during a call, shown beside the call on the Dialer page. Plain text with merge fields that are filled from the contact being dialed: {{first_name}} (first name), {{last_name}} (last name), {{full_name}} (full name), {{company}} (company), {{job_title}} (job title), {{email}} (email), {{phone}} (phone), {{rep_name}} (your name). Unknown fields stay as written. One script per team can be the default: new dialing sessions start with it unless the person picks another. is_default true takes the flag off the previous default; false leaves the team without one. Sessions already running keep the script they show.

    Write
  • Delete Call Scriptdelete_call_script

    Delete a call script. Sessions and call insights that used it are kept (their script_id becomes null); if it was the default, the team has no default until another script is flagged. Cannot be undone.

    Write
  • List Do-Not-Call Numberslist_do_not_call

    List the team's do-not-call numbers, newest first: phone_e164, reason (manual, api, import, call_outcome, email_unsubscribe, sms_opt_out), the contact and source email when known, note, who added it and when. Contacts carrying a listed number are flagged do_not_call and left out of every call list. search matches digits of the number or the source email.

    Read
  • Add Do-Not-Call Numbersadd_do_not_call

    Add up to 1000 phone numbers to the team's do-not-call list. Numbers in any format are normalised to E.164 using the dialer's default_country; the result lists added, already_listed and invalid numbers. Listed numbers are excluded from every call list and the contacts carrying them are flagged do_not_call. Pass contact_id when adding one contact's number.

    Write
  • Remove Do-Not-Call Numbersremove_do_not_call

    Remove numbers from the team's do-not-call list, by phone number or by entry ID (pass at least one list). Only a credential whose owner is a team admin can do this; others get 403. Removing a number does not undo an email unsubscribe or SMS opt-out, and the next unsubscribe adds it back.

    Write
  • List Voicemail Greetingslist_voicemail_greetings

    List pre-recorded voicemail greetings, metadata only: name, owner, duration, size, content type and which one is each person's default (the one voicemail_mode drop plays). The audio is uploaded and played from the dashboard and is not available here.

    Read

Webhooks

2 tools
  • List Webhookslist_webhooks

    List webhook subscriptions for the team.

    Read
  • Create Webhookcreate_webhook

    Create a webhook subscription that delivers submission events to an HTTPS endpoint you control, optionally limited to a specific form.

    Outbound

FAQ

Frequently asked questions.

How Orbit's MCP server works, what agents can and can't do, and what it costs.

Give your agents a CRM to sell from.

Connect Claude, ChatGPT or your own agents in a minute, then let them set up and run your pipeline.

Unlimited seats · MCP access on every plan · Set up by your AI assistant