get_email_analytics answers the overview, send, and event reads), and a few have no HTTP route at all. The catalog below is generated from what an organization connection’s tools/list returns, grouped under the topics get_brew_capabilities uses. A brand connection sees the same tools except create_brand.
Every tool is strictly typed and carries all four MCP annotations as booleans: readOnlyHint, destructiveHint, idempotentHint, and openWorldHint, shown as the catalog’s Read-only, Destructive, Idempotent and Open world columns. A write that overwrites, unsubscribes, or sends is marked destructive. Call get_brew_capabilities with a tool for one tool’s full input schema, or with a topic for focused help. Each description is exactly what your agent reads, and it states the tool’s cost: every credit-metered tool names its price there, and running out returns INSUFFICIENT_CREDITS.
Tool Catalog
Automations
Contacts and audiences
Domains
Brand
Images and media
Account and discovery
Resources
Attach a resource to give your agent context before it calls tools. Each resource uses the connection’s permissions. Brand context resources are available on brand connections; organization connections offer the public gallery resources and can request brand context through tools withbrand_id.
brew://brand returns the brand’s saved identity (name, tagline,
description, links) with emailDesign, imageStyle, and logos. For the
same context through a tool, use
get_brand({ include: ["emailDesign", "imageStyle", "logos"] }). A plain
get_brand already returns the identity.
Conventions
response_format
Only two tools take response_format, because only their results come in two
shapes. Every other tool returns one shape and refuses the field as an invalid
argument.
The HTTP API, SDK, and CLI always return the full contact row.
Every result carries its record in
structuredContent, and every tool
publishes that record’s shape as its outputSchema in tools/list, so a client can validate a result and read its fields without
guessing.
idempotency_key
Write tools that can be retried accept an optional idempotency_key: a repeat
call with the same key replays the original result instead of acting twice.
Use a fresh UUID per intended action. See Safe Retries.
include
Expansions are opt-in. Every tool that takes include takes an array of
the expansion names its input schema lists (include: ["html"] on
get_email, include: ["emailDesign", "logos"] on get_brand). A string is
refused.
Previews
Email and image tools attach Brew’s stored preview where your client can show it in the transcript, plus an Open in Brew link, and the result’s text says which previews the client shows. Markdown images are left out: some clients turn them into a “Show Image” button instead of the design.preview: false
returns text only.
Confirmation
On OAuth and organization connections, a call that emails people or removes contact data returns a confirmation request first: campaigns, tests to someone else, automation launches and trigger fires, publishing or resuming an automation, resuming a send, deleting contacts or a contact field, and verifying a domain that has campaigns held on it. After the user approves, the same call withconfirmed: true and the request’s
confirmation_id runs it. See
Confirmation.
Limit Errors
When a call hits a plan limit (INSUFFICIENT_CREDITS, SEND_QUOTA_EXCEEDED,
BRAND_LIMIT_REACHED, or an audience run held at the send allowance), the MCP
error states the limit and when it resets. It does not suggest upgrading.
get_usage shows the limit, the balance, and the reset date (period.end).
The brand limit does not reset; deleting an unused brand frees a slot. The
HTTP API keeps its own suggestion text.
Result Size
Results are sized to fit a model’s context:- A list page comes back whole or not at all. When a page is too large, the
call returns
RESPONSE_TOO_LARGEwith no rows and names what to lower (thelimit, or anincludeexpansion). Rows are never trimmed behind a cursor.list_insightsis the one exception: it trims instead of refusing. - List pages are smaller than the HTTP API’s, and each tool’s
limitstates its bounds. MCP Page Sizes owns the numbers and thelist_insightstrimming rule. - A single record comes back whole in
structuredContent. Its text summary may be shortened, keeping the identifiers and next steps. A record past the hard cap returnsRESPONSE_TOO_LARGEtoo. - A write always returns its outcome. An oversized result is compacted in place (long strings and arrays shortened), keeping every field’s type.
Email Language
Every design carries alang: the language its copy is written in, as an
ISO 639-1 code or zh-Hans / zh-Hant. Brew reads it after each content
change unless a caller set it, and renders it as the HTML document’s lang
(and dir for right-to-left languages) on every send and export, and in the
HTML get_email returns.
get_emailreturnslangon the design once Brew has read it.create_emailacceptslangto name the language up front. Omit it and Brew detects it from the finished body.update_email_metadataacceptslangto set or correct it. Like the other metadata fields it is free and creates no version. A value you set is kept: Brew stops re-detecting it after later edits. Passlang: nullto clear it, and Brew reads the language from the email again.
Chat Artifacts and Feedback
list_chats returns chat titles, links and timestamps. Select a chat and use
get_chat_artifacts for its referenced email designs, automations and triggers.
These tools do not return previous messages, conversation snippets, channel
context or the model used in the chat.
import_contacts (JSON rows) and import_contacts_csv (CSV text) create missing
contacts, subscribed unless a row opts out, and update existing ones. Both take
consent, validate and fileName, record the batch in Import History, and
return its importId. onConflict: "skip" leaves existing contacts unchanged,
and dryRun: true returns the same counts without writing anything. update_contact updates one existing contact and cannot
create one. Contact field values must match the declared field type; use
list_contact_fields to read those definitions.
When you ask to send feedback, submit_feedback takes your message, an optional
title and an issue type. Brew redacts secrets and addresses and sends those fields
to Notra’s Brew inbox. report_tool_issue records a requested technical issue for
Brew support and returns a support reference. Neither automatically attaches
conversation history. Ordinary tool results keep diagnostic identifiers on the
server. Read our Privacy Policy for data recipients,
retention, public asset handling and deletion controls.
Need Help?
Our team is ready to support you at every step of your journey with Brew. Choose the option that works best for you:- Self-Service Tools
- Talk to Our Team
Search Documentation
Type in the “Ask any question” search bar at the top left to instantly find relevant documentation pages.
Ask ChatGPT or Claude
Click here to open the Copy page menu at the top of this page, then send the page to ChatGPT, Claude, or your editor.