MCP reference

Use First AI Employee from a compatible AI agent

The permanent MCP surface gives an authorized agent a bounded interface to one connected business. First AI Employee remains the system that owns identity, permissions, entitlements, records, and commands.

Current availability

The protected resource URL and 92-tool public OAuth source contract are published below. A deployment and each account must still pass the live MCP gates. A First AI Employee owner can authorize a compatible host that uses secure HTTPS client metadata without a developer key or manual application review.

Protected resource

https://api.firstaiemployee.com/mcp

Discovery metadata

Protected resource metadata
https://api.firstaiemployee.com/.well-known/oauth-protected-resource
Authorization server metadata
https://api.firstaiemployee.com/.well-known/oauth-authorization-server

Start here as a business owner

Connect from any compatible AI host that supports secure MCP OAuth discovery. The host handles the protocol details while you stay in control of the business connection and every reviewed write.

  1. Add https://api.firstaiemployee.com/mcp in a compatible AI host.
  2. Sign in to First AI Employee and approve the requested read and write permissions in one consent screen. Clients configured for mcp:full expand it to the exact concrete scopes in the current catalog, and the shorthand is never stored on the grant.
  3. Ask the host to confirm your business with get_business_identity before reading or preparing any work.
  4. Review every prepared change in the host. Nothing is committed until you explicitly approve the exact stored preview.

Useful first prompts

These prompts describe real version 1 boundaries. Results depend on the live grant, account eligibility, product entitlements, and available records.

  • “Confirm which First AI Employee business is connected and tell me what this connection can do.”
  • “Show the Front Desk tasks that need attention this week.”
  • “Find Jordan Lee in my Front Desk contacts.”
  • “Show calls that need human follow-up. Do not include transcripts or recordings.”
  • “List the bookings we took last week and which channel took each one.”
  • “Prepare a task to call Jordan tomorrow. Show me the exact preview before asking for approval.”

Connection flow

  1. A compatible host identifies itself through a reviewed static registration or a secure Client ID Metadata Document.
  2. The host connects to the protected resource URL and discovers the First AI Employee authorization server from standards-based metadata.
  3. The business owner signs in and approves a fixed list of OAuth scopes for one business.
  4. Start with get_business_identity to confirm the connected business and currently available capabilities. The owner can revoke the connection from Connected Apps.

Protocol and authentication

The public resource uses MCP Streamable HTTP. Authorization is OAuth 2.0 Authorization Code with PKCE S256 and exact resource binding.

  • Send resource=https://api.firstaiemployee.com/mcp during authorization, code exchange, and refresh. Use this exact URL without a trailing slash. A token for any other resource is rejected.
  • Interactive access tokens expire after one hour. Refresh tokens rotate on every successful refresh and expire after 90 days without renewal. Save both returned tokens together and serialize refreshes for each connection. Reusing an old refresh token revokes the authorization; reconnect if refresh returns invalid_grant.
  • The current source protocol is 2026-07-28 with server/discover. Older supported clients use initialize. Let an MCP SDK negotiate the version; do not mix request headers or metadata from different protocol versions.
  • Public clients use PKCE S256. Redirect URIs must exactly match a declared callback. HTTPS is required except for the permitted native-app loopback HTTP pattern.
  • Bearer tokens belong in the Authorization header, never in a URL, log, analytics event, or tool argument.
  • Tool discovery reflects the live grant, account eligibility, product entitlements, and write availability.
  • Most list tools use bounded keyset pagination. Pass next_cursor back unchanged with the same tool and filters. Discard an invalid or mismatched cursor and restart the list. list_automation_rules uses next_offset instead; pass it as offset to fetch the next page.

Universal clients with CIMD

A public MCP client can use an HTTPS metadata-document URL as its OAuth client_id. First AI Employee advertises this as client_id_metadata_document_supported in its authorization-server metadata, then retrieves and validates the document. A compatible client does not need a manually issued client ID or client secret.

  • The client_id must be the same public HTTPS URL returned in the document. The URL cannot contain credentials, a query, a fragment, an IP-literal host, or a root-only path.
  • Declare token_endpoint_auth_method as none. Do not send a client secret. Every authorization request still requires state, PKCE S256, and the exact MCP resource parameter.
  • HTTPS callbacks must match a declared redirect URI exactly. Declared localhost, 127.0.0.1, and IPv6 loopback HTTP callbacks may use an ephemeral port, but the host, path, and query must still match.
  • The First AI Employee account owner sees the client identity, return destination, and requested scopes before deciding whether to allow the connection.
