Skip to main content
Glama

MCP Braze

Production-ready MCP server for Braze customer engagement

TypeScript Node.js Tests License

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.js

Configuration

{
  "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"
      ]
    }
  }
}
  1. Deploy server with HTTP transport

  2. Claude.ai → Settings → Connectors

  3. Add URL: https://your-server.com/mcp

  4. Add headers: x-braze-api-key, x-braze-rest-endpoint

Platform

Config Path

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

→ Get your API key

β Tools

Category

Tools

Users

users_track · users_identify · users_alias_new · users_alias_update · users_delete · users_merge · users_external_id_rename · users_external_id_remove

Messaging

messages_send · campaigns_trigger_send · canvas_trigger_send · transactional_email_send · send_id_create · live_activity_update

Scheduling

scheduled_broadcasts_list · messages_schedule_create · messages_schedule_update · messages_schedule_delete · campaigns_schedule_create · campaigns_schedule_update · campaigns_schedule_delete · canvas_schedule_create · canvas_schedule_update · canvas_schedule_delete

Exports

campaigns_list · campaigns_details · campaigns_analytics · sends_analytics · canvas_list · canvas_details · canvas_analytics · canvas_summary · segments_list · segments_details · segments_analytics · users_export · users_export_segment · users_export_control_group · kpi_dau · kpi_mau · kpi_new_users · kpi_uninstalls · events_list · events_analytics · purchases_products · purchases_quantity · purchases_revenue · sessions_analytics

Email

email_hard_bounces · email_unsubscribes · email_subscription_status · email_bounce_remove · email_spam_remove · email_blocklist · email_blacklist°

SMS

sms_invalid_phones · sms_invalid_phones_remove

Subscriptions

subscription_status_get · subscription_user_status · subscription_status_set · subscription_status_set_v2

Templates

email_templates_list · email_templates_info · email_templates_create · email_templates_update · content_blocks_list · content_blocks_info · content_blocks_create · content_blocks_update

Catalogs

catalogs_list · catalogs_create · catalogs_delete · catalog_items_list · catalog_items_create · catalog_items_update · catalog_items_edit · catalog_items_delete · catalog_item_get · catalog_item_create · catalog_item_update · catalog_item_edit · catalog_item_delete

Preferences

preference_centers_list · preference_center_get · preference_center_url · preference_center_create · preference_center_update

SCIM

scim_users_search · scim_users_get · scim_users_create · scim_users_update · scim_users_delete

° 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

x-braze-api-key header

x-braze-rest-endpoint header

2

Authorization: Bearer header

restEndpoint parameter

3

brazeApiKey parameter

BRAZE_REST_ENDPOINT env

4

BRAZE_API_KEY env

—

Braze REST Endpoints

Region

Endpoint

US-01

https://rest.iad-01.braze.com

US-02

https://rest.iad-02.braze.com

US-03

https://rest.iad-03.braze.com

US-04

https://rest.iad-04.braze.com

US-05

https://rest.iad-05.braze.com

US-06

https://rest.iad-06.braze.com

US-07

https://rest.iad-07.braze.com

US-08

https://rest.iad-08.braze.com

EU-01

https://rest.fra-01.braze.eu

EU-02

https://rest.fra-02.braze.eu

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-After headers

  • Configurable 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 report

  • liveness — Alive check

  • readiness — 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=production

Architecture

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


MIT License

DELTΔ & βETΑ

From Change to What's Next

Available Tools

92 tools
campaigns_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_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

    C2.5/5.0

    Scored across 92 tools

    Disambiguation2/5

    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.

    Naming Consistency3/5

    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.

    Tool Count1/5

    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.

    Completeness3/5

    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

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      A 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.
      -
    • A
      license
      Not graded
      quality
      F
      maintenance
      MCP 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
    • A
      license
      C
      quality
      D
      maintenance
      Comprehensive 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.
      100
      1
      MIT