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.
AI & MCP
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.
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.
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.
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.
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.
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.
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.
Can. List campaigns in the project, paged.
Can’t. Send, schedule, resume or edit one.
Can. List templates, paged, without their bodies.
Can’t. Return HTML. Use get_template for one full document.
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.
Can. List saved segments, so a campaign or a subscriber filter can name one by id.
Can’t. Create or edit a segment.
Can. List the email and SMS senders already connected to the project.
Can’t. Add a sender, or reveal channel credentials.
Can. List groups, so a campaign can name one by id.
Can’t. Create a group or move subscribers between them.
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.
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.
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.
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