Skip to main content
Glama
Missive MCP Server

Missive MCP Server

by grncdr

Missive MCP Server

An MCP (Model Context Protocol) server that interfaces with the Missive API, enabling Claude to manage email conversations, contacts, and team collaboration.

Prerequisites

  • Node.js 18+

  • Missive account with Productive plan (required for API access)

  • Missive API token

Related MCP server: icloud-mcp

Installation

npm install
npm run build

Modes

The server runs in two modes: stdio for local single-user use, and remote for hosted multi-user deployments.

Stdio Mode (Local)

Set the MISSIVE_API_TOKEN environment variable:

export MISSIVE_API_TOKEN="your_api_token_here"
npm start

To get your API token: open Missive, go to Settings > API, click "Create a new token".

Add to your Claude Desktop configuration (claude_desktop_config.json):

{
  "mcpServers": {
    "missive": {
      "command": "/path/to/node",
      "args": ["/path/to/missive-mcp/dist/index.js"],
      "env": {
        "MISSIVE_API_TOKEN": "your_api_token_here"
      }
    }
  }
}

Important: Use the full path to node (run which node to find it). Claude Desktop has a restricted PATH and may not find node otherwise.

Remote Mode (Hosted)

Runs an HTTP server with OAuth. Each user provides their own Missive PAT through a browser-based authorization flow.

export ENCRYPTION_KEY="$(openssl rand -hex 32)"
export BASE_URL="https://missive-mcp.example.com"
npm run remote

Variable

Required

Description

ENCRYPTION_KEY

Yes

32-byte hex string for AES-256-GCM PAT encryption

BASE_URL

Yes

Public URL of the server

PORT

No

HTTP port (default 3000)

DATA_DIR

No

Directory for storage files (default ./data)

Point MCP clients at {BASE_URL}/mcp. The server handles OAuth automatically:

  1. Client discovers endpoints via /.well-known/oauth-authorization-server

  2. Client registers dynamically via /register

  3. User is redirected to a form to paste their Missive API token

  4. Server validates the token, encrypts and stores it, issues OAuth tokens

  5. Client uses bearer tokens to call /mcp

PATs are encrypted at rest with AES-256-GCM. OAuth tokens expire after 1 hour (refresh tokens last 30 days).

Tools

Reference Data

Tool

Description

list_organizations

List organizations you belong to

list_teams

List teams (for assignments)

list_users

List users (for assignments)

list_contact_books

List contact books (required before creating contacts)

list_shared_labels

List labels (for filtering and tagging)

Conversations

Tool

Description

list_conversations

List conversations with filters (inbox, assigned, closed, team, label, email, domain)

get_conversation

Get a single conversation by ID

Messages

Tool

Description

get_conversation_timeline

Get all messages, posts, and comments as a unified chronological timeline

get_message

Get full message content (with body truncation options)

Drafts

Tool

Description

list_drafts

List drafts in a conversation

create_draft

Create a draft (not sent)

send_message

Send a message immediately (rate limited)

delete_draft

Delete an unsent draft

Contacts

Tool

Description

list_contacts

List contacts in a book (with search)

get_contact

Get a single contact

create_contact

Create a new contact

update_contact

Update an existing contact

Management

Tool

Description

create_post

Add a post to a conversation; close, label, assign, or move to team

Examples

Read inbox

Use list_conversations with inbox=true to see recent conversations.

Reply to an email

1. Use list_conversations to find the conversation
2. Use get_conversation_timeline to see the full thread (messages + team activity)
3. Use send_message with the conversation ID to reply

Search for emails from a domain

Use list_conversations with domain="example.com"

Assign a conversation

1. Use list_users to find the user ID
2. Use list_organizations to get the org ID
3. Use create_post with add_assignees=[user_id]

Rate Limits

  • send_message: 10 per minute, 100 per hour (client-enforced)

  • Missive API rate limits are undocumented; the client handles 429 responses

Security

  • API tokens are validated on startup (stdio) or on authorization (remote)

  • Tokens are never logged or included in error messages

  • In remote mode, PATs are encrypted at rest with AES-256-GCM

  • Email body content is never logged

  • Input validation on all tool parameters

License

MIT

Available Tools

19 tools
create_contactCreate ContactA

Creates a new contact in a contact book. At least one name field (first_name or last_name) is required.

Use list_contact_books first to get the contact_book ID.

Inputs: contact_book (required), first_name, last_name, middle_name, +4 more.

create_draftCreate DraftA

Creates a draft message that is NOT sent. Use this when the user wants to compose a message and review it before sending.

The draft will be saved and can be viewed in Missive or sent later using send_message.

For replies, provide the conversation ID and the from/to addresses. For new messages, omit the conversation ID and use any from/to addresses specified by the user.

Inputs: to_fields (required), subject (required), body (required), cc_fields, +4 more.

create_postCreate PostA

Adds a post to a conversation and optionally changes its state.

This tool can:

  • Close a conversation: set close=true

  • Add labels: set add_shared_labels=[label_ids]

  • Remove labels: set remove_shared_labels=[label_ids]

  • Assign users: set add_assignees=[user_ids]

  • Move to team: set team=team_id (use force_team=true to override existing team)

  • Add a visible note: set text="your message"

Posts leave a visible trace showing what triggered the action.

Required: conversation and organization IDs. Use list_organizations to get org ID, list_users for user IDs, list_shared_labels for label IDs.

Inputs: conversation (required), organization (required), close, add_shared_labels, +6 more.

delete_draftDelete DraftA

