Developers
Sonny MCP Beta
Connect MCP-compatible AI assistants — Claude, and any client that speaks the Model Context Protocol — to your workspace, with the same scopes and boundaries as the public API.
Read the Public API guideQuickstart
- 01
Add Sonny to Claude
In Claude or Cowork, add a custom connector with the URL
https://www.usesonny.com/api/mcp. Sonny supports automatic client registration, so there is no client ID or secret to copy. - 02
Approve workspace access
Claude opens Sonny in your browser. Sign in, review the requested permissions, and choose the workspace to connect. OAuth 2.1 with PKCE keeps the resulting access and refresh tokens scoped to that approval.
- 03
Ask your assistant to use Sonny
Tools describe themselves, so a prompt like “List my open conversations” is enough. Assistants see which tools are read-only and which are destructive, so a good client asks before it changes anything.
Claude Code
claude mcp add --transport http sonny https://www.usesonny.com/api/mcpJSON client configuration
{
"mcpServers": {
"sonny": {
"url": "https://www.usesonny.com/api/mcp"
}
}
}API key compatibility
If a client cannot complete OAuth, create a scoped key in Settings → Developer and send it as an Authorization Bearer header. API keys remain fully supported for server-to-server and legacy clients.
"Authorization": "Bearer sonny_your_key"How Sonny keeps tool calls safe
- One workspace, chosen scopes
- Every call runs inside the workspace chosen during OAuth consent or the workspace that owns the API key. A tool only works when its credential holds the required scope.
- Honest tool annotations
- Read-only tools are marked read-only; updating and deleting tools are marked destructive so your client can confirm before acting.
- The same business rules
- Tools run the exact workflows the public API runs — audit history, notifications, and webhooks all behave as if a teammate made the change.
Keep an assistant inside one inbox
Workspaces often hold several sources — one per product or brand. Have your assistant call list_sources once to discover them, then pass sourceId to list_conversations so questions about one product only ever return that product's conversations. Every conversation also carries its own sourceId, so results are verifiable.
Tool catalog
Every public API operation is available as a tool. The required scope is listed beside each one.
- list_contacts
- List contacts
contacts:read- create_contact
- Create a contact
contacts:write- get_contact
- Get a contact
contacts:read- update_contact
- Update a contact
contacts:write- archive_contact
- Archive a contact
contacts:write- list_channels
- List conversation channels
conversations:read- list_sources
- List sources
conversations:read- list_conversations
- List conversations
conversations:read- get_conversation
- Get a conversation
conversations:read- update_conversation
- Update a conversation
conversations:write- list_messages
- List messages
messages:read- create_internal_note
- Create an internal note
messages:write- send_message
- Send a reply to the customer
messages:send- list_webhooks
- List webhook endpoints
webhooks:read- create_webhook
- Create a webhook endpoint
webhooks:write- list_webhook_events
- List webhook event types
webhooks:read- update_webhook
- Update a webhook endpoint
webhooks:write- delete_webhook
- Delete a webhook endpoint
webhooks:write- test_webhook
- Queue a test event
webhooks:write- list_webhook_deliveries
- List webhook deliveries
webhooks:read- retry_webhook_delivery
- Retry a failed delivery
webhooks:write