Example Client ID Metadata Document
{
  "client_id": "https://client.example/oauth/client-metadata.json",
  "client_name": "Example MCP Client",
  "redirect_uris": [
    "http://localhost/oauth/callback"
  ],
  "token_endpoint_auth_method": "none",
  "grant_types": [
    "authorization_code",
    "refresh_token"
  ],
  "response_types": [
    "code"
  ]
}

This flow supports the localhost callback pattern used by desktop and command-line MCP clients such as Claude Code. Protocol compatibility is implemented, but an authenticated Claude Code connection has not yet been completed.

Unattended reads with a service account

A business owner can create a long-lived MCP client credential through the authenticated owner API. It exchanges for 15-minute access tokens with no refresh token. This path needs no developer account, but it is deliberately narrower than interactive owner-approved MCP.

  • Only the unimpersonated business owner with settings permission can create, inspect, change, rotate, or revoke a service account. It is always bound to that owner's business.
  • The credential is MCP-only and read-only. Its safe scopes allow only eligible bounded reads. It cannot use document-template, signature, automation-setup, or automation-notification preference reads, any prepare, commit, or reject tool, or any Client API route.
  • Create and rotate show the client secret once; First AI Employee stores only its hash. The credential has no automatic expiry today. Rotate or revoke it when it should stop working.
  • A token request may omit scope to receive the account's allowed set or request a smaller subset. The default issuance limits are 30 token requests per minute and 500 per UTC day. Normal MCP limits and account checks still apply afterward.
  • The token endpoint implements client_credentials for service accounts, but authorization-server metadata does not currently advertise that grant. Configure this machine credential explicitly rather than relying on discovery.
  • Changing scopes revokes existing grants and tokens but keeps the current client secret. Rotation replaces the secret immediately and revokes every existing grant and token. Account revocation is irreversible.

Current service-account scope catalog

business:read business:website:read front_desk:tasks:read front_desk:contacts:read front_desk:accounts:read front_desk:jobs:read front_desk:saved_views:read front_desk:saved_views:execute front_desk:dashboard:read front_desk:automations:read front_desk:record_summaries:read front_desk:search:read calls:followup:read reviews:reply:read front_desk:forms:read
Service-account token exchange
POST /oauth/token HTTP/1.1
Host: api.firstaiemployee.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic BASE64_SERVICE_ACCOUNT_CLIENT_ID_AND_SECRET

grant_type=client_credentials&
scope=business%3Aread%20front_desk%3Atasks%3Aread&
resource=https%3A%2F%2Fapi.firstaiemployee.com%2Fmcp

The backend owner API implements this lifecycle, but the customer dashboard does not yet provide a creation or management screen. These first-party owner routes are not the stable Client API. Do not copy or share a dashboard session token to automate them.

Version 1 tool catalog

The public OAuth source catalog contains 92 tools: 46 bounded reads and 46 reviewed write tools. Form draft editing and contact-segment prepare/commit/reject are dashboard-only and do not add OAuth permissions. Task creation, contact upsert, form creation or publishing, signature-send approval, internal automation setup, automation notification preferences, scheduling configuration, business profile changes, and Front Desk setup use stored previews. AI cannot grant browser permission or subscribe a device. Signature approval records no delivery by itself. A deployed connection discovers only the tools allowed by its gates, grant, account, modules, and entitlements.

