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.
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-remotebridge (Claude Desktop JSON config and Continue)
Getting Your API Credentials
Log into your Bento account and click on Settings in the left sidebar.
Open Settings -> API Keys and find your API keys.
You'll need three values:
| Credential | Description | Example |
|---|---|---|
| Publishable Key | Your public API key | pk_live_abc123... |
| Secret Key | Your private API key (keep this safe!) | sk_live_xyz789... |
| Site UUID | Your unique site identifier | site_uuid_here |
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.
| Setting | Value |
|---|---|
| URL | https://mcp.bentonow.com/mcp |
| Transport | Streamable HTTP |
| Authentication | Three HTTP headers with your Bento API credentials. No OAuth sign-in. |
Send these headers with every request:
X-Bento-Publishable-Key: BENTO_PUBLISHABLE_KEY
X-Bento-Secret-Key: BENTO_SECRET_KEY
X-Bento-Site-UUID: BENTO_SITE_UUIDYour 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.
{
"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.
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
"Import these 50 subscribers with the 'webinar-attendee' tag"
Import up to 1000 subscribers at once
bento_batch_import_subscribersTags
"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_tagCustom 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_fieldEvent tracking
"Track a 'completed_onboarding' event for user@example.com"
Track a custom event (can trigger automations)
bento_create_eventBroadcasts
"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_broadcastAutomations
"What automations do I have set up?"
List all automations, filtered by sequences, workflows, or all
bento_list_automationsSequences
"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_emailWorkflows
"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_workflowEmail 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_templateStatistics
"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_statsDelivery 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_eventsBento 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_messageCommon Workflows
Creating an Email Broadcast
This is the most common workflow: drafting and creating an email campaign using natural 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.
I'll create that broadcast for you.
bento.bento_create_broadcastThe broadcast is now saved as a draft in your Bento dashboard.
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.
Import these subscribers with the tag 'newsletter-2024':
• alice@example.com (Alice Smith)
• bob@example.com (Bob Jones)
• carol@example.com (Carol Williams)
I'll import those 3 subscribers with the 'newsletter-2024' tag.
bento.bento_batch_import_subscribersPro 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.
Track a $49.99 purchase for customer@example.com. Order ID is ORD-12345, product is 'Annual Pro Plan'.
I'll track that purchase event.
bento.bento_create_event$purchasePurchase 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.
How is my Bento account doing? Give me the key stats.
bento.bento_get_site_statsYour 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.
Look up john.doe@example.com and tell me everything about them
bento.bento_get_subscriberjohn.doe@example.comJohn 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.
I need to track company name, job title, and plan type for my subscribers. Create those fields.
I'll create those three custom fields for you.
bento.bento_create_field×3Fields 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.
Show me my sequences in Bento. I want to add emails to my welcome series.
bento.bento_list_sequencesI found your Welcome Series. I'll add a new email to it.
bento.bento_create_sequence_emailWelcome SeriesSet delivery timing with the delayInterval and delayIntervalCount parameters, or adjust in the Bento dashboard after creation.
{"{{ visitor.unsubscribe_url }}"} in the content so recipients can unsubscribe.Reviewing Workflows
Check on your workflow performance and email templates.
Show me my workflows and how they're performing.
bento.bento_list_workflowsYou 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, andX-Bento-Site-UUID - For Codex, make sure
env_http_headerspoints to environment variable names, not literal credential values - For Claude Desktop with
mcp-remote, confirm theenvblock 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-remoteruns throughnpx - For Codex, run
codex mcp get bento-remoteand confirm the config block is in~/.codex/config.toml - For Cline, set
"type": "streamableHttp". For Gemini CLI, usehttpUrl. 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-remotebridge
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_subscribersinstead 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:
curl -sS https://mcp.bentonow.com/healthCheck your credentials by listing tools directly:
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:
codex mcp get bento-remoteThen ask your AI assistant:
"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_subscribershandles 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
delayIntervalanddelayIntervalCount. If you leave them out, Bento uses its default delay, so check the timing in the dashboard - Use
bento_list_automationswith a type filter to narrow results to just sequences or just workflows
Quick Reference Card
Subscriber Operations
"Look up [email] in Bento"
"Import these subscribers with tag [tag]: [list]"Tag Operations
"What tags do I have?"
"Create a tag called [name]"Broadcast Operations
"Show me my broadcasts"
"Create a broadcast called [name] about [topic]"Sequence Operations
"Show me my sequences"
"Add an email to my [sequence name] sequence about [topic]"
"Update the subject on sequence email [id]"Workflow Operations
"Show me my workflows"
"List only my workflows"
"Show me the Onboarding workflow"Event Tracking
"Track [event] for [email]"
"Log a $[amount] purchase for [email]"Statistics
"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.
Add it to any MCP client that launches local commands:
{
"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:
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:
BENTO_PUBLISHABLE_KEY=xxx \
BENTO_SECRET_KEY=xxx \
BENTO_SITE_UUID=xxx \
npx @bentonow/bento-mcpGet Help
- Local npm package issues: github.com/bentonow/bento-mcp/issues
- Documentation: docs.bentonow.com
- Discord: Join the community
- Email Support: support@bentonow.com