BumbleBox
Search and triage all your mailboxes; draft replies and campaigns; send only as you allow.
Should I use this
Quality & Safety
Findings (2)
- HIGH
- LOWin list_replies_to_validate
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": {
"mail": {
"url": "https://api.bumblebox.ai/api/mcp"
}
}
}Remote endpoints
https://api.bumblebox.ai/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (17)
🟢search_emails(query, limit)
Searches every connected mailbox (sender, subject, preview), newest first. Operators: from:, subject:, before:YYYY-MM-DD, after:YYYY-MM-DD; the rest is free text. Deleted emails are not returned.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": [
"query"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
}
},
"required": [
"results"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_email(id)
One email in full: sender, recipients, date, subject, plain-text body, attachment names, folder and BumbleBox classification.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Email id, as returned by search_emails or list_to_answer."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"email": {
"type": "object",
"additionalProperties": {}
}
},
"required": [
"email"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_to_answer(limit)
Received emails BumbleBox classified as needing a reply and still in the inbox, newest first.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"emails": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
}
},
"required": [
"emails"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢search_contacts(query, limit)
Contacts BumbleBox knows from the mail history (name, address, organization domain, exchange counts, last exchanges, VIP mark, note), matched on name, address or domain.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"maxLength": 200
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"contacts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
}
},
"required": [
"contacts"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_folders
The folders of each connected mailbox, as last synced. Trash, spam, sent and drafts are left out.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"mailboxes": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
}
},
"required": [
"mailboxes"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_calendar_events(from, to)
Events of the connected Google calendars between two dates (default: the next 7 days, at most 62 days).
Input Schema
{
"type": "object",
"properties": {
"from": {
"type": "string",
"format": "date-time"
},
"to": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"events": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
}
},
"required": [
"events"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪draft_reply(email_id, body, subject)
Saves the text as the reply draft of a received email, from the mailbox that received it. Nothing is sent: the draft waits in BumbleBox (Pilotage › prepared replies) until the user reviews it and clicks Send. Saving again replaces the previous draft of the same email.
Input Schema
{
"type": "object",
"properties": {
"email_id": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Email id, as returned by search_emails or list_to_answer."
},
"body": {
"type": "string",
"minLength": 1,
"maxLength": 20000,
"description": "Plain-text reply body."
},
"subject": {
"type": "string",
"maxLength": 300,
"description": "Defaults to \"Re: <original subject>\"."
}
},
"required": [
"email_id",
"body"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"draft": {
"type": "object",
"additionalProperties": {}
}
},
"required": [
"draft"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡send_reply(email_id, body)
Replies to the sender of one received email, and only to them (no Cc, no Bcc, no attachment), from the mailbox that received it. What happens next is the level the user set in BumbleBox for this kind of reply: a draft, a reply waiting for one tap (the default), or a reply that leaves after a delay the user can cancel. Anything that commits the user (amounts, bank details, acceptance, contracts, dates, links) always waits for the user. The result says which one applied.
Input Schema
{
"type": "object",
"properties": {
"email_id": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Email id, as returned by search_emails or list_to_answer."
},
"body": {
"type": "string",
"minLength": 1,
"maxLength": 20000,
"description": "Plain-text reply body."
}
},
"required": [
"email_id",
"body"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"reply": {
"type": "object",
"additionalProperties": {}
}
},
"required": [
"reply"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪archive_email(email_id)
Moves one inbox email to its mailbox's archive folder, on the mail server too. Undone by restore_to_inbox. Nothing is deleted.
Input Schema
{
"type": "object",
"properties": {
"email_id": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Email id, as returned by search_emails or list_to_answer."
}
},
"required": [
"email_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"moved": {
"type": "object",
"additionalProperties": {}
}
},
"required": [
"moved"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢move_email(email_id, folder)
Moves one inbox email to an existing folder of the same mailbox (see list_folders), on the mail server too. No folder is created. Undone by restore_to_inbox.
Input Schema
{
"type": "object",
"properties": {
"email_id": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Email id, as returned by search_emails or list_to_answer."
},
"folder": {
"type": "string",
"minLength": 1,
"maxLength": 300
}
},
"required": [
"email_id",
"folder"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"moved": {
"type": "object",
"additionalProperties": {}
}
},
"required": [
"moved"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪trash_email(email_id, reason)
Moves one inbox email to its mailbox's trash when BumbleBox certifies it as noise (spam, newsletter, promotion, with a unanimous safety vote and no known contact or action word). Any other email is not moved: it becomes a proposal the user confirms in one tap in BumbleBox. Never a permanent deletion; undone by restore_to_inbox.
Input Schema
{
"type": "object",
"properties": {
"email_id": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Email id, as returned by search_emails or list_to_answer."
},
"reason": {
"type": "string",
"maxLength": 300,
"description": "Why, shown to the user with a proposal."
}
},
"required": [
"email_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"result": {
"type": "object",
"additionalProperties": {}
}
},
"required": [
"result"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪restore_to_inbox(email_id)
Moves an archived, filed or trashed email back to the inbox, on the mail server too.
Input Schema
{
"type": "object",
"properties": {
"email_id": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Email id, as returned by search_emails or list_to_answer."
}
},
"required": [
"email_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"restored": {
"type": "number"
}
},
"required": [
"restored"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_missions(limit)
The user's prospection campaigns (missions), most recently active first, with the number of drafts waiting, emails sent and prospects who replied.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"missions": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
}
},
"required": [
"missions"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_campaign_drafts(mission_id, limit)
The drafts of one campaign that wait for the user to validate them in BumbleBox (recipient, subject, plain-text body, sender), newest first, with the true totals.
Input Schema
{
"type": "object",
"properties": {
"mission_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Campaign id, as returned by list_missions."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"required": [
"mission_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"counts": {
"type": "object",
"additionalProperties": {}
},
"drafts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
}
},
"required": [
"counts",
"drafts"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_replies_to_validate
Replies received on campaigns that still need the user: prepared reply drafts waiting for validation, and replies with no answer yet (with the stored AI triage: kind, summary, whether a human is needed).
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"drafts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
},
"pending": {
"$ref": "#/properties/drafts"
}
},
"required": [
"drafts",
"pending"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_campaign_draft(mission_id, to, name, subject, body)
Writes one draft inside an existing campaign, to one recipient (added to the campaign list if new), from the campaign's sender. Nothing is sent: the draft waits for the user to validate the campaign send in BumbleBox.
Input Schema
{
"type": "object",
"properties": {
"mission_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Campaign id, as returned by list_missions."
},
"to": {
"type": "string",
"minLength": 3,
"maxLength": 320
},
"name": {
"type": "string",
"maxLength": 200,
"description": "Recipient name, for a new prospect."
},
"subject": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"body": {
"type": "string",
"minLength": 1,
"maxLength": 20000,
"description": "Plain-text body."
}
},
"required": [
"mission_id",
"to",
"subject",
"body"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"draft": {
"type": "object",
"additionalProperties": {}
}
},
"required": [
"draft"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡update_campaign_draft(mission_id, draft_id, subject, body, to)
Changes the subject, body or recipient of a draft that is still a draft. Nothing is sent, and a draft the user already validated cannot be changed.
Input Schema
{
"type": "object",
"properties": {
"mission_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Campaign id, as returned by list_missions."
},
"draft_id": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"subject": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"body": {
"type": "string",
"minLength": 1,
"maxLength": 20000
},
"to": {
"type": "string",
"minLength": 3,
"maxLength": 320
}
},
"required": [
"mission_id",
"draft_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"draft": {
"type": "object",
"additionalProperties": {}
}
},
"required": [
"draft"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence