MCP Server

Bento MCP Server

Connect your favorite AI assistant to Bento and manage your email marketing with natural language.

The Model Context Protocol (MCP) is an open standard that lets AI assistants like Claude, Cursor, and others interact with external tools and services. The Bento MCP server gives your AI assistant direct access to your Bento account. It can look up subscribers, create broadcasts, track events, and more, all through natural conversation.

Bento hosts the MCP server at https://mcp.bentonow.com/mcp. You point your AI app at that URL and add your API keys. There's nothing to install, run, or update.

Whether you're drafting a campaign, importing subscribers, or checking your stats, you describe the task and your AI assistant runs the matching Bento tools.

Hey! If you get lost, click "View markdown" and send this page to your agent and have them set it up for you!
If you also use an AI coding agent to build Bento integrations, install Bento Skills: npx skills add bentonow/bento-skills. MCP gives the assistant live account tools; Skills gives it implementation and safety guidance.

Before you begin, make sure you have:

  • A Bento account with API access
  • Your Bento API credentials (Publishable Key, Secret Key, Site UUID)
  • An AI application that supports MCP (Claude Desktop, Claude Code, Cursor, VS Code, Codex, Gemini CLI, etc.)
  • Node.js 18 or later, only if your app needs the mcp-remote bridge (Claude Desktop JSON config and Continue)

Getting Your API Credentials

1Navigate to Settings

Log into your Bento account and click on Settings in the left sidebar.

2Access API Keys

Open Settings -> API Keys and find your API keys.

3Copy Your Credentials

You'll need three values:

CredentialDescriptionExample
Publishable KeyYour public API keypk_live_abc123...
Secret KeyYour private API key (keep this safe!)sk_live_xyz789...
Site UUIDYour unique site identifiersite_uuid_here
If you don't see API keys, click "Generate Key" to create a new set.
Keep your Secret Key private! Never commit it to version control or share it publicly. Anyone with your secret key has full API access to your Bento account.

Hosted Endpoint

The hosted server is the recommended way to use Bento MCP. Bento runs and updates it, so you always get the latest tools.

SettingValue
URLhttps://mcp.bentonow.com/mcp
TransportStreamable HTTP
AuthenticationThree HTTP headers with your Bento API credentials. No OAuth sign-in.

Send these headers with every request:

HTTP
X-Bento-Publishable-Key: BENTO_PUBLISHABLE_KEY
X-Bento-Secret-Key: BENTO_SECRET_KEY
X-Bento-Site-UUID: BENTO_SITE_UUID

Your MCP client sends your credentials with each request. The hosted server uses them to call the Bento API for that request and doesn't store them.

If your MCP client can't send custom headers to a remote server, use the mcp-remote bridge or the Claude Desktop extension. Both still connect to the hosted server. The local npm package is also available if you need to run the server on your own machine.


Setup Guides by Platform

Pick your AI application below. Every guide connects to the hosted server at https://mcp.bentonow.com/mcp, so there is nothing to install or keep updated. Replace the placeholder values with the credentials from Settings -> API Keys.

If your client can send custom headers to a remote MCP server, add the URL and the three headers. If it only launches local servers, use the mcp-remote bridge shown in the Claude Desktop and Continue guides. It runs through npx and forwards requests to the hosted server. Your app isn't listed? See Other MCP clients.

Other MCP clients

Most MCP clients accept one of two shapes. Use the first if your client supports remote servers with headers. Use the second if it only launches local commands.

Remote server with headers. The key names vary by client (url, serverUrl, or httpUrl, and sometimes a type such as http or streamable-http). Check your client's docs for the exact names.

JSON
{
"mcpServers": {
  "bento": {
    "type": "streamable-http",
    "url": "https://mcp.bentonow.com/mcp",
    "headers": {
      "X-Bento-Publishable-Key": "your_publishable_key",
      "X-Bento-Secret-Key": "your_secret_key",
      "X-Bento-Site-UUID": "your_site_uuid"
    }
  }
}
}

Local command through the mcp-remote bridge. This works in any client that can launch a stdio server and needs Node.js 18 or later. Use the same command, args, and env as the Claude Desktop JSON config.

Bento MCP doesn't use OAuth. If a client only supports OAuth sign-in for remote servers, use the mcp-remote bridge.

Available Tools

The hosted MCP server provides these tools, plus related ones for subscriber status, tag removal, batch events, segment and report stats, and more. Your AI app loads the full list when it connects.

Subscriber management

"Look up john@example.com in Bento"

Look up a subscriber by email or UUID

bento_get_subscriber

"Import these 50 subscribers with the 'webinar-attendee' tag"

Import up to 1000 subscribers at once

bento_batch_import_subscribers