ToolRequired OAuth scopeBehavior
read_front_desk_stateRead the server-authoritative Front Desk setup, entitlement summary, and effective module states.front_desk:configuration:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
read_contactsRead up to 25 contacts through the approved contact projection.front_desk:contacts:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
read_client_accountsRead up to 25 client accounts through the approved account projection.front_desk:accounts:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
read_pipeline_opportunitiesRead up to 25 opportunities with their current pipeline and stage labels.front_desk:pipeline:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
read_jobsRead up to 25 jobs through the approved job projection.front_desk:jobs:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
read_tasksRead up to 25 tasks through the approved task projection.front_desk:tasks:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
read_requestsRead one exact Request with its bounded conversation, or up to 25 Requests through the approved list projection.front_desk:requests:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
read_activityRead up to 25 CRM activity items, optionally for one approved subject.front_desk:activity:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
read_reportsRead up to 25 generated reports through the approved report projection.front_desk:reports:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
read_supported_configurationRead the supported business, scheduling, service-area, and Front Desk configuration projection.front_desk:configuration:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
get_business_identityUse this first to confirm which First AI Employee business is connected and which bounded MCP capabilities are currently available. Signature approval capabilities prepare and record local approval only; they never send envelopes or sign documents. It returns no customer ID, owner email, or secret.business:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
get_capabilitiesRead-only metadata listing for the connected workspace. Accepts an empty object and returns available capability identifiers, names of separately exposed MCP tools, and the write-gate state after live permission checks. It never invokes, prepares, approves, or commits another operation. To perform an operation, call its separately listed tool with that tool input schema.business:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
get_website_insightsUse when the user wants the business facts currently recorded from their website and any open change findings. It returns reviewable profile defaults and provenance, never scrapes or writes on its own.business:website:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
search_front_desk_recordsSearch a bounded set of Front Desk contacts, accounts, jobs, tasks, activities, and requests using the canonical tenant-scoped search engine. Returns minimized record previews and changes nothing.front_desk:search:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: query*, resources, limit, cursor
list_front_desk_tasksUse when the user wants to review or find tasks in their free Front Desk. Returns at most 25 bounded tasks and does not change them.front_desk:tasks:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: query, status, limit, cursor
list_front_desk_contactsUse when the user wants to find contacts already stored in their free Front Desk. Returns at most 25 bounded contacts and does not change them.front_desk:contacts:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: query, limit, cursor
list_front_desk_accountsUse when the user wants bounded household or business accounts stored in Front Desk. It returns minimized account and work rollup fields and changes nothing.front_desk:accounts:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: kind, status, limit, cursor
list_front_desk_jobsUse when the user wants bounded jobs from Front Desk. It returns operational job fields, supports a bounded updated-time window, and changes nothing.front_desk:jobs:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: from, to, limit, cursor
list_front_desk_saved_viewsUse when the user wants the searchable saved views already configured in Front Desk. It returns only view identity, presentation, and revision metadata.front_desk:saved_views:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: limit, cursor
run_front_desk_saved_viewUse after selecting an exact saved view and revision. It returns a bounded page of matching record previews and never changes the view or records.front_desk:saved_views:executeBounded readPublic catalog; discovery applies permissions and availability.Arguments: saved_view_id*, expected_revision*, cursor
get_front_desk_dashboardUse when the user wants their current Front Desk dashboard summary and saved layout. It returns bounded, minimized operational data and changes nothing.front_desk:dashboard:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
list_front_desk_automation_runsUse when the user wants recent Front Desk automation outcomes. It returns bounded execution states and retry facts without logs, secrets, or provider payloads.front_desk:automations:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: from, to, status, limit, cursor
get_front_desk_record_summaryUse when the user wants a compact summary of one authorized contact, client account, job, or task. It returns reviewed fields and bounded relationships and activity.front_desk:record_summaries:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: resource*, record_id*
list_calls_needing_followupUse when the user wants recent calls that First AI Employee marked for follow-up. Returns at most 25 bounded call summaries and no transcript or recording.calls:followup:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: from, to, limit, cursor
list_callsUse when the user wants recent call history, not only the calls marked for follow-up. Returns at most 25 bounded call summaries and no transcript or recording. Calls confirmed as spam are left out.front_desk:calls:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: from, to, limit, cursor
get_callUse when the user asks about one call by its id. Returns the same bounded summary as the call list, and no transcript or recording.front_desk:calls:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: call_id*
list_reviews_needing_replyUse when the user wants recent customer reviews without a successfully posted reply. Returns at most 25 bounded reviews and never posts or drafts a reply.reviews:reply:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: from, to, limit, cursor
list_formsUse when the user wants the forms this business owns. Returns at most 25 bounded form summaries and changes nothing.front_desk:forms:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: limit, cursor
get_formRead one form and its published definition. Dashboard workspace owners also receive draft.definition and draft.draft_revision for preparing edits. It never returns an answer key, a band score, or a qualification rule.front_desk:forms:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: form_id*
list_form_responsesUse when the user wants the responses one form collected. Returns at most 25 bounded responses, newest first, and names the revision each one answered.front_desk:forms:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: form_id*, status, from, to, revision, limit, cursor
get_form_responseUse when the user wants one response by its id. It returns the answers, the derived outcome, and the revision the response answered.front_desk:forms:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: form_id*, response_id*
get_form_response_analyticsRead deterministic analytics for one form revision. Returns population counts and per-question numerators and denominators only, never response contents.front_desk:forms:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: form_id*, revision_id*
get_form_insightsRead bounded AI insights the business previously saved for one form. Returns aggregate questions, answers, population summaries, and retention dates, never response contents or provider internals.front_desk:forms:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: form_id*, limit
list_unified_inquiriesRead a bounded cross-channel owner queue, optionally filtered by one closed inquiry type. Returns no contact identity or message content.front_desk:forms:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: type
prepare_form_exportValidate and compile one form response filter and return a preparation receipt. This tool does not create, queue, or start an export job.front_desk:forms:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: form_id*, filter*
get_form_signature_stateRead the closed form-side status of the signature envelope derived from one form response. Returns status only and never signing capabilities or document storage details.front_desk:forms:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: form_id*, response_id*
prepare_task_createUse after the user asks to create one First AI Employee task. It stores a 15-minute preview but does not create the task. Show the exact preview and ask for explicit approval.tasks:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: title*, description, due_at, priority, idempotency_key*
commit_task_createUse only after the user explicitly approves the exact unexpired preview from `prepare_task_create`. It accepts no editable task fields and creates only that internal task.tasks:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
reject_task_createUse when the user declines or cancels an unexpired task preview. It creates no task.tasks:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, idempotency_key*
prepare_contact_upsertResolve and preview one contact create or update. It stores a sealed 15-minute draft and changes no contact. Show the exact before and after values and ask for approval.front_desk:contacts:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: contact_id, phone*, email, name, idempotency_key*
commit_crm_changeApply only the exact unexpired contact change prepared earlier. It accepts no editable contact fields and revalidates tenant, grant, module, contact revision, and fingerprint.front_desk:contacts:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
reject_crm_changeReject an unexpired contact-change draft. It changes no contact.front_desk:contacts:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, idempotency_key*
prepare_form_draftUse after the user asks to create one form. It checks the definition and stores a 15-minute preview. It creates no form and publishes nothing. Show the exact preview and ask for explicit approval.forms:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: definition*, ref, idempotency_key*
prepare_form_publishUse after the user asks to publish one form they already drafted. It stores a 15-minute preview and publishes nothing. Show the exact preview and ask for explicit approval.forms:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: form_id*, expected_version*, reason, idempotency_key*
commit_form_publishPublish one exact approved form revision prepared by prepare_form_publish, making it available to respondents. Rejects creation and edit drafts, including receipt retries. Requires explicit approval, matching fingerprint, unexpired draft and unchanged form revision.forms:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
commit_form_draftCreate one unpublished form draft from the exact approved form.draft_create preview. Rejects publication and edit drafts, including receipt retries. Requires explicit approval, matching fingerprint and unexpired draft; does not publish a form.forms:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
reject_form_changeRecord one rejection decision for an unexpired prepared form draft. It marks the proposal rejected and records a receipt; it never executes the proposed creation, edit, or publication and never changes a form. Repeating the same decision with the same retry key returns the same receipt.forms:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, idempotency_key*
list_bookingsList bookings this business took, newest first, inside an optional date window. Returns the channel that took each booking and the details it recorded. It cannot create, move, or cancel a booking.front_desk:bookings:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
get_bookingRead one booking this business took, by its booking id. Returns the same bounded detail as the list and no calendar-provider identifiers.front_desk:bookings:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
list_booking_calendarsList the scheduling calendars this business has configured, with their time zone and publication state. It does not return live free or busy time, which comes from the connected calendar rather than from this surface.front_desk:bookings:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
list_document_templatesList bounded document-template summaries available to this business. Returns no source PDF identifiers, storage keys, recipient data, or immutable version layouts.documents:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: limit
list_signature_envelopesList bounded signature-envelope lifecycle summaries. Returns no recipient identity, signing capability, evidence internals, artifact identifiers, or storage details.signatures:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: limit, cursor
get_signature_envelopeRead one tenant-owned signature-envelope lifecycle summary. Returns envelope metadata only and excludes recipients, tokens, fields, values, evidence, artifacts, actor labels, and storage identifiers.signatures:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: envelope_id*
prepare_signature_sendPreview local approval for sending one already-ready email-delivery signature envelope. Stores a sealed 15-minute draft and performs no send, token issue, provider call, or envelope change.signatures:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: envelope_id*, idempotency_key*
commit_signature_changeRecord local approval for the exact unexpired signature preview. Revalidates the envelope, document hash, recipients, module, grant, and fingerprint but does not send, issue a token, call a provider, or change the envelope.signatures:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
reject_signature_changeReject an unexpired signature-send preview. It sends nothing and changes no envelope.signatures:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, idempotency_key*
get_automation_capabilitiesRead-only metadata about supported automation rule definitions: recipes, trigger fields, condition vocabulary, configured action types, and server-owned rehearsal samples. Accepts optional form, revision and trigger metadata filters. It never prepares or changes a rule, invokes another tool, or executes any configured action. Rule creation, updating and pausing each have separately exposed prepare and commit tools.front_desk:automations:setup:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: form_id, revision_id, trigger_key, partial_point
list_automation_rulesRead up to 25 automation definitions and current versions for review, editing, resuming, or pausing. Filter by rule ID or page with the returned next offset.front_desk:automations:setup:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: rule_id, offset, limit
prepare_automation_createPrepare a sealed preview to create and activate one new internal automation rule. Stores only a proposal; it does not change a rule or execute the configured actions. Includes a server-owned rehearsal of future triggered effects; outbound messaging is unavailable. Show the exact preview and obtain approval before calling commit_automation_create.front_desk:automations:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: draft*, sample_record_id*, idempotency_key*
prepare_automation_updatePrepare a sealed preview to replace the definition of one existing internal automation rule and activate that reviewed version, including when the rule was paused. Stores only a proposal; it does not change a rule or execute the configured actions. Includes a server-owned rehearsal of future triggered effects; outbound messaging is unavailable. Show the exact preview and obtain approval before calling commit_automation_update.front_desk:automations:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: rule_id*, expected_rule_version*, draft*, sample_record_id*, idempotency_key*
prepare_automation_pausePrepare a sealed preview to pause one existing active internal automation rule. Stores only a proposal; it does not change a rule or execute the configured actions. Includes the current rule and reason. Show the exact preview and obtain approval before calling commit_automation_pause.front_desk:automations:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: rule_id*, expected_rule_version*, idempotency_key*, reason*
commit_automation_createApply only the explicitly approved preview from prepare_automation_create to create and activate one new internal automation rule. Rejects other operation drafts, including receipt retries. Rechecks tenant, grant, fingerprint, expiry and current rule version. Configured internal actions run only when subsequent events trigger the rule; this call does not execute those actions or enable outbound messaging.front_desk:automations:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
commit_automation_updateApply only the explicitly approved preview from prepare_automation_update to replace the definition of one existing internal automation rule and activate that reviewed version, including when the rule was paused. Rejects other operation drafts, including receipt retries. Rechecks tenant, grant, fingerprint, expiry and current rule version. Configured internal actions run only when subsequent events trigger the rule; this call does not execute those actions or enable outbound messaging.front_desk:automations:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
commit_automation_pauseApply only the explicitly approved preview from prepare_automation_pause to pause one existing active internal automation rule. Rejects other operation drafts, including receipt retries. Rechecks tenant, grant, fingerprint, expiry and current rule version. Stops future rule executions without deleting the rule.front_desk:automations:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
reject_automation_changeReject a prepared automation change without changing the rule.front_desk:automations:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, idempotency_key*
get_notification_preferencesRead where automation notices appear, quiet hours, routine summaries, and push readiness. Urgent problems bypass quiet hours. Browser notification permission and device subscription require the user to enable them on that device.front_desk:automation_notifications:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
prepare_notification_preferencesPreview an exact change to automation notices, dashboard or connected-device push delivery, quiet hours, and routine daily summaries. Nothing changes until approval. This cannot subscribe devices, grant browser permission, or send a test notice.front_desk:automation_notifications:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: preferences*, expected_version*, idempotency_key*
commit_notification_preferencesSave only the exact unexpired notification preferences approved by the owner, after checking the current version and permissions. Changes affect future and waiting automation notices. Urgent problems remain immediate; browser permission must be enabled by the user.front_desk:automation_notifications:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
reject_notification_preferencesReject prepared automation notification preferences without changing delivery settings.front_desk:automation_notifications:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, idempotency_key*
get_scheduling_setupRead this business's scheduling setup in one bounded call: resource pools with capacities, service-to-pool mappings, appointment lengths, and calendar preference. Use it to ground pool changes before preparing them.front_desk:configuration:readBounded readPublic catalog; discovery applies permissions and availability.Arguments: none
prepare_resource_pool_retirePrepare only retirement of one existing scheduling resource pool. Stores a sealed, expiring preview without changing the pool. Show the exact before and after values and obtain explicit approval before calling commit_resource_pool_retire.front_desk:scheduling:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: pool_id*, expected_revision*, idempotency_key*
prepare_resource_pool_updatePrepare only an update to one existing scheduling resource pool. Stores a sealed, expiring preview without changing the pool. Show the exact before and after values and obtain explicit approval before calling commit_resource_pool_update.front_desk:scheduling:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: pool_id*, code*, name*, unit_label*, total_capacity*, unavailable_capacity*, active*, expected_revision*, idempotency_key*
prepare_resource_pool_createPrepare only creation of one scheduling resource pool. Stores a sealed, expiring preview without changing the pool. Show the exact before and after values and obtain explicit approval before calling commit_resource_pool_create.front_desk:scheduling:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: code*, name*, unit_label, total_capacity*, unavailable_capacity, active, idempotency_key*
commit_resource_pool_retireApply only the approved resource pool retire preview from prepare_resource_pool_retire. Rejects drafts for other operations, including receipt retries. Revalidates tenant, grant, fingerprint, expiry and current pool revision. Marks the reviewed pool inactive; it does not delete the pool.front_desk:scheduling:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
commit_resource_pool_updateApply only the approved resource pool update preview from prepare_resource_pool_update. Rejects drafts for other operations, including receipt retries. Revalidates tenant, grant, fingerprint, expiry and current pool revision. Updates the reviewed pool fields used by scheduling.front_desk:scheduling:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
commit_resource_pool_createApply only the approved resource pool create preview from prepare_resource_pool_create. Rejects drafts for other operations, including receipt retries. Revalidates tenant, grant, fingerprint, expiry and current pool revision. Creates one pool without changing existing pools.front_desk:scheduling:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
reject_resource_poolReject an unexpired pool-change draft. It changes no pool.front_desk:scheduling:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, idempotency_key*
prepare_service_mappingPreview which pools every booking for one service holds. It stores a sealed 15-minute draft and changes no mapping. Show the exact before and after pools and ask for explicit approval.front_desk:scheduling:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: service_name*, items*, idempotency_key*
commit_service_mappingApply only the exact unexpired service mapping prepared earlier. It accepts no editable fields and revalidates tenant, grant, module, pools, and fingerprint.front_desk:scheduling:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
reject_service_mappingReject an unexpired service-mapping draft. It changes no mapping.front_desk:scheduling:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, idempotency_key*
prepare_calendar_preferencePreview switching AI scheduling on the tenant-owned calendar on or off. It stores a sealed 15-minute draft and changes nothing. Show the exact before and after and ask for explicit approval.front_desk:scheduling:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: opt_in*, idempotency_key*
commit_calendar_preferenceApply only the exact unexpired calendar preference prepared earlier. It accepts no editable fields and revalidates tenant, grant, module, and fingerprint.front_desk:scheduling:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
reject_calendar_preferenceReject an unexpired calendar-preference draft. It changes nothing.front_desk:scheduling:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, idempotency_key*
prepare_scheduling_lengthsPreview changes to appointment duration buckets or per-service minutes. It stores a sealed 15-minute draft and changes no lengths. Show the exact before and after and ask for explicit approval.front_desk:scheduling:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: buckets, fallback, services, idempotency_key*
commit_scheduling_lengthsApply only the exact unexpired lengths prepared earlier. It accepts no editable fields and revalidates tenant, grant, module, and fingerprint.front_desk:scheduling:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
reject_scheduling_lengthsReject an unexpired lengths draft. It changes no lengths.front_desk:scheduling:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, idempotency_key*
prepare_profile_changePreview edits to receptionist-facing business profile fields. It stores a sealed 15-minute draft and changes no profile. Show the exact before and after values and ask for explicit approval.front_desk:profile:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: business_name, business_hours, business_address, public_location, business_phone, services_offered, idempotency_key*
commit_profile_changeApply only the exact unexpired business profile change prepared earlier. It accepts no editable fields and revalidates tenant, grant, profile state, and fingerprint.front_desk:profile:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
reject_profile_changeReject an unexpired business-profile draft. It changes no profile.front_desk:profile:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, idempotency_key*
prepare_front_desk_setupPreview applying the essential or basic Front Desk setup. It stores a sealed 15-minute draft and changes no setup. Show the exact module changes and ask for explicit approval.front_desk:configuration:prepareStores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: setup*, expected_revision*, idempotency_key*
commit_front_desk_setupApply only the exact unexpired Front Desk setup prepared earlier. It accepts no editable fields and revalidates tenant, grant, revision, and fingerprint.front_desk:configuration:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key*
reject_front_desk_setupReject an unexpired Front Desk setup draft. It changes no setup.front_desk:configuration:commitCommits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, idempotency_key*

