MCP server for Intercom API — search contacts, manage conversations, reply, assign, and close tickets.
Server has 6 tools with complete schemas and descriptions. Naming follows verb_noun convention (search_*, create_*, reply_*, close_*, assign_*). Descriptions are detailed and context-aware (avg ~150 chars), exceeding the 10-1024 char baseline. All parameters have type definitions and descriptions. However, output schemas are not formally documented, responses are returned as JSON text blobs without structured schema declarations. Error handling is minimal (generic Intercom API error messages without recovery guidance). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. Missing pagination guidance for search_conversations despite limit param. No confirmation pattern for irreversible operations (close_conversation, assign_conversation).
Use this tool to assign an Intercom conversation to a specific admin or team.
Use this tool to close (resolve) an open Intercom conversation. Call it when a customer's issue has been resolved and the ticket should be marked as closed. Optionally include a closing message that will be sent to the customer before the conversation closes. You must provide the conversation ID and the admin ID performing the close action.
Use this tool to create a new contact in Intercom or update an existing one. Call it when a new user signs up and you need to register them, or when you need to update a contact's attributes such as their name, phone number, plan, or any custom fields. If the contact already exists (matched by email), Intercom will update rather than duplicate.
Use this tool to send a reply to an existing Intercom conversation. Call it when you need to respond to a customer message on behalf of an admin, or when you need to add an internal note that is only visible to your team (not the customer). You must provide the conversation ID and the admin ID sending the reply.
Output schemas not formally documented. Tools return JSON text blobs without declared field types, making it impossible for LLMs to plan downstream calls or extract specific fields reliably.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. create_or_update_contact is WRITE, close_conversation is REVERSIBLE, assign_conversation is WRITE, LLMs cannot infer safety properties.
Error handling returns generic Intercom API errors without recovery guidance. 'Intercom API error 400: Invalid email' does not tell the LLM what to do next (retry, ask user, call search_contacts first).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Use this tool when you need to find a contact (customer or user) in Intercom. Call it when you have an email address, name, or phone number and need to retrieve the contact's Intercom ID, custom attributes, or account history before taking action. Always call this first before creating, updating, or adding a note to a contact.
Use this tool to find conversations in Intercom based on filters such as status, contact ID, or assigned admin. Call it when you need to see all open tickets for a specific customer, find unassigned conversations, or retrieve a list of conversations matching any combination of criteria before replying, assigning, or closing them.
assign_conversation description is minimal (6 words). Does not explain WHEN to use it, what happens, or prerequisites (e.g., must provide valid admin_id). Violates 50-200 char LLM-optimized baseline.
No confirmation or dry-run pattern for irreversible operations. close_conversation and assign_conversation modify state without a chance for the agent to preview or confirm, risking accidental data changes.