Skip to main content
Glama
devender

hubspot-multi-mcp

by devender

hubspot-multi-mcp

Talk to all your HubSpot portals from Claude — at once, by name.

A small, local, read-only MCP server that connects the Claude Desktop app to as many HubSpot portals as you want (Sales, Marketing, an acquired brand, an EU account, each of your clients…). You name each portal; then just say "in the sales hubspot, find…" and Claude uses the right one. It runs on your own computer with your own read-only keys — nothing is hosted and no credentials are shared.

Unofficial. Not affiliated with, or endorsed by, HubSpot, Inc. "HubSpot" is a trademark of its owner and is used here only to describe what this tool connects to.


Why this exists

HubSpot's own connector is one account per connection — there's no supported way to point a single Claude connection at two portals, and Claude won't let you add the same connector twice to get around it. If your company runs more than one HubSpot portal, you're stuck.

This is the practical way around it: a tiny server that runs on your machine, talks to all your portals with your own read-only keys, and shows up as a HubSpot tool inside Claude. It can even search every portal at once and tell you which one a record lives in — something a one-account connector simply can't do.

Related MCP server: HubSpot MCP Server by CData

What you get

Read-only tools, each targeting a portal by the name you gave it:

Tool

What it does

hubspot_list_instances

Show which portals are connected + their account ids

hubspot_list_objects

List object types in a portal — standard and custom objects

hubspot_describe_object

List the fields/properties of an object type

hubspot_search

Search a CRM object (contacts / companies / deals / tickets / custom)

hubspot_get

Fetch a single record by id

hubspot_list_owners

List CRM owners (users)

hubspot_find_across

Search every connected portal at once and report which matched

Read-only by design — the server only ever issues read calls, so it cannot create, edit, or delete anything, even if a key had write permission.


Quick start (about 5 minutes)

