Two agents, one limit, one refused.

Support integration

Intercom, in your agent's hands and under your limits.

Let a support agent work the inbox without quietly closing the conversation that mattered. It searches contacts and conversations, replies, adds notes, assigns, snoozes and closes through named operations, and a reply to a customer or a close can wait for a person.

Connect

API key

bound to api.intercom.io

What you create

  • An access token from an app you create in your workspace
  • A workspace hosted in the US region
  1. 01In the Intercom Developer Hub, create an app for your workspace.
  2. 02Copy its access token from Authentication.
  3. 03In Anlyon, open Actions, then Integrations, choose Intercom and paste the token.
  4. 04Anlyon checks the token with Intercom before storing it. It becomes a secret named INTERCOM, bound to api.intercom.io.

Connecting allows nothing by itself. No API returns the credential afterwards, to you, to the console or to an agent, and Anlyon refuses to send it anywhere but api.intercom.io.

Operations

Each one is a named tool, off until you switch it on, and Anlyon makes every call with the credential your agent never sees. Reads return what Intercom answers and change nothing. Writes count against a limit you set, can wait for a person, and are read back from Intercom wherever it allows.

Reads

Search contacts

intercom-search-contacts

Search contacts with an Intercom query, for example {"field":"email","operator":"=","value":"sam@example.com"}, or {"operator":"AND","value":[...]} to combine filters. Returns up to 15 contacts per page and total_count; pass pages.next.starting_after as starting_after for the next page. Changes nothing. A contact created in the last few minutes may not be found yet.

List contacts

intercom-list-contacts

List the workspace's contacts (users and leads), 15 per page. Pass pages.next.starting_after from the response as starting_after for the next page.

Get contact

intercom-get-contact

Get one contact by its Intercom id: role, email, name, phone, custom attributes, and the first tags, notes and companies with links to the rest.

List tags

intercom-list-tags

List every tag in the workspace (id and name), to find the tag_id that tag-contact and tag-conversation take. Intercom returns all tags in one response; there is no paging.

Search conversations

intercom-search-conversations

Search conversations with an Intercom query, for example {"operator":"AND","value":[{"field":"state","operator":"=","value":"open"},{"field":"admin_assignee_id","operator":"=","value":991267708}]}. Returns up to 10 conversations per page, without their parts, and total_count; pass pages.next.starting_after as starting_after for the next page. Changes nothing.

List conversations

intercom-list-conversations

List the workspace's conversations, 10 per page, without their parts. Pass pages.next.starting_after from the response as starting_after for the next page; use search-conversations to filter by state, assignee or tag.

Get conversation

intercom-get-conversation

Get one conversation with its parts (customer messages, replies, notes, assignments and state changes) as plain text: up to the 500 most recent parts. A very long conversation can exceed the 64 KB the agent receives and is then cut off.

List admins

intercom-list-admins

List the workspace's teammates (admins): id, name, email, away mode and team ids. An admin id is what conversation actions take as admin_id and assign-conversation takes as assignee_id. Returns every admin in one response; there is no paging.

Get admin

intercom-get-admin

Get one teammate (admin) by id: name, email, job title, away mode and the ids of the teams they belong to.

List teams

intercom-list-teams

List the workspace's teams: id, name and the ids of their admins. A team id is what assign-conversation-to-team takes. Returns every team in one response; there is no paging.

List companies

intercom-list-companies

List companies, 20 per page, most recently active first. page starts at 1; pages.total_pages in the response says how many pages there are. Changes nothing (Intercom lists companies with a POST). Companies with no contacts are not listed, and paging stops after 10,000 companies.

Get company

intercom-get-company

Get one company by its Intercom id (not your own company_id): name, plan, size, website, user count, monthly spend, custom attributes, tags and segments.

Search articles

intercom-search-articles

Search Help Center articles for a phrase. Returns up to 10 matching articles with their full bodies, and total_count. Intercom documents no parameter for further pages, so narrow the phrase when total_count is larger; many long articles can exceed the 64 KB the agent receives. Pass state published to see only what customers can see.

Get article

intercom-get-article

Get one Help Center article by id: title, description, body (HTML), state, public URL and translations.

Writes

Create contact

intercom-create-contact

Create one contact, as a lead or a user, with an email and a name.

roleemailname

Read back

Read back by contact id; the email must match.

Update contact

intercom-update-contact

Update one contact's name, email, phone, external id or custom attributes; only the fields you pass change.

contact_idnameemailphoneexternal_idcustom_attributes

Read back

Read back by contact id; name, email and phone must equal what Intercom returned for the update. Limitations: custom attributes are not part of the read-back, and a custom attribute must already exist in the workspace.

Tag contact

intercom-tag-contact

Add one existing tag to a contact.

contact_idtag_id

Read back

Read back from the contact's tags; the tag must be among them. Adding a tag the contact already has changes nothing.

Untag contact

intercom-untag-contact

Remove one tag from a contact.

contact_idtag_id

Read back

Read back from the contact's tags; the tag must no longer be among them.

Attach contact to company

intercom-attach-contact-to-company

Attach a contact to one company, by the company's Intercom id.

contact_idcompany_id

Read back

Read back from the contact's companies; the company must be among them.

Detach contact from company

intercom-detach-contact-from-company

Detach a contact from one company.

contact_idcompany_id

Read back

Read back from the contact's companies; the company must no longer be among them.