Tags

"What tags do I have in Bento?"

List all tags in your account

bento_list_tags

"Create a tag called 'vip-customer'"

Create a new tag

bento_create_tag

Custom fields

"Show me my custom fields in Bento"

List all custom fields

bento_list_fields

"Create a custom field for 'company_name'"

Create a new custom field

bento_create_field

Event tracking

"Track a 'completed_onboarding' event for user@example.com"

Track a custom event (can trigger automations)

bento_create_event

Broadcasts

"Show me my recent broadcasts"

List all broadcasts/campaigns

bento_list_broadcasts

"Create a broadcast for our spring sale announcement"

Create a new draft broadcast

bento_create_broadcast

Automations

"What automations do I have set up?"

List all automations, filtered by sequences, workflows, or all

bento_list_automations

Sequences

"Show me all my email sequences"

List email sequences with their email templates

bento_list_sequences

"Add a new email to my Welcome Series sequence about setting up their profile"

Create a new email in a sequence by ID or name

bento_create_sequence_email

"Update the subject line on sequence email template 456"

Update a sequence email's subject or HTML content

bento_update_sequence_email

Workflows

"Show me my workflows"

List workflows with their status and email templates

bento_list_workflows

"Show me the Onboarding workflow"

Fetch one workflow's structure, triggers, and steps

bento_get_workflow

Email templates

"Show me template ID 123"

Get an email template's content by ID

bento_get_template

"Update template 123 with this new subject line"

Update a template's subject or content

bento_update_email_template

Statistics

"How many subscribers do I have?"

Get overall site statistics

bento_get_site_stats

"Which ad campaigns drove the most revenue last month?"

Query ads attribution by source, campaign, medium, content, or ad

bento_get_ads_stats

Delivery troubleshooting

"Any deliverability issues in the last hour?"

Get transactional delivery health for your account

bento_get_delivery_report

"Did our password reset email reach jane@example.com?"

Search delivery events, bounces, and deferrals for one recipient

bento_search_delivery_events

Bento Chat

"Show me unassigned open conversations"

List support conversations by status, assignment, inbox, or search

bento_list_conversations

"Reply to that conversation, then mark it resolved"

Send replies, add private notes, and change conversation status

bento_send_chat_message

Common Workflows

Creating an Email Broadcast

This is the most common workflow: drafting and creating an email campaign using natural language.

Bento/MCP session
Server connected
User intentNatural language

Create a broadcast called 'Summer Sale Announcement' with the subject 'Save 30% This Weekend Only'. Use HTML format. Send from 'Marketing Team' at marketing@mycompany.com. The content should announce our summer sale with a 30% discount code SUMMER30.

AssistantTool selection

I'll create that broadcast for you.

MCPbento.bento_create_broadcast
Argumentsapplication/json
{
}
Tool resultcontent: text
Created draft broadcast "Summer Sale Announcement"

The broadcast is now saved as a draft in your Bento dashboard.

Broadcasts created via MCP are saved as unapproved drafts unless the assistant explicitly sets approved to true. Review drafts in the Bento dashboard before they send, and tell your assistant to leave broadcasts unapproved.

Importing Subscribers

Perfect for moving subscribers from a spreadsheet or another platform.

Bento/MCP session
Server connected
User intentNatural language

Import these subscribers with the tag 'newsletter-2024':
• alice@example.com (Alice Smith)
• bob@example.com (Bob Jones)
• carol@example.com (Carol Williams)

AssistantTool selection

I'll import those 3 subscribers with the 'newsletter-2024' tag.

MCPbento.bento_batch_import_subscribers
Argumentsapplication/json
{
}
Tool resultcontent: text
Successfully imported 3 of 3 subscribers

Pro Tips for Bulk Imports:

  • You can import up to 1000 subscribers at once
  • Custom fields are supported. Just mention them naturally
  • Tags can be added or removed during import
  • Existing subscribers will be updated (not duplicated)

Tracking Purchase Events

Track revenue and trigger purchase-based automations.

Bento/MCP session
Server connected
User intentNatural language

Track a $49.99 purchase for customer@example.com. Order ID is ORD-12345, product is 'Annual Pro Plan'.

AssistantTool selection

I'll track that purchase event.

MCPbento.bento_create_event$purchase
Argumentsapplication/json
{
}
Tool resultcontent: text
Tracked event "$purchase" for customer@example.com

Purchase Event Requirements: Purchase events must include:

  • value.amount: Amount in cents (4999 for $49.99)
  • value.currency: 3-letter ISO currency code (USD, EUR, etc.)

The MCP server rejects purchase events without these. Also include a unique.key, such as your order ID, so the same purchase isn't counted twice.


Checking Your Stats

Get a quick overview of your Bento account performance.

Bento/MCP session
Server connected
User intentNatural language

How is my Bento account doing? Give me the key stats.

MCPbento.bento_get_site_stats
Argumentsapplication/json
{
}
Tool resultcontent: text
Retrieved site statistics
total_subscribers12,547
active_subscribers11,892
broadcasts_sent45
avg_open_rate42.3%
AssistantResponse

Your Bento account is healthy! You have 12,547 total subscribers with 95% active, and your average open rate is 42.3%.


Managing Your Subscriber Data

Look up and understand your subscribers.

Bento/MCP session
Server connected
User intentNatural language

Look up john.doe@example.com and tell me everything about them

MCPbento.bento_get_subscriberjohn.doe@example.com
Argumentsapplication/json
{
}
Tool resultcontent: text
Found subscriber
statussubscribed
tagsnewsletter, customer, vip
companyAcme Corp
planEnterprise
subscribed_at2024-01-15
AssistantResponse

John Doe is an active VIP customer from Acme Corp on the Enterprise plan. He's been subscribed since January 2024 and has the newsletter and customer tags.


Setting Up Custom Fields

Create the data structure for personalization.

Bento/MCP session
Server connected
User intentNatural language

I need to track company name, job title, and plan type for my subscribers. Create those fields.

AssistantTool selection

I'll create those three custom fields for you.

MCPbento.bento_create_field×3
Argumentsapplication/json
{
}
Tool resultcontent: text
Created field "company_name"
Created field "job_title"
Created field "plan_type"

Fields are now available for use when importing subscribers or tracking events.


Building a Welcome Sequence

Create and populate an email sequence step by step using natural language.

Bento/MCP session
Server connected
User intentNatural language

Show me my sequences in Bento. I want to add emails to my welcome series.

MCPbento.bento_list_sequences
Argumentsapplication/json
{
}
Tool resultcontent: text
Found 3 sequences
1Welcome Series (4 emails)
2Onboarding Drip (6 emails)
3Re-engagement (2 emails)
AssistantTool selection

I found your Welcome Series. I'll add a new email to it.

MCPbento.bento_create_sequence_emailWelcome Series
Argumentsapplication/json
{
}
Tool resultcontent: text
Created email "Complete Your Profile" in Welcome Series

Set delivery timing with the delayInterval and delayIntervalCount parameters, or adjust in the Bento dashboard after creation.

You can reference a sequence by its name (case-insensitive) or ID. When you update sequence email HTML later, keep {"{{ visitor.unsubscribe_url }}"} in the content so recipients can unsubscribe.

Reviewing Workflows

Check on your workflow performance and email templates.

Bento/MCP session
Server connected
User intentNatural language

Show me my workflows and how they're performing.

MCPbento.bento_list_workflows
Argumentsapplication/json
{
}
Tool resultcontent: text
Found 2 workflows
Post-Purchase Follow-uplive, 3 emails
Trial Expiry Reminderdraft, 2 emails
AssistantResponse

You have 2 workflows. Post-Purchase Follow-up is live with 3 email templates. Trial Expiry Reminder is still in draft with 2 emails, and you can activate it from the Bento dashboard when ready.


Troubleshooting

Frequently Asked Questions

Find answers to common questions or contact our support team.

Missing one or more required Bento credential headers

The hosted MCP endpoint did not receive all three Bento credential headers.

  • Confirm the client sends X-Bento-Publishable-Key, X-Bento-Secret-Key, and X-Bento-Site-UUID
  • For Codex, make sure env_http_headers points to environment variable names, not literal credential values
  • For Claude Desktop with mcp-remote, confirm the env block contains all three values
  • If your config reads values from environment variables, confirm they're set in the environment your AI app starts from
  • Restart your AI application after making changes

Bento rejected the provided credentials or site UUID

Your credentials were sent, but Bento could not authenticate them.

  • Copy the publishable key, secret key, and site UUID again from Settings > API Keys
  • Make sure the publishable key and secret key belong to the same Bento account
  • Check that the site UUID matches the site you want the assistant to access
  • Regenerate your API keys if you think the secret key was exposed

MCP server not showing up

Your AI application doesn't see the Bento MCP server.

  • Verify the configuration file path is correct for your operating system
  • Check JSON syntax. A single missing comma can break the config
  • For Claude Desktop, ensure Node.js 18+ is installed because mcp-remote runs through npx
  • For Codex, run codex mcp get bento-remote and confirm the config block is in ~/.codex/config.toml
  • For Cline, set "type": "streamableHttp". For Gemini CLI, use httpUrl. Without these, both clients try the older SSE transport
  • Restart your AI application completely

