UniOne MCP server

Connect Claude Code, Cursor, Codex and other AI agents to UniOne with MCP (Model Context Protocol), the standard way AI agents connect to external services. With the UniOne MCP server, your agent can send a first email from a sandbox domain, set up and verify your own domain, manage templates and webhooks, and check the suppression list, all from a chat.

Server URL: https://mcp.unione.io/mcp

It works with Claude Code, Cursor, Codex, VS Code, Windsurf, Gemini CLI, Claude, ChatGPT and any client that supports MCP over Streamable HTTP. The MCP server is free: you pay only for what the tools do, as with the API — emails you send and email validations.

Use MCP to set things up and check them from a chat. In your application, send email with the Web API from your server.

Choose how to connect

Sign in to UniOneAPI key
Best forYour coding agent, Claude, ChatGPTCI, agents without a browser, project keys
What you addOnly the server URLServer URL and an API key header
AccessYour accountThe account or project the key belongs to
RevokeSettings → Security → Connected applicationsRegenerate the key

Option 1. Sign in to UniOne (recommended)

Add the server URL to your client. On the first connection, the client opens UniOne in your browser. Sign in and check the Allow access to your account? screen: the account, the application and the access it requests. Then click Allow access. The client never sees your password or API keys.

UniOne consent screen "Allow access to your account?" with Claude Code requesting full access to the account Web API
The consent screen shows the account, the application and the access it requests.

Claude Code

claude mcp add --transport http unione https://mcp.unione.io/mcp

Run /mcp, select unione and choose Authenticate.

Cursor

Add to ~/.cursor/mcp.json for all projects, or to .cursor/mcp.json for one project:

{
  "mcpServers": {
    "unione": {
      "url": "https://mcp.unione.io/mcp"
    }
  }
}

Click Needs login next to the server to sign in.

Codex

codex mcp add unione --url https://mcp.unione.io/mcp
codex mcp login unione

VS Code (GitHub Copilot)

Add to .vscode/mcp.json:

{
  "servers": {
    "unione": {
      "type": "http",
      "url": "https://mcp.unione.io/mcp"
    }
  }
}

Click Start above the server name and sign in when VS Code asks.

Claude (web and desktop)

Open Settings → Connectors → Add custom connector. Enter UniOne as the name and https://mcp.unione.io/mcp as the URL, then click Connect.

ChatGPT

Open Settings → Apps & Connectors → Advanced settings and turn on Developer mode. Then click Create and enter https://mcp.unione.io/mcp as the connector URL. Custom connectors are not available on every ChatGPT plan.

Who can connect

  • The account owner can connect any client.
  • A teammate with shared access can connect if their role includes Connected applications. The Administrator and Developer presets include it. Otherwise, the consent screen asks them to contact the account owner.
  • Signing in gives access to the whole account. To limit an agent to one project, connect with that project's API key.

Option 2. Use an API key

Use an API key for CI, agents without a browser, or to limit an agent to one project. Send the key in the Authorization header:

Authorization: Bearer <your UniOne API key>

Copy the account key from API key at the top of the control panel, or a project key from Projects. Store the key in an environment variable. Never paste it into a chat or commit it to a repository.

Claude Code

claude mcp add --transport http unione https://mcp.unione.io/mcp \
  --header "Authorization: Bearer $UNIONE_API_KEY"

Cursor

{
  "mcpServers": {
    "unione": {
      "url": "https://mcp.unione.io/mcp",
      "headers": { "Authorization": "Bearer ${env:UNIONE_API_KEY}" }
    }
  }
}

Codex

Add to ~/.codex/config.toml:

[mcp_servers.unione]
url = "https://mcp.unione.io/mcp"
bearer_token_env_var = "UNIONE_API_KEY"

VS Code (GitHub Copilot)

VS Code asks for the key once and stores it securely:

