Skip to content

Add Intercom integration#177

Open
pagkt2 wants to merge 1 commit into
daltoniam:mainfrom
pagkt2:add-intercom-integration
Open

Add Intercom integration#177
pagkt2 wants to merge 1 commit into
daltoniam:mainfrom
pagkt2:add-intercom-integration

Conversation

@pagkt2
Copy link
Copy Markdown

@pagkt2 pagkt2 commented May 22, 2026

Summary

Adds an intercom integration that proxies Intercom's official remote MCP server via the existing remotemcp package. Same pattern as linear.New("https://mcp.linear.app") (and the pganalyze migration in #156): a thin wrapper so tools are auto-prefixed intercom_*, and configure / tools / execute / healthy delegate to the upstream server.

Intercom's MCP currently exposes 13 tools — universal (search, fetch), conversations (search_conversations, get_conversation), contacts (search_contacts, get_contact), companies (list_companies, get_company), and articles (list_articles, search_articles, get_article, create_article, update_article). They'll surface automatically through search / execute and follow upstream as Intercom expands tool coverage.

Changes

  • integrations/intercom/intercom.go — ~50-line wrapper around remotemcp.New("intercom", "https://mcp.intercom.com"). Optional URL override for tests.
  • integrations/intercom/intercom_test.go — constructor, name, configure delegation (incl. missing/empty token), healthy without config, execute against unreachable host.
  • cmd/server/main.go — register intercom.New() in the integration list (placed next to linear.New since both are remote MCP proxies).
  • config/config.godefaultConfig entry with access_token credential, INTERCOM_ACCESS_TOKEN env mapping.
  • README.md — env-vars table entry.

Auth

Workspace Access Token from Intercom's developer hub — passed to remotemcp as creds["access_token"], which wires it into Authorization: Bearer <token> via the existing bearerTransport. Required scopes per Intercom's MCP docs: read users/companies, read conversations, and read/write articles if the article tools are used. OAuth not wired (Intercom MCP supports both PAT and OAuth; PAT is sufficient for first-party data access — happy to follow up with an OAuth flow if useful).

Test plan

  • CI green (build, vet, test-race, lint, security)
  • Local smoke: INTERCOM_ACCESS_TOKEN=... ./switchboard then call search with intercom filter — confirm 13 tools surface
  • execute intercom_search_articles with a query and verify a response

Made with Cursor

Proxy Intercom's official remote MCP server at https://mcp.intercom.com
via the existing remotemcp package. Mirrors the Linear and pganalyze
patterns so the integration auto-prefixes intercom_* on tool names and
delegates configure / list / execute to the upstream server.

- integrations/intercom: ~50-line wrapper around remotemcp.New plus tests
- cmd/server/main.go: register intercom.New() in the integration list
- config/config.go: defaultConfig entry + INTERCOM_ACCESS_TOKEN env mapping
- README.md: env-var table entry

Credentials: workspace Access Token under "access_token". OAuth path is
not wired yet (Intercom MCP supports both, but PAT-style is sufficient
for first-party data access).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@pagkt2
Copy link
Copy Markdown
Author

pagkt2 commented May 22, 2026

Local smoke test ✅

Tested the integration locally against a real Intercom workspace. Results:

  • search with integration: intercom returns all 13 tools correctly prefixed as intercom_*
  • execute intercom_get_conversation with a real conversation ID returned the full thread, message history, internal notes, tags, and statistics — no empty {} or compaction issues
  • Auth via INTERCOM_ACCESS_TOKEN env var auto-enables the integration without touching config.json

The remote MCP proxy handshake (initialize + tools/list against https://mcp.intercom.com) completes successfully and tools surface through search/execute as expected.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant