Your own Claude

Your Claude, your pipeline, your server.

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

Over MCP. A teammate with a short leash, by design.

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

One command to connect

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.

Only what your role allows

The consent screen names the workspace and every scope. A connected client never gets more than the person who connected it.

Drafts, never sends

Tools that send a message are never exposed over MCP. Starting a campaign needs a permission a self-registered client is never granted.

Never approves

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.

Scope it to the job

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 own key, no markup

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

The REST API. Everything in the dashboard is an API call.

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"
  }'

The CLI. The same work from a terminal.

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 guide

Webhooks. Every event, signed and logged.

Subscribe an HTTPS endpoint to replies, sends, bounces, new contacts, booked meetings and more. Every attempt is kept so you can see what happened.

Signed
An HMAC-SHA256 signature over the timestamp and the raw body, with your endpoint’s secret.
Retried
Up to 8 attempts with backoff from 30 seconds to an hour, then marked abandoned.
Replayable
Every attempt is in the delivery log, and a failed one can be sent again with its original event id.
HTTPS only
Private, loopback and link-local addresses are refused, and redirects are never followed.
Read the webhooks reference

Realtime. The stream the dashboard runs on.

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 guide

Built to be relied on. Retries, permissions and errors you can plan around.

Safe retries

Send an Idempotency-Key with any write. A retry within 24 hours gets the original response back.

Scoped keys

A key can read and write contacts without being able to send a single email. Give each integration only what it needs.

Errors with a code

Every error carries a stable code for your logic and a request id for your logs, next to a message written for people.

Questions. Building on it, answered.

Can Claude send email through the MCP server?

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.

Can Claude approve its own send request?

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.

How do I authenticate the API?

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.

Are retries safe?

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.

What do errors look like?

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.

What this is not

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.

Connect your own Claude.

Install the instance, add it to Claude by URL, and approve the scopes in your browser.