{
  "inputs": [
    { "type": "promptString", "id": "unione-key", "description": "UniOne API key", "password": true }
  ],
  "servers": {
    "unione": {
      "type": "http",
      "url": "https://mcp.unione.io/mcp",
      "headers": { "Authorization": "Bearer ${input:unione-key}" }
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "unione": {
      "serverUrl": "https://mcp.unione.io/mcp",
      "headers": { "Authorization": "Bearer ${env:UNIONE_API_KEY}" }
    }
  }
}

Other clients

Any MCP client that supports Streamable HTTP works with UniOne. If it supports OAuth sign-in, add only the server URL https://mcp.unione.io/mcp. Otherwise, add the header Authorization: Bearer <API key>. For example, in Gemini CLI run gemini mcp add --transport http unione https://mcp.unione.io/mcp, then /mcp auth unione to sign in.

Check the connection

Ask your agent:

Check my UniOne account.

The agent calls get_account and shows your account details.

Send your first email

The first email doesn't need DNS. Every account has a sandbox domain with DKIM and SPF already set up. Ask your agent:

Send a test email to [email protected] from the UniOne sandbox domain.

Here is what happens:

  1. The agent gets your sandbox domain.
  2. The agent adds your address as a sandbox recipient, and UniOne sends a confirmation email to it.
  3. Open your inbox and click the link in that email. Until you do, the sandbox doesn't send to this address. The link works once and expires in 48 hours.
  4. Tell the agent you've confirmed. It sends the test email and shows you the job_id.

The sandbox is for testing: up to 10 confirmed recipients, 100 emails a day, and the domain expires after 31 days. It works only when you sign in or use the account API key, not a project key.

To email your users, send from your own domain.

Send from your own domain

The sandbox sends only to confirmed addresses. To email your users, verify your own domain. Your agent does most of the work.

  1. Ask your agent:

    Set up example.com for sending and tell me which DNS records to add.

    The agent adds the domain and shows the records: a verification record and DKIM.

  2. Add the records to your domain's DNS. If your agent can manage your DNS, for example through your DNS provider's MCP server or CLI, it can add them for you. Otherwise, add them in your DNS provider's control panel.
  3. Wait 10–15 minutes, then ask:

    Check if example.com is verified.

    DNS changes usually take up to 30 minutes, in rare cases up to 48 hours.

  4. When the verification record and DKIM pass, send from any address on your domain, for example [email protected].

On the Free plan, you can send from your domain only to addresses on your own domain or to confirmed addresses. To email your customers, choose a paid plan.

Without MCP, add and verify the domain in Settings → Sending domains or follow Getting started.

Example prompts

  • "Add my teammate's address to the sandbox recipients."
  • "Why isn't my domain verified yet? Tell me what to fix."
  • "Create an order confirmation template with the customer's name, order number and total."
  • "Notify https://example.com/hooks/unione when an email bounces or gets a spam complaint."
  • "Why doesn't [email protected] get our emails?"
  • "Check these five addresses before I send to them."
  • "Export last week's delivery events to a CSV file."

Tools

Each tool has a type. Clients use it to ask for your confirmation before an action that sends email, changes or deletes something.

  • Read — only reads data.
  • Write — creates or changes data; nothing is lost.
  • Destructive — sends email, overwrites or deletes. Your client asks you to confirm.
AreaToolTypeWhat it does
Accountget_accountReadShows the account or project you're connected to
Domainslist_domainsReadLists your domains and their verification status
get_dns_recordsWriteAdds a domain if needed and returns the DNS records to set
validate_domainReadChecks the verification record and DKIM
delete_domainDestructiveDeletes a domain; sending from it stops
Sandboxget_sandbox_domainWriteReturns your sandbox domain, creating it if needed
list_confirmed_emailsReadLists sandbox recipients and their status
add_confirmed_emailWriteAdds a sandbox recipient and sends a confirmation email
delete_confirmed_emailDestructiveRemoves a sandbox recipient
Sendingsend_emailDestructiveSends an email now or up to 24 hours later. Can't be undone
Templateslist_templates, get_templateReadLists templates or shows one
set_templateDestructiveCreates a template or overwrites an existing one
delete_templateDestructiveDeletes a template
Webhookslist_webhooks, get_webhookReadLists webhooks or shows one
set_webhookDestructiveCreates, overwrites or pauses a webhook
delete_webhookDestructiveDeletes a webhook
Suppression listget_suppression, list_suppressionsReadShows why and since when an address is on the list
set_suppressionDestructiveAdds an address to the list, so emails to it aren't sent
delete_suppressionDestructiveRemoves an address from the list, if this is allowed
Validationvalidate_emailWriteValidates an address. Billed per check
Delivery logsrequest_event_dump, get_event_dumpWrite, ReadExports delivery events to a file
delete_event_dumpDestructiveDeletes an export
Tagslist_tagsReadLists tags
delete_tagDestructiveDeletes a tag
Projectslist_projectsReadLists projects
create_projectWriteCreates a project and returns its API key
update_projectDestructiveOverwrites project settings
delete_projectDestructiveMoves a project to the trash

Project tools work when projects are enabled for your account.

Security

  • You confirm risky actions. Tools that send email, overwrite or delete are marked destructive, so your client asks you to confirm first.
  • No secrets in logs. Keys and tokens are passed to the UniOne API and never written to our logs.
  • Allow only what you started. The application name on the consent screen is set by the application itself. Allow access only if you started the connection yourself.
  • Revoke at any time. Open Settings → Security → Connected applications and revoke the application from the menu next to it. Its access stops at once; other applications and your API keys keep working. For API key connections, regenerate the key.
  • Same rules as the API. Every tool calls the public Web API, with the same limits, billing and permissions.
  • Keys stay on the server. Use MCP to set things up and check them. In your application, call the Web API from your server with the key in an environment variable. The setup prompt on UniOne for AI agents gives your agent these rules.
Connected applications tab in Settings → Security listing Claude Code with full access to the Web API
Revoke an application from the menu next to it.

Troubleshooting

Tools return Web API responses as they are. A successful call returns 200. An error returns a 4xx or 5xx HTTP code with an error code and a message that says what went wrong. See all error codes in API errors or in the OpenAPI spec.

ResponseWhat it meansWhat to do
401The key or sign-in is missing, or access was revokedCheck the Authorization: Bearer header, update the key or sign in again
Other 4xxSomething is wrong with the requestRead the error message: it names the field or the limit. Ask the agent to fix the request
429Too many calls in a short timeWait and retry
5xxTemporary problem on our sideRetry later. If it keeps happening, contact support

If the consent screen asks you to contact the account owner, your role doesn't include Connected applications. Ask the owner to add it, or to connect the client.

Related