Skip to content
watsi

MCP server

MCP server

Connect Claude Desktop, Cursor, Claude.ai, or ChatGPT to your watsi workspace and ask questions about your contacts, conversations, appointments, and analytics in natural language.

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/mcp

One 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.

ToolScopeWhat it returns
list_contactscontacts:readYour contacts (customers), most recent first.
find_conversationsconversations:readConversations in the workspace, filterable and paginated.
get_conversationconversations:readOne conversation: messages plus the AI summary.
list_appointmentsscheduling:readUpcoming calendar appointments.
workspace_overviewanalytics:readHeadline analytics: volume, AI response rate, trends.
resources_listresources:readFiles and resources in the workspace library.
resources_getresources:readMetadata 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:write or scheduling:write. The dashboard key picker does not offer those three (it does offer other write scopes such as messages:write and contacts: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_upload returns a short-lived signed URL, you send the file with a PUT, then attachment_finalize attaches it.
  • If it can't (a chat such as Claude.ai or ChatGPT): attachment_import_url downloads a public https:// 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. 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. 2

    Add the server to Claude Desktop

    Edit your claude_desktop_config.json (Settings → Developer → Edit Config) and add a watsi entry. Claude Desktop bridges to remote HTTP servers via mcp-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. 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. 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.