hubspot-conversations-mcp
This MCP server provides 24 tools to manage HubSpot Conversations, including reading and sending messages, managing threads, handling inboxes and channels, and integrating custom communication channels.
Thread Management: List and search threads with filters (inbox, status, contact, ticket, time). Retrieve thread details, update status (OPEN/CLOSED), archive (soft-delete, permanent after 30 days), or restore threads.
Message Operations: Access message history (including comments and system events) in a thread. Retrieve individual messages, fetch full untruncated content, and send new messages or internal comments (auto-derives channel and sender).
Inbox, Channel, and Actor Insights: List and get details for conversation inboxes, channels (email, chat, WhatsApp, etc.), and channel accounts (specific addresses/numbers). Batch-resolve actor IDs to participant profiles.
Custom Channel Integration: Create and manage accounts on custom channels, update account info (name, authorization), finalize staging connections, publish external messages into HubSpot, and update message delivery status (SENT, FAILED, READ).
Provides tools for interacting with the HubSpot Conversations API, enabling AI agents to manage conversation threads, messages, inboxes, channels, and custom channels.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@hubspot-conversations-mcpShow me my recent conversation threads"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
hubspot-conversations-mcp
MCP server for the HubSpot Conversations API — 24 tools to read conversation threads and messages, send replies, manage threads and channel accounts, and integrate custom channels, from any MCP client (Claude Code, Claude Desktop, Hermes, etc.).
Covers two HubSpot API surfaces:
Conversations API (
/conversations/conversations/2026-09-beta) — threads, messages, inboxes, channels, actorsCustom Channels API (
/conversations/custom-channels/2026-03) — channel accounts, staging tokens, publishing external messages, delivery status
How authentication works
There is exactly one way to authenticate: per-user OAuth via your organization's broker.
Every user signs in with their own HubSpot login — tokens are issued individually, stored only on their machine (~/.hubspot-conversations-mcp/tokens.json, 0600), revocable per user, and die when the user is deactivated in HubSpot. No shared credentials exist anywhere.
The broker is a small stateless service your org hosts (free on Vercel, api/ in this repo). It is the only place your HubSpot app's client secret lives; it exchanges authorization codes and refreshes tokens, stores nothing, and never sees Conversations data — all API traffic goes directly from the user's machine to HubSpot.
Related MCP server: hubspot-mcp
Org setup (one-time, ~10 minutes)
Create a HubSpot app (in a developer account, e.g. as a developer-projects app): use
"distribution": "private"and allowlist your portal. Theauthblock ofapp-hsmeta.jsonshould look like:"auth": { "type": "oauth", "redirectUrls": ["http://localhost:4573/callback"], "requiredScopes": ["oauth", "conversations.read", "conversations.write"], "optionalScopes": [], "conditionallyRequiredScopes": [] }Deploy the app and note the client ID and client secret from its Auth tab.
Deploy the broker to Vercel — one click:
The button clones this repo and prompts for the two environment variables (
HUBSPOT_OAUTH_CLIENT_ID,HUBSPOT_OAUTH_CLIENT_SECRET). Alternatively create the Vercel project manually from your fork, or wire up CI deploys via deploy-broker.yml with theVERCEL_TOKEN/VERCEL_ORG_ID/VERCEL_PROJECT_IDrepo secrets.Share the broker URL (e.g.
https://your-broker.vercel.app) with the team — it is not a secret, and neither is the client ID (the CLI fetches it from the broker's/api/config). SettingHUBSPOT_OAUTH_BROKER_URLorg-wide (dotfiles, MDM, onboarding docs) makes all commands flag-free.
Because the app is private-distribution and allowlisted, only your own org's portals can complete a login against your broker — each org runs its own broker with its own app, so tokens never cross organizational trust boundaries.
Per user
Interactive setup (recommended)
npx -y hubspot-conversations-mcp setupThe wizard walks through everything:
Broker — asks whether your org already has a broker; if not, it shows the setup guide (and links back here). The URL is verified live against
/api/configbefore continuing.Sign in — your browser opens HubSpot's consent screen; sign in with your own HubSpot login. Tokens land on your machine and auto-refresh through the broker.
Agents — pick which AI agents to configure with an arrow-key multiselect (↑/↓ to move, space to toggle): Claude Desktop, Claude Code, and/or Hermes (Nous Research hermes-agent). Each is configured automatically — no credentials are written to any config file.
Manual / scripted
npx -y hubspot-conversations-mcp login --broker-url https://your-broker.vercel.appnpx -y hubspot-conversations-mcp install --client all--client takes claude-desktop, claude-code, hermes, both (the two Claude clients), all, or a comma-separated combination:
claude-desktop — merges the server into
claude_desktop_config.json(existing servers preserved; timestamped backup first). Restart Claude Desktop afterwards.claude-code — runs
claude mcp add … -- npx -y hubspot-conversations-mcp(prints the command if theclaudeCLI is unavailable). Add--scope userto register across all your projects (the setup wizard defaults to this).hermes — merges the server into
~/.hermes/config.yamlundermcp_serverswithenabled: true(backup first; YAML comments are not preserved). Verify withhermes mcp test hubspot-conversations.
whoami shows the active sign-in, logout removes it. Use --dry-run to preview installs, --config-path / --hermes-config-path for non-standard config locations.
Broker endpoints
Endpoint | Purpose |
| Public app metadata (client ID) so users only need the broker URL |
|
|
|
|
One-click bundle for Claude Desktop (MCPB)
The repo ships a manifest.json following Anthropic's MCP Bundle format:
npm run bundleThis produces a .mcpb file. Open it with Claude Desktop (or drag it into Settings → Extensions) for a one-click install. Run npx -y hubspot-conversations-mcp login once first — the extension uses the same per-user sign-in.
Publishing to npm
npm publishprepublishOnly builds and runs the full test suite first. The published package contains only dist/, manifest.json, README and LICENSE. Bump version in both package.json and manifest.json (and SERVER_VERSION in server.ts) per release.
Configuration
Environment variable | Description |
| Your org's broker URL, used by |
| OAuth token store location (default |
| Default sender for |
| Default |
| Default |
| Default |
On the broker deployment (never on user machines): HUBSPOT_OAUTH_CLIENT_ID and HUBSPOT_OAUTH_CLIENT_SECRET.
Tools
Threads
Tool | Description |
| List/search threads — filter by inbox, OPEN/CLOSED, contact, ticket, time window; paginated |
| Get a single thread (status, inbox, channel, assignee, contact) |
| Set OPEN/CLOSED, archive or restore a thread |
| Soft-delete a thread (permanently deleted after 30 days) |
Messages
Tool | Description |
| Message history of a thread (messages, comments, system events); paginated |
| Get a single message |
| Original (untruncated) text/richText of a message |
| Send a message to the customer — or an internal comment with |
Inboxes, channels & actors
Tool | Description |
| Conversation inboxes / help desks |
| Channel types (email, chat, …) |
| Connected accounts (specific email addresses / numbers) |
| Resolve actor IDs ( |
Custom channels (requires the conversations.custom_channels.* scopes on the HubSpot app)
Tool | Description |
| Create an account on a custom channel |
| List accounts on a custom channel |
| Get one custom-channel account |
| Rename or (de)authorize a channel account |
| Finalize a staging-token connection (public apps) |
| Publish an external message into HubSpot |
| Get a custom-channel message |
| Report delivery status: SENT / FAILED / READ |
Sending replies
SendConversationMessage only requires thread_id and text. Everything else is derived:
channel_id/channel_account_id— taken from the thread'soriginalChannelId/originalChannelAccountIdrecipients— the senders of the latest incoming message (i.e. a normal reply)sender_actor_id— falls back toHUBSPOT_DEFAULT_SENDER_ACTOR_ID
Pass any of them explicitly to override. The full request body can also be supplied as a stringified JSON request_body (typed fields win on conflict), and calling with mode="get_request_schema" returns the raw body schema. The same pattern applies to PublishCustomChannelMessage.
Development
npm test # vitest — unit + in-memory MCP integration tests
npm run typecheck # tsc --noEmit (CLI + broker functions)
npm run build # compile to dist/
npm run bundle # build a .mcpb one-click bundle for Claude DesktopThe integration tests run the full MCP server against a stubbed fetch, so no HubSpot account is needed to develop.
Notes
The client retries once on
429/502/503(honoringRetry-After, capped at 10s) and once more with a refreshed token on401.Thread assignee endpoints (
PUT/DELETE /threads/{id}/assignee) exist in the HubSpot API but are not currently exposed as tools. Add them insrc/tools/threads.tsif needed.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceThis MCP Server enables users to interact with HubSpot's marketing events API, allowing management of marketing event data through natural language commands.1
- AlicenseAqualityCmaintenanceA read-only MCP server that exposes HubSpot CRM data (contacts, deals, companies, quotes) to AI agents, enabling natural language queries.9MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for the HubSpot CRM API with tools for managing contacts, companies, deals, tickets, and CRM workflows. Generated with MCPForge. Sensitive operations can be protected with permissions, audit logs, and approval workflows.23MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that provides AI assistants with full access to HubSpot CRM. Manage contacts, companies, deals, pipelines, and associations directly from Claude, Cursor, or any MCP-compatible client.7MIT
Related MCP Connectors
Official MCP server for OmniDimension. Drive voice agents, dispatch calls, and run bulk campaigns.
MCP server for interacting with the Supabase platform
Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/amalodev/hubspot-conversations-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server