What a host receives

Successful tools return ordinary MCP content plus schema-validated structuredContent. The values below are synthetic, but the envelope and field names match the public version 1 contract.

Successful tool result
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "Connected to Demo Plumbing."
      }
    ],
    "structuredContent": {
      "schema_version": 1,
      "request_id": "req_demo_01",
      "business": {
        "name": "Demo Plumbing",
        "timezone": "America/Chicago",
        "front_desk_level": "essential",
        "receptionist_status": "not_active"
      },
      "available_capabilities": [
        "front_desk.tasks.read",
        "front_desk.contacts.read",
        "tasks.prepare",
        "tasks.commit"
      ]
    },
    "isError": false,
    "_meta": {
      "request_id": "req_demo_01",
      "replayed": false
    }
  }
}

An expected authorization, eligibility, validation, approval, conflict, limit, or dependency failure is an MCP tool result with isError: true. Its strict JSON error envelope is serialized in content[0].text, and structuredContent is omitted so the success output schema is not falsely claimed.

Expected tool error
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"schema_version\":1,\"error\":{\"code\":\"ACCOUNT_NOT_ELIGIBLE\",\"message\":\"This account is not yet eligible for that tool.\",\"retryable\":false,\"request_id\":\"req_demo_02\"}}"
      }
    ],
    "isError": true
  }
}

