missive

Read email/chat conversations, messages, contacts and teams; draft, send and update threads.

Should I use this

Quality & Safety

A
Description quality
91%
Schema completeness
96%
Naming quality
76%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (4)

  • LOWTool 'missive_list_conversation_messages' name length outside 3-30 rangein missive_list_conversation_messages
  • LOWTool 'missive_list_conversation_comments' name length outside 3-30 rangein missive_list_conversation_comments
  • LOWTool 'missive_list_conversation_drafts' name length outside 3-30 rangein missive_list_conversation_drafts
  • LOWTool 'missive_list_conversation_posts' name length outside 3-30 rangein missive_list_conversation_posts

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,596Tokens (tool definitions)
~1.8 KBTypical response size
Significant attention impact (2.81% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "missive": {
      "url": "https://missive.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://missive.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (19)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢missive_list_conversations(limit, until, inbox, assigned, closed, ...)

List conversations (email/chat threads). Missive requires EXACTLY ONE mailbox-type filter — one of inbox / assigned / closed / flagged / snoozed / trashed / all / shared_label / team_inbox / team_all / organization. Missive: GET /conversations.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Max conversations to return (default 25, max 50).",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "until": {
      "description": "Unix timestamp cursor — return records older than this (offset-less pagination).",
      "type": "number"
    },
    "inbox": {
      "description": "Conversations in your inbox.",
      "type": "boolean"
    },
    "assigned": {
      "description": "Conversations assigned to you.",
      "type": "boolean"
    },
    "closed": {
      "description": "Closed conversations.",
      "type": "boolean"
    },
    "flagged": {
      "description": "Flagged conversations.",
      "type": "boolean"
    },
    "snoozed": {
      "description": "Snoozed conversations.",
      "type": "boolean"
    },
    "trashed": {
      "description": "Trashed conversations.",
      "type": "boolean"
    },
    "all": {
      "description": "All conversations.",
      "type": "boolean"
    },
    "shared_label": {
      "description": "Conversations under a shared label id.",
      "type": "string"
    },
    "team_inbox": {
      "description": "Conversations in a team's inbox (team id).",
      "type": "string"
    },
    "team_all": {
      "description": "All of a team's conversations (team id).",
      "type": "string"
    },
    "organization": {
      "description": "Filter to an organization id.",
      "type": "string"
    },
    "email": {
      "description": "Filter to conversations involving this email address.",
      "type": "string"
    },
    "contact_organization": {
      "description": "Filter to a contact organization id.",
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢missive_get_conversation(id)

Get a single conversation by id. Missive: GET /conversations/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The resource id (a UUID-like string)."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢missive_list_conversation_messages(id, limit, until)

List the messages (emails) in a conversation. Missive: GET /conversations/{id}/messages.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The resource id (a UUID-like string)."
    },
    "limit": {
      "description": "Max messages to return (default 10, max 10).",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "until": {
      "description": "Unix timestamp cursor — return records older than this (offset-less pagination).",
      "type": "number"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢missive_get_message(conversation_id, id)

Get a single message, including the full body. Missive: GET /conversations/{conversation_id}/messages/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "conversation_id": {
      "type": "string",
      "description": "The conversation id the message belongs to."
    },
    "id": {
      "type": "string",
      "description": "The message id."
    }
  },
  "required": [
    "conversation_id",
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢missive_list_conversation_comments(id, limit, until)

List internal comments (team chat) on a conversation. Missive: GET /conversations/{id}/comments.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The resource id (a UUID-like string)."
    },
    "limit": {
      "description": "Max records to return.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "until": {
      "description": "Unix timestamp cursor — return records older than this (offset-less pagination).",
      "type": "number"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢missive_list_conversation_drafts(id, limit, until)

List draft messages on a conversation. Missive: GET /conversations/{id}/drafts.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The resource id (a UUID-like string)."
    },
    "limit": {
      "description": "Max records to return.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "until": {
      "description": "Unix timestamp cursor — return records older than this (offset-less pagination).",
      "type": "number"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢missive_list_conversation_posts(id, limit, until)

List posts (integration/app-generated items) on a conversation. Missive: GET /conversations/{id}/posts.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The resource id (a UUID-like string)."
    },
    "limit": {
      "description": "Max records to return.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "until": {
      "description": "Unix timestamp cursor — return records older than this (offset-less pagination).",
      "type": "number"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢missive_list_contacts(contact_book, search, order, limit, offset, ...)

List contacts in a contact book. Missive: GET /contacts.

Input Schema

{
  "type": "object",
  "properties": {
    "contact_book": {
      "type": "string",
      "description": "The contact book id to list contacts from (required)."
    },
    "search": {
      "description": "Free-text search over contacts.",
      "type": "string"
    },
    "order": {
      "description": "Sort order (default \"last_name\").",
      "type": "string"
    },
    "limit": {
      "description": "Max contacts to return (default 50, max 200).",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "offset": {
      "description": "Number of records to skip (offset pagination).",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "modified_since": {
      "description": "Unix timestamp — only contacts modified since.",
      "type": "number"
    },
    "include_deleted": {
      "description": "Include deleted contacts.",
      "type": "boolean"
    }
  },
  "required": [
    "contact_book"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢missive_get_contact(id)

Get a single contact by id. Missive: GET /contacts/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The resource id (a UUID-like string)."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢missive_list_contact_books(limit, offset)

List contact books (address books). Missive: GET /contact_books.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Max contact books to return (default 50, max 200).",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "offset": {
      "description": "Number of records to skip (offset pagination).",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢missive_list_contact_groups(contact_book, kind, limit, offset)

List contact groups or organizations within a contact book. Missive: GET /contact_groups.

Input Schema

{
  "type": "object",
  "properties": {
    "contact_book": {
      "type": "string",
      "description": "The contact book id (required)."
    },
    "kind": {
      "type": "string",
      "enum": [
        "group",
        "organization"
      ],
      "description": "Which kind to list: \"group\" or \"organization\"."
    },
    "limit": {
      "description": "Max records to return.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "offset": {
      "description": "Number of records to skip (offset pagination).",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "contact_book",
    "kind"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢missive_list_teams(organization, limit, offset)

List teams in the organization(s). Missive: GET /teams.

Input Schema

{
  "type": "object",
  "properties": {
    "organization": {
      "description": "Filter to an organization id.",
      "type": "string"
    },
    "limit": {
      "description": "Max records to return.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "offset": {
      "description": "Number of records to skip (offset pagination).",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢missive_list_users(organization, limit, offset)

List users (team members). Missive: GET /users.

Input Schema

{
  "type": "object",
  "properties": {
    "organization": {
      "description": "Filter to an organization id.",
      "type": "string"
    },
    "limit": {
      "description": "Max records to return.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "offset": {
      "description": "Number of records to skip (offset pagination).",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢missive_list_shared_labels(organization, limit, offset)

List shared labels (team-shared folders/tags). Missive: GET /shared_labels.

Input Schema

{
  "type": "object",
  "properties": {
    "organization": {
      "description": "Filter to an organization id.",
      "type": "string"
    },
    "limit": {
      "description": "Max records to return.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "offset": {
      "description": "Number of records to skip (offset pagination).",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢missive_list_organizations(limit, offset)

List organizations you belong to. Missive: GET /organizations.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Max records to return.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "offset": {
      "description": "Number of records to skip (offset pagination).",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢missive_list_responses(organization, limit, offset)

List canned responses / templates. Missive: GET /responses.

Input Schema

{
  "type": "object",
  "properties": {
    "organization": {
      "description": "Filter to an organization id.",
      "type": "string"
    },
    "limit": {
      "description": "Max records to return.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "offset": {
      "description": "Number of records to skip (offset pagination).",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴missive_create_draft(body, subject, to_fields, cc_fields, bcc_fields, ...)

Create a draft email/message. WARNING: setting send=true SENDS a real email immediately (send_at schedules it) instead of saving a draft. Attach to an existing thread with `conversation`. Missive: POST /drafts.

Input Schema

{
  "type": "object",
  "properties": {
    "body": {
      "type": "string",
      "description": "The message body (HTML) — required."
    },
    "subject": {
      "description": "The subject line.",
      "type": "string"
    },
    "to_fields": {
      "description": "Recipients ({address, name?}).",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "Email address."
          },
          "name": {
            "description": "Display name.",
            "type": "string"
          }
        },
        "required": [
          "address"
        ],
        "description": "An email participant ({address, name?})."
      }
    },
    "cc_fields": {
      "description": "Cc recipients.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "Email address."
          },
          "name": {
            "description": "Display name.",
            "type": "string"
          }
        },
        "required": [
          "address"
        ],
        "description": "An email participant ({address, name?})."
      }
    },
    "bcc_fields": {
      "description": "Bcc recipients.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "Email address."
          },
          "name": {
            "description": "Display name.",
            "type": "string"
          }
        },
        "required": [
          "address"
        ],
        "description": "An email participant ({address, name?})."
      }
    },
    "from_field": {
      "description": "The sender ({address, name?}).",
      "type": "object",
      "properties": {
        "address": {
          "type": "string",
          "description": "Email address."
        },
        "name": {
          "description": "Display name.",
          "type": "string"
        }
      },
      "required": [
        "address"
      ]
    },
    "conversation": {
      "description": "Attach the draft to an existing conversation id.",
      "type": "string"
    },
    "references": {
      "description": "Message-ID references (for threading).",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "send": {
      "description": "If true, SEND the email immediately instead of saving a draft.",
      "type": "boolean"
    },
    "send_at": {
      "description": "Unix timestamp to schedule the send.",
      "type": "number"
    },
    "organization": {
      "description": "Organization id to send from.",
      "type": "string"
    },
    "add_assignees": {
      "description": "User ids to assign to the conversation.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "add_shared_labels": {
      "description": "Shared label ids to apply.",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "body"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴missive_update_conversation(id, add_assignees, remove_assignees, add_shared_labels, remove_shared_labels, ...)

Update a conversation — assign/unassign users, add/remove shared labels, close/reopen, move to inbox, or set subject/color/team. Missive: PATCH /conversations/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The resource id (a UUID-like string)."
    },
    "add_assignees": {
      "description": "User ids to assign.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "remove_assignees": {
      "description": "User ids to unassign.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "add_shared_labels": {
      "description": "Shared label ids to add.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "remove_shared_labels": {
      "description": "Shared label ids to remove.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "close": {
      "description": "Close (archive) the conversation.",
      "type": "boolean"
    },
    "reopen": {
      "description": "Reopen the conversation.",
      "type": "boolean"
    },
    "add_to_inbox": {
      "description": "Move the conversation back to the inbox.",
      "type": "boolean"
    },
    "subject": {
      "description": "Set the conversation subject.",
      "type": "string"
    },
    "color": {
      "description": "Set the conversation color.",
      "type": "string"
    },
    "organization": {
      "description": "Organization id (context for the update).",
      "type": "string"
    },
    "team": {
      "description": "Team id to move the conversation to.",
      "type": "string"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴missive_create_contact(contact_book, first_name, last_name, starred, infos, ...)

Create a contact in the given contact book. Missive: POST /contacts.

Input Schema

{
  "type": "object",
  "properties": {
    "contact_book": {
      "type": "string",
      "description": "The contact book id to create the contact in (required)."
    },
    "first_name": {
      "description": "First name.",
      "type": "string"
    },
    "last_name": {
      "description": "Last name.",
      "type": "string"
    },
    "starred": {
      "description": "Whether the contact is starred.",
      "type": "boolean"
    },
    "infos": {
      "description": "Contact info entries (email/phone/etc. objects).",
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "memberships": {
      "description": "Group/organization membership objects.",
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    }
  },
  "required": [
    "contact_book"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded19 tools