Koskamo

BumbleBox MCP

An official MCP server by BumbleBox that allows AI assistants to search, read, and triage emails across connected mailboxes (Gmail, Outlook, IMAP). It enables drafting replies, managing campaigns, and organizing folders, while enforcing strict user controls where sending or committing actions require explicit user approval.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

BumbleBox MCP logo, by ICRAFT SASVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by ICRAFT SAS
You need:Plans: Pro and BusinessAuth: OAuth 2.1 with dynamic client registration; the user approves on bumblebox.aiYour plan is checked on every request: if you leave Pro or Business, the assistant loses access at once
MCP endpoint (Streamable HTTP)
https://api.bumblebox.ai/api/mcp
Vendor documentation

What you can do with it

  • Search and read emails across all connected mailboxes
  • List emails waiting for a reply and prepare drafts
  • Manage email campaigns by creating and editing drafts
  • Archive, move, or trash emails with user-verified safety

Source and maintenance

Vendor evidenceRegistry 2.1.0
Maintenance checked

Protocol and capabilities

Server
bumblebox 2.1.0
MCP protocol
2025-06-18
Tools
17 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

BumbleBox is an email client with AI triage over all of the user's connected mailboxes. Emails are identified by the id returned by search_emails and list_to_answer. BumbleBox sends nothing without the user's click, or a standing permission the user set in BumbleBox for a precise scope (replies to the existing sender of a thread, with no commitment), capped, logged and cancellable: send_reply follows that setting and reports what it did; draft_reply only prepares a draft. Campaign drafts are written inside their campaign and sent only from BumbleBox. trash_email moves certified noise to the trash and proposes anything else to the user; nothing is ever deleted permanently, and archived, moved or trashed emails can be put back with restore_to_inbox.

Tools

17 advertised

search_emails — Search emails
Advertised by the server during the last successful anonymous check.
Advertised read-only

Searches every connected mailbox (sender, subject, preview), newest first. Operators: from:, subject:, before:YYYY-MM-DD, after:YYYY-MM-DD, in:sent (only what the user sent, from any mailbox or alias); the rest is free text. Deleted emails are not returned.

search_emails input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1
    }
  },
  "additionalProperties": false
}
search_emails output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "results"
  ],
  "properties": {
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": true
}
search_emails annotations
{
  "title": "Search emails",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_email — Read an email
Advertised by the server during the last successful anonymous check.
Advertised read-only

One email in full: sender, recipients, date, subject, plain-text body, attachment names, folder and BumbleBox classification.

get_email input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 300,
      "minLength": 1,
      "description": "Email id, as returned by search_emails or list_to_answer."
    }
  },
  "additionalProperties": false
}
get_email output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "email"
  ],
  "properties": {
    "email": {
      "type": "object",
      "additionalProperties": {}
    }
  },
  "additionalProperties": true
}
get_email annotations
{
  "title": "Read an email",
  "readOnlyHint": true,
  "openWorldHint": false
}
list_to_answer — Emails waiting for a reply
Advertised by the server during the last successful anonymous check.
Advertised read-only

Received emails BumbleBox classified as needing a reply and still in the inbox, newest first.

list_to_answer input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1
    }
  },
  "additionalProperties": false
}
list_to_answer output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "emails"
  ],
  "properties": {
    "emails": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": true
}
list_to_answer annotations
{
  "title": "Emails waiting for a reply",
  "readOnlyHint": true,
  "openWorldHint": false
}
search_contacts — Search contacts
Advertised by the server during the last successful anonymous check.
Advertised read-only

Contacts BumbleBox knows from the mail history (name, address, organization domain, exchange counts, last exchanges, VIP mark, note), matched on name, address or domain.

search_contacts input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "maxLength": 200
    }
  },
  "additionalProperties": false
}
search_contacts output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "contacts"
  ],
  "properties": {
    "contacts": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": true
}
search_contacts annotations
{
  "title": "Search contacts",
  "readOnlyHint": true,
  "openWorldHint": false
}
list_folders — List mail folders
Advertised by the server during the last successful anonymous check.
Advertised read-only

The folders of each connected mailbox, as last synced. Trash, spam, sent and drafts are left out.

list_folders input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
list_folders output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "mailboxes"
  ],
  "properties": {
    "mailboxes": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": true
}
list_folders annotations
{
  "title": "List mail folders",
  "readOnlyHint": true,
  "openWorldHint": false
}
list_calendar_events — List calendar events
Advertised by the server during the last successful anonymous check.
Advertised read-only

Events of the connected Google calendars between two dates (default: the next 7 days, at most 62 days).

