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
Live at the protected resource URL below. A First AI Employee owner can authorize any compatible MCP host that uses secure HTTPS client metadata. No developer key or manual application review is required.
Protected resource
https://api.firstaiemployee.com/mcpDiscovery 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 task write.
- Add https://api.firstaiemployee.com/mcp in a compatible AI host.
- Sign in to First AI Employee and approve only the scopes needed for the workflow you want to test.
- Ask the host to confirm your business with get_business_identity before reading or preparing any work.
- Review every prepared task in the host. Nothing is created 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.”
- “Prepare a task to call Jordan tomorrow. Show me the exact preview before asking for approval.”
Connection flow
- A compatible host identifies itself through a reviewed static registration or a secure Client ID Metadata Document.
- The host connects to the protected resource URL and discovers the First AI Employee authorization server from standards-based metadata.
- The business owner signs in and approves a fixed list of OAuth scopes for one business.
- 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 and token exchange. A token for any other resource is rejected.
- 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.
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.
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.
Version 1 tool catalog
Read tools return minimized, bounded records. Creating a task, creating a form, and publishing a form are the only mutations, and each one waits for your approval. Write tools are omitted from discovery unless the write gate is enabled.
| Tool | Required OAuth scope | Behavior |
|---|---|---|
get_business_identityUse this first to confirm which First AI Employee business is connected and which bounded MCP capabilities are currently available. It returns no customer ID, owner email, or secret. | business:read | Bounded 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:read | Bounded readPublic catalog; discovery applies permissions and availability.Arguments: none |
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:read | Bounded 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:read | Bounded 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:read | Bounded 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:read | Bounded 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:read | Bounded 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:execute | Bounded 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:read | Bounded 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:read | Bounded 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:read | Bounded 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:read | Bounded readPublic catalog; discovery applies permissions and availability.Arguments: from, to, limit, cursor |
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:read | Bounded 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:read | Bounded readPublic catalog; discovery applies permissions and availability.Arguments: limit, cursor |
get_formUse when the user wants one form and the definition it publishes. It never returns an answer key, a band score, or a qualification rule. | front_desk:forms:read | Bounded 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:read | Bounded 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:read | Bounded 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:prepare | Stores 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:commit | Commits 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:commit | Commits 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:prepare | Stores 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:prepare | Stores preview onlyPublic catalog; discovery applies permissions and availability.Arguments: form_id*, expected_version*, reason, idempotency_key* |
commit_form_changeUse only after the user explicitly approves the exact unexpired preview from a form prepare tool. It accepts no editable form fields and applies only that prepared change. | forms:commit | Commits or rejects exact previewPublic catalog; discovery applies permissions and availability.Arguments: draft_id*, expected_draft_version*, expected_fingerprint*, human_confirmed*, idempotency_key* |
reject_form_changeUse when the user declines or cancels an unexpired form preview. It changes no form. | forms:commit | Commits 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.
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.
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.
Use this first to confirm which First AI Employee business is connected and which bounded MCP capabilities are currently available. It returns no customer ID, owner email, or secret. This builder runs only in your browser. It accepts no token and sends no request.
How every write stays reviewable
A prepare tool stores a fingerprinted preview for 15 minutes and changes nothing. The agent must show that exact preview and obtain explicit approval. commit_task_create and commit_form_change accept no editable fields and can apply only the approved change. reject_task_create and reject_form_change close the preview without changing anything.
Explicit boundaries
- No tool sends a message, places a call, posts a review reply, changes billing, or changes receptionist behavior.
- 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.
- Calls require an active AI Receptionist entitlement. Review data requires the corresponding Chat & Replies capability.
- MCP access has no separate price. Paid capabilities follow the same published product pricing and entitlements used elsewhere.
Account requirements
MCP is live for authenticated First AI Employee owners through compatible CIMD hosts. Connection is self-service. Each visible tool still requires the matching OAuth scope, live account permission, module, and product entitlement. Consequential task creation also requires explicit approval of the exact stored preview.
Errors and retries
The code inside the MCP error content controls recovery. A host should preserve the returned request ID when asking for support and retry only when retryable is true.
UNAUTHENTICATED | The connection is missing or no longer valid. Start the account connection again. |
|---|---|
INSUFFICIENT_SCOPE | The grant lacks the scope required by this tool. Ask the owner to approve a new grant. |
ACCOUNT_NOT_ELIGIBLE | The connected account does not have the product entitlement required by this tool. |
APPROVAL_REQUIRED | The exact stored preview has not received the required explicit approval. |
DRAFT_EXPIRED | The 15-minute task preview expired. Prepare a new preview before requesting approval again. |
RATE_LIMITED | The tool limit was reached. Respect retry_after_seconds before trying again. |
DEPENDENCY_UNAVAILABLE | A dependency is temporarily unavailable. Retry only when the envelope marks the error as retryable. |
Static host registration and connection support are reviewed manually. Compatible CIMD clients can identify themselves through their metadata URL.
Request developer access