All MCP servers

HubSpot MCP server

Contacts, companies, deals, and tickets in your HubSpot CRM, connected with a private app access token.

How it connects

New to MCP? What is an MCP server?

Runs on
Statio's runtime
Connects with
Credentials you paste in once: Private App Access Token
May connect to
api.hubspot.com
Category
CRM

Checked October 16, 2026 against the tools/list of @hubspot/mcp-server 0.4.0

What it does

@hubspot/mcp-server is HubSpot's own package, released as a beta under its Early Adopter Program terms. It reads and writes CRM records (contacts, companies, deals, tickets and the other standard objects, plus custom objects), links records to each other, adds notes and tasks, and reads workflows. It authenticates with a private app access token, so it acts as that app across the whole account and not as any one user.

Tools

Version 0.4.0 lists 21 tools, and every one sets a read-only hint, which the last column follows. None of them delete or archive records.

ToolWhat it doesReads or changes
hubspot-get-user-detailsChecks the token and returns the user, hub and app IDs, the token's granted scopes and owner details. HubSpot tells agents to call it first.Reads
hubspot-list-objectsA page of records of one object type, with chosen properties and associations.Reads
hubspot-search-objectsFiltered search across one object type, with sorts and filter groups.Reads
hubspot-batch-read-objectsUp to 100 records by ID in one call, optionally with property history.Reads
hubspot-batch-create-objectsCreates up to 100 records of one type in one call.Changes
hubspot-batch-update-objectsUpdates properties on up to 100 existing records in one call.Changes
hubspot-get-schemasCustom object schemas in the account and their object type IDs.Reads
hubspot-list-propertiesEvery property defined on an object type. HubSpot warns the response is large.Reads
hubspot-get-propertyOne property's type, options and settings.Reads
hubspot-create-propertyAdds a custom property to an object type for the whole account.Changes
hubspot-update-propertyChanges a custom property's label, type, field type, options or group.Changes
hubspot-get-association-definitionsValid association types between two object types.Reads
hubspot-list-associationsRecords linked to one record, such as a company's deals.Reads
hubspot-batch-create-associationsLinks records across object types in bulk.Changes
hubspot-create-engagementCreates a note or a task on contacts, companies, deals or tickets.Changes
hubspot-get-engagementOne note or task by ID.Reads
hubspot-update-engagementEdits an existing note or task.Changes
hubspot-list-workflowsA page of the account's workflows.Reads
hubspot-get-workflowOne workflow's actions, enrollment criteria and schedule.Reads
hubspot-get-linkBuilds links to records and list pages in the HubSpot UI. Makes no API call.Reads
hubspot-generate-feedback-linkReturns a link for sending HubSpot feedback about the MCP tools.Reads

Set it up

Both setups need a private app token. You must be a super admin. In HubSpot, go to Development, then Legacy apps (older accounts show Settings > Integrations > Private Apps). Click Create legacy app, pick Private, name it, and add scopes on the Scopes tab. After you create it, the token is on the Auth tab under Show token. It starts with pat-.

Scopes are where most of the safety comes from, because HubSpot refuses any call the token isn't scoped for, whatever your MCP client allows. HubSpot's own README suggests starting read-only. A reasonable read-only set:

  • crm.objects.contacts.read, crm.objects.companies.read, crm.objects.deals.read, crm.objects.tickets.read
  • crm.objects.owners.read, so records can be matched to people
  • crm.schemas.contacts.read, crm.schemas.companies.read, crm.schemas.deals.read for the property tools
  • crm.objects.custom.read and crm.schemas.custom.read if you use custom objects (Enterprise only)
  • automation for the two workflow tools (Professional or Enterprise only)

Add a .write scope only for the object an agent has to change. crm.schemas.<object>.write is what lets hubspot-create-property and hubspot-update-property work, so leave it off unless you mean that. If a call fails on scopes, hubspot-get-user-details lists what the token actually has. The full list is in HubSpot's scopes reference.

Claude Code, directly:

bash
claude mcp add hubspot -e PRIVATE_APP_ACCESS_TOKEN=pat-na1-your-token -- npx -y @hubspot/mcp-server@0.4.0

Cursor, directly, in ~/.cursor/mcp.json or .cursor/mcp.json:

json
{
  "mcpServers": {
    "hubspot": {
      "command": "npx",
      "args": ["-y", "@hubspot/mcp-server@0.4.0"],
      "env": {
        "PRIVATE_APP_ACCESS_TOKEN": "${env:HUBSPOT_PRIVATE_APP_TOKEN}"
      }
    }
  }
}

The client tutorials, How to add MCP servers to Claude Code and How to set up MCP servers in Cursor, explain config scopes and how to keep the token out of files you commit.

Through Statio: install HubSpot from the catalog, paste the token under the server's Credentials, and grant tools under Permissions. A new server has no grants, so nobody can call it until you add some. The desktop app then writes your client configs. The manual entry is the local proxy URL with the server name from your dashboard, http://127.0.0.1:7777/hubspot/mcp, added in Claude Code with claude mcp add --transport http hubspot <url> or as a "url" in Cursor. Tools missing after that? Start a fresh session, then work through How to debug an MCP server that won't connect.

What to hold back

Think about who reads the CRM after the agent does. Sales reps forecast from deal stages and amounts, marketing segments on lifecycle stage, and other integrations sync from the same fields. A wrong write spreads.

hubspot-batch-update-objects is the riskiest tool here. One call can set a property on 100 records. An agent asked to "close out the stale deals" can move a hundred of them to closed lost, reassign owners, or blank a field it misread. HubSpot keeps property history, so you can see the old values, but there's no tool here to put them back. A research or account-summary agent needs none of the seven write tools.

hubspot-create-property and hubspot-update-property change the account's data model, so they affect every record of that type and everyone using the account. Changing an enumeration's options or a property's field type can break forms, reports and workflows that depend on it. No agent doing day-to-day CRM work should hold them. Keep the schema write scopes off the token as well.

hubspot-batch-create-objects and hubspot-batch-create-associations cause quieter damage. A support agent that creates a contact for every email it reads fills the CRM with duplicates. A contact linked to the wrong company shows up in that company's timeline and in any report grouped by company.

hubspot-create-engagement is the write most support or sales-assist agents can reasonably have, since notes and tasks don't overwrite anything. Tasks do land in an owner's queue, so an agent that loops can bury a rep's task list. Grant it on its own, without the batch tools.

Records arrive in the agent's context from outside sources: form fills, imported lists, ticket text written by customers. Any of these can carry instructions aimed at the agent. Pairing the search tools with the batch writes is what turns that into changed data.

With Statio you grant each tool separately, so the same server can give one agent the reads and another the reads plus hubspot-create-engagement. MCP permissions covers how grants and denies combine.

Questions

Yes, two. @hubspot/mcp-server is HubSpot's package, which this catalog entry runs with a private app token. HubSpot also hosts a remote server at mcp.hubspot.com that signs in with OAuth through a user-level app you create on HubSpot's developer platform.

Not in 0.4.0. It can create and update records, properties, associations, notes and tasks, but no tool deletes or archives anything.

Yes. Give the private app only .read scopes and HubSpot rejects every write, whichever tools your client exposes. Granting only the read tools in Statio keeps the write tools out of the agent's list as well.

No fixed expiry. HubSpot recommends rotating it every six months and emails super admins once a token is more than 180 days old. Rotating gives you the choice to expire the old token now or in 7 days.

What Statio adds

  • You choose which of its tools each agent may call. A tool you hold back is removed from that agent's tool list, and a call to it is refused.
  • The credentials stay encrypted in Statio, so they never sit in an agent config file.
  • Every call is recorded with the agent that made it, when, how long it took and whether it succeeded.
  • The outbound list above is enforced outside the server's container, so it cannot reach any other host.

Lock down your first tool in minutes.

Three MCP servers, one of them hosted, and 10,000 calls a month, free and without a card. If you outgrow it the next plan is $19.

Two steps: create your account, then install the desktop app on each machine that runs an AI client.