You need: a Mac or Windows PC, the Claude Desktop app, Node.js 18+ (check with node --version; if it's missing, install the LTS from https://nodejs.org), and a read-only HubSpot token for each portal (how to get one is below).

  1. Open a terminal (macOS: Terminal app; Windows: PowerShell).

  2. Run setup — this one command does everything (no download, no npm install):

    npx hubspot-multi-mcp setup

    For a permanent install that always loads, run npm install -g hubspot-multi-mcp first, then hubspot-multi-mcp setup.

  3. Name each portal and paste its token when asked (the token is hidden as you paste — that's expected). Repeat for as many portals as you have; press Enter on the name to finish. Setup checks each token and saves them privately on your computer.

  4. Fully quit Claude Desktop (macOS: Cmd+Q, not just the window; Windows: right-click the tray icon → Quit) and reopen it.

  5. Try it — ask Claude:

    "List my hubspot portals." then "In the sales hubspot, find the contact for jane@example.com." or, when you're not sure which portal has it: "Find acme.com across all my hubspots."

Check it's working any time: npx hubspot-multi-mcp verify (prints the portals it can reach; no secrets shown). Add or change a portal: run npx hubspot-multi-mcp setup again.


How to get a read-only HubSpot token (one per portal)

Do this in each HubSpot portal you want to connect. You need to be an admin of that portal (or ask one to do it for you).

  1. In HubSpot, go to Settings → Integrations → Private Apps → Create a private app.

  2. Name it something like claude-readonly.

  3. On the Scopes tab, grant read-only scopes only (no .write):

    • crm.objects.contacts.read, crm.objects.companies.read, crm.objects.deals.read

    • crm.objects.owners.read (to see record owners), and tickets read if you use tickets

    • crm.schemas.contacts.read / .companies.read / .deals.read (so field discovery works)

    • (optional) the account-info read scope — only needed to display the portal id

  4. Create the app and copy its access token (starts with pat-…). That's what you paste into setup. Keep it safe — treat it like a password.

Granting only read scopes means the token physically cannot change anything, which pairs with this server being read-only by design.


How your keys are handled (security)

  • Read-only by construction — there is no create/update/delete code path in this tool.

  • Your tokens are stored at ~/.config/hubspot-multi-mcp/portals.json (file mode 600, readable only by you), outside the package — never committed, never uploaded, never printed back.

  • Tokens are redacted from every error message, so a key can't leak into a Claude transcript.

  • Nothing is hosted. The only network calls are read requests from your machine to HubSpot.


Using more than one portal

Every request picks a portal by name. If you only set up one portal, you don't have to name it — it's the default. With several, just say which one ("in the marketing hubspot…"), or let Claude search them all with hubspot_find_across. Custom objects work too: ask Claude to "list the objects in the sales hubspot" and it'll show your custom object types, which you can then search like any other.

Troubleshooting

  • The tool doesn't appear in Claude → make sure you fully quit and reopened Claude Desktop (Cmd+Q on macOS). A running app only loads MCP servers at startup.

  • Server won't start / "spawn ENOENT" → the Node.js used at setup was moved or uninstalled (common if you later switch Node versions with nvm/volta/fnm). Re-run npx hubspot-multi-mcp setup to re-pin it.

  • A token "did not work" → wrong portal, or missing read scopes. Re-issue the private-app token with the read scopes above and run setup again.

For teams (operator guide)

This uses per-user read-only tokens: an admin mints them, each person runs setup themselves. No keys are ever shared in chat.

  1. In each portal, create a read-only private app per person (scopes above); copy the pat-… token.

  2. Send each person their tokens securely — e.g. a 1Password share restricted to their email, with an expiration. Never paste a token into Slack or email.

  3. Have them follow Quick start above.

  4. To off-board someone: delete their private app in HubSpot. Tokens are independent, so revoking one person affects no one else.

Run from source (optional, for developers)

git clone https://github.com/devender/hubspot-multi-mcp
cd hubspot-multi-mcp
npm install
npm run setup     # same interactive setup; registers a local-path launcher

License

MIT — see LICENSE.

Available Tools

7 tools
hubspot_describe_objectA

List the properties (fields) of a CRM object type in a portal, so you know what to search on and what to request. READ-ONLY.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectNoCRM object type: contacts, companies, deals, tickets, or a custom object name. Call hubspot_list_objects to see custom object types in a portal.contacts
instanceYesWhich HubSpot portal to use (none configured yet — run `npx hubspot-multi-mcp setup`).

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly says 'READ-ONLY', which is important, but it does not mention anything else about behavior, such as errors for invalid object names, pagination, or response structure. The disclosure is correct but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one compact sentence, front-loaded with the action and resource, and ends with the clearly marked 'READ-ONLY' note. Every word contributes value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward introspection tool with two fully documented parameters, the description covers the essential context: what it lists and why an agent would use it. The lack of an output schema and explicit return format is a minor gap given the tool's simplicity and low risk.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already fully documented in the input schema. The description does not add parameter-level meaning beyond the schema, which is acceptable but does not earn a higher score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and the resource ('properties/fields of a CRM object type'), and explains the purpose: to know what to search on and what to request. This clearly distinguishes it from sibling tools like hubspot_list_objects, which list object types themselves.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'so you know what to search on and what to request' conveys when to use this tool: before constructing searches or get requests. The object parameter also directs users to hubspot_list_objects for discovering custom object types, adding useful cross-tool guidance. It does not explicitly say when not to use it, but the intended context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hubspot_find_acrossA

Search a free-text query across ALL connected HubSpot portals at once, and report which portal(s) matched. READ-ONLY. Use this when the user does not know which portal a record lives in (e.g. "find jane@example.com in any of my hubspots").

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax records per portal (default 10).
queryYesFree-text search string (name, email, company/domain).
objectNoCRM object type: contacts, companies, deals, tickets, or a custom object name. Call hubspot_list_objects to see custom object types in a portal.contacts

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavior. It explicitly states READ-ONLY and explains that the tool reports which portals matched, giving useful behavioral context. It stops short of describing edge cases such as no matches or error behavior, but for a read-only search this is reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, with no wasted words. The core behavior is front-loaded first, followed by a practical usage guideline and example, making it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with three clearly schema-documented parameters and no output schema, the description covers the essential context: what it searches, the read-only nature, and what it reports. It could add more detail about the response shape or pagination, but the description is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all three parameters fully, covering query, limit, and object with defaults, ranges, and valid values. Since schema coverage is 100%, the description adds little beyond the tool-level cross-portal behavior, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly names the verb 'Search', the resource 'ALL connected HubSpot portals at once', and the distinctive behavior of reporting which portal(s) matched. It also contrasts implicitly with the sibling hubspot_search by emphasizing cross-portal coverage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit use case: use when the user does not know which portal a record lives in, with a concrete example. It does not explicitly name an alternative tool or state when not to use it, but the context is clear enough for an agent to route appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hubspot_getA

Fetch a single HubSpot record by id from a chosen portal. READ-ONLY.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe record id.
objectNoCRM object type: contacts, companies, deals, tickets, or a custom object name. Call hubspot_list_objects to see custom object types in a portal.contacts
instanceYesWhich HubSpot portal to use (none configured yet — run `npx hubspot-multi-mcp setup`).
propertiesNoWhich properties to return.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It explicitly states READ-ONLY, which is valuable, but it does not disclose behavior on missing records, output format, or portal/auth setup issues beyond what the schema mentions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence that front-loads the core action and includes the key safety note. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple single-record fetch, but with no output schema or annotations it leaves some gaps: no guidance on choosing between sibling tools and no mention of response/error behavior. The schema covers parameters well, so overall it is functional but minimal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond what the schema already provides for id, object, instance, and properties.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Fetch'), a specific resource ('a single HubSpot record by id'), and the scope ('from a chosen portal'). It clearly distinguishes this from sibling tools that list or search multiple records.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The by-id nature of the lookup implies it should be used when an ID is known, but the description does not explicitly mention alternatives such as hubspot_search or hubspot_find_across, nor does it state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hubspot_list_instancesA

List which HubSpot portals are connected (by the names you gave them) and their account ids. READ-ONLY. Call this first to see what portals are available.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It explicitly declares 'READ-ONLY' and specifies the kinds of information returned (portal names and account ids). This goes beyond the empty schema and is especially valuable for a no-parameter tool where side effects are a primary concern.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. The core action, return contents, safety hint, and usage guidance are all included efficiently and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool with no output schema, the description fully conveys what the agent needs: the purpose, the data returned, the read-only nature, and the recommended first step. Nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema already covers everything. The description appropriately focuses on return content rather than parameter details. This matches the baseline for a no-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'List which HubSpot portals are connected' and indicates the key return fields: names and account ids. It clearly differentiates from sibling tools like hubspot_list_objects and hubspot_list_owners by focusing on portals/instances rather than objects or owners.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs the agent to 'Call this first to see what portals are available,' establishing a clear usage context. It does not explicitly name alternatives or state when not to use it, but the directive is strong enough to guide selection among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hubspot_list_objectsA

List the CRM object types available in a portal — the four standard ones plus any CUSTOM objects defined in that portal. READ-ONLY. Use this before searching a non-standard object.

ParametersJSON Schema
NameRequiredDescriptionDefault
instanceYesWhich HubSpot portal to use (none configured yet — run `npx hubspot-multi-mcp setup`).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden and does state 'READ-ONLY' plus the output scope (standard and custom object types). It does not describe error cases or exact response shape, but for a simple read-only list operation this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two compact sentences with no filler: the first states the action and scope, the second adds the read-only flag and a practical usage pointer. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with no output schema and no annotations, this description is complete: it states purpose, return scope, safety, and a concrete use case. An agent has enough to decide when and how to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, instance, is fully described in the schema with 100% coverage, so the baseline is 3. The description adds no additional parameter-level meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource and behavior — 'List the CRM object types available in a portal' — and clarifies the standard-plus-custom distinction, so an agent can tell it apart from sibling tools like search/get/describe without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit usage guidance: 'Use this before searching a non-standard object,' which tells the agent when this tool is the right prerequisite. It does not explicitly name alternatives or exclusions, so it stops short of a full routing explanation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hubspot_list_ownersA

List CRM owners (users) in a chosen portal, to resolve owner ids to people. READ-ONLY.

ParametersJSON Schema
NameRequiredDescriptionDefault
instanceYesWhich HubSpot portal to use (none configured yet — run `npx hubspot-multi-mcp setup`).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It clearly marks the operation as READ-ONLY, which is a key safety trait, and specifies that it operates on a chosen portal. It does not detail output shape or edge cases, but for a simple list operation this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences that front-load the action and purpose, then add the read-only safety note. Every word adds value, with no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, one required parameter, and no output schema, the description provides enough context for an agent to invoke it correctly: it states what is listed, why it might be used, and that it is read-only. A brief note about return format would make it fully complete, but it is not a major gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single required parameter 'instance' already has a clear description explaining which portal to use and the setup command. The tool description adds only the phrase 'chosen portal', which adds minimal meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and a specific resource ('CRM owners (users)') and adds the intended use case ('to resolve owner ids to people'). This clearly distinguishes it from sibling tools like hubspot_list_objects and hubspot_list_instances.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when this tool is useful: when you need to resolve owner ids to people. It does not explicitly name alternatives or exclusions, but the purpose statement is enough to route an agent toward this tool for owner-related lookups.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 7 tool updatesv0.1.0
    • First observedhubspot_describe_object
    • First observedhubspot_find_across
    • First observedhubspot_get
    • First observedhubspot_list_instances
    • First observedhubspot_list_objects
    • First observedhubspot_list_owners
    • First observedhubspot_search

TDQS

A4.1/5.0
Disambiguation5/5

Each tool has a clear and distinct role: listing portals, listing object types, describing properties, searching, fetching by ID, listing owners, and cross-portal search. Even the similar-looking search and get tools are cleanly separated by query-based lookup vs. ID-based retrieval.

Naming Consistency4/5

All tools share the hubspot_ prefix and use lowercase underscore-separated names, which is consistent. There is minor inconsistency because some names include an object (list_instances, describe_object) while others are generic verbs (search, get), and find_across doesn't follow the same verb_noun shape as the rest.

Tool Count5/5

Seven tools is an appropriate size for a HubSpot multi-portal exploration server. Each tool covers a necessary part of the discovery and retrieval workflow without redundancy or bloat.

Completeness4/5

The tool set is well-rounded for read-only HubSpot CRM exploration: it covers discovery, schema inspection, searching, fetching, owner resolution, and cross-portal lookup. The only notable gap is that there is no direct way to search all object types within a single portal at once, though list_objects plus search covers that workflow.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    This read-only MCP Server allows you to connect to HubSpot data from Claude Desktop through CData JDBC Drivers. For full CRUD support, check out the first managed MCP platform: CData Connect AI (https://www.cdata.com/ai/).
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables querying and managing a CRM database through natural language conversations with Claude Desktop.
    -

Latest Blog Posts

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/devender/hubspot-multi-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server