Skip to main content
Glama

Import from HubSpot

import_from_hubspot
Idempotent

Import a HubSpot account: companies, contacts (linked to their company), deals (stage, amount, currency, close date, and the company and contact they belong to) and notes (on their contact's timeline, else added to their deal or company). Needs a private app access token. Make one in HubSpot under Settings > Integrations > Service Keys, with the read scopes crm.objects.companies.read, crm.objects.contacts.read and crm.objects.deals.read; a private app's token works too (Development > Legacy apps > the app > Auth tab). HubSpot makes no new private apps since 26 October 2026. Called without its token, it answers at once with a link for the owner, who types the token on a Conecto page, so it never passes through the chat (from_a_terminal does the same from a terminal); account.credential_added says when the import started, with its call_id. Wrong credentials are refused before anything is reserved or charged; the token is kept only encrypted while the import runs, then erased. Contacts match existing ones by email, companies by domain, then name. Runs in the background for up to 15 minutes and imports up to max_records records; when more remain, the result has next_cursor: call again with the same arguments plus next_cursor to continue. Running it again never duplicates anything: changed records are updated, unchanged ones skipped. Unchanged records are free, and 1,000 imported records cost $1. max_records x $0.001 is reserved while it runs and only what was imported is charged; lower max_records if your balance is smaller. Costs $0.001 per record imported (created or updated); nothing if none are found. Runs in the background: the reply has a call_id; poll it with the account_get_call tool or GET /v1/calls/.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "import_from_hubspot"
  }
}

Input Schema

NameRequiredDescriptionDefault
max_recordsNoThe most records this run may create or update (and reserve $0.001 each for).
next_cursorNoThe next_cursor a previous run of this import returned, to continue where it stopped.
access_tokenNoThe HubSpot private app access token (starts with pat-). Leave it out to get the link instead.
default_currencyNoThe currency of deal amounts that name none (HubSpot leaves it blank when the account has a single currency).USD

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / access_token / description
      Previous value: -"The HubSpot private app access token (starts with pat-)."New value: +"The HubSpot private app access token (starts with pat-). Leave it out to get the link instead."
    • changedInput schema / required
      Previous value: -[
      -  "access_token"
      -]New value: +[]
  2. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations (openWorld/readOnly false/idempotent/destructive false), it discloses the things only the description can: required read scopes and the HubSpot app-creation path, the deprecation date for new private apps, that wrong credentials are refused before any reservation or charge, that the token is held only encrypted for the duration and then erased, and a precise billing model with a reservation and refund of the unused portion. It also confirms idempotency semantics (changed records updated, unchanged skipped) — matching idempotentHint rather than contradicting it.

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

Conciseness3/5

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

The content is front-loaded well — what is imported comes first — but the pricing is restated three times (1,000 records = $1, $0.001 per record, max_records x $0.001 reserved) and the 15-minute background run is stated twice. As one dense paragraph it is also hard to scan for an agent skimming for the auth or cost fact.

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?

With no output schema, the description does the heavy lifting: it describes the reply shape (call_id, next_cursor), the async polling route (account_get_call or GET /v1/calls/<id>), the ordering guarantees on matching, and the full cost surface. The only real gap is that the sibling import_status tool for monitoring progress is never mentioned, leaving the agent to infer it.

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?

Schema coverage is 100%, so baseline is 3; the description earns extra by explaining the trade-off behind max_records (drives the held reservation, so lower it on a thin balance) and the exact cursor protocol (re-send the same arguments plus next_cursor), which the schema's terse cursor description only implies. It does not clarify default_currency beyond what the schema already says.

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 first sentence names a concrete verb (Import) and enumerates exactly which HubSpot objects are pulled (companies, contacts, deals with field detail, notes) and how they are linked. That is far more specific than the sibling connectors (hubspot_connect, hubspot_create) and makes the tool's identity unmistakable.

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 clearly frames the two invocation paths: pass a token, or call without one to get a hosted link the owner fills in on a Conecto page, and it names from_a_terminal as the terminal equivalent. It also states the continuation procedure (call again with the same arguments plus next_cursor). It does not explicitly say when to prefer this over hubspot_connect or import_from_pipedrive, so it stops short of full alternative routing.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources