Shop MCP

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.

Capability comparison — shaded rows are where ShopMCP extends or replaces HubSpot's MCP
CategoryHubSpot's official MCPShopMCP HubSpotWhy 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 verb24 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 objectsImplicit 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.
PropertiesRead-onlyRead + create + update + per-object property history (PR #162 + #178)Schema CRUD is how operators bulk-clean stale CRM hygiene.
Pipelines / stagesNot exposedList 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 / segmentsRead-only, genericRead + 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 manageTyped list + create + update per activity type (PR #164 + #178)Both gracefully refuse on Sensitive-Data portals via 403.
Marketing emailsNot exposedList / get / get_stats / send transactional / schedule (PR #167 + #180)Send-window optimisation, deliverability triage, transactional sends.
FormsNot exposedList / get / list submissions / submit / create (PR #167 + #180)Lead capture + submission audit + backfill imports.
Marketing eventsVia generic manage associationTyped list / get / list_attendees by attribution state (PR #168)Webinar / event ROI playbooks.
Workflows / AutomationNot exposedList / get / enroll / unenroll contacts (PR #168 + #180)Automation health + workflow triage from chat.
CMS pages (blog / landing / site)Read-only via genericList / get / update + publish via state flag (PR #169 + #180)Content ops + publish workflows for portfolio brands.
HubDBNot exposedList tables / list rows / get row / create row / update row / publish table (PR #170 + #180)Programmatic content management — major coverage gap for HubSpot operators.
URL redirectsNot exposedList / get (PR #170)Migration audits + broken-redirect detection.
Files APINot exposedSearch / get / import-from-URL (PR #170 + #180)Media management for content + email.
Behavioral eventsNot exposedList event definitions / complete event for a contact (PR #182)Custom-event tracking for personalisation + workflow triggers.
Conversations InboxNot exposedList threads / get thread / list messages / list channels / list inboxes (PR #182)Service Hub triage + response-quality review.
Campaigns + analytics4 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 playbooksNot available4 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≈ 12137 + 4 cross-integration playbooks11.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.*.read set across contacts, companies, deals, tickets, products, line_items, quotes, invoices, custom; plus crm.schemas.*.read, crm.lists.read, and tickets. Registers all 79 read tools.
  • + Marketing operator — add content, marketing-email, forms, files, hubdb, automation, and marketing.campaigns.read. Unlocks Marketing Hub + CMS Hub reads (Marketing Hub Pro/Enterprise required for some endpoints).
  • + Operator with writes — add the matching *.write scopes 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

Private app scopes gate what’s physically possible upstream. If you mint a read-only token, no amount of ShopMCP configuration will let a write succeed — HubSpot will return a 403. ShopMCP surfaces that error cleanly (“token is missing X scope”) rather than failing silently.

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

The region prefix tells you which HubSpot data centre your portal lives in (NA = North America, EU = Europe, etc.). It’s informational only — every API call goes through 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

HubSpot moved to date-based API versioning at the 2026-03 GA. We pin the version in @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.