The server speaks the Model Context Protocol over Streamable HTTP at one endpoint. Most of the catalog reads; a small set of agent-configuration tools writes, and those only work if you explicitly grant a :write scope.
Early access (design partners)
The MCP server is rolling out to design-partner workspaces first. If you'd like access, contact your watsi representative or write to support@watsi.ai.
Endpoint
POST https://mcp.watsi.ai/mcpOne endpoint, Streamable HTTP, stateless. There is no /sse endpoint and no session to keep alive — every request carries its own credentials. Two ways to authenticate, and both resolve to a single workspace:
- API key. Your workspace key as a bearer token:
Authorization: Bearer wats_…. Use this in clients you configure yourself — Claude Desktop, Cursor, Claude Code, your own agents. - OAuth 2.1. Live today, with Dynamic Client Registration. The only option for web clients that cannot send a custom header (Claude.ai, ChatGPT): you sign in at watsi, pick the workspace, and approve the scopes on a consent screen.
Either way the credential is scoped to one workspace, and every tool call is audited.
What you can read
A sample of the read tools. The authoritative catalog is whatever the server publishes over tools/list — ask your client to list its tools once connected. It is not pinned here on purpose: a tool whose backing service is not wired in an environment is withheld there rather than announced and failing, so any fixed list in a doc would be wrong somewhere. Each tool maps 1:1 to a scope and only works if your credential carries the matching :read scope.
| Tool | Scope | What it returns |
|---|---|---|
list_contacts | contacts:read | Your contacts (customers), most recent first. |
find_conversations | conversations:read | Conversations in the workspace, filterable and paginated. |
get_conversation | conversations:read | One conversation: messages plus the AI summary. |
list_appointments | scheduling:read | Upcoming calendar appointments. |
workspace_overview | analytics:read | Headline analytics: volume, AI response rate, trends. |
resources_list | resources:read | Files and resources in the workspace library. |
resources_get | resources:read | Metadata for one resource file. |
list_appointments requires scheduling to be enabled for your workspace.
What it can change
Most of the catalog reads, but not all of it. A small set of tools configures the AI agent itself — create an agent, update its configuration, add or remove knowledge, set the assignment policy, set member schedules, update the voice-calling config — so you can set an agent up from an AI client instead of the dashboard. They are gated three ways:
- An explicit write scope. Each one needs
agents:write,knowledge:writeorscheduling:write. The dashboard key picker does not offer those three (it does offer other write scopes such asmessages:writeandcontacts:write), so a dashboard key cannot change the agent configuration — those writes need a key minted by watsi support, or an OAuth grant where you tick the scope. - Unchecked by default. On the OAuth consent screen the write scopes are listed by name and start unchecked. Approve nothing extra and the session is read-only.
- Announced to your client. Every write tool advertises itself as a mutation (
readOnlyHint: false) and says whether it replaces or removes data (destructiveHint), so the client can ask you before each call.
Attaching files
Three of those tools upload a file into your workspace: to Resources (what the agent sends to your customers), to a property's photos, floor plan or brochure, or to the knowledge base. They need agents:write, and a knowledge document also needs knowledge:write.
- If your client can make HTTP requests (Claude Code, a script):
attachment_create_uploadreturns a short-lived signed URL, you send the file with aPUT, thenattachment_finalizeattaches it. - If it can't (a chat such as Claude.ai or ChatGPT):
attachment_import_urldownloads a publichttps://link and attaches it in one call. Private or local addresses are refused.
The server checks the type and size of the file that was actually stored: PDF, images, audio and MP4 for Resources (up to 20 MB); PNG, JPEG, WebP or GIF for photos and the floor plan (up to 5 MB, at most 20 photos per property); PDF for the brochure; PDF, DOCX, TXT, MD or CSV for knowledge (up to 10 MB).
Connect in one paste
Already in an MCP-aware assistant (Claude Code, Cursor's agent, or any client that accepts a server URL plus a header)? Paste this prompt, swap in your key, and send it. It sets up the connection and asks the first question in one shot:
Prefer a single command? In Claude Code run:
claude mcp add --transport http watsi https://mcp.watsi.ai/mcp --header "Authorization: Bearer YOUR_API_KEY"Set up a client step by step
- 1
Mint a read-only API key
Open Settings → API Keys in the watsi dashboard, click Generate new key, and grant only the read scopes you need (e.g.
contacts:read,conversations:read). Copy the key immediately — it is shown only once. - 2
Add the server to Claude Desktop
Edit your
claude_desktop_config.json(Settings → Developer → Edit Config) and add awatsientry. Claude Desktop bridges to remote HTTP servers viamcp-remote:claude_desktop_config.json{ "mcpServers": { "watsi": { "command": "npx", "args": [ "-y", "mcp-remote", "https://mcp.watsi.ai/mcp", "--header", "Authorization: Bearer YOUR_API_KEY" ] } } } - 3
…or Cursor / any HTTP MCP client
Clients that speak Streamable HTTP natively (Cursor, Windsurf, custom agents) take the URL and headers directly. For Cursor, add this to
.cursor/mcp.json:.cursor/mcp.json{ "mcpServers": { "watsi": { "url": "https://mcp.watsi.ai/mcp", "headers": { "Authorization": "Bearer YOUR_API_KEY" } } } } - 4
Ask questions
Restart the client and ask about your workspace in plain language. The model picks the right read tool, calls it with your key, and answers from your live data.
Claude.ai (web) and ChatGPT
The web apps reach custom MCP servers from their own cloud and cannot send a static API key, so they sign in with OAuth — which is live. Add https://mcp.watsi.ai/mcp as a custom connector, sign in to watsi when prompted, choose the workspace, and approve the scopes. There is no header to configure and no key to paste: the client registers itself with us automatically (Dynamic Client Registration).
Both apps warn that a custom connector is not verified by them — expected for any server you add by URL.
Example questions
- “How many contacts did I add this week?”
- “Show me my most recent WhatsApp conversations that are still open.”
- “Summarize the conversation with Maria Garcia.”
- “What appointments do I have in the next 7 days?”
- “How did my AI response rate change vs last month?”
Good to know
- Read by default. A key created in the dashboard defaults to read scopes. The dashboard also offers a few write scopes (messages, leads, contacts) you can opt into; the agent-configuration writes are not available there.
- Workspace-scoped. A key only ever sees the data of the workspace it belongs to.
- Audited. Every successful call is recorded (which credential, which tool, when) so you have a full egress trail.
- Rate-limited per key. Requests are capped per minute; pace large, paginated pulls accordingly.