Missive MCP server for AI agents

Live

BEARER TOKEN

SHARED INBOX

Communication

Missive gives your agent shared inbox work across your team: list and read conversations, draft and send email, SMS, and WhatsApp messages, add posts and tasks, and manage contacts, labels, and canned responses.

  • Per-user credentials: each call uses the actual user's access token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Missive
agent · Acme Q3
Run
What's waiting in the Support team inbox?
S
missive_list_conversations
109ms
Inbox agent
9 conversations are open in the Support team inbox. 3 are from Acme about the same login error, and the oldest has waited 2 days.
Sources: Support team inbox, 9 conversations
missive
9 conversations
18:29
Message Claude...

Tools your inbox agent reaches for on Missive, scoped per user.

CALL ANY TOOL
38 tools for shared inbox work in Missive: list and read conversations and messages, create drafts and send messages, add posts and tasks, merge conversations, manage contacts, shared labels, and canned responses, and run analytics reports.
missive_create_analytics_report
Create analytics report
Start generating a Missive analytics report for a time period, with optional team, user, label and account filters. Returns the report id; the data is fetched afterwards with missive_get_analytics_report, usually 5 seconds later. Use missive_create_analytics_report first, then missive_get_analytics_report with the returned id. Requires a Productive or Business plan, and filters require a Business plan. Requires an organization ID plus start and end Unix timestamps.
Parameters
Name
Type
Required
Description
end
integer
Required
End of the report period as a Unix timestamp. Example: 1692371867
organization
string
Required
ID of the organization to report on. Find it with missive_list_organizations. Example: 0d9bab85-a74f-4ece-9142-0f9b9f36ff92
start
integer
Required
Start of the report period as a Unix timestamp. Example: 1691812800
account_types
array
Optional
Account types to include (Business plan): custom, email, instagram, live_chat, messenger, sms or whatsapp. Example: ["email", "sms"]
accounts
array
Optional
Account IDs to include (Business plan). Example: ["716be7a6-fd40-45a2-bfcb-43b9ed38d1f0"]
shared_labels
array
Optional
Shared label IDs to include (Business plan). Example: ["bca0bb8f-8b2f-45f8-a59a-333de84f0184"]
teams
array
Optional
Team IDs to include (Business plan). Example: ["0e24f298-965d-4475-9220-b32636a1e2c3"]
time_zone
string
Optional
IANA time zone used to bucket the report. Example: America/Montreal
users
array
Optional
User IDs to include (Business plan). Example: ["1ce8117e-ae42-4304-b953-c81656da4bd1"]
missive_create_contact
Create contact
missive_create_draft
Create draft
missive_create_post
Post create
missive_create_response
Create response
missive_create_shared_label
Create shared label
missive_delete_draft
Delete draft
missive_delete_post
Post delete
missive_delete_response
Delete response
missive_get_analytics_report
Get analytics report
missive_get_contact
Get contact
missive_get_conversation
Get conversation
missive_get_message
Get message
missive_get_response
Get response
missive_list_contact_books
List contact books
missive_list_contact_groups
List contact groups
missive_list_conversation_comments
List conversation comments
missive_list_conversation_drafts
List conversation drafts
missive_list_conversation_posts
List conversation posts
missive_list_conversations
List conversations
missive_list_organizations
List organizations
missive_list_responses
List responses
missive_list_tasks
List tasks
missive_list_teams
List teams
missive_merge_conversations
Merge conversations
missive_send_message
Send message
missive_update_contact
Update contact
missive_update_conversation
Update conversation
missive_update_response
Update response
missive_update_shared_label
Update shared label

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Missive tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["missive"], toolNames: [
    "missive_list_conversations",
    "missive_list_conversation_messages",
    "missive_create_draft"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Draft replies to open conversations in the Support team inbox" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["missive"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Draft replies to open conversations in the Support team inbox" }],
  tools,
});

// Execute the tool call with the user's vaulted Missive access token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["missive"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Draft replies to open conversations in the Support team inbox" }],
  tools,
});

// Tool call runs with the user's vaulted Missive access token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["missive"] }, pageSize: 100,
});

const agent = new Agent({
  name: "inbox_agent",
  model: "gemini-2.5-pro",
  instruction: "Missive tools scoped to this user",
  tools,
});

await agent.run("Draft replies to open conversations in the Support team inbox");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Missive tool. Click to copy, paste into your agent, done.
Conversations
Copy the prompt
Copied
List open conversations in the Support team inbox.
Copy the prompt
Copied
Show the full message thread for the Acme login issue.
Copy the prompt
Copied
Merge the two Globex billing conversations into one.
Replies and drafts
Copy the prompt
Copied
Draft a reply to the latest Acme email using our Refund Policy canned response.
Copy the prompt
Copied
Send an SMS to +14155550123: Your ticket is resolved.
Copy the prompt
Copied
Add a post to the Acme conversation noting the fix shipped.
Tasks and contacts
Copy the prompt
Copied
Create a task to follow up with Globex on Friday.
Copy the prompt
Copied
Add Priya Shah from Initech to our main contact book.
Copy the prompt
Copied
Run an analytics report for the Support team for last week.
SEE HOW AUTH WORKS
Each user connects their own Missive access token once, and Scalekit sends it with every call. Access tokens stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Missive
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Missive
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Missive
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Missive
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other communication and collaboration connectors.
Support and Ops Teams
Support triage agent
Fetches new Zendesk tickets, classifies them by type and urgency, searches the Notion knowledge base for an answer, and routes what it cannot resolve to Slack. Every call runs on the support agent's own delegated OAuth.
Engineering Teams
Slack triage
Polls Slack for new messages, classifies bugs and support requests with a LangGraph router, files GitHub issues or Zendesk tickets, and confirms in the thread.
Support and Ops Teams
Support ticket automation agent
Fetches new Zendesk tickets, drafts a reply from Notion knowledge base articles, digests what it cannot answer to Slack, and archives the rest, acting as the support agent rather than a shared API key.
Test other agents
See the same per-user auth pattern across other communication and collaboration connectors.
SUPPORT
Support triage agent
Classify new Zendesk tickets, search the Notion knowledge base for an answer, and route what it cannot resolve to Slack.
ENGINEERING
Slack triage agent
Classify new Slack messages as bugs or support requests, file the GitHub issue or Zendesk ticket, and reply in the thread.
SUPPORT
Support ticket automation (Google ADK)
Fetch, annotate, and archive Zendesk tickets with Notion context, digesting anything it cannot answer to Slack.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Missive access token looks fine in a demo. In production every reply and conversation change looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Missive today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Missive as the user or through a shared access token?
As the user. Each user connects their own Missive access token once, and Scalekit sends it with every call. Audit logs attribute every message, post, and task to that user, not a shared service account.
Where is the Missive access token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. To rotate it, the user reconnects with a new access token. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Missive?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example missive_create_draft without missive_send_message, so a person reviews every reply before it goes out. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Missive access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Which channels can the agent send on through Missive?
missive_send_message and missive_create_draft cover email, SMS, WhatsApp, Messenger, Instagram, and custom-channel messages, using the accounts connected to the user's Missive organization.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""missive"": {
""url"": ""https://mcp.scalekit.com/missive"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.missive]
url = ""https://mcp.scalekit.com/missive""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""missive"": {
""url"": ""https://mcp.scalekit.com/missive"",
""type"": ""http""
}
}
}