Transport and authentication failures

A request rejected before tool execution can instead use an HTTP status, such as a malformed request, unsupported media type, invalid host or origin, or an authentication challenge at the protected resource boundary. Hosts must inspect both the HTTP response and MCP isError results. They must not treat every tool error as an HTTP failure.

Safe request builder

Choose a tool and generate a local example. The builder never asks for credentials and never executes a request.

Read the server-authoritative Front Desk setup, entitlement summary, and effective module states. This builder runs only in your browser. It accepts no token and sends no request. Examples use protocol 2026-07-28 and require an authorized MCP token. Discover your connection tools with a compatible SDK first. Replace synthetic IDs with your business records and commit arguments with the actual approved preview.

Example request
curl 'https://api.firstaiemployee.com/mcp' \
  --request POST \
  --header "Authorization: Bearer $ACCESS_TOKEN" \
  --header 'Content-Type: application/json' \
  --header 'MCP-Protocol-Version: 2026-07-28' \
  --header 'Mcp-Method: tools/call' \
  --header 'Mcp-Name: read_front_desk_state' \
  --header 'Accept: application/json, text/event-stream' \
  --data '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"read_front_desk_state","arguments":{},"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientInfo":{"name":"fae-docs-example","version":"1"},"io.modelcontextprotocol/clientCapabilities":{}}}}'
