# Bottled Muse connector

From musedirectory.ai, the independent directory of Meta Muse connectors. Not affiliated with Meta.

## Bottled

Send, reply and search email on your own domain with aliases and contacts

- Record: https://musedirectory.ai/connector/bottled
- Category: Productivity
- Developer: bottled.email (https://bottled.email)
- Muse status: Extra setup. Not in Muse's Connectors list yet. Muse can still use it: its page gives you a request to paste into Muse.
- Health: Working, 431ms, checked 2026-09-28T09:31:07Z
- Endpoint: https://bottled.email/api/mcp/mcp
- Auth: Sign in with your account; Pricing: unknown
- Screening: Screened, no issues found (2026-09-24T23:35:43Z)
- Source: Found in the official MCP Registry (email.bottled/bottled) https://registry.modelcontextprotocol.io/v0/servers?search=email.bottled%2Fbottled

Bottled provides branded email service on custom domains. Muse can send and reply to emails, search messages, manage aliases and contacts, and run email campaigns from your domain.

Example request: "Send an email from my business domain and add the recipient to my contacts"

How to connect: Bottled is not in Muse's Connectors list yet, and it needs you to sign in with your Bottled account. Apps that need this kind of sign-in usually cannot be used from a Muse chat yet. Follow it here and we will tell you when it reaches Muse.

Tools:
- list_recent_emails: List recent emails in the workspace, newest first. Use to summarize inbox/sent activity. Returns metadata only (subject, counterparty, timestamp, plus an AI summary and needsReply flag when triage has run), not bodies. Call get_email for a specific message body.
- check_new_emails: Check for new (unread, received) emails. Returns the unread count and a preview of the most recent ones. Use this when the user asks 'any new mail?' or wants a quick inbox check.
- get_email: Fetch a single email by id, including its body when available. Use after list_recent_emails/check_new_emails to read or summarize a specific message. Body is present only when the workspace stores email bodies.
- search_emails: Search the workspace's emails by free text across sender/recipient, address, subject, and body (when the workspace stores bodies). Case-insensitive substring match, newest first. Returns metadata only. Call get_email for a specific message body.
- get_usage: Get the workspace's plan tier and quota usage: emails sent/received this month vs the plan's monthly limits, remaining allowance, and history retention days. Use before send_email to check headroom, or when the user asks about their plan or limits.
- send_email: Send ONE real email from one of the workspace's verified addresses. This delivers actual mail to the recipient, so confirm the content with the user before calling. For a LIST of recipients, do NOT loop this tool: use import_contacts + create_campaign instead. Campaigns add per-r
- reply_to_email: Reply to a RECEIVED email by its id. This sends a REAL email back to the original sender, so confirm the content with the user before calling. The reply goes from the address the original arrived at (falling back to the workspace's primary address) with a 'Re:' subject. Counts ag
- mark_emails: Mark one or more emails as read or unread by id. A safe inbox mutation: nothing is sent or deleted. Use after the user has reviewed messages from check_new_emails/list_recent_emails.
- create_draft: Save an email as a DRAFT. This does NOT deliver anything and does NOT count against the plan's monthly send quota. Takes the same arguments as send_email. Returns the draft id and a `draftUrl` that opens the draft in Bottled's web UI, where the user can read it exactly as the rec
- list_drafts: List the workspace's saved drafts, newest first. Returns metadata only (id, to, subject, createdAt, draftUrl). Call get_draft for a body. Drafts are unsent by default; pass status to include ones already sent.
- get_draft: Fetch a single draft by id, including its full text and html body and its draftUrl. Use before send_draft to show the user exactly what will be delivered.
- update_draft: Revise an existing draft in place: only the fields you pass change, the rest are left alone. Still does NOT deliver anything. Use this to apply the user's edits instead of creating a second draft. Drafts that have already been sent cannot be edited.
- send_draft: Send an existing draft by id. This DELIVERS real mail to the recipient, so confirm with the user before calling. This is the only draft tool that sends. Counts against the plan's monthly send quota at this point (the draft itself never did). The draft is marked sent and kept for 
- delete_draft: Delete a draft by id. Only removes the saved draft: no mail is affected, and a draft that was already sent stays in the sent log.
- list_domains: List the workspace's sending domains with verification state: receiving (MX routing) and sending (DKIM) status. Status is the last persisted result and can lag reality. Call verify_domain to refresh a domain, or get_domain for the DNS records a pending domain still needs.
- get_domain: Get one domain's verification detail. For domains that aren't verified yet, includes the exact DNS records (MX, DKIM CNAMEs, SPF) the user must add at their registrar to finish setup. Ideal for walking the user through going live.
- verify_domain: Re-run verification for one of the workspace's domains: live-checks the sending identity (DKIM) and DNS routing (MX), saves the refreshed status, and returns it. Call after adding the DNS records get_domain listed, or to correct a stale status. When setup is still incomplete, ret
- list_aliases: List the workspace's email addresses (aliases) and where each forwards inbound mail, plus active/auto-reply state. Use to answer 'what addresses do I have?' or to pick a valid `from` for send_email.
- create_alias: Create a new email address (alias) on one of the workspace's own domains (e.g. support@yourdomain.com) and route its inbound mail to a real inbox. Inbound forwarding starts working once the address exists; sending from it needs the domain to be verified. Goes through the same pla
- list_contacts: List or search the workspace's CRM contacts: lifecycle stage, engagement score, send/receive counts, and last-touch timestamps. Use to look up who a correspondent is or to review recent relationships.
- get_contact: Get one CRM contact's full profile by id or email: phone, custom fields, lifecycle stage, engagement stats, and the most recent notes. Use to answer 'who is this?' about a correspondent or before drafting outreach.
- add_contact_note: Append a free-text note to a CRM contact's timeline, e.g. a call summary, agreement, or follow-up reminder. Append-only; notes are edited or deleted in the dashboard. Find the contact_id via list_contacts or get_contact first.
- import_contacts: Import a list of contacts into the workspace CRM in one call. Nothing is emailed. This is the first step for mailing a list: import_contacts, then create_campaign (which can take a contactListId), then send_campaign. Duplicate rows are merged (tags unioned), existing contacts are
- list_campaigns: List the workspace's email campaigns with status and results: recipients, sent/failed counts, and unique opens/clicks. Read-only: use create_campaign to build one, send_campaign to deliver it.
- create_campaign: Create a DRAFT campaign for a whole list of recipients in one call. This does NOT deliver anything and does NOT count against the plan's monthly send quota. Every recipient gets their own individual email when it is sent (never a shared To/CC), each with its own unsubscribe link.
- list_campaign_recipients: List a campaign's recipients with their per-recipient status: `pending` (not yet mailed), `sent`, `failed` (with a failure reason), or `skipped` (on the workspace's unsubscribe list, never mailed). Paginated. Use to check who a campaign reached before or after sending.
- send_campaign: Send a draft campaign. This DELIVERS real mail, one individual email per pending recipient, so confirm with the user before calling. This is the only campaign tool that sends. Recipients on the workspace's unsubscribe list are never mailed, every message carries its own unsubscri
- cancel_campaign: Cancel a campaign that hasn't finished: a draft, a scheduled one, or one that is paused or mid-send. A cancelled campaign stops at the next batch; anything already delivered stays delivered and its results remain visible. Cannot be undone.
- get_api_key_info: Status of the API key this session is authenticated with: usage count, last used, expiry, MCP write access, whether a rotated-out previous key is still in its grace window, and whether THIS call used that previous key. Never returns the key itself.
- rotate_api_key: Rotate the API key this session is authenticated with. Two-step and server-enforced: called WITHOUT confirm_phrase it only returns an impact report plus the exact phrase required, and changes nothing. Called with the exact phrase it generates a new key (returned once, never again

Screening checks:
- MCP handshake: pass (Requires sign-in (publishes OAuth metadata))
- Domain against threat feeds (Cloudflare security DNS): pass (bottled.email not flagged)
- Published packages against the OSV malicious-package database: n/a (No npm or PyPI package published)
- Hidden instructions or invisible characters in tool text: n/a (Tools are behind sign-in)
- Inputs asking for passwords, card numbers or seed phrases: n/a (Tools are behind sign-in)
- Domain and redirects: pass (No redirects off the domain)
- AI review of purpose and tool behavior: pass (No concerns)
