MailBluster MCP by usefulapi
Manage MailBluster leads, custom fields, products and orders: look up, add and update records.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"mailbluster": {
"url": "https://mailbluster.usefulapi.io/mcp"
}
}
}Remote endpoints
https://mailbluster.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (13)
🟢mailbluster_list_fields
List the brand's custom lead fields: id, label and merge tag. Use the merge tags as keys of `fields` when creating or updating leads. GET /fields.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡mailbluster_create_field(field_label, field_merge_tag)
WRITE: create a custom lead field. The merge tag is the key used in lead `fields` and in email templates. Creating a field changes the brand's data model but sends nothing. POST /fields.
Input Schema
{
"type": "object",
"properties": {
"field_label": {
"type": "string",
"minLength": 1,
"maxLength": 190,
"description": "Display label, e.g. Gender."
},
"field_merge_tag": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Merge tag, e.g. gender."
}
},
"required": [
"field_label",
"field_merge_tag"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailbluster_get_lead(email, lead_hash)
Get one lead by email address (the server computes the MD5 id MailBluster uses): name, custom fields, timezone, subscribed and opt-in status, tags, created/updated dates. MailBluster has no list-leads endpoint. GET /leads/{md5(email)}.
Input Schema
{
"type": "object",
"properties": {
"email": {
"description": "The lead's email address (preferred).",
"type": "string",
"minLength": 3,
"maxLength": 320
},
"lead_hash": {
"description": "Alternative to email: the 32-character MD5 hex of the lowercased email.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴mailbluster_create_lead(email, first_name, last_name, fields, timezone, ...)
WRITE: add a lead (contact) to the brand. `subscribed` defaults to FALSE: the lead is stored but is not subscribed to email. Only set subscribed=true when the person has given consent to receive email from this brand (the user is responsible for lawful consent); this server never subscribes anyone on its own. No email is sent by this tool (double opt-in is not offered). If the lead already exists the call fails unless overwrite_existing=true, which replaces the stored data (then `subscribed` must be given explicitly). POST /leads.
Input Schema
{
"type": "object",
"properties": {
"email": {
"type": "string",
"minLength": 3,
"maxLength": 320,
"description": "Email address."
},
"first_name": {
"type": "string",
"maxLength": 190
},
"last_name": {
"type": "string",
"maxLength": 190
},
"fields": {
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
},
"description": "Custom field values keyed by the field's MERGE TAG (see mailbluster_list_fields), e.g. {\"company\": \"Pied Piper\"}."
},
"timezone": {
"description": "IANA timezone, e.g. America/Los_Angeles.",
"type": "string",
"maxLength": 100
},
"ip_address": {
"description": "Lead's IP address; MailBluster derives country/city/timezone from it.",
"type": "string",
"maxLength": 64
},
"subscribed": {
"description": "Default false. true only with the lead's consent to receive email.",
"type": "boolean"
},
"tags": {
"description": "Tag names to attach (created if missing).",
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"overwrite_existing": {
"description": "Default false. true overwrites an existing lead with the same email.",
"type": "boolean"
}
},
"required": [
"email"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴mailbluster_update_lead(email, lead_hash, new_email, first_name, last_name, ...)
WRITE: change an existing lead's name, custom fields, email, timezone, IP address, subscription flag or tags (send only what should change). `subscribed` is left alone unless you pass it; false unsubscribes the lead, true re-subscribes. Only set subscribed=true when the person has given consent to receive email from this brand (the user is responsible for lawful consent); this server never subscribes anyone on its own. PUT /leads/{md5(email)}.
Input Schema
{
"type": "object",
"properties": {
"email": {
"description": "Current email of the lead to update (preferred).",
"type": "string",
"minLength": 3,
"maxLength": 320
},
"lead_hash": {
"description": "Alternative to email: the 32-character MD5 hex of the lowercased current email.",
"type": "string"
},
"new_email": {
"description": "Change the lead's email address to this.",
"type": "string",
"minLength": 3,
"maxLength": 320
},
"first_name": {
"type": "string",
"maxLength": 190
},
"last_name": {
"type": "string",
"maxLength": 190
},
"fields": {
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
},
"description": "Custom field values keyed by the field's MERGE TAG (see mailbluster_list_fields), e.g. {\"company\": \"Pied Piper\"}."
},
"timezone": {
"type": "string",
"maxLength": 100
},
"ip_address": {
"type": "string",
"maxLength": 64
},
"subscribed": {
"description": "Only pass to change the subscription. true only with the lead's consent.",
"type": "boolean"
},
"add_tags": {
"description": "Tag names to attach (created if missing). Applied before remove_tags.",
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"remove_tags": {
"description": "Tag names to detach.",
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailbluster_list_products(page_no, per_page)
List product records (id, name, dates) the brand has registered for e-commerce tracking. Paged: the reply's meta has total and nextPageNo (null on the last page). GET /products.
Input Schema
{
"type": "object",
"properties": {
"page_no": {
"description": "Page number, from 1 (default 1). Pass the previous reply's meta.nextPageNo.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-100 (MailBluster default 10).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailbluster_get_product(product_id)
Get one product record by the id you registered it under. GET /products/{product_id}.
Input Schema
{
"type": "object",
"properties": {
"product_id": {
"type": "string",
"minLength": 1,
"maxLength": 190,
"description": "Product id."
}
},
"required": [
"product_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡mailbluster_create_product(product_id, name)
WRITE: register a product record (your own id plus a name) so orders can reference it. Sends nothing to anyone and charges nothing. POST /products.
Input Schema
{
"type": "object",
"properties": {
"product_id": {
"type": "string",
"minLength": 1,
"maxLength": 190,
"description": "Your unique product id."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 190,
"description": "Product name."
}
},
"required": [
"product_id",
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴mailbluster_update_product(product_id, name)
WRITE: rename a product record. PUT /products/{product_id}.
Input Schema
{
"type": "object",
"properties": {
"product_id": {
"type": "string",
"minLength": 1,
"maxLength": 190,
"description": "Product id."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 190,
"description": "New product name."
}
},
"required": [
"product_id",
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailbluster_list_orders(page_no, per_page)
List order records (id, currency, total price, customer lead, campaign, line items). These are records kept in MailBluster for tracking; no payment is involved. Paged: see meta.nextPageNo. GET /orders.
Input Schema
{
"type": "object",
"properties": {
"page_no": {
"description": "Page number, from 1 (default 1). Pass the previous reply's meta.nextPageNo.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-100 (MailBluster default 10).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailbluster_get_order(order_id)
Get one order record by the id it was created with. GET /orders/{order_id}.
Input Schema
{
"type": "object",
"properties": {
"order_id": {
"type": "string",
"minLength": 1,
"maxLength": 190,
"description": "Order id."
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴mailbluster_create_order(order_id, customer, campaign_id, currency, total_price, ...)
WRITE: record an order (a tracking record: it does not take payment, charge a card or send email). The customer's email becomes a lead if none exists, and the lead's tags are merged. `customer.subscribed` is REQUIRED because MailBluster would otherwise default it to true: pass false unless the customer has consented to email. For a customer who already exists, the value may replace their stored subscription state. Only set subscribed=true when the person has given consent to receive email from this brand (the user is responsible for lawful consent); this server never subscribes anyone on its own. POST /orders.
Input Schema
{
"type": "object",
"properties": {
"order_id": {
"type": "string",
"minLength": 1,
"maxLength": 190,
"description": "Your unique order id."
},
"customer": {
"type": "object",
"properties": {
"email": {
"type": "string",
"minLength": 3,
"maxLength": 320,
"description": "Email address."
},
"first_name": {
"type": "string",
"maxLength": 190
},
"last_name": {
"type": "string",
"maxLength": 190
},
"fields": {
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
},
"description": "Custom field values keyed by the field's MERGE TAG (see mailbluster_list_fields), e.g. {\"company\": \"Pied Piper\"}."
},
"timezone": {
"type": "string",
"maxLength": 100
},
"ip_address": {
"type": "string",
"maxLength": 64
},
"tags": {
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"subscribed": {
"type": "boolean",
"description": "Required. true only with the customer's consent to receive email; otherwise false."
}
},
"required": [
"email",
"subscribed"
]
},
"campaign_id": {
"description": "Id of the campaign that led to the order, if any.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "ISO currency code, e.g. USD."
},
"total_price": {
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "Order total, e.g. 10.64."
},
"items": {
"minItems": 1,
"maxItems": 200,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 190,
"description": "Your id of the product (a product record with this id is created in MailBluster if it does not exist)."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 190,
"description": "Product name."
},
"price": {
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "Unit price, e.g. 3.15."
},
"quantity": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000000
}
},
"required": [
"id",
"name",
"price",
"quantity"
]
},
"description": "Ordered products."
}
},
"required": [
"order_id",
"customer",
"currency",
"total_price",
"items"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴mailbluster_update_order(order_id, campaign_id, currency, total_price, items)
WRITE: change an order record's campaign, currency, total or items (send only what should change; `items`, when given, REPLACES all previous items). The customer cannot be changed here. No payment or email is involved. PUT /orders/{order_id}.
Input Schema
{
"type": "object",
"properties": {
"order_id": {
"type": "string",
"minLength": 1,
"maxLength": 190,
"description": "Order id."
},
"campaign_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "ISO currency code, e.g. USD."
},
"total_price": {
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "New order total."
},
"items": {
"description": "New complete item list; replaces the previous items.",
"minItems": 1,
"maxItems": 200,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 190,
"description": "Your id of the product (a product record with this id is created in MailBluster if it does not exist)."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 190,
"description": "Product name."
},
"price": {
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "Unit price, e.g. 3.15."
},
"quantity": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000000
}
},
"required": [
"id",
"name",
"price",
"quantity"
]
}
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence