Skip to main content
Glama
CocoInbox MCP Server

CocoInbox MCP Server

CocoInbox MCP Server

Thin MCP wrapper around the existing CocoInbox REST API. Does not modify or rebuild cocoInboxFrontend / cocoInboxBackend.

Tools (v1)

Tool

Maps to

login

POST /api/auth/login + GET /api/auth/me

logout

Clears process session

get_current_user

GET /api/auth/me

auth_status

Local session snapshot

list_emails

GET /api/emails/user/:userId

create_email

POST /api/emails/create

select_email

Picks From address for send

get_email

GET /api/emails/:id/messages

send_email

POST /api/mail/send

Related MCP server: simple-email-mcp

Typical flow

  1. login({ email, password })

  2. list_emails() → pick an id

  3. select_email({ emailId }) or create_email({ aliasName })

  4. send_email({ to, subject, body })

Setup

cd mcp-server
npm install
cp .env.example .env
# set COCOINBOX_API_URL to your running backend

Cursor (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/mcp

Env

Variable

Default

Meaning

COCOINBOX_API_URL

http://localhost:4000

Existing REST API base

COCOINBOX_TOKEN

—

Optional pre-set Bearer token

MCP_HTTP_PORT

3100

HTTP transport port

cocoinbox-mcp

Available Tools

35 tools
auth_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

    B3.1/5.0

    Scored across 35 tools

    Disambiguation2/5

    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.

    Naming Consistency4/5

    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.

    Tool Count2/5

    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.

    Completeness3/5

    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

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables 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
    • A
      license
      B
      quality
      C
      maintenance
      Enables 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.
      1
      4
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables 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