Delete contact

intercom-delete-contact

Permanently delete one contact.

contact_id

Acknowledged

Sent once and acknowledged; not read back: Intercom documents no answer for reading a deleted contact, so the receipt rests on the delete response (deleted: true). It cannot be undone.

Create conversation

intercom-create-conversation

Start a conversation as a message from a contact (a lead or a user), for example to record a request that came in by phone.

from_typecontact_idbody

Read back

Read back from the new conversation; its contact must be this contact. Limitations: no provider idempotency, so a retry after an unknown outcome can create a second conversation; workflows or Fin may answer it as they would any inbound message.

Reply to conversation

intercom-reply-to-conversation

Reply to the customer in one conversation, as the admin you name; the customer sees it in the Messenger or by email.

conversation_idadmin_idbody

Acknowledged

Sent once and acknowledged; not read back: Intercom stores the reply as HTML among the conversation's parts, and the stored HTML cannot be compared exactly with the text sent.

Add conversation note

intercom-add-conversation-note

Add an internal note to one conversation, as the admin you name; only teammates see it.

conversation_idadmin_idbody

Acknowledged

Sent once and acknowledged; not read back: Intercom stores the note as HTML among the conversation's parts, and the stored HTML cannot be compared exactly with the text sent.

Assign conversation

intercom-assign-conversation

Assign one conversation to a teammate (assignee_id, the admin's id as a number, from list-admins), recorded as the admin you name in admin_id.

conversation_idadmin_idassignee_id

Read back

Read back from the conversation; admin_assignee_id must equal assignee_id. Limitations: assigning a closed conversation reopens it, and the read-back can match a conversation already assigned to that teammate.

Assign conversation to team

intercom-assign-conversation-to-team

Assign one conversation to a team (team_id, the team's id as a number, from list-teams), recorded as the admin you name in admin_id.

conversation_idadmin_idteam_id

Read back

Read back from the conversation; team_assignee_id must equal team_id. Limitations: assigning a closed conversation reopens it, and the read-back can match a conversation already assigned to that team.

Snooze conversation

intercom-snooze-conversation

Snooze one conversation until a time (snoozed_until, Unix seconds, in the future), as the admin you name; Intercom reopens it at that time.

conversation_idadmin_idsnoozed_until

Read back

Read back from the conversation; its state must be snoozed and snoozed_until must match.

Close conversation

intercom-close-conversation

Close one conversation, as the admin you name.

conversation_idadmin_id

Read back

Read back from the conversation; its state must be closed.

Reopen conversation

intercom-reopen-conversation

Reopen one closed or snoozed conversation, as the admin you name.

conversation_idadmin_id

Read back

Read back from the conversation; its state must be open.

Tag conversation

intercom-tag-conversation

Add one existing tag to a conversation, as the admin you name.

conversation_idtag_idadmin_id

Read back

Read back from the conversation; the tag must be among its tags. Adding a tag the conversation already has changes nothing.

The brake

Suggested limits

  • 100 contacts created a day
  • 200 contacts updated a day
  • 200 contact tags added a day
  • 200 contact tags removed a day
  • 100 contacts attached to companies a day
  • 100 contacts detached from companies a day
  • 20 contacts deleted a day
  • 50 conversations started a day
  • 200 conversation replies a day
  • 300 conversation notes a day
  • 300 conversations assigned to a teammate a day
  • 300 conversations assigned to a team a day
  • 200 conversations snoozed a day
  • 200 conversations closed a day
  • 200 conversations reopened a day
  • 300 conversation tags added a day

Shared by every agent, session and key in the environment. You set the number.

Suggested approvals

  • A person approves deleting a contact
  • A person approves replying to a customer
  • A person approves closing a conversation

Installed turned off. The reviewer sees the exact request, and the approved request is the one that runs.

Before you rely on it

  • A reply or a note is sent once and acknowledged: it cannot be told apart from the rest of the conversation when it is read back.
  • Workspaces hosted in the EU or Australia use another host and cannot be connected yet.

Use it

1. Connect, from a terminal
npm install -g @anlyonhq/cli
anlyon auth login

# Shows where to create the key, then asks for it without echoing
anlyon connections add intercom --secret INTERCOM

# From a clone of github.com/AnlyonHQ/anlyon-platform:
# see what would be installed, then switch on one operation
anlyon packs plan ./packs/intercom
anlyon packs install ./packs/intercom --action create-contact --yes
2. Call it from your agent, TypeScript
import { Client } from "@anlyonhq/sdk";

const anlyon = new Client({ apiKey: process.env.ANLYON_AGENT_KEY! });

const { data } = await anlyon.actions.invoke(
  "intercom-close-conversation",
  {
    "conversation_id": "1295",
    "admin_id": "991267708"
  },
);

if (data?.pendingApproval) {
  console.log("Waiting for a person", data.approvalId);
} else {
  console.log(data?.status, data?.responseStatus);
}
Or hand it to Claude Code over MCP
# Claude Code. Sign in with the browser, no key to paste.
claude mcp add --transport http anlyon https://api.anlyon.com/mcp

# Then ask in plain words. Each operation you switched on is a tool.

Prefer to click?

The console does all of it: connect, switch operations on, set the limit, and copy the setup for your agent.

Free tier, no credit card. One command if you use Claude or Cursor.

$ claude mcp add anlyon -- npx -y @anlyonhq/mcp-server