My AI app asks me to sign in with OAuth

Bento MCP doesn't use OAuth. It authenticates with the three credential headers.

  • Check that the headers are in your config and spelled exactly as shown
  • If your app only supports OAuth for remote servers, set Bento up as a local server that runs the mcp-remote bridge

Rate limit exceeded

Too many API requests in a short period.

  • Wait a few minutes before trying again
  • For bulk operations, use bento_batch_import_subscribers instead of multiple individual calls
  • Spread large operations over time

Resource not found

The subscriber, template, or other resource doesn't exist.

  • Verify the email address or ID is correct
  • Check if the subscriber exists in your Bento dashboard
  • For templates, ensure you're using the numeric ID (not the name)

Testing Your Connection

Check that the hosted server is reachable:

Shell
curl -sS https://mcp.bentonow.com/health

Check your credentials by listing tools directly:

Shell
curl -sS https://mcp.bentonow.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-Bento-Publishable-Key: $BENTO_PUBLISHABLE_KEY" \
-H "X-Bento-Secret-Key: $BENTO_SECRET_KEY" \
-H "X-Bento-Site-UUID: $BENTO_SITE_UUID" \
--data '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

For Codex, run:

Shell
codex mcp get bento-remote

Then ask your AI assistant:

Shell
"Can you connect to Bento? Try listing my tags."

If it works, you'll see your tags. If not, check your configuration.


Best Practices

Security

  • Never share your Secret Key in public repositories, screenshots, or support tickets
  • Use environment variables in CI/CD rather than hardcoding credentials
  • Rotate API keys periodically, especially if you suspect they may have been exposed

Performance

  • Use batch operations when importing multiple subscribers. bento_batch_import_subscribers handles up to 1000 at once
  • Be specific in your prompts to help the AI choose the right tool on the first try
  • Review broadcasts in Bento before sending. The MCP creates drafts for safety

Workflow Tips

  • Start with stats to understand your account state before making changes
  • Test with a single subscriber before bulk importing
  • Use descriptive broadcast names so they're easy to find in the Bento dashboard
  • Leverage custom fields for personalization. Create them once, use them everywhere

Sequences & Workflows

  • Always include an unsubscribe URL when updating sequence email HTML. Use {"{{ visitor.unsubscribe_url }}"} so recipients can always opt out
  • Reference sequences by name for readability, or by ID for precision
  • Set delivery timing explicitly when creating sequence emails using delayInterval and delayIntervalCount. If you leave them out, Bento uses its default delay, so check the timing in the dashboard
  • Use bento_list_automations with a type filter to narrow results to just sequences or just workflows

Quick Reference Card

Subscriber Operations

Code
"Look up [email] in Bento"
"Import these subscribers with tag [tag]: [list]"

Tag Operations

Code
"What tags do I have?"
"Create a tag called [name]"

Broadcast Operations

Code
"Show me my broadcasts"
"Create a broadcast called [name] about [topic]"

Sequence Operations

Code
"Show me my sequences"
"Add an email to my [sequence name] sequence about [topic]"
"Update the subject on sequence email [id]"

Workflow Operations

Code
"Show me my workflows"
"List only my workflows"
"Show me the Onboarding workflow"

Event Tracking

Code
"Track [event] for [email]"
"Log a $[amount] purchase for [email]"

Statistics

Code
"Show me my Bento stats"
"How many subscribers do I have?"

Alternative: Local npm Package

Most people should use the hosted server. If you need to run Bento MCP on your own machine, for example because your network blocks outside MCP connections, the @bentonow/bento-mcp npm package runs a local stdio server. It needs Node.js 18 or later.

The local package is maintained separately from the hosted server, so its tool names and coverage can differ from the tools listed on this page.

Add it to any MCP client that launches local commands:

JSON
{
"mcpServers": {
  "bento": {
    "command": "npx",
    "args": ["-y", "@bentonow/bento-mcp"],
    "env": {
      "BENTO_PUBLISHABLE_KEY": "your_publishable_key",
      "BENTO_SECRET_KEY": "your_secret_key",
      "BENTO_SITE_UUID": "your_site_uuid"
    }
  }
}
}

You can leave out the env block if your shell profile (~/.zshrc or ~/.bashrc) exports the same three variables and your AI app inherits them:

Shell
export BENTO_PUBLISHABLE_KEY="pk_live_..."
export BENTO_SECRET_KEY="sk_live_..."
export BENTO_SITE_UUID="..."

To check the local server for errors, run it by hand:

Shell
BENTO_PUBLISHABLE_KEY=xxx \
BENTO_SECRET_KEY=xxx \
BENTO_SITE_UUID=xxx \
npx @bentonow/bento-mcp

Get Help