Intercom
Customer messaging. Handle chat conversations and tickets, look up and edit contacts and companies, and publish help articles.
| Property | Value |
|---|---|
| Slug | intercom |
| Definition version | 0.1.0 |
| Base URL | https://api.intercom.io |
| Auth schemes | oauth2, api_key |
| Action tools | 40 |
| By class | 17 read, 19 write, 4 destructive |
| Triggers | 0 |
| Provider rate limit | not declared, so outbound calls are unpaced |
Measured routing accuracy
79 golden cases replayed through the router over the whole index: measured over corpus ea4f12ad2948 (65 toolkits, 2283 tools indexed and 13 declared uncallable), 40 cases written by hand and 39 cases from the paraphrase pass. A case counts as top-1 when its gold tool ranked first and top-8 when it reached the slate at all.
| Measure | Cases | Share |
|---|---|---|
| top-1 | 44/79 | 55.7% |
| top-8 | 72/79 | 91.1% |
The sweep is offline: the reranker is a deterministic identity fake that returns candidates in the order retrieval produced them, so top-1 measures retrieval order rather than a reranked slate. just eval-live measures the same cases through the live reranker.
Authentication
Connect an entity with ConnectionsService.InitiateConnection, naming this toolkit's slug. Credentials stay in the connections vault; callers hold connected-account ids only.
oauth2
| Property | Value |
|---|---|
| Authorization URL | https://app.intercom.com/oauth |
| Token URL | https://api.intercom.io/auth/eagle/token |
| Default scopes | default |
| Refresh tokens | yes, the refresh daemon renews ahead of expiry |
api_key
| Property | Value |
|---|---|
| Placement | header |
| Name | Authorization |
| Rendered as | Bearer {key} |
Submit the key with ConnectionsService rather than putting it in a request; it is sealed at rest and never returned.
Tools
40 action tools. The catalog-wide slug is intercom.<tool>, which is what search_tools returns and call_tool takes.
intercom.create_contact
Create a new Intercom contact: a user or lead who messages or uses your product. Use when the user wants to add a customer to Intercom's directory, not to a separate CRM's sales pipeline. Needs an email; phone, name, and role (user or lead) are optional.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /contacts.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
email | string | yes | Contact's email address, e.g. "jane@example.com". |
external_id | string | no | Your own system's unique id for this person. |
name | string | no | Contact's full name. |
phone | string | no | Contact's phone number, e.g. "+15551234567". |
role | string | no | "user" for a signed-up customer or "lead" for someone who has not signed up. Defaults to "lead". |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
created_at | integer | |
email | string | |
external_id | string | |
id | string | |
name | string | |
phone | string | |
role | string | |
updated_at | integer |
Also retrieved by: "add a new customer to intercom", "register this person in our customer directory", "put this lead into intercom", "start tracking this user in intercom".
intercom.get_contact
Get a single Intercom contact's full record by its contact id: email, phone, name, role, and timestamps. Use when the user names a specific contact; for looking someone up by email use search_contacts instead.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /contacts/{{params.contact_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
contact_id | string | yes | Intercom contact id. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
created_at | integer | |
email | string | |
external_id | string | |
id | string | |
last_seen_at | integer | |
name | string | |
phone | string | |
role | string | |
updated_at | integer |
Also retrieved by: "pull up this customer's intercom profile", "what does intercom have on file for this person", "show me this user's details in intercom", "check a customer's record in intercom".
intercom.update_contact
Update fields on an existing Intercom contact: email, phone, name, or role. Use when the user wants to edit or correct a customer's details in Intercom, not create a new contact.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls PUT /contacts/{{params.contact_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
contact_id | string | yes | Intercom contact id. |
email | string | no | New email address. |
name | string | no | New full name. |
phone | string | no | New phone number. |
role | string | no | "user" or "lead". |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
email | string | |
id | string | |
name | string | |
phone | string | |
role | string | |
updated_at | integer |
Also retrieved by: "fix this customer's phone number in intercom", "change someone's role from lead to user", "edit a customer's details in intercom", "correct info on a customer record".
intercom.delete_contact
Permanently delete a contact from Intercom, removing their conversation history and custom attributes. Use when the user wants to wipe, purge, or erase a customer record entirely, not merely unsubscribe or archive them. Cannot be undone.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). No scopes beyond the connection's defaults. Calls DELETE /contacts/{{params.contact_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
contact_id | string | yes | Intercom contact id to delete. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
deleted | boolean | |
id | string |
Also retrieved by: "wipe this customer from intercom for good", "purge someone's intercom record entirely", "erase a customer's history permanently", "get rid of this person's data in intercom".
intercom.search_contacts
Find Intercom contacts by an exact match on one field: email, phone, name, or external id. Use when the user describes a customer rather than naming a known contact id, for example finding someone by their email address.
Class read (reads only). No scopes beyond the connection's defaults. Calls POST /contacts/search.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
field | string | yes | Field to match: "email", "phone", "name", "external_id", or "role". |
value | string | yes | Value to match exactly against the chosen field. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
data | array of object | |
data[].email | string | |
data[].id | string | |
data[].name | string | |
data[].phone | string | |
data[].role | string | |
total_count | integer |
Also retrieved by: "find a customer by their email in intercom", "look up who this phone number belongs to", "hunt down someone's intercom profile", "locate a user by their external id".
intercom.list_contacts
List Intercom contacts a page at a time, newest first. Use when the user wants to browse or export the whole customer directory rather than find one specific person.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /contacts.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
per_page | integer | no | Page size, default 50. |
starting_after | string | no | Pagination cursor from a previous response's pages.next. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
data | array of object | |
data[].email | string | |
data[].id | string | |
data[].name | string | |
data[].role | string | |
pages | object | |
pages.next | object | |
pages.next.starting_after | string | |
total_count | integer |
Also retrieved by: "show me every customer in intercom", "browse the whole customer directory", "export all our intercom contacts", "see everyone we've ever messaged".
intercom.merge_contacts
Merge a duplicate Intercom contact into a primary one, folding the duplicate's conversation history into the survivor and deleting the duplicate. Use when the user says two contacts are the same person. Irreversible.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). No scopes beyond the connection's defaults. Calls POST /contacts/merge.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
duplicate_contact_id | string | yes | Contact id to merge away and delete. |
primary_contact_id | string | yes | Contact id to keep. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
email | string | |
id | string | |
name | string |
Also retrieved by: "combine two duplicate customers into one", "fold this duplicate profile into the main one", "treat these two intercom entries as the same person", "collapse two customer records together".
intercom.create_or_update_company
Create a new company in Intercom, or update it if a company with the same company id already exists. Use to record the organization a contact belongs to, alongside its plan, size, or website, not to add an individual person (use create_contact for that).
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /companies.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
company_id | string | yes | Your own system's unique id for this company. |
industry | string | no | Company's industry. |
name | string | yes | Company name. |
size | integer | no | Number of employees. |
website | string | no | Company website URL. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
company_id | string | |
created_at | integer | |
id | string | |
industry | string | |
name | string | |
size | integer | |
updated_at | integer | |
website | string |
Also retrieved by: "add the customer's organization to intercom", "record what company this user works for", "set up an account record for this business", "log this organization in intercom".
intercom.get_company
Get a single Intercom company's record by its company id: name, website, industry, size, and timestamps. Use when the user names a specific company rather than asking to browse all of them.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /companies/{{params.company_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
company_id | string | yes | Intercom company id. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
company_id | string | |
created_at | integer | |
id | string | |
industry | string | |
name | string | |
size | integer | |
updated_at | integer | |
website | string |
Also retrieved by: "pull up this organization's intercom record", "what plan is this account on", "show me a company's details in intercom", "check an organization's profile".
intercom.list_companies
List every company in Intercom's directory a page at a time. Use when the user wants to browse or export all customer organizations rather than look up one company by name or id.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /companies.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
per_page | integer | no | Page size, default 50. |
starting_after | string | no | Pagination cursor from a previous response's pages.next. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
data | array of object | |
data[].company_id | string | |
data[].id | string | |
data[].name | string | |
data[].website | string | |
pages | object | |
pages.next | object | |
pages.next.starting_after | string | |
total_count | integer |
Also retrieved by: "show me every account in intercom", "browse all the organizations we track", "export the company directory", "see every business linked to our customers".
intercom.delete_company
Permanently delete a company from Intercom. Its contacts are not deleted, only detached from it. Use when the user wants to remove an organization from the directory entirely. Cannot be undone.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). No scopes beyond the connection's defaults. Calls DELETE /companies/{{params.company_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
company_id | string | yes | Intercom company id to delete. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
deleted | boolean | |
id | string |
Also retrieved by: "remove this organization from intercom entirely", "wipe out a company record for good", "purge an account from our directory".
intercom.attach_contact_to_company
Attach an existing Intercom contact to a company, linking the person to the organization they belong to. Use when the user wants to associate a customer with a company record, not to create either one.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /contacts/{{params.contact_id}}/companies.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
company_id | string | yes | Intercom company id to attach. |
contact_id | string | yes | Intercom contact id. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
company_id | string | |
id | string | |
name | string |
Also retrieved by: "link this customer to their employer", "associate a user with their organization", "connect a contact to their company account".
intercom.list_conversations
List Intercom conversations from the support inbox a page at a time, newest first. Use to browse recent chats rather than look up one conversation by id or search for one by state.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /conversations.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
per_page | integer | no | Page size, default 20. |
starting_after | string | no | Pagination cursor from a previous response's pages.next. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
conversations | array of object | |
conversations[].created_at | integer | |
conversations[].id | string | |
conversations[].open | boolean | |
conversations[].state | string | |
conversations[].updated_at | integer | |
pages | object | |
pages.next | object | |
pages.next.starting_after | string | |
total_count | integer |
Also retrieved by: "show me recent chats in the inbox", "what's come into the support inbox lately", "browse the latest customer conversations", "pull up the chat queue".
intercom.get_conversation
Get a single Intercom conversation by its id: its state, priority, assignee, tags, and the full back-and-forth of messages. Use when the user names a specific chat or support thread.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /conversations/{{params.conversation_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
conversation_id | string | yes | Intercom conversation id. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
admin_assignee_id | string | |
contacts | object | |
contacts.data | array of object | |
contacts.data[].id | string | |
created_at | integer | |
id | string | |
open | boolean | |
priority | string | |
source | object | |
source.body | string | |
source.type | string | |
state | string | |
tags | object | |
tags.data | array of object | |
tags.data[].id | string | |
tags.data[].name | string | |
team_assignee_id | string | |
updated_at | integer |
Also retrieved by: "open up this support thread", "show me the full back and forth on this chat", "pull up a specific conversation by id".
intercom.search_conversations
Find Intercom conversations by an exact match on one field, such as state (open, closed, snoozed) or the assigned admin. Use when the user wants conversations matching a condition rather than one specific conversation by id.
Class read (reads only). No scopes beyond the connection's defaults. Calls POST /conversations/search.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
field | string | yes | Field to match, e.g. "state", "admin_assignee_id", "team_assignee_id", or "priority". |
value | string | yes | Value to match exactly against the chosen field. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
conversations | array of object | |
conversations[].id | string | |
conversations[].open | boolean | |
conversations[].priority | string | |
conversations[].state | string | |
total_count | integer |
Also retrieved by: "find every open conversation", "show me chats assigned to a particular teammate", "filter conversations by their status", "which threads are still snoozed".
intercom.create_conversation
Start a new Intercom conversation from a contact, posting their first message into the support inbox. Use when the user wants to open a new chat or support thread on behalf of a customer, not reply inside an existing one.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /conversations.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
body | string | yes | The opening message text. |
contact_id | string | yes | Intercom contact id the conversation starts from. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
created_at | integer | |
id | string | |
open | boolean | |
state | string |
Also retrieved by: "start a new chat with this customer", "open a support thread on this user's behalf", "kick off a conversation from a contact".
intercom.reply_to_conversation
Send an admin's reply into an existing Intercom conversation. Use when the user wants to answer, respond to, or follow up in a chat or support thread that is already open, not start a new one.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /conversations/{{params.conversation_id}}/reply.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
admin_id | string | yes | Intercom admin id the reply is sent as. |
body | string | yes | Reply message text. |
conversation_id | string | yes | Intercom conversation id to reply in. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
state | string | |
updated_at | integer |
Also retrieved by: "answer this customer in the chat", "send a response in this support thread", "follow up on an open conversation", "write back to the customer".
intercom.close_conversation
Close an open Intercom conversation, marking the support thread resolved. Use when the user wants to mark a chat done or resolved, not delete it; a closed conversation can be reopened later.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /conversations/{{params.conversation_id}}/parts.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
admin_id | string | yes | Intercom admin id closing the conversation. |
conversation_id | string | yes | Intercom conversation id to close. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
open | boolean | |
state | string |
Also retrieved by: "mark this chat resolved", "wrap up a support conversation", "close out this customer's thread".
intercom.snooze_conversation
Snooze an Intercom conversation until a later time, hiding it from the open inbox until then. Use when the user wants to come back to a chat later rather than close or reply to it now.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /conversations/{{params.conversation_id}}/parts.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
admin_id | string | yes | Intercom admin id snoozing the conversation. |
conversation_id | string | yes | Intercom conversation id to snooze. |
snoozed_until | integer | yes | Unix timestamp (seconds) to reopen the conversation. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
snoozed_until | integer | |
state | string |
Also retrieved by: "come back to this chat later", "put this conversation on hold for a while", "remind me about this thread tomorrow".
intercom.assign_conversation
Assign an Intercom conversation to an admin or a team. Use when the user wants to hand a chat off to a specific teammate or team, not reply to it themselves.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /conversations/{{params.conversation_id}}/parts.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
admin_id | string | yes | Intercom admin id performing the assignment. |
assignee_id | string | yes | Admin id or team id to assign the conversation to. |
conversation_id | string | yes | Intercom conversation id to assign. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
admin_assignee_id | string | |
id | string | |
team_assignee_id | string |
Also retrieved by: "hand this chat off to a teammate", "route this conversation to the right team", "give this thread to someone else to handle".
intercom.add_conversation_tag
Apply an existing tag to an Intercom conversation, for filtering or reporting. Use when the user wants to label or categorize a chat, not a contact or a company (use tag_contact for a customer record).
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /conversations/{{params.conversation_id}}/tags.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
admin_id | string | no | Intercom admin id applying the tag. |
conversation_id | string | yes | Intercom conversation id. |
tag_id | string | yes | Intercom tag id to apply. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
name | string |
Also retrieved by: "label this chat for reporting", "flag this conversation with a category", "mark this thread as a bug report".
intercom.create_ticket
Open a new Intercom ticket for a customer issue: a structured help-desk record with a title, description, and status, separate from a free-form chat conversation. Use when the user wants to file or log a support ticket, not start a chat.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /tickets.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
contact_id | string | yes | Intercom contact id the ticket is opened for. |
description | string | yes | Ticket description. |
ticket_type_id | string | yes | Intercom ticket type id, e.g. the default customer ticket type. |
title | string | yes | Ticket title. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
created_at | integer | |
id | string | |
ticket_id | string | |
ticket_state | string |
Also retrieved by: "file a support ticket for this issue", "open a help desk case for the customer", "log a formal ticket, not just a chat".
intercom.get_ticket
Get a single Intercom ticket by its id: its state, type, and assignee. Use when the user names a specific support ticket rather than asking to search or list tickets.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /tickets/{{params.ticket_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
ticket_id | string | yes | Intercom ticket id. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
admin_assignee_id | string | |
created_at | integer | |
id | string | |
open | boolean | |
team_assignee_id | string | |
ticket_id | string | |
ticket_state | string | |
ticket_type_id | string | |
updated_at | integer |
Also retrieved by: "check the status of this support ticket", "pull up a specific help desk case", "what's the state of this ticket".
intercom.update_ticket
Update an Intercom ticket's state, title, or description. Use when the user wants to change a support ticket's status (for example to "in progress" or "resolved") or edit its details.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls PUT /tickets/{{params.ticket_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
description | string | no | New ticket description. |
ticket_id | string | yes | Intercom ticket id to update. |
ticket_state | string | no | New state, e.g. "in_progress" or "resolved". |
title | string | no | New ticket title. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
ticket_state | string | |
updated_at | integer |
Also retrieved by: "mark this ticket resolved", "change the status on a support case", "edit the title on a help desk ticket".
intercom.search_tickets
Find Intercom tickets by an exact match on one field, such as state or ticket type. Use when the user wants tickets matching a condition, for example all open tickets, rather than one specific ticket by id.
Class read (reads only). No scopes beyond the connection's defaults. Calls POST /tickets/search.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
field | string | yes | Field to match, e.g. "ticket_state", "ticket_type_id", or "admin_assignee_id". |
value | string | yes | Value to match exactly against the chosen field. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
tickets | array of object | |
tickets[].id | string | |
tickets[].ticket_state | string | |
tickets[].ticket_type_id | string | |
total_count | integer |
Also retrieved by: "show me every open ticket", "find tickets assigned to a given agent", "filter the help desk queue by status".
intercom.reply_to_ticket
Send an admin's reply on an Intercom ticket. Use when the user wants to respond to or follow up on a support ticket, distinct from replying inside a chat conversation.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /tickets/{{params.ticket_id}}/reply.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
admin_id | string | yes | Intercom admin id the reply is sent as. |
body | string | yes | Reply message text. |
ticket_id | string | yes | Intercom ticket id to reply on. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
ticket_state | string | |
updated_at | integer |
Also retrieved by: "respond to this support ticket", "send an update on a help desk case", "write back on an open ticket".
intercom.create_article
Publish a new help center article in Intercom, with a title, body, and author. Use when the user wants to write or add a knowledge-base or FAQ article, not send a message to a customer.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /articles.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
author_id | string | yes | Intercom admin id credited as the article's author. |
body | string | yes | Article body, as HTML. |
state | string | no | "published" or "draft". Defaults to "draft". |
title | string | yes | Article title. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
created_at | integer | |
id | string | |
state | string | |
title | string | |
url | string |
Also retrieved by: "write a new help center article", "publish a knowledge base page", "add an faq entry to the help center".
intercom.get_article
Get a single Intercom help center article by its id: title, body, state, and public url. Use when the user names a specific article rather than asking to browse the whole help center.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /articles/{{params.article_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
article_id | string | yes | Intercom article id. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
author_id | string | |
body | string | |
created_at | integer | |
id | string | |
state | string | |
title | string | |
updated_at | integer | |
url | string |
Also retrieved by: "pull up this help center page", "show me a specific knowledge base article", "what does our faq say about this".
intercom.update_article
Update an existing Intercom help center article's title, body, or publish state. Use when the user wants to edit or revise a knowledge-base article, not write a new one.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls PUT /articles/{{params.article_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
article_id | string | yes | Intercom article id to update. |
body | string | no | New body, as HTML. |
state | string | no | "published" or "draft". |
title | string | no | New title. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
state | string | |
title | string | |
updated_at | integer |
Also retrieved by: "revise this help center page", "fix a typo in the knowledge base", "edit an existing faq article".
intercom.delete_article
Permanently delete a help center article from Intercom, taking it off the public help center. Use when the user wants to remove an article entirely, not merely unpublish or draft it. Cannot be undone.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). No scopes beyond the connection's defaults. Calls DELETE /articles/{{params.article_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
article_id | string | yes | Intercom article id to delete. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
deleted | boolean | |
id | string |
Also retrieved by: "take this article off the help center", "remove a knowledge base page for good", "delete an faq entry permanently".
intercom.list_articles
List every article in Intercom's help center a page at a time. Use when the user wants to browse or export the whole knowledge base rather than look up one article by title or id.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /articles.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
per_page | integer | no | Page size, default 50. |
starting_after | string | no | Pagination cursor from a previous response's pages.next. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
data | array of object | |
data[].id | string | |
data[].state | string | |
data[].title | string | |
data[].url | string | |
pages | object | |
pages.next | object | |
pages.next.starting_after | string | |
total_count | integer |
Also retrieved by: "show me every help center article", "browse the whole knowledge base", "export our published faqs".
intercom.create_tag
Create a new tag in the Intercom workspace, for labeling conversations, contacts, or companies. Use when the user wants a new tag to exist, not apply an existing one (use add_conversation_tag or tag_contact for that).
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /tags.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
name | string | yes | Tag name. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
name | string |
Also retrieved by: "set up a new label for the workspace", "define a new tag we can apply later", "add a category option to intercom".
intercom.list_tags
List every tag defined in the Intercom workspace. Use when the user wants to see what tags exist or pick one to apply, not to tag a specific conversation, contact, or company.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /tags.
Takes no arguments.
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
data | array of object | |
data[].id | string | |
data[].name | string |
Also retrieved by: "what tags exist in our workspace", "show me every label we can apply", "browse the available categories".
intercom.tag_contact
Apply an existing tag to an Intercom contact, for segmenting or filtering the customer directory. Use when the user wants to label a customer record, not a conversation (use add_conversation_tag for that).
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /contacts/{{params.contact_id}}/tags.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
contact_id | string | yes | Intercom contact id. |
tag_id | string | yes | Intercom tag id to apply. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
name | string |
Also retrieved by: "label this customer's profile", "flag a contact with a category", "mark this user as vip".
intercom.create_contact_note
Add an internal note to an Intercom contact, visible only to your team, not the customer. Use when the user wants to jot down context about a customer, not send them a message.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /contacts/{{params.contact_id}}/notes.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
admin_id | string | no | Intercom admin id credited as the note's author. |
body | string | yes | Note text. |
contact_id | string | yes | Intercom contact id to note. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
body | string | |
created_at | integer | |
id | string |
Also retrieved by: "jot down a note about this customer", "leave an internal comment on their profile", "log some context about this user for the team".
intercom.list_contact_notes
List the internal notes your team has written on an Intercom contact. Use when the user wants the history of notes about a customer, not the conversation history with them.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /contacts/{{params.contact_id}}/notes.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
contact_id | string | yes | Intercom contact id. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
data | array of object | |
data[].body | string | |
data[].created_at | integer | |
data[].id | string |
Also retrieved by: "show me the notes we've written about this customer", "pull up the internal history on this person", "what has the team said about this user".
intercom.list_admins
List the teammates (admins) in the Intercom workspace, for picking one to assign a conversation or ticket to. Use when the user asks who is on the support team, not who is a customer.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /admins.
Takes no arguments.
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
admins | array of object | |
admins[].away_mode_enabled | boolean | |
admins[].email | string | |
admins[].id | string | |
admins[].name | string |
Also retrieved by: "who's on the support team", "show me every teammate in the workspace", "list the agents who can be assigned chats".
intercom.list_teams
List the teams in the Intercom workspace, for picking one to assign a conversation or ticket to. Use when the user asks about a support team as a group rather than an individual teammate.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /teams.
Takes no arguments.
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
teams | array of object | |
teams[].admin_ids | array of string | |
teams[].id | string | |
teams[].name | string |
Also retrieved by: "what teams exist in our workspace", "show me the support groups we can route to", "list every team available for assignment".
intercom.list_segments
List the customer segments Intercom has computed, such as "active" or "churned" groups of contacts. Use when the user asks about a predefined audience segment, not a single contact search.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /segments.
Takes no arguments.
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
segments | array of object | |
segments[].id | string | |
segments[].name | string | |
segments[].person_type | string |
Also retrieved by: "what customer segments do we have", "show me the audience groups intercom computed", "list the predefined customer cohorts".
intercom.track_event
Record a custom data event against an Intercom contact, such as "completed onboarding" or "upgraded plan", for behavioral targeting and reporting. Use when the user wants to log a customer action, not send them a message.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /events.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
contact_id | string | yes | Intercom contact id the event happened to. |
created_at | integer | no | Unix timestamp (seconds) the event occurred. Defaults to now. |
event_name | string | yes | Event name, e.g. "invited_teammate". |
Also retrieved by: "log that this customer did something", "record a behavioral event for this user", "track that someone completed onboarding".