CocoInbox MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CocoInbox MCP Server send an email to john@example.com saying we're on track"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CocoInbox MCP Server
Thin MCP wrapper around the existing CocoInbox REST API. Does not modify or rebuild cocoInboxFrontend / cocoInboxBackend.
Tools (v1)
Tool | Maps to |
|
|
| Clears process session |
|
|
| Local session snapshot |
|
|
|
|
| Picks From address for send |
|
|
|
|
Related MCP server: simple-email-mcp
Typical flow
login({ email, password })list_emails()→ pick an idselect_email({ emailId })orcreate_email({ aliasName })send_email({ to, subject, body })
Setup
cd mcp-server
npm install
cp .env.example .env
# set COCOINBOX_API_URL to your running backendCursor (stdio)
Project file .cursor/mcp.json is already configured. Reload MCP in Cursor Settings → Tools & MCP.
HTTP MCP URL (optional)
npm run start:http
# → http://127.0.0.1:3100/mcpEnv
Variable | Default | Meaning |
|
| Existing REST API base |
| — | Optional pre-set Bearer token |
|
| HTTP transport port |
cocoinbox-mcp
Available Tools
35 toolsauth_statusA
Show whether this MCP process is authenticated. If not, returns a login_portal card (call connect/login or open the URL).
Inputs: no named parameters.
complete_loginA
Finish browser login only when the user pastes the one-time auth code from the success page (fallback if OAuth/portal did not auto-connect).
Inputs: code (required).
connectA
Alias for login — open the CocoInbox secure connect portal. Preferred name for "log me in" / "get user" when not authenticated.
Inputs: no named parameters.
create_emailC
Create a new ephemeral CocoInbox address. Optionally auto-select it as From.
Inputs: aliasName, isBlackbox, durationMinutes, selectAfterCreate.
create_folderB
Create a new mail dossier/folder (POST /api/folders). Example name: "Work" or "mail/aze-walid".
Inputs: name (required).
create_folder_for_emailA
Create a dossier for a mailbox address (default name mail/). Optionally use a custom folder name.
Inputs: emailAddress (required), folderName.
crm_add_leadsA
Add up to 25 leads to a group you own. Include name, email, phone, company, address, city, map_url, website, has_website=false when no site. Private to this user — no cross-user leak.
Inputs: leads (required), group_id (required).
crm_create_groupA
Create a lead group (campaign). REQUIRED: name + why (outreach reason, e.g. "car garages without websites in Casablanca → pitch website build"). Also set source_ai (claude|grok|cursor|manual) and optional location. Returns group id for crm_add_leads.
Inputs: why (required), name (required), notes, location, +1 more.
crm_generate_prospect_tasksA
For a group: create email_prospect tasks for leads that have emails. Each task brief + draft uses group.why. Never sends email — returns drafts. After review, send with send_email and mark task done via crm_update_task.
Inputs: group_id (required), limit, only_with_email.
crm_get_groupA
Get one lead group by id (includes why / source_ai / location).
Inputs: group_id (required).
crm_list_groupsB
List CRM lead groups (token-friendly table). Filter: status active|paused|archived.
When presenting the result:
Display as a Markdown table using content.columns / content.rows.
Do not output raw JSON unless the user asks.
For empty results, show content.empty.
Keep why short; full why is in crm_get_group.
Inputs: limit, status.
crm_list_leadsB
List CRM leads as a table (optional group_id / with_email / status).
When presenting the result:
Display as a Markdown table using content.columns / content.rows.
Do not output raw JSON unless the user asks.
For empty results, show content.empty.
Prefer company + name; show "sans site" when has_website is false.
Inputs: limit, status, group_id, with_email.
crm_list_tasksA
List CRM tasks as a table (optional group_id / status todo|doing|done|cancelled).
When presenting the result:
Display as a Markdown table using content.columns / content.rows.
Do not output raw JSON unless the user asks.
For empty results, show content.empty.
After sending a prospect email with send_email, mark the task done via crm_update_task.
Inputs: limit, status, group_id.
crm_summaryA
Compact CRM counts for this user (groups, leads, tasks todo). Start here to see state without loading full lists.
Inputs: no named parameters.
crm_update_leadB
Update one of your leads (status, email, notes, etc.). Ownership enforced server-side.
Inputs: lead_id (required), city, name, email, +9 more.
crm_update_taskA
Update a CRM task status or draft. After sending prospect email via send_email, set status=done.
Inputs: task_id (required), brief, title, status, +2 more.
get_company_profileA
Get the user's company profile + generated report (name, what they do, offer, audience).
When presenting:
Summarize the company clearly (name, what they do, offer).
If configured=false, tell the user to fill Profil → Entreprise or call update_company_profile.
Use this before creating CRM groups / prospect tasks so outreach matches the real business.
Inputs: no named parameters.
get_current_userA
Return the authenticated user profile (includes company when set).
If not connected: opens the secure login portal automatically and returns a login_portal card — present that card, do not invent multi-step paste instructions.
Inputs: no named parameters.
get_emailC
Fetch the message thread for one mailbox address.
Inputs: emailId, inboundLimit.
get_privacy_scoreA
Get the user privacy / security score (GET /api/security/score).
Inputs: no named parameters.
list_emailsA
List ephemeral email addresses for the logged-in user.
Inputs: no named parameters.
list_foldersA
List mail dossiers/folders for the user (GET /api/folders).
Inputs: no named parameters.
list_my_ideasA
List ideas (title + description + status) previously submitted for this authenticated account. Same data as CocoInbox → Ideas (/ideas).
Inputs: no named parameters.
list_my_tool_requestsA
Alias for list_my_ideas. Prefer list_my_ideas.
Inputs: no named parameters.
loginA
Open the CocoInbox secure login portal (browser). Prefer this over asking for passwords in chat.
When presenting the result:
Show a short connect card with the login link/button.
Do NOT write multi-step "copy auth code" instructions.
If portal_opened is true, the window should already be open.
If the user later pastes a one-time code, call complete_login({ code }). Clients with MCP OAuth can also use the built-in Authenticate / mcp_auth flow instead.
Inputs: no named parameters.
login_with_passwordA
Fallback programmatic login (prefer login/connect portal or MCP OAuth). Use only if the user explicitly pastes credentials.
Inputs: email (required), password (required).
logoutA
Clear the in-memory auth session and selected sender email.
Inputs: no named parameters.
move_email_to_folderB
Move a message (inbound or sent) into a dossier (PATCH /api/mail/messages/:id/move).
Inputs: folder (required), messageId (required).
request_missing_toolC
Alias for submit_idea. Prefer submit_idea.
Inputs: title (required), description (required).
scan_dark_webA
Scan one email address on the dark web for breaches (POST /api/security/dark-web-scan).
Inputs: email (required).
scan_dark_web_allB
Scan the account email plus all ephemeral addresses (POST /api/security/dark-web-scan-all).
Inputs: no named parameters.
select_emailB
Select which mailbox address to send from (id from list_emails, or "fixed").
Inputs: emailId (required), emailAddress.
send_emailC
Send an email via POST /api/mail/send using the selected From address. Automatically moves the sent message into the "MCP" dossier.
Inputs: to (required), subject (required), body, html, +5 more.
submit_ideaA
Save an idea to the user's CocoInbox account (title + description). Same as the Ideas page on the website. Use when the user wants to note a product/feature wish, or when no existing MCP tool covers their need — do not invent fake tools.
Inputs: title (required), description (required).
update_company_profileA
Save/update the sender company profile. Regenerates an AI report used to refine CRM prospect emails.
Required: name OR description. Prefer filling name, description (what you do), and offer (what you pitch).
Inputs: name, offer, website, audience, +3 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 35 tools
Several tools overlap heavily: login, connect, complete_login, and login_with_password all handle authentication, while request_missing_tool is an alias for submit_idea and list_my_tool_requests is an alias for list_my_ideas. create_folder and create_folder_for_email also have blurred boundaries. The CRM and security clusters are clearer, but overall an agent could easily select the wrong auth or alias tool.
Most tools consistently use snake_case verb_noun naming, and the crm_* cluster is very coherent. However, bare/alias names like connect, request_missing_tool, and list_my_tool_requests break the pattern, and domain prefixes are inconsistently applied across auth, mail, security, and company tools.
With 35 tools, this exceeds the 25+ threshold for 'too many'. The set spans auth, mail, security, ideas, CRM, and company profile, but several tools are aliases or near-duplicates, so the count feels inflated rather than well-scoped. Consolidating auth entry points and removing aliases would bring it closer to a reasonable size.
Core workflows exist for authentication, ephemeral email, dark-web scanning, ideas, company profile, and CRM lead/task management. However, lifecycle coverage has notable gaps: there is no delete for folders, emails, leads, groups, or tasks, and no general task creation outside generated prospect tasks. These gaps create dead ends that agents can partially work around but not fully resolve.
Maintenance
Related MCP Connectors
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Email inboxes for AI agents: send, receive, reply, search, and manage threaded email over MCP.
Hosted email MCP for your own Gmail, Outlook.com, Microsoft 365, iCloud or IMAP inbox: read, search, draft, reply in thread, forward and file mail. It moves or flags up to 500 messages in one call, and a send leaves exactly one copy in Sent. A calendar is a separate connection, and connecting one adds diary and scheduling tools.
Hosted email for AI agents: create inboxes, send, receive, and reply over MCP with scoped API keys
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables reading and sending emails via IMAP and SMTP through the MCP protocol. Supports multiple email accounts and configuration via UI or environment variables.BSD 3-Clause
- AlicenseBqualityCmaintenanceEnables users to manage email accounts via IMAP/SMTP, including reading, searching, sending emails with attachments and calendar invites, all through natural language interactions with MCP-compatible clients.14MIT
- AlicenseNot gradedqualityBmaintenanceEnables searching, reading full conversations, and sending email across multiple IMAP/SMTP mailboxes from any MCP client, with multi-user support and per-user API tokens.MIT
- AlicenseNot gradedqualityCmaintenanceEmail capabilities for AI agents to receive, read, reply, and send through MCP.2 npmISC