Synthetic response shape
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "Synthetic Front desk state result"
      }
    ],
    "structuredContent": "<validated against the selected tool output schema>",
    "isError": false
  }
}

How every write stays reviewable

A prepare tool stores a fingerprinted preview for 15 minutes without applying the proposed business change. Show the exact returned preview, including any automation rehearsal and future effects, and obtain explicit approval. Use its draft_id, version, and fingerprint in the matching commit tool with human_confirmed: true. Commit tools accept no replacement business fields. Reject closes the preview without applying it. Example draft IDs and fingerprints below are placeholders; replace them with the actual prepare result.

Signature-request delegation

An owner can authorize one connected MCP app to prepare and record approval of signature.send within a narrow policy. This is approval delegation for a request workflow, not delegation of a human signature. prepare_signature_send and commit_signature_change never email the envelope and never sign for the owner or a recipient.

  1. The owner creates the delegation in Documents & signatures for an eligible connected MCP app whose grant includes signatures:prepare and signatures:commit.
  2. The grant is bound to one business, OAuth grant, client, and agent. It expires within 90 days and can be revoked immediately or emergency-revoked with the other live signature delegations.
  3. The owner sets 1 to 5 recipients per envelope, 1 to 100 actions per day, and an optional document-value ceiling. Preparation fails closed when the live envelope or limits do not match.
  4. Every action still requires the exact 15-minute preview, matching version and fingerprint, an idempotency key unique to that logical operation, and human_confirmed: true.
  5. A successful commit returns approved_not_sent with no affected records. A separate human-controlled workflow must send the request, and only the human recipient signs it.
Synthetic delegated signature approval
{
  "prepare": {
    "tool": "prepare_signature_send",
    "arguments": {
      "envelope_id": "00000000-0000-4000-8000-000000000006",
      "idempotency_key": "signature-demo-prepare-001"
    }
  },
  "exact_preview": {
    "action": "signature.send",
    "delivery_method": "email",
    "recipient_count": 1,
    "commit_effect": "record_approval_only"
  },
  "commit_after_human_confirmation": {
    "tool": "commit_signature_change",
    "arguments": {
      "draft_id": "00000000-0000-4000-8000-000000000001",
      "expected_draft_version": 1,
      "expected_fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "human_confirmed": true,
      "idempotency_key": "signature-demo-commit-001"
    }
  },
  "receipt": {
    "outcome": "committed",
    "envelope": {
      "status": "ready",
      "dispatch_state": "approved_not_sent"
    },
    "affected_records": []
  }
}

Recovery and revocation

  • If the grant is missing, expired, revoked, or no longer matches the OAuth connection, ask the owner to create a new delegation. Do not retry automatically.
  • If the envelope, grant limits, draft version, or fingerprint changed, discard the draft and prepare a fresh preview for review.
  • If the draft expired, prepare again. If the request was rate-limited or a dependency was unavailable, retry only when the returned error says retryable and respect retry_after_seconds when present.
  • Use the same idempotency key only to replay the same logical prepare or commit request. A changed payload needs a new key.

