Agent setup guide

Inbox Triage connects a person's Gmail, Outlook, iCloud, Yahoo, and other IMAP inboxes to an AI app through one MCP server at https://getinboxtriage.com/mcp. If you are an AI agent setting it up for someone, follow this page in order. People setting things up by hand will find step-by-step articles in the Help center.

Inbox Triage MCP connector: tool definition quality and endpoint health on Glama

1. How do I add the MCP server?

Add https://getinboxtriage.com/mcp as a remote (HTTP) MCP server and let the person sign in through the browser window your app opens (OAuth). That is the normal path, and it needs no API key. Steps per app are in Connect your AI app. If the sign-in page says "Confirm your email address first", the person clicks the link we emailed them (or sends a new one from Settings), then connects again. Google sign-ups are already confirmed.

Only if your app cannot open a browser, use a bearer API key (see step 3):

https://getinboxtriage.com/mcp
Authorization: Bearer <agent API key>

2. Which plan is the person on?

New accounts start on a 7-day free trial with 3 inboxes and no card, so nobody has to subscribe before connecting. Call get_subscription to check the plan, status, connected-inbox limit, sync window size, and whether send is available before assuming a state. Send the person to https://getinboxtriage.com/pricing only when they need more inboxes or the trial has ended. Pro is $15/mo with 5 inboxes included and +$2 per extra inbox up to 10. The person pays on the checkout page; never ask for card details in chat.

3. Do I need an API key?

Most apps do not: they sign in through the browser. Only if yours cannot, the person opens Settings, then Advanced, then Agent API keys, and chooses Create API key. They need a confirmed email address first, and the plan sets how many keys they can have (1 on the trial, 3 on Pro). An API key cannot create more keys. The key is shown once. Store it, and never ask the person to repeat it back to you in chat. Anyone with the key can read and change their mail.

4. How do I connect each inbox?

  1. Call propose_connection with the email address. It detects the provider by domain: Google (gmail.com, googlemail.com), Microsoft (outlook.com, hotmail.com, live.com, msn.com), iCloud (icloud.com, me.com, mac.com). Every other domain comes back as IMAP, including custom domains on Google Workspace or Microsoft 365. Ask the person which one they sign in with and pass provider google or microsoft to add_inbox. It returns sayToHuman (show that) plus agentOnly.next (run quietly; do not paste tool names or JSON into chat).
  2. Call add_inbox to register it (status: pending_credentials). Show only its sayToHuman. For a generic-IMAP inbox, imapHost is required (e.g. mail.example.com) unless the address is on Yahoo Mail (including AOL), Fastmail, or Zoho Mail, where the IMAP host is filled in automatically; imapPort defaults to 993 and imapUser defaults to the email address.
  3. Google: call start_google_oauth. Microsoft: call start_microsoft_oauth. iCloud or generic IMAP: call start_imap_secret_capture. All return a URL plus sayToHuman.
  4. Show only sayToHuman and the URL to the human, then stop. Do not paste raw tool JSON, tool names, or inboxIds. Do not ask them to paste back a password, app-specific password, or OAuth code. Poll list_inboxes if you need to know when they're done. If a previously-connected inbox starts failing to sync (credential expired or revoked), the same connect URL is also the repair flow. There is no separate "repair" tool.
  5. If connecting fails:
    • "Confirm your email address first": the person uses the link we emailed them, or sends a new one from Settings. add_inbox refuses until they do.
    • No room on the plan: add_inbox says so. Only the person can add a paid slot, on the website; send them to Settings or the pricing page.
    • The link expired: connect links last 10 minutes. Call the same start_* tool again for a new link.
    • "This link is now closed after too many tries": the password form closes after 5 failed sign-ins. Ask the person to check the password (iCloud, Yahoo, and AOL need an app password, not the normal one), then get a new link. After 20 failed tries in a day, the account is locked out of this form until tomorrow.

5. How do I sync and triage?

5b. Spam filter and junk hints

6. How do attachments work?

7. What if a limit trips?

  1. Inbox count is the limit that bites: Pro covers up to 10 connected inboxes (5 included), the trial covers 3.
  2. Tell the human what is blocked and give them the pricing link. Do not ask for card details in chat.
  3. "Confirm your email address first": connecting an AI app (the Allow step), adding inboxes, and creating API keys or passkeys wait until the person confirms their email. They use the emailed link or send a new one from Settings.
  4. API keys: 1 on the trial, 3 on Pro. Most apps sign in through the browser and need none.
  5. Past due: when a payment fails, get_subscription returns a billingNotice. After 7 days, billingAccessBlocked is true and tool calls stop working. The person updates their card in Settings.
  6. Attachments have no monthly allowance on Pro. A file over 50 MB is the only hard stop, and the mail app handles those. The trial plan cannot download attachments at all (Pro required); it still syncs names and sizes.

8. Triage profile, VIPs, and coordination leases

Personal daily-triage preferences (cadence, what counts as junk, VIP people/domains, quiet hours) live on the server per account, with sparse per-inbox overrides, so every connected agent follows the same rules without relearning them each session. See get_triage_profile and update_triage_profile below. A short-lived per-inbox lease (begin_triage / heartbeat_triage / end_triage) keeps two agents from working on the same inbox at once during a pass that archives, labels, marks junk, or drafts in batches.

Ask the setup questions in chat; there is no setup page for them. When get_subscription or get_triage_profile shows triageSetup.completed: false, ask the human the questions yourself in chat (how often to check mail, what counts as junk, what to do with it, quiet hours), then call update_triage_profile with the answers and setupCompletedAt set to the current ISO timestamp. For VIPs, use add_vip as you learn who matters rather than asking for a list up front.

Using Inbox Triage from Claude Code

Claude Code is Claude in the terminal. It has no room for the interactive views, so the same tools answer with text, and it can ask the person short questions itself.

  1. Add the server:
    claude mcp add --transport http inbox-triage https://getinboxtriage.com/mcp
  2. Sign in: run /mcp in Claude Code, pick inbox-triage, and choose Authenticate. A browser window opens to sign in and approve access.
  3. Start from a slash command, or just ask:
    • /mcp__inbox-triage__triage_today: today's mail, what needs you first
    • /mcp__inbox-triage__since_last_check: everything since your last triage
    • /mcp__inbox-triage__vip_catch_up: only VIP mail
    • /mcp__inbox-triage__clean_up_newsletters: review mailing lists to drop
    • /mcp__inbox-triage__reply_to_what_needs_me "Work Gmail": draft replies (inbox is optional)
    • /mcp__inbox-triage__draft_reply 3 "yes to Tuesday": draft a reply to row 3 of the last list
    Put arguments with spaces in quotes.

What to expect without views. show_inbox and review_unsubscribes return numbered lists. Refer to rows by number: "open 3", "archive 2 and 5", "unsubscribe from 1". show_draft prints To, Subject, and body. Every archive, trash, or spam from chat can be undone for 7 days: say "undo that".

Questions in the terminal. Claude Code can show a short prompt from the server (MCP elicitation). Inbox Triage uses it when a decision is yours: sending an email (Send, Edit, or Cancel), unsubscribing, reporting spam, removing a VIP, acting on one VIP's message, and a batch in the daily inbox zero pass. Your answer comes from the prompt, not from the model. If the prompt is dismissed or times out, nothing happens. Apps without prompts ask in chat instead.

Do not request or relay a password, app-specific password, or OAuth authorization code through chat. Every credential path in this product is a link a human opens directly.