Deletes an unsent draft or scheduled message. This action cannot be undone.

Inputs: draft_id (required).

draft_replyDraft ReplyA

Creates a draft reply to an existing message. Automatically sets:

  • Subject: Adds "Re: " prefix to original subject

  • To: Uses the original sender's address

  • Conversation: Links to the original conversation

Use reply_all=true to include original CC recipients.

Only the body content is required. The draft can be reviewed in Missive or sent with send_message.

Inputs: message_id (required), body (required), reply_all, cc_fields, +2 more.

get_contactGet ContactB

Gets a single contact by ID with all details.

Inputs: contact_id (required).

get_conversationGet ConversationA

Gets a single conversation by ID. Returns conversation details including assignees, labels, and metadata.

Inputs: conversation_id (required).

get_conversation_timelineGet Conversation TimelineA

Returns all messages, posts, and comments in a conversation as a unified chronological timeline.

This matches how Missive displays conversations - emails, internal notes, state changes, and team comments interleaved by time.

Each item has a "type" field ("message", "post", or "comment") to identify what it is.

Uses smart caching: stops fetching when hitting cached data.

To paginate backwards: pass older_than with the oldest_timestamp from the previous response.

Use get_message with a specific message ID if you need the full body content.

Inputs: conversation_id (required), page_size, older_than, body_format, +2 more.

get_messageGet MessageA

Gets a single message by ID with full body content. Supports body processing options to manage size.

Body format options:

  • full: Returns complete body (may be large for HTML emails)

  • truncated: Truncates body to max_body_length (default)

  • preview: Returns first 500 characters only

Use strip_html=true (default) to convert HTML to plain text.

Inputs: message_id (required), body_format, strip_html, max_body_length.

list_contact_booksList Contact BooksA

Lists all contact books the authenticated user has access to. Required before creating contacts.

Inputs: limit, offset.

list_contactsList ContactsC

Lists contacts in a contact book. Use the search parameter to find contacts by name or email.

Inputs: contact_book (required), search, limit, offset.

list_conversationsList ConversationsA

Lists conversations visible to the authenticated user. Supports multiple filters and search by email/domain.

Common filter combinations:

  • inbox=true: Shows inbox conversations

  • assigned=true: Shows assigned conversations

  • closed=true: Shows closed conversations

  • email="user@example.com": Search by exact email address

  • domain="example.com": Search by email domain

Note: email and domain are mutually exclusive.

Inputs: inbox, all, assigned, closed, +15 more.

list_draftsList DraftsA

Lists drafts in a conversation. Use this to see drafts before sending or to review unsent messages.

Inputs: conversation_id (required), limit, until.

list_organizationsList OrganizationsA

Lists all organizations the authenticated user belongs to. Organizations are the top-level entity in Missive.

Inputs: no named parameters.

list_shared_labelsList Shared LabelsA

Lists all shared labels available for tagging conversations. Use label IDs to filter conversations or apply labels.

Inputs: organization, limit, offset.

list_teamsList TeamsB

Lists all teams the authenticated user has access to. Filter by organization if needed.

Inputs: organization, limit, offset.

list_usersList UsersA

Lists all users in organizations the authenticated user belongs to. Use this to find user IDs for assignments.

Inputs: organization, limit, offset.

send_messageSend MessageA

Sends an email message. WARNING: This action is IRREVERSIBLE.

The email will be delivered immediately. Before calling:

  • Confirm recipient addresses are correct

  • Verify message content is appropriate

  • Never send to addresses not explicitly provided by the user

Rate limited to 10 sends/minute, 100 sends/hour.

For replies, provide the conversation ID. For new messages, omit it.

Inputs: to_fields (required), subject (required), body (required), cc_fields, +4 more.

update_contactUpdate ContactA

Updates an existing contact. Only provided fields will be updated.

WARNING: When updating infos array, you must include ALL items you want to keep. Missing items will be deleted.

Inputs: contact_id (required), first_name, last_name, middle_name, +4 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 19 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose, targeting different resources (contacts, drafts, posts, messages, conversations, etc.) with specific actions. The only potential overlap between create_draft and draft_reply is clearly differentiated by descriptions.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_contact, list_conversations, send_message). The pattern is uniform and predictable across all 19 tools.

    Tool Count5/5

    With 19 tools covering contacts, conversations, messages, drafts, posts, and organizational entities, the count is well-scoped for a comprehensive email collaboration platform. Each tool serves a distinct function without unnecessary redundancy.

    Completeness4/5

    Core workflows (messaging, drafting, replying, managing contacts) are well-covered, but some CRUD operations are missing, e.g., delete_contact, update_draft, and administrative operations for organizations, labels, teams, and users. These are minor gaps that agents can typically work around.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • -
      license
      Not graded
      quality
      Not graded
      maintenance
      An MCP server that integrates with Missive App allowing users to create, manage, and send email drafts through AI tools like Claude Desktop or N8N.
      -
    • A
      license
      B
      quality
      B
      maintenance
      An MCP server that connects Claude to iCloud Mail for reading, searching, sending, and organizing emails through natural language. It supports advanced management tasks like bulk operations, mailbox organization, and automated rules for inbox maintenance.
      86
      273 npm
      MIT
    • A
      license
      B
      quality
      F
      maintenance
      MCP server that connects Claude with Gmail to read, send, delete, and manage messages and labels via the Google Gmail API.
      3
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server that enables Claude to manage Outlook emails, including reading, sending, organizing, drafting, and bulk operations via Microsoft Graph API.
      15 npm
      1
      MIT