Intercom Conversations & Contacts
Lets an agent triage an Intercom support inbox: search and read conversations, reply as an admin, assign, tag, snooze or close them, and find, create or update the contacts behind them. Curated from Intercom's official OpenAPI specification.
Connect this API to an AI agent Browse all specs
What you can do with Intercom Conversations & Contacts via MCP
Every endpoint below becomes a governed tool your AI agent (Claude, ChatGPT, or a customer-facing VX agent) can call — with scoped permissions, sandbox testing, and audit logs.
| Method | Path | Operation | Description |
|---|---|---|---|
| GET | /me |
getCurrentAdmin | Show the admin and workspace this token acts as |
| GET | /admins |
listAdmins | List the teammates (admins) in the workspace |
| GET | /teams |
listTeams | List the teams conversations can be assigned to |
| GET | /tags |
listTags | List all tags in the workspace |
| POST | /conversations/search |
searchConversations | Search conversations by state, assignee, tag, date or text |
| GET | /conversations |
listConversations | List recent conversations, newest first |
| GET | /conversations/{conversation_id} |
getConversation | Get a conversation with its full message history |
| POST | /conversations/{conversation_id}/reply |
replyToConversation | Reply to a customer or add an internal note to a conversation |
| POST | /conversations/{conversation_id}/parts |
manageConversation | Assign, snooze, close or reopen a conversation |
| POST | /conversations/{conversation_id}/tags |
tagConversation | Add a tag to a conversation |
| POST | /contacts/search |
searchContacts | Search contacts by email, name, phone or custom attribute |
| GET | /contacts/{contact_id} |
getContact | Get a contact's profile and attributes |
| PUT | /contacts/{contact_id} |
updateContact | Update a contact's name, email, phone or attributes |
| POST | /contacts |
createContact | Create a new user or lead contact |
| GET | /contacts/{contact_id}/notes |
listContactNotes | List internal notes on a contact |
| POST | /contacts/{contact_id}/notes |
addContactNote | Add an internal note to a contact |
Authentication
bearerAuth
Bearer token — sent as Authorization: Bearer <token>
Intercom access token sent as Authorization: Bearer <token>.
How to get a credential
- Sign in to Intercom and open the Developer Hub.
- Click New app, name it (e.g. "VX Agents") and pick the workspace.
- Open Configure > Authentication and copy the Access token. It acts for your workspace as the app.
- For apps installed on other workspaces, use OAuth instead and pass the resulting access token.
Permissions used
| Permission (app settings) | Operations |
|---|---|
| Read admins | getCurrentAdmin, listAdmins, listTeams |
| Read conversations | searchConversations, listConversations, getConversation |
| Write conversations | replyToConversation, manageConversation, tagConversation |
| Read and list users and companies | searchContacts, getContact, listContactNotes |
| Write users and companies | createContact, updateContact, addContactNote |
| Read tags | listTags |
Common errors
- 401 Unauthorized: token missing, mistyped or revoked. Copy it again from the Developer Hub.
- 403 Forbidden (
token_unauthorized/api_plan_restricted): the app lacks the permission above, or your plan does not include the endpoint. Enable the permission and reinstall the app. - 400 / 422: invalid body, e.g. a reply without
admin_id, or an unknown contact role. Check the field names. - 429 Too Many Requests: rate limit (about 1,000 calls per minute per app). Wait for
X-RateLimit-Resetand retry. - EU or AU workspaces must use
https://api.eu.intercom.ioorhttps://api.au.intercom.io.
Store the token as a VX Agents credential (Bearer token); it is never shown to the model.
Usage guide
Setup
- Credential: an Intercom access token (Developer Hub > your app > Authentication), stored as a Bearer credential.
- Call
getCurrentAdminonce and pin the returned adminidas a presetadmin_id. Every reply, note, assignment and tag needs it. - The
Intercom-Versionheader is fixed at2.11. EU/AU workspaces need the regional base URL (api.eu.intercom.io/api.au.intercom.io).
Triage the support inbox
searchConversationswith a query, e.g.{"query": {"operator": "AND", "value": [{"field": "state", "operator": "=", "value": "open"}, {"field": "admin_assignee_id", "operator": "=", "value": "0"}]}}for open, unassigned ones. Addpagination.per_page(max 150).getConversationto read the full thread (conversation_parts) and see who the customer is.searchContacts(e.g. fieldemail) orgetContactfor the customer's profile;listContactNotesfor past context.replyToConversationwithmessage_type: "comment"(visible to the customer) or"note"(internal),type: "admin",admin_idandbody(HTML allowed).manageConversationto change state:{"message_type": "assignment", "type": "admin", "admin_id": ..., "assignee_id": <admin or team id>},"close","snooze"(withsnoozed_untilUnix time) or"open".tagConversationwith the tagidfromlistTagsandadmin_id.- New or changed customer details:
createContact(role=userorlead, plusemail/phone/name) orupdateContact. UseaddContactNoteto leave context.
Confirm before writing: a comment reply is sent to the customer right away, and contact updates change customer data. Show the user the reply text or the change and get a yes before calling replyToConversation (comment), createContact or updateContact. Internal notes, tags and assignments are fine without asking unless the user said otherwise.
Good to know
- Timestamps are Unix seconds (
created_at,updated_at,snoozed_until). - Conversation and contact ids are strings; teams and admins share the assignee id space (
listTeams,listAdmins). - Search operators:
=,!=,IN,NIN,<,>,~(contains),^(starts with). Nest up to 2 levels of AND/OR. - Paginate with
pagination.starting_afterfrom the previous response. - Rate limit is about 1,000 requests per minute per app (429 when exceeded).
How to use this spec
- Create a free VX Agents account (sandbox tools included).
- Open the marketplace and connect “Intercom Conversations & Contacts” to an agent.
- Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.