MCP.so
登录

Agent Inbox MCP Server已验证已精选

@Agent Inbox

基本信息

传输方式

Streamable HTTP

认证方式

OAuth

分类

沟通协作

作者

Agent Inbox

提交者

Dima Grossman

关于 Agent Inbox MCP Server

Give your agent an inbox. Its own address on email, Slack and Telegram. A product of Novu

连接信息

https://mcp.agentinbox.md

接入方式

claude mcp add agent-inbox --transport http https://mcp.agentinbox.md

Agent Inbox MCP Server 工具

10

Create the agent and its email inbox, or report how far setup got. Call with no arguments to see status and a suggested owner email. Ask the user for an agent name and address before creating; pass agent_name and handle together. Pass email only after the user confirms the address — a confirmation link goes out, and a later call with no arguments says whether they opened it. A name never changes an existing agent, and a handle never moves an existing mailbox; pass handle alone to finish a mailbox that was not created. This tool does not replace an email that is already confirmed.

Start a conversation with one or more contacts. Leave kind out for a plain message, which returns once it is delivered; ask, approve or choose waits for the answer. Before you send, call inbox_list with filter "unread" so you do not miss a conversation a person started.

Send into an existing conversation. Leave kind out for a plain message; ask, approve or choose waits for the answer. A reply goes out on the conversation's channel, so it has no via option.

Keep waiting for the answer to an earlier ask, approve or choose that had no answer yet. Call it again while the result says the request is still open.

Get a link that lets another person connect their chat app, so you can reach them too. Nothing is sent for you: give the link to the user to pass on. Afterwards reach them with the id you chose here.

List the people you can reach, with the id to pass as `to`. Your operator is marked (you). When the result ends with a cursor, call it again with after to see the rest before you decide someone is not there.

List the conversations in the agent's inbox. People can message the agent first: call this with filter "unread" before you send, so you see new conversations. Conversations with strangers are hidden unless senders is "all". Showing a conversation does not mark it read; any send into it does.

Show the messages in a conversation. Looking at it does not mark it read — use inbox_read or send a reply for that. People and messages are labelled contact or stranger.

Mark a conversation read without sending a reply. Showing a conversation does not mark it read.

Mark a conversation resolved. It opens again when anyone writes in it. Use after you have finished with it.

概览

The hosted Agent Inbox MCP server, meant for https://mcp.agentinbox.md. ChatGPT, Claude and Cursor add its address, the person signs in with their Agent Inbox account, and the AI tool can then ask them before it acts.

It is a Cloudflare Worker and is for Novu Cloud only: it needs the Agent Inbox Clerk app, the Agent Inbox Dashboard API, and a private Agent Inbox endpoint of the Novu API, which self-hosted and Community editions do not have.

Tools

ToolWhat it does
inbox_setupCreates the agent and its email inbox, sends the owner's confirmation link, or reports how far setup got.
inbox_sendStarts a conversation. Without a kind it is a plain message; ask, approve or choose waits for the answer.
inbox_replySends into an existing conversation, with the same kinds and card options.
inbox_waitKeeps waiting for an answer that had not come yet.
inbox_listLists conversations (unread/read, open/resolved, contacts/all).
inbox_showShows a conversation's messages. Does not mark it read.
inbox_readMarks a conversation read without sending a reply.
inbox_resolveMarks a conversation resolved; it opens again when anyone writes in it.
contact_listLists the people that can be reached.
contact_inviteReturns a link for another person to connect their chat app.

Someone who connects the MCP before finishing agentinbox.md uses inbox_setup: ask them for an agent name and address, call it with agent_name and handle, then confirm their email with them and pass email so a confirmation link goes out. A later call with no arguments says whether they opened it. Chat channels (Slack, Telegram) are still set up on agentinbox.md or with the CLI.

The tools are named after the CLI's commands (inbox send is inbox_send, contact list is contact_list) and say "conversation" as it does. inbox_wait is the one the CLI doesn't have: AI tools give up on a call after about a minute, while the CLI waits inside the send. So inbox_send and inbox_reply wait up to 50 seconds for ask, approve and choose; with no answer by then they return the request's id, and inbox_wait picks it up. A plain message returns as soon as delivery is confirmed.

A person may message the agent first. Use the conversation id from inbox_list with inbox_reply to answer in it. Conversations and messages are labelled contact or stranger the same way the CLI does: a contact is someone the operator added; a stranger wrote without being one. Showing a conversation does not mark it read; any reply into it does.

The send and reply tools mirror the Agent Inbox CLI: they support attribution, expiry, channel override on sends, full card chrome, custom approval actions, stable choice ids, up to 50 recipients, and contact email addresses. A new email address on a send is delivered as typed. A reply still needs a contact that already verified that address.

How sign-in works

  1. A tool calls the server without a token and gets a 401 that points at /.well-known/oauth-protected-resource.
  2. That document names the Agent Inbox Clerk app as the place to sign in. The tool registers itself there, and Clerk sends the person to its sign-in page: the dashboard's /sign-in when the Clerk app's paths point there. Someone without an agent yet can finish setup with inbox_setup instead of visiting the onboarding.
  3. The tool calls again with the token. The server asks Clerk whose token it is (/oauth/userinfo); it never trusts what a token says about itself.
  4. When that sign-in has no Agent Inbox account yet, the server opens one (POST /v1/human/accounts). It then reads the account's API key from the Novu API with the secret the Agent Inbox dashboard uses, and calls the Agent Inbox Dashboard API as the account. The AI tool never sees the key. Opening the account does not create an agent.

