Skip to content

AI & MCP

Your assistant can draft. It cannot send.

Carrier Crow speaks the Model Context Protocol over HTTPS at POST /mcp. Clients that support OAuth sign in with your account. Others send an API key. None of the 15 tools can send, schedule or resume a campaign.

Connect

The server is stateless Streamable HTTP. There is no session to keep open. Discovery for OAuth 2.1 (PKCE, dynamic client registration, RFC 9728) is at /.well-known/oauth-protected-resource/mcp. The older /mcp/sse endpoint is retired and answers 410.

An API key goes in the x-api-key header, or as Authorization: Bearer. The key is already bound to one project. An OAuth grant can cover several: call list_projects, then pass project on the next tool. Omit it and the default project is used.

Claude is the client that has actually been used against this server. Any other assistant that speaks remote MCP can try the same endpoint; that is a protocol claim, not a list of tested apps.

The 15 tools

list_projects

Can. List the projects this connection may act in, and which one is the default.

Can’t. See projects the grant does not include, or change which project a later call uses except by passing its id.

list_subscribers

Can. Look up subscribers by exact email, status or a saved segment, and ask for only the fields you name.

Can’t. Read a whole large list in one call. Page with limit and skip. It does not change anyone.

create_subscriber

Can. Add one subscriber who has an email or a phone, plus a first and last name.

Can’t. Set status, tags, groups, attributes or consent. Status is stored as active.

update_subscriber

Can. Change email, phone, name, tags and attributes on one subscriber. Tags replace the whole list. Attributes merge by key, and null deletes a key.

Can’t. Change status, group membership or consent. Those stay in the app.

import_subscribers

Can. Create or update a batch. A row matches on email, or on phone when there is no email. Attributes merge; tags replace.

Can’t. Set status, groups or consent. One bad row does not stop the rest. There is no bulk-read tool.

list_campaigns

Can. List campaigns in the project, paged.

Can’t. Send, schedule, resume or edit one.

list_templates

Can. List templates, paged, without their bodies.

Can’t. Return HTML. Use get_template for one full document.

get_template

Can. Fetch one template including the content the server actually stored.

Can’t. Change it. Create and update rewrite HTML, so this is how you see the result.

list_segments

Can. List saved segments, so a campaign or a subscriber filter can name one by id.

Can’t. Create or edit a segment.

list_send_configurations

Can. List the email and SMS senders already connected to the project.

Can’t. Add a sender, or reveal channel credentials.

list_subscription_groups

Can. List groups, so a campaign can name one by id.

Can’t. Create a group or move subscribers between them.

create_template

Can. Save an email, SMS or webhook template. Email HTML is normalised, and the response lists what changed in warnings.

Can’t. Stack multi-column layouts for you, or invent merge fields outside merge.*. A viewer-role key is refused.

update_template

Can. Edit a template in place. Send only the fields that change. Content is normalised the same way as create.

Can’t. Leave a stale visual-editor copy in charge of the next send after you replace the HTML. That copy is dropped.

delete_template

Can. Delete a template that no campaign still points at.

Can’t. Undo the delete, or remove a template a campaign still references. The refusal names those campaigns.

create_campaign

Can. Create a draft. Type is standard only. Audience is the segment, else the group, else the whole project. scheduledAt is stored on the draft.

Can’t. Send, schedule or resume. scheduledAt does not start a send. Other campaign types are built in the app.

Sending stays a click in the app, by someone allowed to send. Get started