Missive MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | HTTP port (default 3000) | |
| BASE_URL | No | Public URL of the server | |
| DATA_DIR | No | Directory for storage files (default ./data) | |
| ENCRYPTION_KEY | No | 32-byte hex string for AES-256-GCM PAT encryption | |
| MISSIVE_API_TOKEN | No | Missive API token for stdio mode |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_organizationsA | Lists all organizations the authenticated user belongs to. Organizations are the top-level entity in Missive. |
| list_teamsB | Lists all teams the authenticated user has access to. Filter by organization if needed. |
| list_usersA | Lists all users in organizations the authenticated user belongs to. Use this to find user IDs for assignments. |
| list_contact_booksA | Lists all contact books the authenticated user has access to. Required before creating contacts. |
| list_shared_labelsA | Lists all shared labels available for tagging conversations. Use label IDs to filter conversations or apply labels. |
| list_conversationsA | Lists conversations visible to the authenticated user. Supports multiple filters and search by email/domain. Common filter combinations:
Note: email and domain are mutually exclusive. |
| get_conversationA | Gets a single conversation by ID. Returns conversation details including assignees, labels, and metadata. |
| get_messageA | Gets a single message by ID with full body content. Supports body processing options to manage size. Body format options:
Use strip_html=true (default) to convert HTML to plain text. |
| get_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. |
| list_draftsA | Lists drafts in a conversation. Use this to see drafts before sending or to review unsent messages. |
| create_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. |
| draft_replyA | Creates a draft reply to an existing message. Automatically sets:
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. |
| send_messageA | Sends an email message. WARNING: This action is IRREVERSIBLE. The email will be delivered immediately. Before calling:
Rate limited to 10 sends/minute, 100 sends/hour. For replies, provide the conversation ID. For new messages, omit it. |
| delete_draftA | Deletes an unsent draft or scheduled message. This action cannot be undone. |
| list_contactsC | Lists contacts in a contact book. Use the search parameter to find contacts by name or email. |
| get_contactB | Gets a single contact by ID with all details. |
| create_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. |
| update_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. |
| create_postA | Adds a post to a conversation and optionally changes its state. This tool can:
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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 19 tools
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.
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.
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.
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.