Connect a module
HubSpot
ShopMCP's HubSpot integration is built directly against HubSpot's REST API — not a proxy of their official MCP. You get full operational capability (create deals, send marketing emails, enroll workflows, publish CMS pages, manage HubDB) plus cross-integration playbooks that join HubSpot data with GA4 / Klaviyo / Shopify. Setup takes under 5 minutes.
Why the first-party integration
HubSpot ships its own remote MCP at mcp.hubspot.com(GA April 2026), and ShopMCP can route to it as a fallback. But HubSpot’s MCP exposes three generic CRM verbs (search / get / manage) plus a small campaign-analytics surface — roughly 10–15% of HubSpot’s API. Workflows, marketing email send, HubDB, files, custom-object detail, conversations, and webhooks are not covered. Our native integration closes those gaps with typed per-object tools and full Marketing + CMS Hub coverage, and adds the cross-integration playbooks no vendor MCP can match.
| Category | HubSpot's official MCP | ShopMCP HubSpot | Why it matters |
|---|---|---|---|
| CRM standard objects (read) | 1 generic search verb (≤200 results, ≤5×6 filters) | 24 typed tools — list/get/search per object × 8 (contacts, companies, deals, tickets, products, line_items, quotes, invoices) | One round-trip answers 'show me the 10 deals closing this month with their primary contact and company' — official MCP needs N round-trips per object hop. |
| CRM standard objects (write) | 1 generic manage verb | 24 typed tools — create / update / archive per object × 8 (PR #175 + #177) | Typed updates surface idProperty options (email for contacts, domain for companies, hs_sku for products) and per-object property hints. Generic verbs require the LLM to remember object shapes. |
| Custom objects | Implicit via search (whitelisted types only) | Schema introspection + typed CRUD generic over any portal-declared schema (PR #164 + #180) | B2B portals run pipelines on custom objects (Subscriptions, Wholesale Accounts). Generic search is a poor proxy for typed access. |
| Properties | Read-only | Read + create + update + per-object property history (PR #162 + #178) | Schema CRUD is how operators bulk-clean stale CRM hygiene. |
| Pipelines / stages | Not exposed | List pipelines / list stages / update_pipeline_stage (PR #162 + #178) | Deal-stage health is a top-3 chat use case. Stage probability writes shift forecasts across every open deal in that stage. |
| Lists / segments | Read-only, generic | Read + create static + add/remove members (PR #162 + #178) | List hygiene + cohort building are where Marketing Hub work happens. |
| Activities (calls/emails/meetings/notes/tasks) | Read + write via generic manage | Typed list + create + update per activity type (PR #164 + #178) | Both gracefully refuse on Sensitive-Data portals via 403. |
| Marketing emails | Not exposed | List / get / get_stats / send transactional / schedule (PR #167 + #180) | Send-window optimisation, deliverability triage, transactional sends. |
| Forms | Not exposed | List / get / list submissions / submit / create (PR #167 + #180) | Lead capture + submission audit + backfill imports. |
| Marketing events | Via generic manage association | Typed list / get / list_attendees by attribution state (PR #168) | Webinar / event ROI playbooks. |
| Workflows / Automation | Not exposed | List / get / enroll / unenroll contacts (PR #168 + #180) | Automation health + workflow triage from chat. |
| CMS pages (blog / landing / site) | Read-only via generic | List / get / update + publish via state flag (PR #169 + #180) | Content ops + publish workflows for portfolio brands. |
| HubDB | Not exposed | List tables / list rows / get row / create row / update row / publish table (PR #170 + #180) | Programmatic content management — major coverage gap for HubSpot operators. |
| URL redirects | Not exposed | List / get (PR #170) | Migration audits + broken-redirect detection. |
| Files API | Not exposed | Search / get / import-from-URL (PR #170 + #180) | Media management for content + email. |
| Behavioral events | Not exposed | List event definitions / complete event for a contact (PR #182) | Custom-event tracking for personalisation + workflow triggers. |
| Conversations Inbox | Not exposed | List threads / get thread / list messages / list channels / list inboxes (PR #182) | Service Hub triage + response-quality review. |
| Campaigns + analytics | 4 tools (asset types, asset metrics, contacts by type, analytics) | List / get / get_metrics / get_contacts (parity + list/get on top) (PR #165) | Comparable surface; ours composes with playbooks below. |
| Composite playbooks | Not available | 4 cross-integration playbooks — deal-stage health, list hygiene, attribution reconcile (HubSpot ↔ GA4 ↔ Klaviyo), lead-quality audit (HubSpot ↔ Shopify ↔ Klaviyo) (PR #182) | The wedge. No vendor MCP can stitch HubSpot ↔ GA4 / Klaviyo / Shopify because each one's scope ends at its own product. |
| Total tools | ≈ 12 | 137 + 4 cross-integration playbooks | 11.4× the coverage. Every row above is accessible via a single private app token. |
1. Create a private app in HubSpot
In HubSpot, go to Settings → Integrations → Private apps → Create private app. If your account hasn’t enabled private apps yet, you’ll see a one-time consent prompt — accept it to continue. Name the app ShopMCP. Pick the scope recipe that matches how you intend to use the integration:
- CRM operator (read-only) — grant the
crm.objects.*.readset across contacts, companies, deals, tickets, products, line_items, quotes, invoices, custom; pluscrm.schemas.*.read,crm.lists.read, andtickets. Registers all 79 read tools. - + Marketing operator — add
content,marketing-email,forms,files,hubdb,automation, andmarketing.campaigns.read. Unlocks Marketing Hub + CMS Hub reads (Marketing Hub Pro/Enterprise required for some endpoints). - + Operator with writes — add the matching
*.writescopes per object family you want to mutate. Required for the 58 write tools (CRM CRUD, send transactional email, enroll contacts in workflows, publish CMS pages, write HubDB rows, etc.).
Scope ≠ access
2. Copy the access token
Click Create app and copy the access token — it starts with pat- followed by your region code (na1, eu1, etc.) and a UUID. HubSpot shows the full token once on creation; store it somewhere safe before navigating away.
Region matters for billing context, not routing
api.hubapi.com regardless. ShopMCP captures the region for UI badging.3. Paste the token into ShopMCP
Open Settings → Integrations → HubSpot and paste the token. We validate it with two round-trips:
GET /account-info/v3/details— fetches your portal id, account type, Hub tier, time zone, and currencies.GET /oauth/v2/private-apps/get/access-token-info— fetches the scope set you granted, plus your portal’s hub domain (used as the connection display label).
The token is stashed in encrypted storage — it never leaves your workspace and never gets logged. If a write tool later fails because a scope is missing, the error message names the exact scope you need to add, and you can rotate the token in HubSpot without re-entering it here (private app tokens are stable across rotations of any one scope).
4. (Optional) Enable writes
Flip Allow writes on the same settings page when you want the 58 write tools active. Defaults to off — even an operator-recipe token cannot modify HubSpot data until this toggle is on. Each write tool also asks the assistant to confirm with you before firing.
Enrolling a workflow triggers automation chains
hubspot_enroll_contact_in_workflow runs the full step graph on the enrolled contact: sends emails, changes properties, adds to lists, fires internal notifications, and so on. hubspot_send_transactional_email ships real emails to real recipients. hubspot_update_pipeline_stage shifts deal- pipeline forecasts across every open deal in that stage. Verify the target before confirming.5. Multi-portal setups (agencies)
Private app tokens are scoped to a single HubSpot portal — there’s no equivalent of an MCA across portals. If you manage multiple portals (typical for agencies on our Team / Agency tiers), mint one private app token per portal and connect each as its own ShopMCP connection. When two or more are active, every hubspot_* tool gets a store parameter that targets a specific portal — primary is the default.
6. Sensitive-Data portals
When a HubSpot portal has Sensitive Data turned on (Settings → Privacy & Consent → Sensitive Data), HubSpot’s API blocks engagement objects (calls, emails, meetings, notes, tasks) entirely — every read returns 403. Our activity tools register universally; they fail cleanly with a “Sensitive Data restriction” error message at call time rather than going silently missing. CRM object tools, marketing tools, and CMS tools are unaffected.
Our coverage pledge
@shopmcp/hubspot-mcpand bump it on a quarterly cadence in line with HubSpot’s release calendar. If a capability you need is on HubSpot’s API but not yet wrapped in a ShopMCP tool, email us — webhooks subscribe / unsubscribe and direct multipart file upload are already on the roadmap behind v2 OAuth and a multipart-capable client respectively.
