MCP Server

Connect Claude, ChatGPT, Cursor, VS Code, or any MCP client directly to your workspace.


This is the strategic way to use Sois: bring your own agent. Your Sois AI workspace is a full MCP server, so the AI agent you already use connects and reasons over your workspace tools directly. Increasingly, people never log into the Sois console at all. They tell their own Claude, ChatGPT, Cursor or Gemini what they need, and it operates Sois on their behalf over MCP. The console becomes a place to view and manage agent activity, not the primary way work gets done.

Any client that speaks the Model Context Protocol can connect and use your workspace tools: search contacts, create tasks, send emails, manage documents, and more, without writing a single integration. Because your own agent does the reasoning, Sois spends no AI on your behalf.

One endpoint. Standard protocol. Every tool your account is allowed to use, available to any compatible client.


The one URL

Your workspace exposes a single MCP endpoint:

https://<your-workspace>.sois.ai/api/mcp

The server identifies itself with your workspace brand (for example "Acme"), so it shows up under your own name in the client. Everything below hangs off that one URL.

There are two ways to authenticate. OAuth is the recommended path and is what the in-app connectors in Claude and ChatGPT use: you paste the URL, approve once, and there is no token to copy or rotate by hand. A Bearer token plus API key is also supported for scripts, servers, and clients that do not do OAuth.


Option A: OAuth 2.1 (recommended, nothing to paste)

Modern MCP connectors discover and complete the whole sign-in for you. You only provide the URL.

1. In your client (for example Claude or ChatGPT), add a custom connector and paste your MCP URL: https://<your-workspace>.sois.ai/api/mcp

2. The client calls the endpoint with no token and receives a 401 carrying a discovery challenge:

WWW-Authenticate: Bearer resource_metadata="https://<your-workspace>.sois.ai/.well-known/oauth-protected-resource"

3. The client reads that metadata, finds your workspace's authorization server, registers itself automatically (Dynamic Client Registration), and opens the sign-in and consent screen.

4. You approve the connection in your Sois account. The client receives a token over PKCE (with a rotating refresh token) and starts working. No token is ever copied by hand.

Why this is safe. The authorization server is your own workspace domain, so tokens are tenant-scoped and never leave your network. Authorization is your role: a granted token can never do more than you can, because every tool call is permission-checked at execution. The scope strings are coarse on purpose; the real boundary is your per-user permissions.

What the authorization server advertises:

Property Value
Authorization endpoint /oauth/authorize
Token endpoint /oauth/token
Registration endpoint /oauth/register (Dynamic Client Registration)
Grant types authorization_code, refresh_token
PKCE required (S256)
Scopes mcp, mcp:read, mcp:write, offline_access

You do not normally call these yourself; a compliant MCP client walks the flow automatically once it has the URL.


Option B: Bearer token + API key (direct or server-side)

For scripts, servers, or any client that does not implement OAuth. You generate two credentials and send them as headers on every request.

1. Open Settings > Connect your Agent in your Sois AI workspace.

2. Choose your client (Claude Desktop, Cursor, VS Code, or Generic) and click Generate Credentials to get a Bearer token, an API key, and a ready-made config snippet.

3. Paste the config into your client.

{
  "mcpServers": {
    "sois-workspace": {
      "url": "https://<your-workspace>.sois.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_TOKEN",
        "X-Api-Key": "YOUR_API_KEY"
      }
    }
  }
}

Cursor uses the same shape in .cursor/mcp.json; VS Code nests it under "mcp": { "servers": { ... } } with "type": "http".

Header Value Purpose
Authorization Bearer <token> Identity (Sanctum token, 90-day expiry)
X-Api-Key sois_... Budget and usage tracking

Two credentials because identity and spend are separate: a token proves who you are, the key controls and meters cost, and either one alone is useless. (OAuth tokens carry their authorization differently, so a connector on Option A does not need the X-Api-Key header.)

Generate the pair programmatically when you are automating onboarding:

curl -X POST "https://<your-workspace>.sois.ai/api/mcp/quick-setup" \
  -H "Authorization: Bearer YOUR_EXISTING_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"client": "generic"}'

Discovery endpoints

A client can learn everything it needs from three public documents at your workspace root:

Endpoint Purpose
/.well-known/mcp.json Server card: name, version, protocol version, and the OAuth metadata locations
/.well-known/oauth-protected-resource RFC 9728: which authorization server protects this resource
/.well-known/oauth-authorization-server RFC 8414: the authorize, token, and registration endpoints, grants, and PKCE method

The server card reports authentication.type as oauth2 and links to the two OAuth documents, which is how a connector knows to start the flow in Option A.


Protocol details

The endpoint speaks Streamable HTTP with JSON-RPC 2.0 (spec version 2025-06-18).

Session lifecycle

Step Request Notes
Initialize POST /api/mcp method initialize Negotiates capabilities; the response carries an Mcp-Session-Id header
List tools POST /api/mcp method tools/list Returns every tool your account is allowed to use
Call a tool POST /api/mcp method tools/call params.name + params.arguments
Keep-alive GET /api/mcp with Mcp-Session-Id Opens an SSE stream for server-to-client messages
Teardown DELETE /api/mcp with Mcp-Session-Id Ends the session

Include the Mcp-Session-Id from the initialize response on every later request.

Supported methods

Method Description
initialize Start a session, negotiate capabilities
ping Health check
tools/list List available tools with schemas
tools/call Execute a tool by name with arguments
notifications/initialized Client confirms initialization (no response)
notifications/cancelled Client cancels a pending request (no response)

What tools are available

tools/list returns everything your account can do inside Sois AI, filtered to your permissions:

  • Contacts: search, create, update, summarise
  • Tasks: create, assign, update status, search
  • Calendar: list, create, update events, check availability
  • Documents: search, create, update content
  • Files: browse, upload, download
  • Inbox: read, compose, send
  • Departments and team: list and manage (admin)
  • Installed apps: every tool added by the extensions you have installed (CRM, invoicing, warehouse, custom entities, and so on)

The exact list depends on the authenticated user's role and installed apps. Tools are permission-filtered and fail closed, so a connection can never call something the user is not allowed to use.

Full tool reference

Generated from the live tool definitions, so it never drifts from what tools/list returns. 622 tools across 47 areas. Your own connection shows a subset: tools are filtered by your role and by which apps you have installed.

Apps built for a single customer add their own tools. Those are documented inside that workspace, on Settings → Connect your Agent, not here.

Accounting (44)

