Intercom MCP server for Help Center content management and CS workflow automation.
Intercom-MCP demonstrates solid definition quality with comprehensive tool coverage (10 tools) for Intercom's Help Center and CS workflow domains. All tools have explicit names, descriptions, and JSON Schema input definitions. Descriptions are generally well-structured (194 - 250 chars average), explaining WHAT each tool does and WHEN to use it. Parameter schemas include types and descriptions. However, there are significant gaps: (1) NO output schemas documented for any tool, LLMs cannot infer what fields to expect in responses, breaking downstream chaining; (2) Error handling is minimal, no recovery guidance, no actionable error messages; (3) Several parameter descriptions rely on Intercom API specifics (raw query objects, numeric field IDs) without enough abstraction for LLM use; (4) Tool composition could be stronger, some tools expose low-level API concerns (e.g., passing raw Intercom query objects instead of accepting human-friendly filters). Strengths: naming is clear and action-oriented (search_, get_, reply_, close_, etc.); descriptions explain state mutations (WRITE risk noted); parameters are mostly well-constrained (enums for type/state fields, required/optional clearly marked); effort to simplify responses (SLIM response design in descriptions) shows awareness of token efficiency.
Assign an Intercom conversation to an admin or team. Specify admin_id (Intercom numeric ID or 'current' for logged-in admin) and optionally a team_id. If both are provided, Intercom applies assignment logic (usually assigns to both).
Close an open Intercom conversation (mark state='closed'). Fails silently if already closed.
Create a new Intercom Help Center article. Title and body (in HTML or plain text) are required. Optionally set parent_id (collection), state (draft or published, default draft), and author_id. Returns article ID, URL, and metadata.
Fetch a single Intercom Help Center article by ID. Returns full content: title, body (HTML), state (draft/published), parent (collection), timestamps, URL, and custom metadata (e.g. translations, statistics).
Get a single Intercom conversation by ID. SLIM: keeps triage essentials — source (incl. delivered_as), ticket (type/state + custom attributes), parts (comment/note/quick_reply only, no system events), and contacts.
NO output schemas documented for ANY tool (10/10 affected). LLMs cannot predict response structure, breaking downstream tool chaining and forcing wasteful lookup calls.
Search tools (search_conversations, search_articles) expose raw Intercom API query objects instead of accepting human-friendly filters. LLMs must know Intercom query syntax ({operator, value, field}) instead of natural filters like {state: 'open', assignee_email: 'john@example.com'}.
Minimal error handling and no recovery guidance. Example: close_conversation 'fails silently if already closed', LLMs expect explicit success/failure responses, not silent no-ops. No error responses provide actionable guidance (e.g., 'Try search_conversations first to verify conversation state').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 73 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Reply to an Intercom conversation as the logged-in admin. Supports both plain text and multipart (HTML + attachments). Message type defaults to comment; pass type='note' to send an internal note (not shown to customer).
Search Intercom Help Center articles by title, content, or filter by collection/status. Query is an Intercom search object; use the 'query' shorthand to match article title/body, or add structured filters (e.g. parent_id, state). Returns slim article list: id, title, description, state, created/updated timestamps, URL.
Search Intercom conversations. Returns a SLIM list (id, state, contact, timestamps) with NO conversation parts — call get_conversation for full content. Pass a raw Intercom query object.
Set custom attribute values on a conversation's ticket. Each attribute is addressed by its external_id (typically form field slug, e.g. 'bug_severity', 'category'). Unset attributes are left unchanged. Pass string | number | null | string[] | number[].
Update an existing Intercom Help Center article. Pass the article ID and any fields to update (title, body, parent_id, state). Unset fields are left unchanged. Returns article ID, URL, state, and timestamps.
Parameter descriptions include example values (e.g., 'category: ["feature", "ui"]', 'priority: "high"') instead of formal enums. LLMs tend to reuse example values literally, increasing invalid input risk.
Magic value 'current' for admin_id in assign_conversation is helpful for LLM usability but underdocumented in schema. Parameter type shows [string|number] without highlighting 'current' as a special value. Description mentions it, but schema should be clearer (enum: ['current'] | number, or separate boolean use_current_admin flag).