Explicit boundaries

  • No tool sends a message, places a call, posts a review reply, or changes billing. Approved profile and scheduling changes affect the business information and scheduling behavior used by the receptionist.
  • No tool creates a human signature or signs a document. Signature commit records approved_not_sent only.
  • The connected customer is derived from the access token. No tool accepts a customer ID.
  • Call results exclude transcripts and recordings. Results use allowlisted fields and bounded pagination.
  • Booking tools read bookings the business already took, and the calendars it schedules on. They do not return live free or busy time, and they cannot create, move, or cancel a booking. Live availability comes from the connected calendar, not from this surface.
  • Calls require an active AI Receptionist entitlement. Review data requires the corresponding AI Chat & Replies capability.
  • MCP access has no separate price. Paid capabilities follow the same published product pricing and entitlements used elsewhere.

Account requirements

The source supports self-service owner authorization through compatible CIMD hosts. Actual use still requires an MCP-enabled deployment, public-account or pilot eligibility, a usable account, the matching OAuth scope, module, and product entitlement. Every consequential change also requires the write gate and explicit approval of the exact stored preview.

Errors and retries

Read isError and the code inside content[0].text even when HTTP succeeds. Preserve request_id for support. Retry only when retryable is true and honor retry_after_seconds. For the same logical prepare or commit retry, keep the same arguments and idempotency_key; use a different key for a new operation. A timeout does not prove a write failed, so do not create a new mutation to compensate automatically.

UNAUTHENTICATEDThe connection is missing or no longer valid. Start the account connection again.
INVALID_RESOURCEThe token or request targets a different protected resource. Restart authorization with the exact MCP resource URL.
INSUFFICIENT_SCOPEThe grant lacks the scope required by this tool. Ask the owner to approve a new grant.
ACCOUNT_NOT_ELIGIBLEThe connected account does not have the product entitlement required by this tool.
FEATURE_DISABLEDThe requested capability is disabled. Do not retry until its account or service gate changes.
VALIDATION_FAILEDThe tool arguments do not match the strict input schema. Correct the named field before retrying.
CURSOR_INVALIDThe cursor is invalid, expired, or bound to different filters. Restart the list without it.
NOT_FOUNDThe record is absent or not visible to this tenant and grant. Treat it as absent.
RATE_LIMITEDThe tool limit was reached. Respect retry_after_seconds before trying again.
APPROVAL_REQUIREDThe exact stored preview has not received the required explicit approval.
DRAFT_EXPIREDThe 15-minute preview expired. Prepare a new preview before requesting approval again.
DRAFT_ALREADY_DECIDEDThe preview was already committed or rejected. Use its existing receipt or prepare a new change.
DRAFT_STALEThe underlying record changed after preparation. Discard the preview and prepare again.
DRAFT_TAMPEREDThe stored preview no longer matches its fingerprint or immutable context. Stop and prepare a new change.
DELEGATION_REQUIREDThe signature delegation is missing, expired, revoked, or no longer matches this connection. Ask the owner to grant it again.
IDEMPOTENCY_CONFLICTThe idempotency key was reused for different input. Keep it only for the original request and use a new key for changed input.
FORMS_TOTAL_LIMIT_REACHEDThe account reached its total Forms limit. Remove an eligible form or change the account entitlement before retrying.
FORMS_MONTHLY_CREATION_LIMIT_REACHEDThe monthly Forms creation allowance is exhausted. Wait for the allowance to reset or change the entitlement.
CONFLICTCurrent state or a bounded policy no longer permits the operation. Read current state, then prepare a new preview if still appropriate.
DEPENDENCY_UNAVAILABLEA dependency is temporarily unavailable. Retry only when the envelope marks the error as retryable.
INTERNAL_ERRORThe server could not safely complete the request. Preserve request_id and contact support; do not assume a write happened.

Static host registration and connection support are reviewed manually. Compatible CIMD clients can identify themselves through their metadata URL.

Request developer access