Tool What it does
addCorporateEvent Set a reminder for a company filing or add an ad hoc corporate deadline.
applyPurchaseCreditToFinancial Apply a purchase credit note reduction against a financial cost line.
approveInvoice Approve and publish an invoice.
createCharge Create a charge (revenue — for sales invoices/quotes) or cost (expense — for purchase invoices).
createFinancial Create a financial allocation record with buy/sell pricing.
createInvoice Create a new invoice (any type).
createQuote Create a new quote for a customer.
examineCorporateRegister Examine the corporate register: answers "anything due for any of my companies?".
extractPurchaseBillDocument Extract an uploaded supplier bill document (PDF, image, scan) into a structured purchase invoice proposal — supplier, invoice number, dates, currency, line items, tax, totals, plus a confidence sco.
getAccountingSummary Examine accounting status: invoice counts by status/type, recent invoices, outstanding amounts, overdue invoices, unclaimed charges/costs summary.
getAccountingSyncErrors List the cloud-accounting documents/contacts that FAILED to sync to the vendor (Xero / QuickBooks / Sage), with the error code, message, and any amount-drift detail — so you can explain WHY a sync .
getAccountingSyncStatus Report the cloud-accounting sync status (Xero / QuickBooks / Sage) for this workspace.
getCompanyFilings List filing deadlines for one registered company: answers "when is X due for company Y?".
getFinancialsSummary Get aggregated financial summary: total revenue, cost, profit, average margin, counts by status.
getMatchedFinancialLines List the financial cost lines matched to a purchase invoice, each with its estimated cost, actual (billed) cost, variance, and resulting profit/margin.
getSupplierDefaults Get a supplier contact's accounting defaults — billing currency, invoice/payment terms, credit facility, outstanding balance, and the is_supplier / is_active flags.
getUnmatchedInvoiceLines List the bill lines on a purchase invoice that are not yet matched to a financial cost line, plus the remaining unmatched amount/tax.
listBankAccounts List all bank accounts configured in tenant settings.
listFinancials List financial allocation records with optional filters.
listUnclaimedCharges List charges (revenue) or costs (expense) not yet claimed by an invoice or quote.
manageCompanyDomain Add, update or remove a domain on a registered company: registrar, renewal date, auto-renew, DNS provider.
manageInvoice Void an invoice, raise a credit note against it, apply a credit note, or add a note.
manageQuote Send, accept, decline, or convert a quote to invoice.
markFilingComplete Mark a corporate filing event as filed (done) or waived (not applicable).
matchPurchaseInvoiceLineToFinancial Match a purchase invoice line to a financial cost line.
postPurchaseInvoice Post a purchase invoice or purchase credit note for payment.
previewCurrencyConversion Preview a currency conversion — the exchange rate and converted amount for an amount in one currency into another, via the accounting FX rates at a given date.
previewPurchaseInvoiceTotals Preview the subtotal, tax total and gross total of draft purchase invoice lines WITHOUT creating anything — plus base-currency equivalents when the currency differs from the tenant base.
previewTaxBreakdown Preview the tax breakdown of draft lines — net and tax aggregated per distinct tax rate — without creating anything.
reconcilePurchaseInvoiceTotal Reconcile a purchase invoice gross total against the total printed on the supplier bill.
recordPayment Record a payment against an invoice.
registerCompany Register a new company on the corporate register.
retryAccountingSyncs Re-queue FAILED cloud-accounting syncs (Xero / QuickBooks / Sage) for another attempt — the user-initiated force-retry.
searchCandidateFinancials List open financial cost lines that are candidates for matching against a supplier bill.
searchInvoices Search invoices by number, reference, contact, amount, status, type, date range.
searchPurchaseInvoices Find supplier bills (purchase invoices and purchase credit notes) by status, supplier, date or amount.
searchQuotes Search quotes by number, reference, contact, amount, status, date range.
sendInvoice Email an invoice to recipients WITH the invoice PDF attached.
setFilingReminders Configure reminder rules for corporate filing deadlines: day offsets before each due date, delivery channels (email via the network sender, in-app notification) and email recipient lists.
unmatchPurchaseInvoiceLine Release a purchase-invoice line from its financial cost line.
updateInvoice Update invoice fields or add/remove/modify lines.
updateQuote Update quote fields or lines.
updateRegisteredCompany Update a registered company on the corporate register: rename, change status (active/dormant/dissolved), set the website, accounting period end, or jurisdiction onboarding answers (e.g.
validatePurchaseInvoiceProposal Validate a purchase-invoice proposal (the structure returned by extract_purchase_bill_document) before turning it into a draft — checks required fields, line-sum vs subtotal, currency shape, and co.

Agent Web Browser (2)

Tool What it does
webExtract Extract the main text content from a URL.
webSearch Search the web for real-time information.

Listeners (12)

Tool What it does
activateListener Activate a listener so it starts responding to triggers.
createListener Create a new automation listener.
disableListener Disable a listener permanently until manually re-activated.
getListener Get full details of a specific automation listener including flow schema and run history.
getListenerHelp Get the user-facing help guide for the Listeners feature.
getListenerRuns Get recent execution runs for a listener with status and cost info.
listListeners List all automation listeners for the current user.
pauseListener Pause an active listener temporarily.
searchEntities Fuzzy lookup of a NAMED thing ACROSS BOTH contacts and tasks at once, returning ranked matches (each with its type and a clickable link) and flagging same-name duplicates.
triggerListener Manually trigger a listener to execute its flow immediately.
updateListener Update a listener name, description, trigger type, or trigger config.
updateListenerFlow Update the flow schema (visual flowchart) for a listener.

Tasks (33)

Tool What it does
addTaskStep Add a new step to a task's kanban board.
combineFiles Combine multiple task output files into a single markdown document.
copyTaskToNewDraft Copy a task to a new draft task with a given name.
createTask Create a new ONE-OFF Agent Task — work the agent does once and finishes (e.g.
createTaskFromTemplate Create a new task from a saved template.
deleteScheduledTask Delete a scheduled task permanently.
disableScheduledTask Disable an active scheduled task so it stops running.
enableScheduledTask Enable a disabled scheduled task so it resumes running on its schedule.
getScheduledTask Get full details of a scheduled task including run history stats, costs (total, last run, average), schedule config, and any errors.
getScheduledTaskHistory Get the last 10 runs of a scheduled task with per-run status and cost breakdown.
getTask Get a task's details and steps.
getTaskStepDetail Get the current step's full details including checklist, links, attachments, and status.
getTaskSteps List all steps on a task's kanban board.
linkEntityToTaskStep Link an entity (contact, document, task, etc) to the current step card.
listScheduledTasks List all scheduled tasks for the current user.
listTasks List tasks with optional status filter.
moveTaskStepColumn Move a task step card to a different column (e.g.
pauseTask Pause a running/queued agent task ("pause that task").
removeTaskStep Remove a step from a task's kanban board.
reorderTaskSteps Reorder steps on a task board by providing the step IDs in the desired order.
rerunTask Re-run a completed, failed, or cancelled task.
resumeTask Resume a paused or failed agent task ("resume it", "try that task again from where it stopped").
revertTaskToDraft Revert a task to draft so it can be edited and run again.
saveTaskAsTemplate Save a task as a reusable template.
shareTask Share a task with other team members.
skipTaskStep Toggle whether a task step is skipped.
startTask Start a task running in the background.
steerTask Steer a running agent task with new instructions WITHOUT restarting it ("tell the task to also include X", "focus on GB suppliers only").
updateTask Update a task's name or objective.
updateTaskInstructions Update instructions for a running task (steering).
updateTaskStepCard Update a task step card's fields (title, description, priority, labels, due_date).
updateTaskStepChecklist Toggle a checklist item on the current step card.
writeFile Save a file to a task's output folder.

Teams (9)

Tool What it does
createAgentTeam Create a new autonomous AI agent team.
fireTeamMember DESTRUCTIVE: Permanently remove a member from an agent team.
getAgentTeamStatus Get an overview of all agent teams: list of teams with status, budget usage, member count, and active project count.
getProjectMessages Get recent messages/discussion in a team project.
getTeamProjects List all projects for an agent team.
hireTeamMember Add a new AI member to an agent team.
reassignMemberKits Reassign toolkit kits between team members.
sendTeamPrompt Send a prompt/instruction to the team lead.
updateAgentTeam Update an agent team's settings (name, status, budget, methodology).

Blog (17)

Tool What it does
clearBlogCache Full rebuild — regenerates all published posts, index, RSS, and redeploys entire site.
createBlogComment Create a comment on a blog post.
createBlogPost Create a new blog post as draft.
deleteBlogPost Delete a draft blog post.
generateBlogContentImage Generate an inline image for use inside a blog post's body content.
generateBlogImage Generate a featured header image for a blog post using AI.
getBlogSummary Examine blog status: post counts by status, recent posts, deployment status, blog URL, dev/live mode, comment stats.
getPostTranslations Get the translation status for a blog post — lists available translations and their publish status.
listBlogCategories List all existing blog categories with post counts.
listBlogComments List comments for a specific post or by status across all posts.
polishBlogPost Proofread and polish a blog post — fixes grammar, spelling, punctuation and improves clarity.
publishBlogPost Publish a blog post and deploy to Cloudflare Pages.
searchBlogPosts Search blog posts by title, content, tags, status, or date range.
shareBlogPost Share a published blog post on connected social media channels.
translateBlogPost Translate a blog post into a target language.
unpublishBlogPost Unpublish a blog post — sets status to draft and redeploys site without it.
updateBlogPost Update an existing blog post.

Agent Browser Tab (5)

Tool What it does
browserExamine Get the current page snapshot with interactive elements and refs.
browserExtract Extract clean, readable text from the current browser page.
browserInteract Perform an action using element refs from the last snapshot.
browserNavigate Navigate to a URL. Creates a session if needed.
startBrowserSession Launch an autonomous Agent Browser session that researches the web and PRODUCES assets (a document/report, tasks, or emails) saved to the session.

Calendars (8)

Tool What it does
checkAvailability Find free time slots across one or more users in a given date range.
checkEventRsvpStatus Check if attendees have replied to a calendar event invite by scanning the organizer's inbox for RSVP responses.
createCalendarEvent Create a new calendar event.
getCalendarSummary MANDATORY FIRST CALL for any calendar operation.
manageCalendar Create, rename, recolor, share, or delete a personal calendar.
searchCalendarEvents Search events across ALL of the user's calendars by keyword, date range, or attendee.
sendCalendarInvite Send email invitations for a calendar event to specified recipients.
updateCalendarEvent Update an existing calendar event.

Contacts (25)

Tool What it does
createContact Create a contact (company/person) and open it.
examineContact Get a complete 360° snapshot of ONE contact in a single call — profile, account health, credit check, recent history, upcoming events, and attachments — instead of calling getContact + getContactHe.
getContact Get a contact, including markdown profile.
getContactAttachments List documents and files linked to a contact.
getContactCreditCheck Run a credit check on a contact.
getContactHealth Get the account health data for a contact.
getContactHistory Get the version history for a contact.
getContactOwnershipHistory Show who has held each ownership role (owner / account / sales / operations manager) on a contact, and the date interval they held it.
getContactUpcomingEvents Get upcoming calendar events linked to a contact (via key contacts with user_id or email match).
linkDocumentToContact Attach a document to a contact.
linkFileToContact Attach a file to a contact.
listContactFiles List files stored for a contact.
listContacts List contacts with optional filtering.
lookupCountry Search countries by ISO code, name, currency, or dial code.
mergeContacts Merge two contacts. If conflicts exist, a conflict resolution tab opens for the user to review.
queryContacts Granular structured query for contacts.
restoreContact Restore a recently deleted contact by name ("bring back the contact I just deleted", "restore Acme Ltd").
searchContactEmails Contact email search: find emails in connected inboxes involving a CONTACT (by the contact's primary email and key contact emails).
searchContacts Search for existing contacts by name, company, email, or any data field (city, country, address, tags, etc.).
shareContact Share a contact with specific team members or with everyone ("share the Acme contact with Sarah").
transferContactAccounts Reassign a departing team member's entire book of customer accounts to a successor (the "salesperson leaves" handover).
updateConflictResolution Update the resolution choice for a merge conflict field.
updateContact Update contact data. CRITICAL: When the user asks to update a contact from a document, resume, or file context, extract ALL available data and populate every relevant field — email, phone, company,.
updateContactHealth Update account health data for a contact.
updateKeyContacts Add, remove, or replace key contacts (people) on a contact.

Customer Service (7)

Tool What it does
addMyTicketComment Add a customer-side comment / reply to one of YOUR OWN open customer-service tickets.
createCustomerServiceTicket Open a new support / help ticket with the tenant's customer-service team.
escalateTicket Escalate a customer service ticket to human support when the issue is too complex, requires manual intervention, or the customer needs specialised attention.
getCustomerServiceOverview Get an overview of customer service tickets including counts by status, recent tickets, and unseen response counts.
getSupportSummary Get a summary of support tickets for the current tenant: open count, recent tickets, unseen responses.
respondToTicket Add a response to a customer service ticket as the support team.
searchTickets Search customer service tickets by status, customer name, or subject.

Deals Pipeline (29)

Tool What it does
briefDealPipeline Brief the deal pipeline — a glanceable summary of deal count, total value, and age by stage.
controlDealFinder Control a deal finder: pause, resume, start, or cancel it.
controlReachoutCampaign Control a Reachout campaign: start, pause, resume or cancel it.
createDeal Create a new deal/prospect in a pipeline.
createDealFinder Create and launch an agentic deal finder that scrapes the web (via Tavily) for businesses matching a STRICT brief, runs each candidate through a confidence harness, and adds only qualifying leads i.
createPipeline Create a new sales pipeline with stages.
createReachoutCampaign Create a Reachout email-outreach campaign that works a slice of the deals pipeline.
getDeal Get a deal by name or ID, including data, key contacts, activity, and pipeline/stage.
getDealFinder Get one deal finder in full — its brief, criteria, live progress, spend, pause reason, candidate counts and the most recent candidates the qualification harness evaluated (with confidence and why e.
getDealFollowUpsDue Get all deals with follow-ups due today or overdue.
getInboxMessage Get the full details of a single email message including its body content (HTML stripped to text for readability), all recipients, attachments list, and contact match info.
getPipelineOverview Get an overview of all pipelines with stage counts, total values, and deal summaries.
getReachoutCampaign Get one Reachout campaign in full — its recipient query, outbox, template, collateral/tool config, counts and spend.
listDealFinders List deal finders — the agentic scrapers that populate the pipeline with qualified deals.
listDeals List deals with optional pipeline/stage filter.
listReachoutCampaigns List Reachout email-outreach campaigns that work the deals pipeline.
logDealContact Log that a prospect was contacted (email sent, call made, meeting held).
moveDealStage Move a deal to a different pipeline stage.
openDeal Open a deal in an app tab.
openDeals Open the deals pipeline view.
previewReachoutRecipients Preview how many deals a recipient query would reach — total matching deals and how many are emailable (have an email).
replyEmail Reply to an email. Preserves the original HTML body as a quoted block and pre-fills the To field with the original sender.
requestDealInfoEmail Call Center → Reachout handoff.
scheduleDealFollowUp Schedule a follow-up for a deal/prospect.
searchDeals Search for deals by name, company, or value.
searchMail Paginated email search.
sendDraft Send an existing email draft immediately.
shareDeal Share a deal with team members or everyone (owner only).
updateDeal Update a deal's data fields (deep-merged).

Departments (10)

Tool What it does
addMemberToDepartment Add a team member to a department.
createDepartment Create a new department and open it.
deleteDepartment Delete (deactivate) a department.
getDepartment Get full details of a department including members, data, and activity.
linkContactToDepartment Link a contact (company/person) to a department.
listDepartments List all departments in the organisation.
removeMemberFromDepartment Remove a team member from a department.
searchDepartments Search for departments by name.
unlinkContactFromDepartment Remove the link between a contact and a department.
updateDepartment Update a department's name, description, or data fields.

Agent Dialer (7)

Tool What it does
endCall End an active call by call ID.
getCallDetail Get full call details including transcript, summary, sentiment, follow-up actions, and cost breakdown.
getDialerSummary Examiner tool: Get dialer status overview — recent calls, any active call, credit balance available for calls, and per-minute cost.
leaveVoicemail Leave a voicemail for a team member (or for the current user).
makeCall HIGH RISK — Initiate an AI voice call to a phone number.
manageDoNotCall Add, remove or check a phone number on the do-not-call (DNC) list.
searchCallLogs Search call history by contact, date range, status, or keyword in transcripts.

Documents (8)

Tool What it does
createDocument Create a new rich-text document.
createDocumentFolder Create a folder in the Documents extension to organise documents.
deleteDocument Soft-delete a document or folder from the Documents extension.
exportDocumentToPdf Export a document to a PDF file with optional company letterhead header, footer text, and page numbers.
getDocument Read a document's full content, metadata, and activity log by ID.
listDocuments List documents and folders at a given level in the Documents extension.
moveDocument Move a document or folder to a different parent folder in the Documents extension.
updateDocument Update a document's name or content.

Events (19)

Tool What it does
addEventAttendee Add an attendee to an event.
addEventSession Add a session/agenda item to an event (talk, panel, break, workshop, etc).
addEventSupplier Link a contact as a supplier/vendor to an event with role and contract details.
analyzeEventBudget Analyse an event budget and suggest how to spread costs to stay within it.
commitAttendeeImport Commit a validated attendee import to the event.
createEvent Create a new event. Auto-assigns to default pipeline and first stage if not specified.
createEventPipeline Create a new event pipeline with customisable stages.
getEvent Get full event details by ID including data, key_contacts, activity, attendees, sessions, suppliers, and pipeline/stage info.
getEventBudgetSummary Get the granular budget breakdown for an event: total budget vs spend, the split across travel/food/accommodation/other (each vs its allocation), per-traveller allowance and its % of budget, and re.
getEventPlanningOverview Examiner tool: Get a summary of all event pipelines with stage counts, event distribution, upcoming events, and budget totals.
listEventAttendees List attendees for an event with optional role/RSVP filters.
listEvents List events with optional pipeline/stage/type filters.
moveEventStage Move an event to a different pipeline stage.
openEvent Open an event in a new tab for the user to view/edit.
openEvents Open the Events pipeline view in the UI.
searchEvents Search events by name, type, venue, or description.
updateEvent Update event data (deep-merge into data JSON).
updateEventAttendee Update an event attendee (RSVP status, role, travel details, etc).
validateAttendeeImport Crunch a raw attendee list (pasted text or CSV) and VALIDATE it WITHOUT writing anything.

Expedia (11)

Tool What it does
getExpediaActivityOffers Get available time slots and offers for a specific Expedia activity.
getExpediaPropertyDetails Get full content for an Expedia property: photos, amenities, descriptions, ratings.
getExpediaSummary Get an overview of all saved Expedia items: properties, activities, cars, and flights.
saveExpediaActivity Save an Expedia activity from the most recent search results.
saveExpediaCar Save an Expedia car from the most recent search results.
saveExpediaFlight Save an Expedia flight from the most recent search results.
saveExpediaProperty Save an Expedia property from the most recent search results.
searchExpediaActivities Search for activities, tours, and experiences via Expedia.
searchExpediaCars Search for rental cars via Expedia Rapid API.
searchExpediaFlights Search for flights via Expedia Rapid API.
searchExpediaProperties Search for hotels and properties via Expedia Rapid API.

Extension Builder (15)

Tool What it does
beginBundleUpload CHUNKED UPLOAD — LAST-RESORT FALLBACK.
createExtensionProject DEPRECATED — prefer proposeBrief.
finalizeChunkedUpload CHUNKED UPLOAD — assemble all chunks into a zip, verify sha256, run the static gate, submit for review.
getExtensionBuilderOverview Get summary of all extension builds for this tenant: total builds, statuses, recent activity.
getExtensionFrameSpec Return the host frame contract for local preview: the window.AppExtension.mount signature, the --ext-* theme tokens, the axios-style REST api shape, the vanilla-JS bundle format, and the simplified.
getExtensionRules Return the canonical SOIS extension build rules (manifest schema, table naming, migration safety, permissions, toolkit/examiner pattern, i18n prefixing, UI/theme tokens, bundle format, extension ty.
getExtensionStatus Get the lifecycle status, latest validation report, reviewer feedback reason, AND the current bundle-buffer state (files staged, total bytes, list of relative paths) for one of your projects.
getPlatformDataShapes Return the canonical shapes of the SOIS-built-in tenant data your app can WIRE INTO (Contacts, Calendars, Tasks, Documents, Departments).
getSupportedLocales List the locales SOIS supports out of the box.
listExtensionBuilds List extension builds with optional status filter.
proposeBrief Submit a proposed brief for the user to review and approve.
pushBundleChunks FALLBACK PATH — pushes base64 chunk data inside MCP tool arguments.
setExtensionMeta Update the branding + display metadata for one of your projects: name, title, description, release_notes (changelog for the CURRENT version, shown in the dev console version pill and the marketplac.
uploadExtensionLogo LAST-RESORT FALLBACK only — pushes raster logo (PNG/JPEG/WebP) as base64 in tool args.
validateExtensionBundle Run the free static gate on a bundle and return issues to fix.

Files (15)

Tool What it does
copyFile Copy a file from one S3 location to another.
createFileEntity Create / upload a file into the Files extension.
createFileFolder Create a new folder in the Files extension.
deleteFileEntity Delete a file from the Files extension.
downloadFileEntity Generate a presigned download URL for a file.
emailFileAsAttachment Create an email compose draft with a file from the Files extension pre-attached.
getFileEntity Read a file entity's metadata, extraction status, summary, and activity log by ID.
getFileWorkingPath Get the current working path (folder context) in the Files extension.
listFiles List or search the Files library ("what files do I have?", "find the licence agreement pdf", "how many files are in Contracts?").
moveFile Move a file from one S3 location to another.
moveFileEntity Move a file to a different folder in the Files extension.
readFileContent Read any file's content as structured Markdown.
renameFileEntity Rename a file in the Files extension.
saveChatUploadToFiles Save a file uploaded in chat to the Files entity.
saveFileToContact Save an uploaded file under a contact.

Flights and Stays (8)

Tool What it does
bookmarkFlightOffer Duffel provider: save a flight offer from the most recent findFlightOffers (Duffel) results.
bookmarkStayOffer Save a hotel/stay offer from the most recent stays search results.
findFlightOffers Flight search (Duffel provider).
findStayOffers Search for hotels and accommodation.
getTravelOverview Get an overview of saved flights and stays: counts by status, upcoming departures/check-ins, and recent saves.
prepareFlightBooking Prepare a flight booking for the user to confirm and pay — the agentic-booking entry point (works in voice chat too).
prepareStayBooking Prepare a hotel/stay booking for the user to confirm and pay — the agentic-booking entry point for stays (works in voice chat too).
updateTravelBooking Update the status of a saved flight or stay.

Form Builder (18)

Tool What it does
addFieldGroup Add a group of fields to an existing form template.
createFormTemplate Create a new form template with field definitions.
examineForms Check form builder status — template counts by status, recent submissions, popular forms.
exportSubmissionPdf Export a form submission as an A4 PDF document.
generateChoiceFields Generate choice/selection fields (select, autocomplete, radio_group, checkbox, checkbox_group, switch) for a form.
generateLayoutFields Generate layout/structural elements (paragraph, section_divider) for a form.
generateMediaFields Generate media/capture fields (file_upload, signature, date) for a form.
generateTextFields Generate text input fields (text_field, textarea, number) for a form.
getFormSchema Get the full field schema of a form template for reading/modifying.
lockSubmission Lock or finalise a form submission, making it read-only.
manageFormTemplate Publish, archive or duplicate a form template.
removeFormFields Remove fields from a form template by their IDs.
reorderFormFields Reorder fields in a form template.
searchFormSubmissions Search form submissions by template, entity scope, status, date range, or full-text across responses.
searchFormTemplates Search form templates by name, status, or extension scope.
submitForm Submit a form with response values.
updateFormFields Replace the entire field schema of a form template.
updateFormTemplate Update an existing form template — name, description, or fields.

Google Meet (1)

Tool What it does
createGoogleMeetMeeting Create a Google Meet meeting and return its join URL.

Group Accounts (14)

Tool What it does
createGroupAccount Create a new group account.
examineGroupAccount Get a complete 360° snapshot of ONE group account in a single call — profile (with linked contacts/users), upcoming events, attachments and recent emails — instead of calling getGroupAccount + getG.
getGroupAccount Get full details of a group account including its linked contacts and users.
getGroupAccountAttachments List documents and files linked to a group account.
getGroupAccountUpcomingEvents Get upcoming calendar events linked to a group account (via linked users and contacts).
getMyBillingOverview Return the calling client-portal user's billing overview: linked account, Stripe customer status, current balance, recent charges.
linkContactToGroupAccount Link a contact to a group account.
linkDocumentToGroupAccount Attach a document to a group account.
linkFileToGroupAccount Attach a file to a group account.
listGroupAccounts List all active group accounts.
searchGroupAccountEmails Group-account email search: find emails in connected inboxes involving a GROUP ACCOUNT (by addresses from the group account's data and linked contacts).
searchGroupAccounts Search for group accounts by name.
unlinkContactFromGroupAccount Remove the link between a contact and a group account.
updateGroupAccount Update group account data.

HR (40)

Tool What it does
addTrainingRecord Record completed training.
approveLeaveRequest Approve a pending leave request.
clockIn Clock an employee in (creates an open time entry).
clockOut Close the active time entry; computes hours worked.
createEmployee Create an employee. Example: createEmployee({ name: "Alex", email: "alex [at] example.com", job_title: "Engineer" }).
createHiringCandidate Create a new hiring candidate.
createHiringPipeline Create a new hiring pipeline with custom stages.
createReview Create a review for an employee under a cycle.
denyLeaveRequest Deny a pending leave request.
examineEmployee Get a complete 360° snapshot of ONE employee in a single call — profile, leave balance, onboarding checklist, training records and time entries — instead of calling getEmployee + getLeaveBalance + .
fileGrievance File a new grievance on behalf of an employee.
getEmployee Get full employee profile (job, compensation, contact).
getGrievances List grievances. Example: getGrievances({ status: "open" }).
getHiringCandidate Get full candidate details by ID.
getHiringPipelineOverview Examiner: pipeline stage counts, candidate distribution, recruitment funnel.
getHrDashboard Examiner tool: HR snapshot — headcount, open positions, pending leave, active onboarding, pending reviews, today's attendance, open grievances, published policies.
getLeaveBalance Get an employee's leave balances.
getLeaveRequests List leave requests, optionally filtered.
getOnboardingChecklist List active onboarding checklists or templates.
getPolicies List policies. Example: getPolicies({ status: "published" }).
getPolicyAcknowledgments List employees who acknowledged a policy.
getReviewCycles List performance review cycles.
getTimeEntries List time entries with optional filters.
getTrainingRecords List training records, optionally for one employee.
inviteEmployeeToTeam Create a User account for an unlinked employee and link them.
listEmployees List employees with optional status filter.
listHiringCandidates List hiring candidates with optional pipeline/stage filters.
moveHiringCandidateStage Move a candidate to a different stage.
openEmployee Open the employee profile tab.
openHiringCandidate Open a candidate tab.
openHumanResources Open the Human Resources view in the UI.
searchEmployees Search the employee directory by name, email, title, or department.
searchHiringCandidates Search hiring candidates by name, role title, email, or skills.
startOnboarding Kick off an onboarding instance from a template.
submitAssessment Submit a self or manager assessment.
submitLeaveRequest Submit a leave request.
toggleOnboardingItem Toggle an onboarding checklist item.
updateEmployee Update employee fields.
updateGrievance Update grievance status, resolution, or add a timeline note.
updateHiringCandidate Deep-merge data into a candidate.

Email Inbox (12)

Tool What it does
findAndReadEmail ONE-SHOT: search inboxes for an email AND return the full body of the top match.
forwardEmail Forward an email to one or more recipients.
getDraft Get a specific email draft including its full HTML body content.
getEmailSignature Read the email signature configured for one of the user's connected inboxes (the signature appended to emails they send).
getInboxFolders Get the mail folders (Inbox, Sent, Drafts, etc.) for a specific connected email inbox.
getInboxMessages Get paginated messages from a specific mail folder.
listDrafts List the current user's email drafts.
listInboxes List the user's connected email inboxes (Microsoft/Gmail accounts).
openInboxSettings Open the Inbox Settings tab where the user can connect a new email account (Microsoft, Google, Zoho) or manage agent access for existing inboxes.
resendEmail Resend a previously sent email.
updateDraft Update an existing email draft.
updateEmailSignature Update the email signature for one of the user's connected inboxes ("update my email signature to ...").

Marketing (46)

Tool What it does
activateEmailSequence GATED: Activate an email sequence — starts enrolling segment contacts and sending drip emails.
createDesign Design a branded graphic on the Design Studio canvas from a plain-language brief, using the brand kit for colours, tone and logo.
createEmailSequence Create an email drip sequence with steps.
createLandingPage Create a single-page campaign landing page (saved as a draft).
createMarketingCampaign Create a new marketing campaign.
createMarketingContent Manually create a content piece in the library (not AI-generated).
createMarketingPlan Create a strategic marketing plan document.
createMarketingSegment Create an audience segment.
deleteDesignAsset GATED: Delete a Design Studio asset (soft delete).
deleteEmailSequence GATED: Delete an email sequence (soft delete).
deleteMarketingCampaign GATED: Delete a marketing campaign (soft delete).
deleteMarketingContent GATED: Delete a content piece from the library (soft delete).
deleteMarketingSegment GATED: Delete an audience segment (soft delete).
enrollInEmailSequence Enroll one or more contacts in an email sequence (drip).
generateDesignImage Generate an AI image (text-free photographic background) and save it as a Design Studio asset the team can use in posts and pages.
generateMarketingContent AI-powered content generation using copywriting frameworks (AIDA, PAS, BAB, 4Ps, Storytelling).
generateMarketingStrategy AI-powered CMO strategy generation based on a marketing plan.
generateSequenceStep AI-generate a single email step for a sequence based on context.
getBrandKit Read the tenant Brand Kit so you produce ON-BRAND content and landing pages: brand name, tagline, logo URL, website, contact email/phone, and physical address.
getCampaignPerformance Get detailed performance metrics for a specific campaign.
getEmailSequence Get full email sequence details including steps and subscriber stats.
getMarketingAnalytics Get overall marketing analytics: open/click/conversion rates, deliverability (bounce/unsubscribe rates), content performance by type, top acquisition sources (attribution + revenue), audience segme.
getMarketingCampaign Get full campaign details with associated content, sequences, and performance.
getMarketingContent Get full content piece details by ID.
getMarketingDashboard Examine marketing status: active campaigns, content pipeline counts, email sequence stats, recent performance metrics, AI spend summary.
getMarketingPlan Get full marketing plan details by ID.
getMarketingRecommendations CMO-level AI recommendations based on current performance data and full-funnel analysis (awareness→retention).
launchMarketingCampaign GATED: Launch a campaign — activates scheduled content and sequences.
listCampaignSuggestions Account-wide triage: which active campaigns have pending closed-loop optimizer suggestions (A/B winner, low engagement, deliverability), with each suggestion's type and reason plus the campaign aut.
listDesignAssets List the marketing Design Studio assets (reusable graphics/images the team uses in social posts, landing pages, and campaigns).
listMarketingSegments List audience segments with contact counts.
listSocialAccounts List the tenant's connected social accounts (id, platform, handle, status).
pauseMarketingCampaign GATED: Pause an active campaign — stops scheduled content and sequences.
previewSegmentContacts Preview which contacts match a segment.
publishMarketingContent GATED: Publish content — for blog_draft type, creates a post via the blog extension.
refineDesign Change an existing Design Studio design from a plain-language instruction (e.g.
scheduleSocialPost GATED: Schedule (or draft) a social post to a connected account.
searchMarketingCampaigns Search marketing campaigns by name, channel, status, or date range.
searchMarketingContent Search content library by title, type, status, or campaign.
setCampaignAutonomy GATED: Set a campaign's closed-loop autonomy and run an immediate optimization pass.
updateEmailSequence Update an email sequence.
updateLandingPage Update an existing landing page (title, HTML, slug, SEO, or status).
updateMarketingCampaign Update an existing campaign.
updateMarketingContent Update an existing content piece.
updateMarketingPlan Update an existing marketing plan.
updateMarketingSegment Update a segment. Can update name, rules, or contact list.

MCP Gateway (5)

Tool What it does
getMcpGatewayOverview Get overview of configured MCP servers including total counts by status and recently connected servers.
mcpCallTool Execute a tool on a remote MCP server.
mcpDiscoverTools Connect to an MCP server and discover its available tools and resources.
mcpListServers List all configured MCP servers with their status, tool counts, and connection info.
mcpReadResource Read a resource from an MCP server by URI.

Notifications (9)

Tool What it does
cancelWatcher Cancel an active background watcher by its id.
createNotification Create and broadcast a notification.
createWatcher Register a "wake me when X happens" background watcher.
examineNotifications Examiner tool: Check notification stats — unread count, recent activity, type breakdown (urgent/everyone/user), and delivery summary.
listNotifications List notifications with optional filters.
listWatchers List the user's background watchers.
openNotifications Open the Notifications centre tab in the UI.
searchNotifications Search notifications by keyword in title or body.
updateNotification Mark notification(s) as read or dismissed.

Credential Vaults (2)

Tool What it does
vaultList List vaults the user has access to, or list entries in a specific vault.
vaultLookup Search the encrypted credential vault by hostname, label, email, or entry ID.

People Tracker (1)

Tool What it does
examineTeamLocations Where is/was a team member: read the People Tracker location log ("where was Jessica on Monday?", "who was on site last week?", "where is the team today?").

Personal Assistant (11)

Tool What it does
paAdjustSchedule Adjust an existing scheduled goal's cadence based on updated dates, follow-up state, source status, failures, or changed context.
paAnswerBrief Record the user's answer to the assistant's current clarifying question and advance the brief (entities, locale confirmation, recurrence, notification channels, follow-up strategy).
paApproveAndSchedule After the user has reviewed a test run and approves, convert the tested task into a reusable template and schedule it with the chosen wake-up cadence.
paGetGoal Get the current state of a personal-assistant goal (stage, plan facts, pending question, governance) so you can continue the dance.
paGovernanceCheck Diff the tools the goal needs against what the user is already granted.
paListGoalTasks List the agent tasks a personal-assistant goal has spawned (test, production, and sub-tasks) with their current status.
paListGoals Answer "what are you currently managing for me?" — summarise everything the personal assistant has on the go (what it is watching, the cadence, whether it is scheduled or still being set up).
paResearchGoal Research how the goal can be achieved using knowledge search and web search: relevant sources (e.g.
paRunTest Run a READINESS AUDIT of the assembled goal (NOT an execution): do we have the tools, governance, stored logins, channels, budget and extensions to run this if enabled?.
paStartBrief Start a new ONGOING Personal Assistant goal from the user's brief — something they want kept an eye on / monitored / reminded about on a recurring schedule (NOT a one-off job).
paWatchTest Return the goal's latest readiness-audit result (ready + per-check list).

Platform (58)

Tool What it does
addTeamCardComment Post a comment on a team card.
approvePortalUser Approve a pending user's request to access a client portal.
assessFeasibility Run a feasibility / do-able rating on the current brief draft.
checkOtpCode Check the hidden OTP vault for a fresh (<10 min) one-time login code the user supplied for a service, to clear a second-factor prompt while logging in.
checkRates Check the current pricing rates and Account balance for this account.
composeExtensionBuildPrompt Turn an idea (or one of the developer's briefs) into a structured, ready-to-paste prompt the developer hands to their OWN local MCP client (Claude/Cursor) to build the SOIS extension.
createSupportTicket Create a new support ticket to contact the network admin.
deleteDraft Delete an UNSENT email draft (removes it from the provider and the drafts list).
deleteStoredApi Delete stored API credentials.
executeApiCall Execute an HTTP request to a stored API.
findIntegrationsByTag Search remembered integrations by tag.
gatherMobileBuildConfig Validate + normalize a proposed build brief (app name, bundle identifier, audience, brand colour, store listing) and echo it back with any issues.
getActivityDetail Get detailed breakdown of a specific agent interaction by trace ID.
getAvailableAgentToolkits List the OTHER extensions installed in this sector whose toolkits give YOU (the agent) capabilities you can use to populate the user's app on demand.
getBillingSummary Get billing summary for the current user's client account: outstanding balance, this month's charges, amount paid this month, and a 6-month payment trend chart.
getCountriesByRegion List all countries in a region or subregion.
getCountryBankConfig Get the bank account form configuration for a country — returns the required banking fields (e.g.
getMobileAppInfra Return the infrastructure facts your agent needs to plan a branded mobile app: the workspace API base + deep-link scheme, the auth model, that the app is a Capacitor wrap of the SOIS web app (so in.
getMobileBrandingToolkit Return the workspace branding defaults (current logo, theme/brand colour, app name) plus the icon/splash asset spec (square PNG, 512px+) so your agent can propose branding for the app.
getMyExtensionBrief Read one of the developer's own extension briefs in detail (name, description, status, plan, and lifecycle history) so the co-pilot can discuss or refine it.
getPortalSummary Get a summary of all client portals configured for this tenant: how many portals exist, their access modes, how many users are linked, and how many pending approvals.
getPromotableItems Read marketing-ready items from one promotable source returned by listPromotableSources: name, description, price and image where the extension stores them.
getRecentActivity Get a summary of recent agent interactions.
getStoreGuidelines Return the Apple App Store Review + Google Play policy essentials and mobile UX laws the app and its store listing must honour (privacy, account deletion, login, metadata accuracy, sign-in options,.
getSupportTicket Get full details of a support ticket including all responses.
getTeamBoard View a team's Kanban board.
getToolReliability Check which agent capabilities have been reliable vs having issues recently.
linkUserToPortal Grant a user (customer/client) access to a client portal.
listExtensionProjects List your extension projects with their current status.
listInstalledExtensions List installed extensions/integrations for this tenant.
listMyExtensionBriefs List the developer's own extension briefs (apps) with status and version, so the co-pilot can reference what they are building.
listPromotableSources List the real things this workspace can promote, discovered from the extensions it has installed (e.g.
listRememberedIntegrations List all remembered API integrations with their tags and capabilities.
listStoredApis List all APIs the user has stored credentials for.
manageExtensionData Create, read, update, or delete records in a user-built extension's data table.
manifestTraining MANDATORY pre-build read.
markEmailRead Mark an email message as read.
openExtension Open an installed extension/integration in an app tab.
openPDFPreview Pop a PDF (or document) open in a floating preview dialog in the user's app so they can read it inline WITHOUT leaving the conversation.
rejectPortalUser Reject a pending user's request to access a client portal.
rememberIntegration Store metadata about an API integration in memory (NOT the credentials).
requestBundleUploadUrl PRIMARY UPLOAD PATH — try this first.
requestLogoUploadUrl PRIMARY logo upload path.
respondToSupportTicket Add a response to an existing support ticket.
saveEmailAttachmentToFiles Save an attachment from an email into the tenant Files library (S3-backed, text-extracted, linkable to contacts).
searchMemory Search knowledge base files for specific information.
searchMemorySemantic Search learned memories using natural language.
searchSupportTickets Search support tickets by keyword, status, or both.
searchTools Discover MORE tools when your current toolset lacks what the task needs.
set_user_name_preference Save the user's preferred form of address and an optional phonetic pronunciation hint.
storeApiCredentials Securely store API credentials for later use.
submitMobileBuild Submit the brief to build the branded mobile app.
submitOtpCode Store a short-lived one-time login / OTP / 2FA / verification code the user just gave you, so a running task can use it to finish logging in somewhere.
unlinkUserFromPortal Revoke a user's access to a client portal.
updateTeamCard Update a card on a team board.
updateTeamChecklist Add, toggle (complete/uncomplete), or remove a checklist item on a team card.
updateUserData Update metadata (custom data fields) for a client user.
uploadExtensionBundleFromUrl Step 3 of the PRIMARY path — companion to requestBundleUploadUrl.

Reports (5)

Tool What it does
listReportSources List the data sources you can build tabular reports from, with their available dimensions (group-by fields), measures (aggregates like count/sum), and filters.
listSavedReports List saved report templates visible to the current user (their own plus shared).
runReportQuery Run an ad-hoc tabular report against a whitelisted source.
runSavedReport Re-run a saved report template by id (the Run button).
saveReportTemplate Save a report query you designed as a reusable template.

Signatures (10)

Tool What it does
addSignatureRecipient Add a recipient (signer, approver, viewer, or CC) to a signature envelope.
createEnvelope Create a new signature envelope draft.
getEnvelope Get full details of a signature envelope including recipients, fields, and status.
getEnvelopeAudit Get the complete audit trail for a signature envelope.
getSignaturesSummary Examine signature envelope status: counts by status (draft, sent, completed, declined, expired, voided), recent envelopes, pending actions, completion rates.
listEnvelopes List signature envelopes with optional status filter.
remindEnvelope Chase outstanding signatures: send a reminder to everyone still pending on an envelope, or to one recipient by name/email.
searchEnvelopes Search signature envelopes by name, recipient email, status, or date range.
sendEnvelope Send a signature envelope for signing.
voidEnvelope Void/cancel an active signature envelope.

Slack (8)

Tool What it does
slackFindUser Find Slack workspace members by name or email, returning their Slack user id (for @-mentions) and display name.
slackLatestMessages Get the latest messages across the channels the workspace bot is in, newest first, merged from multiple channels.
slackListChannels List channels in a connected Slack workspace (name, topic, member count).
slackListWorkspaces List the Slack workspaces connected to this organisation (name, id, channel count, status).
slackReadChannel Read recent messages from one Slack channel (most recent first), with author names resolved.
slackSearchMessages Search Slack message history for a query and return matching messages with channel + author.
slackSendMessage Post a message to a Slack channel on behalf of the organisation.
slackShareCard Send a rich card to a Slack channel: a titled block with optional subtitle, labelled fields, a link button, and @-mentions.

Team Members (7)

Tool What it does
getTeamMember Get detailed information about a specific team member by their user ID.
getTeamMemberProfile Get a team member's profile sections (travel preferences, medical info, dietary requirements, hobbies, next of kin, etc.).
inviteTeamMember Invite a new team member (non-super-admin) by name and email.
listTeamMembers List all team members in the current organisation.
removeTeamMemberSection Remove a profile section from a team member.
resetTeamMemberPassword Reset a team member's password and generate a new temporary password.
updateTeamMemberSection Add or update a profile section on a team member.

Microsoft Teams (1)

Tool What it does
createTeamsMeeting Create a Microsoft Teams meeting and return its join URL.

Todo Lists (8)

Tool What it does
addTodoListItems Add new items to an EXISTING todo list without replacing the current items.
createTodoList Create a NEW todo list.
deleteTodoList Delete a todo list permanently.
getTodoListDetails Get full details of a specific todo list including all checklist items, their completion status, priorities, and due dates.
getTodoListOverview Get a summary overview of the user's todo lists: total count, breakdown by status (active/completed/archived), and the 5 most recently updated lists.
searchTodoLists Search todo lists by name or filter by status.
shareTodoList Share a todo list with team members or everyone (creator only).
updateTodoList Update an existing todo list: rename it, change its status, or replace all checklist items.

Destinations (3)

Tool What it does
getDestinationsSummary Get an overview of saved destinations: counts by status and type (POI/activity), recent saves.
saveDestinationItem Save a destination item (POI or activity) from the most recent search results.
searchDestinations Search for points of interest and activities near a city.

Flights (3)

Tool What it does
getFlightsSummary Get an overview of saved flights: counts by status, upcoming departures, and recent saves.
saveFlightOffer Amadeus provider: save a flight offer from the most recent searchFlights (Amadeus) results.
searchFlights Flight search (Amadeus provider).

Hotels (3)

Tool What it does
getHotelsSummary Get an overview of saved hotels: counts by status, upcoming stays, and recent saves.
saveHotelOffer Save a hotel offer from the most recent search results.
searchHotels Search for hotels in a city.

Travel Planner (20)

Tool What it does
checkInsuranceCoverage Check travel insurance coverage for a traveller.
checkPassportValidity Check passport validity for a traveller.
checkTravellerAvailability Check whether a traveller is FREE to travel over a date window before you book flights/hotels — and report where they already are on those dates.
checkVisaRequirements Research visa requirements for a specific nationality entering a destination country.
createTravelCard Create a new task card on a travel request sub-board.
createTravelProfile Create a traveller profile with passport details, preferences, and frequent flyer info.
createTravelRequest Create a new travel request — call this ONLY once you are confident you have the core payload.
findTraveller Resolve who is travelling by name, email, or company across BOTH the team (users) and contacts (which includes customers and suppliers).
getTravelPlannerOverview Examiner tool: Get an overview of travel requests — total counts by status, recent requests, active alerts (passport expiry, visa issues), and pipeline summary.
getTravelRequestCards Get all task cards for a specific travel request.
moveTravelCard Move a travel card to a different status column.
resolveTravelOrigin Resolve the origin airport for a travel request from prior trips or profile home airport.
searchFlightsForCard Search available flights for a travel card.
searchHotelsForCard Search available hotels for a travel card, linked to the card.
searchTransfersForCard Search ground transport options — airport transfers, taxis, car rentals — linked to the card.
searchTravelProfiles Search traveller profiles by name, email, or passport nationality.
searchTravelRequests Search and filter travel requests by traveller name, destination, status, or date range.
updateTravelCard Update a travel request task card — status, assignee, result data, checklist.
updateTravelProfile Update an existing traveller profile.
updateTravelRequest Update an existing travel request.

Transfers (3)

Tool What it does
getTransfersSummary Get an overview of saved transfers: counts by status and type, recent saves.
saveTransferOffer Save a transfer offer from the most recent search results.
searchTransfers Search for airport/city transfers.

Trips (3)

Tool What it does
getRecommendations Get personalised destination recommendations based on an origin city.
getTripsSummary Get an overview of saved trip predictions and recommendations: counts by type and status, recent saves.
predictTripPurpose Predict whether a trip is for business or leisure, and get destination recommendations.

Client Users (1)

Tool What it does
inviteUser Invite a new app user (customer/client).

Warehouse (42)

Tool What it does
autoGenerateLocations Auto-generate all locations for a warehouse based on its aisle configuration.
cancelStockCount Cancel an in-progress or draft stock count session without applying any adjustments.
createLocation Create a single warehouse location with aisle/row/column coordinates and optional dimensions.
createStockAdjustment Set the quantity of a stock record to a new value (manual adjustment).
createWarehouse Create a new warehouse with optional aisle configuration.
deleteLocation Soft-delete a warehouse location.
deleteWarehouse Soft-delete a warehouse and all its locations.
dispatchStock Dispatch stock from a warehouse location.
getBillingCharges List warehouse billing charges (the open-transaction ledger) — what has accrued for a customer.
getBillingInvoices List warehouse billing invoices with their period, total, and status.
getCapacitySummary Get warehouse capacity utilisation metrics: total locations, occupied, empty, full, reserved, utilisation percentage.
getCatalogItem Get one catalogue item by its SKU number or catalogue id, including its on-hand stock summary across all warehouses.
getGoodsReceipts List warehouse goods received notes (GRN — the inbound delivery workflow).
getInventoryValuation Sum the monetary value of all on-hand stock as quantity × unit_cost (taken from stock.data.unit_cost).
getLocation Get details of a specific warehouse location including dimensions and capacity.
getLowStock List stock items at or below their reorder threshold.
getMyStock List stock items belonging to the calling client-portal user's linked contact(s).
getMyStockTransactions Transaction history (movements, receipts, putaways) for stock belonging to the calling client-portal user's linked contact(s).
getOutOfStock List stock rows with available quantity of zero (quantity - reserved_quantity ≤ 0).
getPickLists List warehouse pick lists (the outbound pick/pack/dispatch workflow).
getStockAtLocation List all stock items at a specific warehouse location with quantities and availability.
getStockDiscrepancies List variance lines from recent completed stock counts.
getStockSummary Get a summary of all stock across all warehouses — total items, quantities, locations with stock, reservations.
getTransactionHistory Get the transaction history for a warehouse, location, or specific stock item.
getWarehouse Get full details of a warehouse including its aisle configuration and location summary.
getWarehouseSummary Examine warehouse status: total warehouses, location counts per warehouse, capacity utilisation, empty vs occupied locations.
listLocations List locations within a warehouse, optionally filtered by aisle number.
moveStock Move stock from one warehouse location to another.
putAwayStock Guided one-shot putaway: asks suggestPutaway for the best location for a known product and quantity, then receives the stock there.
receiveStock Receive stock into a warehouse location.
recordStockCount Record the counted quantity for a single stock item in an active count session.
releaseReservation Release a previously made stock reservation.
requestStockCollection Raise a request for the calling client-portal user to collect stock they hold in the warehouse.
reserveStock Reserve (earmark) stock at a location for future dispatch.
searchCatalogue Search the stock catalogue (the SKU register) by name, SKU, or barcode.
searchStock Search stock by item name across all warehouses.
searchWarehouses Search warehouses by name or company.
setProductDimensions Store or update physical dimensions for a product in the global registry.
startStockCount Create and start a new stock count session for a warehouse.
submitStockCountResult Complete a stock count session: applies every line variance as a stock adjustment with reason "Stock count adjustment" and references the count_id in the audit log.
suggestPutaway Get AI-suggested warehouse locations for putting away incoming stock.
updateWarehouse Update warehouse details (name, address, contact info).

WhatsApp Messaging (3)

Tool What it does
get_whatsapp_status Check WhatsApp connection status and view the current whitelist of allowed phone numbers.
send_whatsapp Send a WhatsApp message to a whitelisted phone number.
test_whatsapp_connection Test the WhatsApp connection by verifying the API token and phone number ID are valid.

Zoom (1)

Tool What it does
createZoomMeeting Create a Zoom video meeting and return its join URL.

The app builder runs over this same endpoint

There is no separate MCP server for building apps. The extension-builder tools ship as part of the same workspace MCP server and appear in the same tools/list, with one condition: they are admin-gated, so they surface only for builder-capable accounts. If your account can build apps, your tool list also includes:

  • getExtensionRules, getExtensionFrameSpec (what an app must look like)
  • createExtensionProject, listExtensionProjects, getExtensionStatus
  • validateExtensionBundle, uploadExtensionBundle

So building an app is the same act as everything else: you connect your agent to your workspace once, and if you are a builder it can scaffold, validate, and publish an app alongside running your business, all through the one /api/mcp endpoint. See Build an app for the workflow.

(Not to be confused with the public, read-only build-context connector an operator can add to advertise a network's capabilities; that is a separate, unauthenticated endpoint on the network domain, not your workspace MCP server.)


Budget, limits, and errors

What Value
Rate limit 120 requests/minute
Tool-call cost metered as AI credits
Budget per API key (Option B) or per workspace; you set the cap
Token expiry 90 days (Option B Sanctum token); OAuth tokens refresh automatically

Standard JSON-RPC errors apply, plus a few specific codes:

Code Meaning
-32001 Unauthorized or session expired (Option A connectors get the OAuth challenge here)
-32002 Insufficient AI credits
-32003 Tool not permitted for this account
-32004 Budget cap reached

Test your connection

curl -X POST "https://<your-workspace>.sois.ai/api/mcp/test" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "X-Api-Key: YOUR_API_KEY"

Returns whether the credentials work and how many tools are visible to them.


Per-client setup

Connecting Sois is identical at the protocol level (paste your MCP URL → OAuth or Bearer auth) but each client has its own config file and reload procedure. Pick yours:

Claude Desktop

  1. Open Claude Desktop → Settings → Developer → Edit Config (or open ~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows, ~/.config/Claude/claude_desktop_config.json on Linux).
  2. Add an mcpServers entry pointing at your workspace MCP URL with the mcp-remote stdio bridge (or use the in-app Add custom connector flow if your Claude Desktop version exposes it — that path uses OAuth and skips the JSON file entirely).
  3. Quit Claude Desktop completely (⌘Q on macOS, Alt+F4 on Windows) and reopen it.
  4. Open the plug menu in any chat. Your workspace should appear in the list.

ChatGPT

  1. ChatGPT Desktop → Settings → Apps → Advanced settings → Create app.
  2. Turn on Developer mode (acknowledge the warning), then click Create app.
  3. Name it "Sois", set Connection to Server URL, paste your MCP URL.
  4. For Authentication, choose OAuth. ChatGPT discovers the Sois OAuth endpoints automatically and walks you through the sign-in + consent flow on first use.

Cursor

  1. Create or open ~/.cursor/mcp.json (or .cursor/mcp.json in a repo root for project scope).
  2. Add an mcpServers entry with your workspace MCP URL + bearer headers.
  3. Restart Cursor. Sois should appear in the MCP panel.

VS Code Copilot Chat

  1. Open the command palette → Preferences: Open User Settings (JSON).
  2. Add a top-level mcp block with your workspace URL + headers.
  3. Reload the window. Sois tools appear in the Copilot tray.

Other MCP-capable clients

Any client that supports remote MCP over HTTP with a bearer token can connect. Use the URL + headers from your workspace's Connect your agent view and follow the client's "Add remote MCP server" docs.


Enable autonomous bundle uploads (Claude Desktop)

When you want your agent to push a finished extension bundle to Sois itself (rather than uploading via the dev console's drop-zone), the agent's bash / code-execution sandbox must be allowed to reach the Sois host. Claude Desktop is the only client today that has a per-app domain allowlist sitting in front of the bash tool — and by default it does not include user domains.

To enable autonomous uploads from a Claude Desktop agent:

  1. Claude Desktop → Settings → Capabilities.

  2. Under Code execution and file creation, enable both Cloud code execution and file creation and Allow network egress.

  3. Domain allowlist → choose Custom (or Package managers only with additional allowed domains).

  4. Add these production hosts under Additional allowed domains (paste each, click Add):

    *.sois.ai
    app.sois.ai
    sois.ai
    
  5. Quit and reopen Claude Desktop. Your agent's bash / curl can now reach Sois.

Without this allowlist, the agent's PUT to the presigned-upload URL will fail with a host-not-allowed / DNS error, and uploads will silently hang or never leave the client.

Cursor / VS Code Copilot / ChatGPT do not need this — Cursor's agent uses your local shell directly (no per-app sandbox), and ChatGPT custom connectors route network calls through the OAuth-bound MCP transport, not a separate sandbox. Autonomous uploads from those clients work without additional setup.


Bringing your own agent is the strategic path. The MCP Server lets your own AI client reason over your Sois tools directly, so Sois spends no AI on your behalf. The Chat Agent Gateway is the on-ramp for callers that have no agent: plain-English messages over HTTP, where Sois's own agent does the reasoning. Use whichever fits your caller, or both.


Want to connect Sois to external MCP servers instead? See the MCP Gateway for outbound connections.