MCP Server#

Outeract ships an official Model Context Protocol server, so Claude, Cursor, and custom agents can send messages and read conversations with zero glue code. It exposes a curated subset of the Developer GraphQL API as MCP tools over streamable HTTP.

Connecting#

URLhttps://api.outeract.com/mcp
TransportStreamable HTTP (stateless)
AuthOuteract API key as bearer token

Every request must carry an API key — there is no anonymous access, including tool listing:

Authorization: Bearer YOUR_API_KEY

The API key scopes the whole session to its application, and its scopes gate the tools exactly as they gate the GraphQL fields: events:read for event and conversation reads, users:read for user reads, events:write for sending messages and creating events/files, and users:write for creating and updating users.

Claude (custom connector)#

Add a custom connector in Claude settings, or for Claude Code:

{
  "mcpServers": {
    "outeract": {
      "type": "http",
      "url": "https://api.outeract.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Cursor#

In ~/.cursor/mcp.json:

{
  "mcpServers": {
    "outeract": {
      "url": "https://api.outeract.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Tools#

The server exposes 13 curated tools. Destructive operations (deletes, identity transfers) and all org/app/key/webhook/platform configuration are deliberately absent.

Conversations#

ToolDescription
conversation_contextA conversation projected as an LLM-ready, chat-completions-style messages array — the flagship tool, see below
conversationsList conversations with pagination and search
user_conversationsAll conversations a user participates in

Messaging#

ToolDescription
send_messageSend a message to a user or conversation (platform and sender inferred automatically; supports attachments, templates, and idempotency keys)

Events#

ToolDescription
eventsQuery events with cursor pagination and filtering (by user, conversation, event types, payload)
eventGet a single event by ID
create_eventCreate a custom event (custom.{category}.{action}) in a user’s event stream

Users#

ToolDescription
usersQuery users with search and cursor pagination
identitiesQuery platform identities (phone numbers, platform user IDs)
create_userCreate a user
update_userUpdate a user’s name, system-user flag, or config

Files#

ToolDescription
filesGet file records by ID
create_fileCreate a file (for use as a send_message attachment)

The conversation_context tool#

Reconstructing chat history for an LLM normally means paging events, resolving sender edges, joining identities, and re-deriving roles. conversation_context does all of that server-side and returns a ready-to-use transcript:

{
  "name": "conversation_context",
  "arguments": {
    "conversationId": "40a4b0d1-...",
    "limit": 50
  }
}

returns:

{
  "conversationId": "40a4b0d1-...",
  "participants": [
    {"userId": "...", "name": "Bot", "isSystemUser": true, "identities": ["whatsapp:+1000"]},
    {"userId": "...", "name": "Alice", "isSystemUser": false, "identities": ["whatsapp:+2000"]}
  ],
  "messages": [
    {"role": "user", "content": [{"type": "text", "text": "hi bot"}], "senderUserId": "...", "createdAt": "..."},
    {"role": "assistant", "content": [{"type": "text", "text": "hello alice"}], "senderUserId": "...", "createdAt": "..."}
  ],
  "hasMore": false,
  "oldestCursor": "..."
}
  • Roles — messages sent by the perspective user map to assistant, everyone else to user, system messages stay system. The perspective defaults to the conversation’s system user (your bot); override with perspectiveUserId.
  • Attachments — files become typed content parts (image or file) with URLs.
  • Windowing — returns the newest limit messages in chronological order. Pass oldestCursor from a previous result as beforeCursor to extend context further back.

The same projection is available as the conversationContext query on the Developer GraphQL API.

Operational notes#

  • Tool arguments use camelCase (matching the GraphQL schema); tool names are snake_case.
  • Requests count against the same rate limit as the Developer API (100 requests/minute per key by default).
  • The endpoint can be disabled server-side with the MCP_ENABLED environment variable.