list_calendar_events input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "to": {
      "type": "string",
      "format": "date-time"
    },
    "from": {
      "type": "string",
      "format": "date-time"
    }
  },
  "additionalProperties": false
}
list_calendar_events output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "events"
  ],
  "properties": {
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": true
}
list_calendar_events annotations
{
  "title": "List calendar events",
  "readOnlyHint": true,
  "openWorldHint": false
}
draft_reply — Prepare a reply (not sent)
Advertised by the server during the last successful anonymous check.

Saves the text as the reply draft of a received email, from the address the email was written to (a brand address or the mailbox). needsIdentity: that address cannot send until the user verifies it in BumbleBox. 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.

draft_reply input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "email_id",
    "body"
  ],
  "properties": {
    "body": {
      "type": "string",
      "maxLength": 20000,
      "minLength": 1,
      "description": "Plain-text reply body."
    },
    "subject": {
      "type": "string",
      "maxLength": 300,
      "description": "Defaults to \"Re: <original subject>\"."
    },
    "email_id": {
      "type": "string",
      "maxLength": 300,
      "minLength": 1,
      "description": "Email id, as returned by search_emails or list_to_answer."
    }
  },
  "additionalProperties": false
}
draft_reply output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "draft"
  ],
  "properties": {
    "draft": {
      "type": "object",
      "additionalProperties": {}
    }
  },
  "additionalProperties": true
}
draft_reply annotations
{
  "title": "Prepare a reply (not sent)",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
send_reply — Reply to the sender
Advertised by the server during the last successful anonymous check.
Open-world

Replies to the sender of one received email, and only to them (no Cc, no Bcc, no attachment), from the address the email was written to. 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, and so does a reply from an address the user has not verified (needsIdentity). The result says which one applied.

send_reply input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "email_id",
    "body"
  ],
  "properties": {
    "body": {
      "type": "string",
      "maxLength": 20000,
      "minLength": 1,
      "description": "Plain-text reply body."
    },
    "email_id": {
      "type": "string",
      "maxLength": 300,
      "minLength": 1,
      "description": "Email id, as returned by search_emails or list_to_answer."
    }
  },
  "additionalProperties": false
}
send_reply output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "reply"
  ],
  "properties": {
    "reply": {
      "type": "object",
      "additionalProperties": {}
    }
  },
  "additionalProperties": true
}
send_reply annotations
{
  "title": "Reply to the sender",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
archive_email — Archive an email
Advertised by the server during the last successful anonymous check.

Moves one inbox email to its mailbox's archive folder, on the mail server too. Undone by restore_to_inbox. Nothing is deleted.

archive_email input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "email_id"
  ],
  "properties": {
    "email_id": {
      "type": "string",
      "maxLength": 300,
      "minLength": 1,
      "description": "Email id, as returned by search_emails or list_to_answer."
    }
  },
  "additionalProperties": false
}
archive_email output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "moved"
  ],
  "properties": {
    "moved": {
      "type": "object",
      "additionalProperties": {}
    }
  },
  "additionalProperties": true
}
archive_email annotations
{
  "title": "Archive an email",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
move_email — Move an email to a folder
Advertised by the server during the last successful anonymous check.

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.

move_email input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "email_id",
    "folder"
  ],
  "properties": {
    "folder": {
      "type": "string",
      "maxLength": 300,
      "minLength": 1
    },
    "email_id": {
      "type": "string",
      "maxLength": 300,
      "minLength": 1,
      "description": "Email id, as returned by search_emails or list_to_answer."
    }
  },
  "additionalProperties": false
}
move_email output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "moved"
  ],
  "properties": {
    "moved": {
      "type": "object",
      "additionalProperties": {}
    }
  },
  "additionalProperties": true
}
move_email annotations
{
  "title": "Move an email to a folder",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
trash_email — Put an email in the trash
Advertised by the server during the last successful anonymous check.

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.

trash_email input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "email_id"
  ],
  "properties": {
    "reason": {
      "type": "string",
      "maxLength": 300,
      "description": "Why, shown to the user with a proposal."
    },
    "email_id": {
      "type": "string",
      "maxLength": 300,
      "minLength": 1,
      "description": "Email id, as returned by search_emails or list_to_answer."
    }
  },
  "additionalProperties": false
}
trash_email output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "object",
      "additionalProperties": {}
    }
  },
  "additionalProperties": true
}
trash_email annotations
{
  "title": "Put an email in the trash",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
restore_to_inbox — Put an email back in the inbox
Advertised by the server during the last successful anonymous check.

Moves an archived, filed or trashed email back to the inbox, on the mail server too.

restore_to_inbox input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "email_id"
  ],
  "properties": {
    "email_id": {
      "type": "string",
      "maxLength": 300,
      "minLength": 1,
      "description": "Email id, as returned by search_emails or list_to_answer."
    }
  },
  "additionalProperties": false
}
restore_to_inbox output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "restored",
    "email_id"
  ],
  "properties": {
    "email_id": {
      "type": "string"
    },
    "restored": {
      "type": "number"
    }
  },
  "additionalProperties": true
}
restore_to_inbox annotations
{
  "title": "Put an email back in the inbox",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_missions — List campaigns
Advertised by the server during the last successful anonymous check.
Advertised read-only

The user's prospection campaigns (missions), most recently active first, with the number of drafts waiting, emails sent and prospects who replied.

list_missions input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1
    }
  },
  "additionalProperties": false
}
list_missions output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "missions"
  ],
  "properties": {
    "missions": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": true
}
list_missions annotations
{
  "title": "List campaigns",
  "readOnlyHint": true,
  "openWorldHint": false
}
list_campaign_drafts — List the drafts of a campaign
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_campaign_drafts input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "mission_id"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1
    },
    "mission_id": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Campaign id, as returned by list_missions."
    }
  },
  "additionalProperties": false
}
list_campaign_drafts output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "counts",
    "drafts"
  ],
  "properties": {
    "counts": {
      "type": "object",
      "additionalProperties": {}
    },
    "drafts": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": true
}
list_campaign_drafts annotations
{
  "title": "List the drafts of a campaign",
  "readOnlyHint": true,
  "openWorldHint": false
}
list_replies_to_validate — Campaign replies waiting for the user
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

list_replies_to_validate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
list_replies_to_validate output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "drafts",
    "pending"
  ],
  "properties": {
    "drafts": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      }
    },
    "pending": {
      "$ref": "#/properties/drafts"
    }
  },
  "additionalProperties": true
}
list_replies_to_validate annotations
{
  "title": "Campaign replies waiting for the user",
  "readOnlyHint": true,
  "openWorldHint": false
}
create_campaign_draft — Write a campaign draft (not sent)
Advertised by the server during the last successful anonymous check.

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.

create_campaign_draft input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "mission_id",
    "to",
    "subject",
    "body"
  ],
  "properties": {
    "to": {
      "type": "string",
      "maxLength": 320,
      "minLength": 3
    },
    "body": {
      "type": "string",
      "maxLength": 20000,
      "minLength": 1,
      "description": "Plain-text body."
    },
    "name": {
      "type": "string",
      "maxLength": 200,
      "description": "Recipient name, for a new prospect."
    },
    "subject": {
      "type": "string",
      "maxLength": 300,
      "minLength": 1
    },
    "mission_id": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Campaign id, as returned by list_missions."
    }
  },
  "additionalProperties": false
}
create_campaign_draft output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "draft"
  ],
  "properties": {
    "draft": {
      "type": "object",
      "additionalProperties": {}
    }
  },
  "additionalProperties": true
}
create_campaign_draft annotations
{
  "title": "Write a campaign draft (not sent)",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
update_campaign_draft — Edit a campaign draft (not sent)
Advertised by the server during the last successful anonymous check.

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.

update_campaign_draft input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "mission_id",
    "draft_id"
  ],
  "properties": {
    "to": {
      "type": "string",
      "maxLength": 320,
      "minLength": 3
    },
    "body": {
      "type": "string",
      "maxLength": 20000,
      "minLength": 1
    },
    "subject": {
      "type": "string",
      "maxLength": 300,
      "minLength": 1
    },
    "draft_id": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1
    },
    "mission_id": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Campaign id, as returned by list_missions."
    }
  },
  "additionalProperties": false
}
update_campaign_draft output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "draft"
  ],
  "properties": {
    "draft": {
      "type": "object",
      "additionalProperties": {}
    }
  },
  "additionalProperties": true
}
update_campaign_draft annotations
{
  "title": "Edit a campaign draft (not sent)",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1027 ms
95th percentile latency
1027 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1027 ms · metadata changed · 17 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http bumblebox-mcp https://api.bumblebox.ai/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add bumblebox-mcp --url https://api.bumblebox.ai/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable bumblebox-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "bumblebox-mcp": {
      "url": "https://api.bumblebox.ai/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "bumblebox-mcp": {
      "type": "streamableHttp",
      "url": "https://api.bumblebox.ai/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start bumblebox-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "bumblebox-mcp": {
      "type": "http",
      "url": "https://api.bumblebox.ai/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http bumblebox-mcp https://api.bumblebox.ai/api/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "bumblebox-mcp": {
      "url": "https://api.bumblebox.ai/api/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "bumblebox-mcp": {
      "serverUrl": "https://api.bumblebox.ai/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like BumbleBox MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run BumbleBox MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing