An MCP server tuned for customer success teams using HubSpot. Exposes contacts, companies, tickets, and deals as Claude tools, with CS-specific helpers for renewal date queries, ticket aging, and health-score reads. The CSM asks “what is at risk this month,” Claude pulls the actual data.
What you’ll need
- HubSpot Sales Hub Pro or higher with Service Hub for tickets
- A HubSpot Private App token with read scopes for contacts, companies, deals, and tickets
- Claude Desktop or Claude Code as the MCP client
- A health-score field convention agreed with your CS leadership
Setup
- Run the server. Reference implementation is Python, FastAPI-style. Clone, install, set
HUBSPOT_TOKENandHUBSPOT_PORTAL_ID. The server starts on stdio for local Claude Desktop or HTTP for hosted clients. - Configure the helper tools. Three CS-specific helpers ship by default:
at_risk_renewals,aging_tickets,accounts_needing_qbr. Each maps to a parametrized HubSpot query. Edit the query templates to match your fields. - Add to MCP client config. Point Claude Desktop at the server. On startup, you should see roughly twelve tools registered.
- Set the health-score field. Most teams use a custom number property. Pass its internal name to the server so the helpers can filter on it.
- Run “show me at-risk renewals in the next ninety days.” Sanity-check the output against the same query in HubSpot’s UI.
How it works
The server is read-mostly by design. CS workflows are about knowing what is happening, not bulk-mutating records. The default tool surface includes object reads, association traversals (contact to company to deals to tickets), and the three CS-specific helpers.
Writes are limited to ticket creation and notes. No deal stage changes, no contact merges, no property updates on companies. The principle: Claude can ask, summarize, and document, but the CSM still drives the actual customer-facing changes.
Watch-outs
- Health-score field drift. Teams change the formula every quarter. The server caches nothing; queries hit the live property. Update the helper docs when the formula changes so prompts stay accurate.
- Ticket volume. Aging-tickets queries can return thousands of rows on busy portals. The helper paginates and caps at five hundred by default. Tune for your volume.
- Cross-object joins. HubSpot’s association API is slower than direct queries. The server batches associations but a deal-to-tickets traversal across a thousand deals takes minutes, not seconds.
- Permissions. Private App tokens bypass user-level permissions. Anyone with access to the MCP client sees all data. Document this clearly with your security team.
Stack
- HubSpot — CRM and ticketing source of truth
- MCP server — read layer, helper tools, light write surface
- Claude — natural-language interface for the CS team