Safe retries
Send an Idempotency-Key with any write. A retry within 24 hours gets the original response back.
Point Claude at your own instance and it works your outbound with a curated set of the same operations the dashboard uses: contacts, campaigns, the inbox, the CRM. It researches and drafts. Your team decides what leaves.
claude mcp add --transport http salesos https://api.your-domain.com/v1/mcpThe MCP server is part of your instance. What your Claude reads through it goes to Anthropic, as anything you give Claude does; nothing passes through a service of ours.
Claude Code, Claude Desktop, Cursor or any MCP client adds your instance by URL and signs in through the browser with OAuth. No key to paste.
The consent screen names the workspace and every scope. A connected client never gets more than the person who connected it.
Tools that send a message are never exposed over MCP. Starting a campaign needs a permission a self-registered client is never granted.
No tool can approve a request or change autonomy policies. Agent sends on WhatsApp and LinkedIn, not released yet, come back as pending approval for a person to decide.
Write scopes let a client edit records such as contacts, mailbox settings and suppressions. Grant each client only what it needs, and treat reply text it reads as untrusted.
Your Claude runs on your Anthropic plan. The in-product assistant uses the key you set on the instance, billed to you by Anthropic.
A curated tool profile across several workspaces, a Claude plugin, dry runs and cost previews are planned. See the roadmap
Add contacts, build campaigns, read replies and react to events from your own code, on your own domain. Scoped keys, safe retries and stable error codes come as standard.
curl -X POST "https://api.your-domain.com/v1/contacts" \
-H "Authorization: Bearer $API_KEY" \
-H "Idempotency-Key: 7f3c9a2e-import-01" \
-H "Content-Type: application/json" \
-d '{
"email": "dana@acme.com",
"first_name": "Dana",
"company": "Acme"
}'Sign in once through the browser, then run campaigns, contacts and the inbox from your terminal or CI. It prints a table to a person and JSON to a pipe, and asks before anything sends real mail.
Read the CLI guideSubscribe an HTTPS endpoint to replies, sends, bounces, new contacts, booked meetings and more. Every attempt is kept so you can see what happened.
Open one WebSocket with a key that holds the realtime scope and receive sends, replies, audit entries and your own events as they happen, filtered by the same permissions as the dashboard.
Read the realtime guideSend an Idempotency-Key with any write. A retry within 24 hours gets the original response back.
A key can read and write contacts without being able to send a single email. Give each integration only what it needs.
Every error carries a stable code for your logic and a request id for your logs, next to a message written for people.
No. Over MCP your Claude can read, organise and draft. Tools that send a message are never exposed, and an MCP client that registers itself is never granted the permission to start a campaign or to send without approval.
No. Approving, rejecting and changing autonomy policies need a signed-in member. An MCP tool, API key or OAuth token gets a refusal and the request stays pending.
Create an API key in settings and send it as a Bearer token. Each key carries only the scopes you give it and can be limited to certain IP addresses. Apps acting for other people use OAuth 2.1 with PKCE.
Yes. Send an Idempotency-Key header with any write, and the instance stores the response for 24 hours and replays it for a retry with the same key instead of doing the work twice.
Every error has a stable machine-readable code and a request_id next to a human-readable message. Build your logic on the code and the HTTP status.
This is not a way to give an AI the send button. Your Claude gets the legwork; approving, sending and changing the rules stay with signed-in people.
Install the instance, add it to Claude by URL, and approve the scopes in your browser.