MCP Braze
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Braze list my campaigns"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Braze
Production-ready MCP server for Braze customer engagement
Built with the MCP SDK — Works with Claude Desktop & Claude.ai
Overview
A comprehensive MCP server enabling AI assistants to interact with Braze's customer engagement platform. Features 92 tools covering user management, messaging, campaigns, analytics, email/SMS operations, catalogs, and SCIM provisioning—built for production reliability.
Related MCP server: Braze Universal MCP Server
Δ Capabilities
Core
92 Tools — Users, messaging, campaigns, analytics Multi-Channel — Push, email, SMS, in-app, webhooks Header Auth — Multi-tenant ready architecture
Reliability
Circuit Breaker — Cascading failure prevention Auto-Retry — Exponential backoff with jitter Health Checks — K8s liveness & readiness probes
Security
Input Validation — Zod schemas everywhere Injection Prevention — XSS & path attacks blocked Rate Limiting — Token bucket algorithm
Performance
Request Queue — Concurrency control (10 max) Request Deduplication — Shares concurrent results Response Caching — TTL-based with LRU eviction
Quick Start
npm install && npm run build
node dist/index.jsConfiguration
{
"mcpServers": {
"braze": {
"command": "node",
"args": ["/path/to/mcp-braze/dist/index.js"],
"env": {
"BRAZE_API_KEY": "your-api-key",
"BRAZE_REST_ENDPOINT": "https://rest.iad-01.braze.com"
}
}
}
}{
"mcpServers": {
"braze": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://your-server.com/mcp",
"--header", "x-braze-api-key:your-api-key",
"--header", "x-braze-rest-endpoint:https://rest.iad-01.braze.com"
]
}
}
}Deploy server with HTTP transport
Claude.ai → Settings → Connectors
Add URL:
https://your-server.com/mcpAdd headers:
x-braze-api-key,x-braze-rest-endpoint
Platform | Config Path |
macOS |
|
Windows |
|
β Tools
Category | Tools |
Users |
|
Messaging |
|
Scheduling |
|
Exports |
|
| |
SMS |
|
Subscriptions |
|
Templates |
|
Catalogs |
|
Preferences |
|
SCIM |
|
° Deprecated — use email_blocklist instead
Usage
"Track a purchase event for user123 with amount $99.99"
"Send the welcome campaign to users who signed up today"
"Get campaign analytics for the last 30 days"
"List all users in the Premium segment"
"Create a new email template for order confirmations"Authentication
Priority | API Key | REST Endpoint |
1 |
|
|
2 |
|
|
3 |
|
|
4 |
| — |
Braze REST Endpoints
Region | Endpoint |
US-01 |
|
US-02 |
|
US-03 |
|
US-04 |
|
US-05 |
|
US-06 |
|
US-07 |
|
US-08 |
|
EU-01 |
|
EU-02 |
|
Find your endpoint in Braze Dashboard → Settings → APIs and Identifiers
Stability & Resilience
Auto-retries on HTTP 429, 500, 502, 503, 504
Handles network errors (ECONNRESET, ETIMEDOUT, ECONNREFUSED)
Respects
Retry-AfterheadersConfigurable max retries, delays, jitter
Prevents cascading failures:
CLOSED — Normal operation
OPEN — Fast-fail mode (5 failures trigger)
HALF_OPEN — Recovery testing
Timeout: 30s default (AbortController)
Deduplication: Shares identical concurrent requests
Queue: Limits to 10 concurrent requests
Rate Limiting: Token bucket algorithm
Kubernetes-ready probes:
health— Full status reportliveness— Alive checkreadiness— Traffic ready
Deployment
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY dist ./dist
EXPOSE 3000
CMD ["node", "dist/index.js"]docker build -t mcp-braze .
docker run -p 3000:3000 \
-e BRAZE_API_KEY=your-key \
-e BRAZE_REST_ENDPOINT=https://rest.iad-01.braze.com \
mcp-braze# Server
PORT=3000
NODE_ENV=production
# Auth (prefer headers in production)
BRAZE_API_KEY=
BRAZE_REST_ENDPOINT=
BRAZE_APP_ID=
# Rate Limiting
RATE_LIMIT_ENABLED=true
RATE_LIMIT_REQUESTS_PER_SECOND=10
# Caching
CACHE_ENABLED=true
CACHE_TTL_SECONDS=300
CACHE_MAX_SIZE=1000
# Circuit Breaker
CIRCUIT_BREAKER_ENABLED=true
CIRCUIT_BREAKER_THRESHOLD=5
CIRCUIT_BREAKER_RESET_TIMEOUT=60000
# Logging
LOG_LEVEL=info
# Sentry (Optional)
SENTRY_DSN=
SENTRY_ENVIRONMENT=productionArchitecture
src/
├── index.ts # Entry point
├── server.ts # MCP server init
├── tools/ # 92 tools
│ ├── users.ts
│ ├── messaging.ts
│ ├── scheduling.ts
│ ├── exports.ts
│ ├── email.ts
│ ├── sms.ts
│ ├── subscriptions.ts
│ ├── templates.ts
│ ├── catalogs.ts
│ ├── preference-center.ts
│ └── scim.ts
└── lib/ # Core utilities
├── auth.ts # API key extraction
├── client.ts # Braze HTTP client
├── validation.ts # Zod schemas
├── errors.ts # Error handling
├── retry.ts # Backoff
├── circuit-breaker.ts # Failure prevention
├── rate-limiter.ts # Token bucket
├── cache.ts # TTL cache
├── request-queue.ts # Concurrency
├── deduplication.ts # Request dedup
├── idempotency.ts # Safe retries
├── health.ts # K8s probes
├── logger.ts # Structured logging
└── sentry.ts # Error tracking~3,500 lines · 154 unit tests · 126 e2e tests
References
MCP Specification | |
MCP SDK | |
mcp-remote | |
Braze API |
MIT License
DELTΔ & βETΑ
From Change to What's Next
Available Tools
92 toolscampaigns_analyticsC
Get campaign performance analytics over time.
Inputs: length (required), campaign_id (required), apiKey, ending_at, +1 more.
campaigns_detailsC
Get details for a specific campaign.
Inputs: campaign_id (required), apiKey, restEndpoint.
campaigns_listC
List all campaigns in the workspace.
Inputs: page, apiKey, restEndpoint, sort_direction, +2 more.
campaigns_schedule_createC
Schedule an API-triggered campaign for future delivery.
Inputs: schedule (required), campaign_id (required), apiKey, send_id, +4 more.
campaigns_schedule_deleteC
Delete a scheduled API-triggered campaign.
Inputs: campaign_id (required), schedule_id (required), apiKey, restEndpoint.
campaigns_schedule_updateC
Update a scheduled API-triggered campaign.
Inputs: schedule (required), campaign_id (required), schedule_id (required), apiKey, +1 more.
campaigns_trigger_sendB
Trigger an API-triggered campaign. The campaign must be configured as API-triggered in Braze.
Inputs: campaign_id (required), apiKey, send_id, audience, +4 more.
canvas_analyticsC
Get Canvas performance analytics over time.
Inputs: length (required), canvas_id (required), apiKey, ending_at, +3 more.
canvas_detailsC
Get details for a specific Canvas.
Inputs: canvas_id (required), apiKey, restEndpoint.
canvas_listC
List all Canvases in the workspace.
Inputs: page, apiKey, restEndpoint, sort_direction, +2 more.
canvas_schedule_createC
Schedule an API-triggered Canvas for future delivery.
Inputs: schedule (required), canvas_id (required), apiKey, audience, +3 more.
canvas_schedule_deleteC
Delete a scheduled API-triggered Canvas.
Inputs: canvas_id (required), schedule_id (required), apiKey, restEndpoint.
canvas_schedule_updateC
Update a scheduled API-triggered Canvas.
Inputs: schedule (required), canvas_id (required), schedule_id (required), apiKey, +1 more.
canvas_summaryC
Get summary analytics for a Canvas.
Inputs: length (required), canvas_id (required), apiKey, ending_at, +1 more.
canvas_trigger_sendB
Trigger an API-triggered Canvas. The Canvas must be configured as API-triggered in Braze.
Inputs: canvas_id (required), apiKey, audience, broadcast, +3 more.
catalog_item_createC
Create a single catalog item.
Inputs: item_id (required), item_data (required), catalog_name (required), apiKey, +1 more.
catalog_item_deleteC
Delete a single catalog item.
Inputs: item_id (required), catalog_name (required), apiKey, restEndpoint.
catalog_item_editC
Edit a single catalog item (partial update).
Inputs: item_id (required), item_data (required), catalog_name (required), apiKey, +1 more.
catalog_item_getB
Get a single catalog item by ID.
Inputs: item_id (required), catalog_name (required), apiKey, restEndpoint.
catalog_items_createB
Create multiple items in a catalog.
Inputs: items (required), catalog_name (required), apiKey, restEndpoint.
catalog_items_deleteC
Delete multiple items from a catalog.
Inputs: items (required), catalog_name (required), apiKey, restEndpoint.
catalog_items_editC
Edit multiple items in a catalog (partial update).
Inputs: items (required), catalog_name (required), apiKey, restEndpoint.
catalog_items_listC
List items in a catalog.
Inputs: catalog_name (required), apiKey, cursor, restEndpoint.
catalog_items_updateB
Update multiple items in a catalog (replaces entire item).
Inputs: items (required), catalog_name (required), apiKey, restEndpoint.
catalog_item_updateA
Update a single catalog item (replaces entire item).
Inputs: item_id (required), item_data (required), catalog_name (required), apiKey, +1 more.
catalogs_createC
Create a new catalog.
Inputs: catalogs (required), apiKey, restEndpoint.
catalogs_deleteC
Delete a catalog and all its items.
Inputs: catalog_name (required), apiKey, restEndpoint.
catalogs_listC
List all catalogs in the workspace.
Inputs: apiKey, restEndpoint.
content_blocks_createC
Create a new content block.
Inputs: name (required), content (required), tags, state, +3 more.
content_blocks_infoC
Get details for a specific content block.
Inputs: content_block_id (required), apiKey, restEndpoint, include_inclusion_data.
content_blocks_listC
List all content blocks in the workspace.
Inputs: limit, apiKey, offset, restEndpoint, +2 more.
content_blocks_updateC
Update an existing content block.
Inputs: content_block_id (required), name, tags, state, +3 more.
email_blacklistA
[DEPRECATED: Use email_blocklist] Add email addresses to the blacklist.
Inputs: email (required), apiKey, restEndpoint.
email_blocklistB
Add email addresses to the blocklist. Blocked emails will not receive any messages.
Inputs: email (required), apiKey, restEndpoint.
email_bounce_removeC
Remove email addresses from the hard bounce list.
Inputs: email, apiKey, emails, restEndpoint.
email_hard_bouncesC
Query emails that have hard bounced within a date range.
Inputs: email, limit, apiKey, offset, +3 more.
email_spam_removeC
Remove email addresses from the spam list.
Inputs: email, apiKey, emails, restEndpoint.
email_subscription_statusC
Change email subscription status for users.
Inputs: email (required), subscription_state (required), apiKey, restEndpoint.
email_templates_createC
Create a new email template.
Inputs: body (required), subject (required), template_name (required), tags, +4 more.
email_templates_infoC
Get details for a specific email template.
Inputs: email_template_id (required), apiKey, restEndpoint.
email_templates_listC
List all email templates in the workspace.
Inputs: limit, apiKey, offset, restEndpoint, +2 more.
email_templates_updateC
Update an existing email template.
Inputs: email_template_id (required), body, tags, apiKey, +5 more.
email_unsubscribesC
Query emails that have unsubscribed within a date range.
Inputs: email, limit, apiKey, offset, +4 more.
events_analyticsC
Get custom event analytics over time.
Inputs: event (required), length (required), unit, apiKey, +3 more.
events_listC
List all custom events tracked in the app.
Inputs: page, apiKey, restEndpoint.
kpi_dauC
Get daily active users (DAU) over time.
Inputs: length (required), apiKey, app_id, ending_at, +1 more.
kpi_mauC
Get monthly active users (MAU) over time.
Inputs: length (required), apiKey, app_id, ending_at, +1 more.
kpi_new_usersC
Get new users count over time.
Inputs: length (required), apiKey, app_id, ending_at, +1 more.
kpi_uninstallsC
Get app uninstalls over time.
Inputs: length (required), apiKey, app_id, ending_at, +1 more.
live_activity_updateB
Update an iOS Live Activity. Used for real-time updates like sports scores, delivery tracking.
Inputs: app_id (required), activity_id (required), content_state (required), apiKey, +5 more.
messages_schedule_createC
Schedule a message to be sent at a specific time.
Inputs: schedule (required), apiKey, send_id, audience, +7 more.
messages_schedule_deleteC
Delete a previously scheduled message.
Inputs: schedule_id (required), apiKey, restEndpoint.
messages_schedule_updateC
Update a previously scheduled message.
Inputs: schedule (required), schedule_id (required), apiKey, messages, +1 more.
messages_sendC
Send messages immediately to users via push, email, webhook, or content cards.
Inputs: apiKey, send_id, audience, messages, +8 more.
preference_center_createC
Create a new preference center.
Inputs: name (required), state, apiKey, restEndpoint, +5 more.
preference_center_getC
Get details for a specific preference center.
Inputs: preference_center_external_id (required), apiKey, restEndpoint.
preference_centers_listC
List all preference centers in the workspace.
Inputs: limit, apiKey, offset, restEndpoint.
preference_center_updateC
Update an existing preference center.
Inputs: preference_center_external_id (required), name, state, apiKey, +6 more.
preference_center_urlC
Generate a preference center URL for a specific user.
Inputs: user_id (required), preference_center_external_id (required), apiKey, restEndpoint.
purchases_productsC
List all product IDs from purchase events.
Inputs: page, apiKey, restEndpoint.
purchases_quantityC
Get purchase quantity analytics over time.
Inputs: length (required), product_id (required), unit, apiKey, +3 more.
purchases_revenueC
Get revenue analytics over time.
Inputs: length (required), product_id (required), unit, apiKey, +3 more.
scheduled_broadcasts_listC
List upcoming scheduled campaigns and Canvases.
Inputs: end_time (required), apiKey, restEndpoint.
scim_users_createC
Create a new dashboard user account.
Inputs: userName (required), givenName (required), familyName (required), apiKey, +3 more.
scim_users_deleteB
Delete a dashboard user account. This is permanent.
Inputs: user_id (required), apiKey, restEndpoint.
scim_users_getA
Get a dashboard user account by SCIM ID.
Inputs: user_id (required), apiKey, restEndpoint.
scim_users_searchC
Search for dashboard users by email address.
Inputs: filter (required), count, apiKey, startIndex, +1 more.
scim_users_updateC
Update a dashboard user account.
Inputs: user_id (required), apiKey, userName, givenName, +4 more.
segments_analyticsC
Get segment size analytics over time.
Inputs: length (required), segment_id (required), apiKey, ending_at, +1 more.
segments_detailsC
Get details for a specific segment.
Inputs: segment_id (required), apiKey, restEndpoint.
segments_listC
List all segments in the workspace.
Inputs: page, apiKey, restEndpoint, sort_direction.
send_id_createA
Create a send ID for tracking message sends. Use to correlate sends with analytics.
Inputs: send_id (required), apiKey, campaign_id, restEndpoint.
sends_analyticsC
Get analytics for a specific send ID.
Inputs: length (required), send_id (required), campaign_id (required), apiKey, +2 more.
sessions_analyticsC
Get app session analytics over time.
Inputs: length (required), unit, apiKey, app_id, +2 more.
sms_invalid_phonesC
Query phone numbers that have been marked as invalid within a date range.
Inputs: limit, phone, apiKey, offset, +3 more.
sms_invalid_phones_removeC
Remove phone numbers from the invalid phone list.
Inputs: phone, apiKey, phones, restEndpoint.
subscription_status_getC
Get the subscription group status for users.
Inputs: subscription_group_id (required), email, phone, apiKey, +2 more.
subscription_status_setB
Update subscription group status for users (email or SMS/WhatsApp).
Inputs: subscription_state (required), subscription_group_id (required), email, phone, +3 more.
subscription_status_set_v2C
Update subscription group status for users (V2 API with more options).
Inputs: subscription_groups (required), email, phone, apiKey, +2 more.
subscription_user_statusC
List all subscription groups for a specific user.
Inputs: email, limit, phone, apiKey, +3 more.
transactional_email_sendB
Send a transactional email via an API-triggered campaign. Used for order confirmations, password resets, etc.
Inputs: recipient (required), campaign_id (required), apiKey, restEndpoint, +2 more.
users_alias_newC
Create new user aliases for existing users or create alias-only profiles.
Inputs: user_aliases (required), apiKey, restEndpoint.
users_alias_updateC
Update existing user aliases. Changes the alias_name for a given alias_label.
Inputs: alias_updates (required), apiKey, restEndpoint.
users_deleteA
Delete user profiles from Braze. This is permanent and cannot be undone. Use for GDPR/CCPA compliance.
Inputs: apiKey, braze_ids, external_ids, restEndpoint, +1 more.
users_exportC
Export user profiles by identifier (external_id, user_alias, or braze_id).
Inputs: apiKey, braze_ids, external_ids, restEndpoint, +2 more.
users_export_control_groupC
Export users in the Global Control Group.
Inputs: apiKey, restEndpoint, output_format, fields_to_export, +1 more.
users_export_segmentC
Export all user profiles in a segment (async job).
Inputs: segment_id (required), apiKey, restEndpoint, output_format, +2 more.
users_external_id_removeB
Remove deprecated external IDs that were previously renamed. Cleans up old ID references.
Inputs: external_ids (required), apiKey, restEndpoint.
users_external_id_renameB
Rename external IDs for users. Use for migrating to a new ID scheme.
Inputs: external_id_renames (required), apiKey, restEndpoint.
users_identifyA
Identify an alias-only user profile with an external_id. This merges the alias profile into the identified user.
Inputs: aliases_to_identify (required), apiKey, restEndpoint.
users_mergeC
Merge one user profile into another. Data from the merged user will be combined into the target user.
Inputs: merge_updates (required), apiKey, restEndpoint.
users_trackB
Track user data including attributes, custom events, and purchases. Use this to update user profiles, log events, and record purchases in Braze.
Inputs: apiKey, events, purchases, attributes, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 92 tools
Multiple tools have overlapping or confusing boundaries: catalog singular vs plural variants (catalog_item_create vs catalog_items_create), subscription_status_set vs subscription_status_set_v2, email_blocklist vs deprecated email_blacklist, and several message-sending tools (messages_send, campaigns_trigger_send, canvas_trigger_send, transactional_email_send). Descriptions help somewhat, but an agent could easily misselect.
Mostly snake_case with a resource_action pattern, but inconsistent resource plurality (preference_center_get vs preference_centers_list), action verbs (get vs details vs info), a version suffix (_v2), and deprecated blacklist vs blocklist spelling. Readable but not fully predictable.
92 tools is an extreme mismatch for a single MCP server, far beyond the ideal 3-15 range and exceeding the 50+ threshold. Many tools are redundant (e.g., singular/plural catalog item operations, v1/v2 subscription status), bloating the surface.
Coverage is broad across Braze domains (users, messages, campaigns, canvas, analytics, catalogs, SCIM), but notable gaps exist: no delete for email templates, content blocks, or preference centers; no subscription groups list; SMS send is ambiguous. Core workflows are covered, but dead ends remain.
Maintenance
Related MCP Connectors
Marketo MCP server for AI. 130 tools to operate Marketo from Claude, Cursor, or ChatGPT.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA comprehensive MCP server providing over 390 tools across 66 providers, including major SaaS platforms like GitHub, Slack, and Stripe. It enables AI assistants to interact directly with a wide array of public APIs and utility services through a single interface.-
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Braze customer engagement platform through a standardized MCP interface, providing access to Braze tools and services via a unified API.2MIT
- AlicenseNot gradedqualityFmaintenanceMCP server for Watermelon.ai that exposes all 13 public API endpoints as tools, enabling AI assistants to manage contacts, conversations, messages, custom fields, and webhooks.MIT
- AlicenseCqualityDmaintenanceComprehensive MCP server for Mailchimp Marketing API v3.0 with over 104 tools and 15+ React UI apps, enabling management of campaigns, audiences, ecommerce, automations, reports, and more via natural language.1001MIT