Every request stands alone: nothing is kept between calls, so any instance can answer any call. The one thing initialize hands out is a session id that starts with the app's host (claude-code.…, see below). The app sends it back with every later request, and the server reads the host from it to tell the API which host is calling (Agent-Inbox-Host); it keeps nothing about the session itself. A request without one is served the same: Claude Code, Codex and Cursor are still told by their User-Agent, and the API counts any other as General.

Where calls go

  • Every tool calls the Agent Inbox Dashboard API (AGENT_INBOX_API_URL, the dashboard's /api) with the account's key, as the CLI does: /v1/setup, /v1/inbox-address and /v1/agent for onboarding, /v1/inbox and /v1/inbox/messages for conversations and messages, /v1/contacts for contacts, invites and verifications, and /v1/operator for the account's owner. The dashboard forwards each call to the Novu API.
  • Opening an account and reading its key are the calls that go straight to the Novu API (NOVU_API_URL), with the dashboard's secret: POST /v1/human/accounts when the sign-in has no account yet, then GET /v1/human/accounts/:id/secret-key. The Dashboard API doesn't offer either.
  • Agent Inbox lives in the US region only, so there is no EU address to try.

Which tools are connected

When an app connects, the server tells which host it is from the name the app gives in initialize (clientInfo.name), matched whole: claude-code is Claude Code and claude-ai is Claude, so one is never taken for the other (CLIENT_NAMES in src/connections.ts, with where each name comes from). Any other name is General. It notes the host in a KV namespace; the Agent Inbox dashboard reads that from GET /connections/:agentInboxUserId, which answers only to the shared secret, and shows the app as Connected.

Configuration

NameKindWhat it is
CLERK_OAUTH_ISSUERvariableAddress of the Agent Inbox Clerk app. Its OAuth feature with dynamic client registration must be on.
AGENT_INBOX_API_URLvariableThe Agent Inbox Dashboard API, which every tool calls: https://www.agentinbox.md/api (staging https://staging.agentinbox.md/api, local http://localhost:4300/api). Without it the server answers 503.
NOVU_API_URLvariableThe Novu API of the US region, used to open an account and read its key with the dashboard's secret.
DOCS_URLvariableWhere a person who opens the address in a browser is sent.
AGENT_INBOX_DASHBOARD_API_SECRETsecretThe secret the Agent Inbox dashboard shares with the Novu API.
CONNECTIONSKV namespaceRemembers connected tools and, for five minutes, whose token is whose. Optional: without it nothing reads as connected.

Run and deploy

pnpm --filter @novu/agent-inbox-mcp dev        # http://localhost:8790, against a local dashboard and API
pnpm --filter @novu/agent-inbox-mcp test
pnpm --filter @novu/agent-inbox-mcp typecheck

Before the first deploy of an environment:

  1. Turn on OAuth with dynamic client registration in that environment's Agent Inbox Clerk app, and put its address in CLERK_OAUTH_ISSUER in wrangler.jsonc.
  2. Check that AGENT_INBOX_API_URL in wrangler.jsonc points at that environment's dashboard (/api), and that the dashboard there already serves it.
  3. Create the KV namespace (wrangler kv namespace create CONNECTIONS --env <env>) and add the binding it prints to wrangler.jsonc.
  4. Set the secret: wrangler secret put AGENT_INBOX_DASHBOARD_API_SECRET --env <env>.
  5. pnpm --filter @novu/agent-inbox-mcp deploy:<env>.
  6. Set AGENT_INBOX_MCP_URL on the Agent Inbox dashboard to the server's address. The Connect drawers on the Agent page appear only once it is set.

Known limits

  • A token is accepted when Clerk says it is valid. The server does not check that the token was issued for this server in particular: Clerk puts the client's id in a token's audience, not this server's address, and any client may register. So keep OAuth in the Agent Inbox Clerk app for this server alone. If another service ever accepts tokens from that app, this server needs an audience check first.
  • Which tool connected is read from the name the tool reports, so another client that calls itself "cursor" reads as Cursor.
  • A removed connector still reads as Connected: nothing tells the server that a tool was disconnected.

常见问题

1

Agent Inbox 远程 MCP 服务器是什么?

Agent Inbox 的远程 MCP 服务器是一个托管的 Model Context Protocol 端点,地址是 https://mcp.agentinbox.md,AI 助手无需在本地安装或运行任何东西即可连接。

2

怎么连接 Agent Inbox 的 MCP 服务器?

把端点 https://mcp.agentinbox.md 添加到任意支持 MCP 的客户端,比如 Claude Code、Cursor 或 VS Code。本页的接入代码块可以一步配置好每个客户端。

3

Agent Inbox 的 MCP 服务器需要认证吗?

需要。Agent Inbox 使用 OAuth——第一次连接时,你的 MCP 客户端会打开浏览器窗口登录并授权,之后会复用这个凭证。

4

Agent Inbox 的 MCP 服务器用的是哪种传输方式?

Agent Inbox 暴露的是 Streamable HTTP 端点,这是远程 MCP 服务器普遍使用、主流客户端都支持的传输方式。

评论