Skip to main content
Glama

A Model Context Protocol (MCP) server implementation for the HubSpot API, providing a standardized interface for accessing and managing CRM data.

Features

  • Complete coverage of the HubSpot CRM API

  • Support for all standard CRM objects (companies, contacts, deals, etc.)

  • Advanced association management with CRM Associations v4

  • Company-specific endpoints with property validation

  • Batch operations for efficient data management

  • Advanced search and filtering capabilities

  • Type-safe parameter validation with Zod

Related MCP server: HubSpot MCP Server

Prerequisites

If you don't have an API key, follow the steps here to obtain an access token. OAuth support is planned as a future enhancement.

Client Configuration

There are several options to configure your MCP client with the server. For hosted/remote server setup, use Smithery's CLI with a Smithery API Key. For local installation, use npx or build from source. Each of these options is explained below.

To add a remote server to your MCP client config.json, run the following command from Smithery CLI:

npx -y @smithery/cli install @shinzo-labs/hubspot-mcp

Enter your HUBSPOT_ACCESS_TOKEN when prompted.

Smithery SDK

If you are developing your own agent application, you can use the boilerplate code here.

NPX Local Install

To install the server locally with npx, add the following to your MCP client config.json:

{
  "mcpServers": {
    "hubspot": {
      "command": "npx",
      "args": [
        "@shinzolabs/hubspot-mcp"
      ],
      "env": {
        "HUBSPOT_ACCESS_TOKEN": "your-access-token-here"
      }
    }
  }
}

Build from Source

  1. Download the repo:

git clone https://github.com/shinzo-labs/hubspot-mcp.git
  1. Install packages (inside cloned repo):

pnpm i
  1. Add the following to your MCP client config.json:

{
  "mcpServers": {
    "hubspot": {
      "command": "node",
      "args": [
        "/path/to/hubspot-mcp/index.js"
      ],
      "env": {
        "HUBSPOT_ACCESS_TOKEN": "your-access-token-here"
      }
    }
  }
}

Config Variables

Variable

Description

Required?

Default

HUBSPOT_ACCESS_TOKEN

Access Token for Hubspot Application

Yes

PORT

Port for Streamable HTTP transport method

No

3000

TELEMETRY_ENABLED

Enable telemetry

No

true

Supported Tools

Core CRM Objects

  • crm_list_objects: List CRM objects with optional filtering and pagination

  • crm_get_object: Get a single CRM object by ID

  • crm_create_object: Create a new CRM object

  • crm_update_object: Update an existing CRM object

  • crm_archive_object: Archive (delete) a CRM object

  • crm_search_objects: Search CRM objects using advanced filters

  • crm_batch_create_objects: Create multiple objects in a single request

  • crm_batch_read_objects: Read multipl objects in a single request

  • crm_batch_update_objects: Update multiple objects in a single request

  • crm_batch_archive_objects: Archive (delete) multiple objects in a single request

Companies

  • crm_create_company: Create a new company with validated properties

  • crm_update_company: Update an existing company

  • crm_get_company: Get a single company by ID

  • crm_search_companies: Search companies with specific filters

  • crm_batch_create_companies: Create multiple companies in a single request

  • crm_batch_update_companies: Update multiple companies in a single request

  • crm_get_company_properties: Get all available company properties

  • crm_create_company_property: Create a new company property

Contacts

  • crm_create_contact: Create a new contact with validated properties

  • crm_update_contact: Update an existing contact's information

  • crm_get_contact: Get a single contact by ID

  • crm_search_contacts: Search contacts with specific filters

  • crm_batch_create_contacts: Create multiple contacts in a single request

  • crm_batch_update_contacts: Update multiple contacts in a single request

  • crm_get_contact_properties: Get all available contact properties

  • crm_create_contact_property: Create a new contact property

Leads

  • crm_create_lead: Create a new lead with validated properties

  • crm_update_lead: Update an existing lead's information

  • crm_get_lead: Get a single lead by ID

  • crm_search_leads: Search leads with specific filters

  • crm_batch_create_leads: Create multiple leads in a single request

  • crm_batch_update_leads: Update multiple leads in a single request

  • crm_get_lead_properties: Get all available lead properties

  • crm_create_lead_property: Create a new lead property

Engagement Management

  • engagement_details_get: Get details of a specific engagement

  • engagement_details_create: Create a new engagement

  • engagement_details_update: Update an existing engagement

  • engagement_details_archive: Archive (delete) an engagement

  • engagement_details_list: List all engagements with filtering

  • engagement_details_get_associated: Get associated engagements

Calls

  • calls_create: Create a new call record

  • calls_get: Get call details

  • calls_update: Update a call record

  • calls_archive: Archive a call

  • calls_list: List all calls

  • calls_search: Search calls

  • calls_batch_create: Create multiple calls

  • calls_batch_read: Read multiple calls

  • calls_batch_update: Update multiple calls

  • calls_batch_archive: Archive multiple calls

Emails

  • emails_create: Create a new email record

  • emails_get: Get email details

  • emails_update: Update an email

  • emails_archive: Archive an email

  • emails_list: List all emails

  • emails_search: Search emails

  • emails_batch_create: Create multiple emails

  • emails_batch_read: Read multiple emails

  • emails_batch_update: Update multiple emails

  • emails_batch_archive: Archive multiple emails

Meetings

  • meetings_create: Create a new meeting

  • meetings_get: Get meeting details

  • meetings_update: Update a meeting

  • meetings_archive: Archive (delete) a meeting

  • meetings_list: List all meetings

  • meetings_search: Search meetings

  • meetings_batch_create: Create multiple meetings

  • meetings_batch_update: Update multiple meetings

  • meetings_batch_archive: Archive multiple meetings

Notes

  • notes_create: Create a new note

  • notes_get: Get note details

  • notes_update: Update a note

  • notes_archive: Archive a note

  • notes_list: List all notes

  • notes_search: Search notes

  • notes_batch_create: Create multiple notes

  • notes_batch_read: Read multiple notes

  • notes_batch_update: Update multiple notes

  • notes_batch_archive: Archive multiple notes

Tasks

  • tasks_create: Create a new task

  • tasks_get: Get task details

  • tasks_update: Update a task

  • tasks_archive: Archive a task

  • tasks_list: List all tasks

  • tasks_search: Search tasks

  • tasks_batch_create: Create multiple tasks

  • tasks_batch_read: Read multiple tasks

  • tasks_batch_update: Update multiple tasks

  • tasks_batch_archive: Archive multiple tasks

Associations and Relationships

  • crm_list_association_types: List available association types

  • crm_get_associations: Get all associations between objects

  • crm_create_association: Create an association

  • crm_archive_association: Archive (delete) an association

  • crm_batch_create_associations: Create multiple associations

  • crm_batch_archive_associations: Archive (delete) multiple associations

Communication Preferences

  • communications_get_preferences: Get contact preferences

  • communications_update_preferences: Update contact preferences

  • communications_unsubscribe_contact: Global unsubscribe

  • communications_subscribe_contact: Global subscribe

  • communications_get_subscription_definitions: Get subscription definitions

  • communications_get_subscription_status: Get status for multiple contacts

  • communications_update_subscription_status: Update status for multiple contacts

Products

  • products_create: Create a product with the given properties and return a copy of the object, including the ID.

  • products_read: Read an Object identified by ID

  • products_update: Perform a partial update of an Object identified by ID. Read-only and non-existent properties will result in an error. Properties values can be cleared by passing an empty string.

  • products_archive: Move an Object identified by ID to the recycling bin.

  • products_list: Read a page of products. Control what is returned via the properties query param. after is the paging cursor token of the last successfully read resource will be returned as the paging.next.after JSON property of a paged response containing more results.

  • products_search: Search products

  • products_batch_create: Create a batch of products

  • products_batch_read: Read a batch of products by internal ID, or unique property values. Retrieve records by the idProperty parameter to retrieve records by a custom unique value property.

  • products_batch_update: Update a batch of products by internal ID, or unique values specified by the idProperty query param.

  • products_batch_archive: Archive a batch of products by ID

Contributing

Contributions are welcomed and encouraged! Please read CONTRIBUTING.md for guidelines on issues, contributions, and contact information.

Data Collection and Privacy

Shinzo Labs collects limited anonymous telemetry from this server to help improve our products and services. No personally identifiable information is collected as part of this process. Please review the Privacy Policy for more details on the types of data collected and how to opt-out of this telemetry.

License

MIT

Available Tools

112 tools
calls_archiveC

Archive (delete) a call record

Inputs: callId (required).

calls_batch_archiveC

Archive (delete) multiple call records in a single request

Inputs: callIds (required).

calls_batch_createC

Create multiple call records in a single request

Inputs: inputs (required).

calls_batch_readC

Read multiple call records in a single request

Inputs: inputs (required).

calls_batch_updateC

Update multiple call records in a single request

Inputs: inputs (required).

calls_createD

Create a new call record

Inputs: properties (required), associations.

calls_getC

Get details of a specific call

Inputs: callId (required), associations, properties.

calls_listC

List all calls with optional filtering

Inputs: after, archived, associations, limit, +1 more.

calls_updateC

Update an existing call record

Inputs: callId (required), properties (required).

communications_get_preferencesC

Get communication preferences for a contact

Inputs: contactId (required), subscriptionId.

communications_get_subscription_definitionsC

Get all subscription definitions for the portal

Inputs: archived.

communications_get_subscription_statusC

Get subscription status for multiple contacts

Inputs: contactIds (required), subscriptionId (required).

communications_subscribe_contactC

Subscribe a contact to all email communications

Inputs: contactId (required), portalSubscriptionLegalBasis, portalSubscriptionLegalBasisExplanation.

communications_unsubscribe_contactC

Unsubscribe a contact from all email communications

Inputs: contactId (required), portalSubscriptionLegalBasis, portalSubscriptionLegalBasisExplanation.

communications_update_preferencesC

Update communication preferences for a contact

Inputs: contactId (required), preferences (required), subscriptionId (required).

communications_update_subscription_statusC

Update subscription status for multiple contacts

Inputs: subscriptionId (required), updates (required).

crm_archive_associationC

Archive (delete) an association between two objects

Inputs: fromObjectId (required), fromObjectType (required), toObjectId (required), toObjectType (required).

crm_archive_objectC

Archive (delete) a CRM object

Inputs: objectId (required), objectType (required).

crm_batch_archive_associationsC

Archive (delete) multiple associations in a single request

Inputs: fromObjectType (required), inputs (required), toObjectType (required).

crm_batch_archive_objectsC

Archive (delete) multiple CRM objects in a single request

Inputs: objectIds (required), objectType (required).

crm_batch_create_associationsC

Create multiple associations in a single request

Inputs: fromObjectType (required), inputs (required), toObjectType (required).

crm_batch_create_companiesC

Create multiple companies in a single request

Inputs: inputs (required).

crm_batch_create_contactsC

Create multiple contacts in a single request

Inputs: inputs (required).

crm_batch_create_leadsC

Create multiple leads in a single request

Inputs: inputs (required).

crm_batch_create_objectsC

Create multiple CRM objects in a single request

Inputs: inputs (required), objectType (required).

crm_batch_read_objectsD

Create multiple CRM objects in a single request

Inputs: objectIds (required), objectType (required), idProperty, properties, +1 more.

crm_batch_update_companiesC

Update multiple companies in a single request

Inputs: inputs (required).

crm_batch_update_contactsC

Update multiple contacts in a single request

Inputs: inputs (required).

crm_batch_update_leadsC

Update multiple leads in a single request

Inputs: inputs (required).

crm_batch_update_objectsC

Update multiple CRM objects in a single request

Inputs: inputs (required), objectType (required).

crm_create_associationC

Create an association between two objects

Inputs: associationTypes (required), fromObjectId (required), fromObjectType (required), toObjectId (required), +1 more.

crm_create_companyC

Create a new company with validated properties

Inputs: properties (required), associations.

crm_create_company_propertyD

Create a new company property

Inputs: fieldType (required), groupName (required), label (required), name (required), +7 more.

crm_create_contactC

Create a new contact with validated properties

Inputs: properties (required), associations.

crm_create_contact_propertyD

Create a new contact property

Inputs: fieldType (required), groupName (required), label (required), name (required), +7 more.

crm_create_leadC

Create a new lead with validated properties

Inputs: properties (required), associations.

crm_create_lead_propertyD

Create a new lead property

Inputs: fieldType (required), groupName (required), label (required), name (required), +7 more.

crm_create_objectD

Create a new CRM object

Inputs: objectType (required), properties (required), associations.

crm_get_associationsC

Get all associations of a specific type between objects

Inputs: fromObjectId (required), fromObjectType (required), toObjectType (required), after, +1 more.

crm_get_companyC

Get a single company by ID with specific properties and associations

Inputs: companyId (required), associations, properties.

crm_get_company_propertiesC

Get all properties for companies

Inputs: archived, properties.

crm_get_contactB

Get a single contact by ID with specific properties and associations

Inputs: contactId (required), associations, properties.

crm_get_contact_propertiesC

Get all properties for contacts

Inputs: archived, properties.

crm_get_leadC

Get a single lead by ID with specific properties and associations

Inputs: leadId (required), associations, properties.

crm_get_lead_propertiesC

Get all properties for leads

Inputs: archived, properties.

crm_get_objectC

Get a single CRM object by ID

Inputs: objectId (required), objectType (required), associations, properties.

crm_list_association_typesC

List all available association types for a given object type pair

Inputs: fromObjectType (required), toObjectType (required).

crm_list_objectsC

List CRM objects of a specific type with optional filtering and pagination

Inputs: objectType (required), after, archived, limit, +1 more.

crm_search_companiesC

Search companies with company-specific filters

Inputs: filterGroups (required), after, limit, properties, +1 more.

crm_search_contactsC

Search contacts with contact-specific filters

Inputs: filterGroups (required), after, limit, properties, +1 more.

crm_search_leadsC

Search leads with lead-specific filters

Inputs: filterGroups (required), after, limit, properties, +1 more.

crm_search_objectsC

Search CRM objects using filters

Inputs: filterGroups (required), objectType (required), after, limit, +2 more.

crm_update_companyC

Update an existing company with validated properties

Inputs: companyId (required), properties (required).

crm_update_contactC

Update an existing contact with validated properties

Inputs: contactId (required), properties (required).

crm_update_leadC

Update an existing lead with validated properties

Inputs: leadId (required), properties (required).

crm_update_objectC

Update an existing CRM object

Inputs: objectId (required), objectType (required), properties (required).

emails_archiveC

Archive (delete) an email record

Inputs: emailId (required).

emails_batch_archiveC

Archive (delete) multiple email records in a single request

Inputs: emailIds (required).

emails_batch_createC

Create multiple email records in a single request

Inputs: inputs (required).

emails_batch_readC

Read multiple email records in a single request

Inputs: inputs (required).

emails_batch_updateC

Update multiple email records in a single request

Inputs: inputs (required).

emails_createD

Create a new email record

Inputs: properties (required), associations.

emails_getC

Get details of a specific email

Inputs: emailId (required), associations, properties.

emails_listC

List all emails with optional filtering

Inputs: after, archived, associations, limit, +1 more.

emails_updateC

Update an existing email record

Inputs: emailId (required), properties (required).

engagement_details_archiveC

Archive (delete) an engagement

Inputs: engagementId (required).

engagement_details_createD

Create a new engagement with details

Inputs: engagement (required), associations, metadata.

engagement_details_getC

Get details of a specific engagement

Inputs: engagementId (required).

engagement_details_get_associatedC

Get all engagements associated with an object

Inputs: objectId (required), objectType (required), activityTypes, endTime, +3 more.

engagement_details_listC

List all engagements with optional filtering

Inputs: activityTypes, endTime, limit, offset, +1 more.

engagement_details_updateC

Update an existing engagement's details

Inputs: engagement (required), engagementId (required), metadata.

meetings_archiveC

Archive (delete) a meeting

Inputs: meetingId (required).

meetings_batch_archiveC

Archive (delete) multiple meetings in a single request

Inputs: meetingIds (required).

meetings_batch_createC

Create multiple meetings in a single request

Inputs: inputs (required).

meetings_batch_updateC

Update multiple meetings in a single request

Inputs: inputs (required).

meetings_createD

Create a new meeting

Inputs: properties (required), associations.

meetings_getC

Get details of a specific meeting

Inputs: meetingId (required), associations, properties.

meetings_listB

List all meetings with optional filtering

Inputs: after, createdAfter, createdBefore, limit, +1 more.

meetings_updateC

Update an existing meeting

Inputs: meetingId (required), properties (required).

notes_archiveC

Archive (delete) a note

Inputs: noteId (required).

notes_batch_archiveC

Archive (delete) multiple notes in a single request

Inputs: noteIds (required).

notes_batch_createC

Create multiple notes in a single request

Inputs: inputs (required).

notes_batch_readC

Read multiple notes in a single request

Inputs: inputs (required).

notes_batch_updateC

Update multiple notes in a single request

Inputs: inputs (required).

notes_createC

Create a new note

Inputs: properties (required), associations.

notes_getC

Get details of a specific note

Inputs: noteId (required), associations, properties.

notes_listC

List all notes with optional filtering

Inputs: after, archived, associations, limit, +1 more.

notes_updateD

Update an existing note

Inputs: noteId (required), properties (required).

products_archiveC

Move an Object identified by ID to the recycling bin.

Inputs: productId (required).

products_batch_archiveC

Archive (delete) a batch of products by ID

Inputs: productIds (required).

products_batch_createC

Create a batch of products

Inputs: inputs (required).

products_batch_readC

Read a batch of products by internal ID, or unique property values. Retrieve records by the idProperty parameter to retrieve records by a custom unique value property.

Inputs: productIds (required), properties (required), propertiesWithHistory (required), idProperty.

products_batch_updateC

Update a batch of products by internal ID, or unique values specified by the idProperty query param.

Inputs: inputs (required).

products_createC

Create a product with the given properties and return a copy of the object, including the ID.

Inputs: properties (required).

products_listB

Read a page of products. Control what is returned via the properties query param. after is the paging cursor token of the last successfully read resource will be returned as the paging.next.after JSON property of a paged response containing more results.

Inputs: after, limit, properties.

products_readC

Read an Object identified by ID

Inputs: productId (required), associations, properties.

products_updateB

Perform a partial update of an Object identified by ID. Read-only and non-existent properties will result in an error. Properties values can be cleared by passing an empty string.

Inputs: productId (required), properties (required).

tasks_archiveC

Archive (delete) a task

Inputs: taskId (required).

tasks_batch_archiveC

Archive (delete) multiple tasks in a single request

Inputs: taskIds (required).

tasks_batch_createC

Create multiple tasks in a single request

Inputs: inputs (required).

tasks_batch_readC

Read multiple tasks in a single request

Inputs: inputs (required).

tasks_batch_updateC

Update multiple tasks in a single request

Inputs: inputs (required).

tasks_createD

Create a new task

Inputs: properties (required), associations.

tasks_getC

Get details of a specific task

Inputs: taskId (required), associations, properties.

tasks_listC

List all tasks with optional filtering

Inputs: after, archived, associations, limit, +1 more.

tasks_updateC

Update an existing task

Inputs: properties (required), taskId (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.7/5.0

    Scored across 112 tools

    Disambiguation4/5

    Tools are well-differentiated by resource type (calls, emails, CRM objects, etc.) and action (create, get, update, archive, search), with clear boundaries. Minor ambiguity exists between 'list' and 'search' operations across resources, but descriptions clarify that 'list' retrieves all with optional filtering while 'search' uses specific filters, making them distinguishable.

    Naming Consistency5/5

    Naming follows a highly consistent pattern throughout: resource_action (e.g., calls_create, crm_get_company) with batch operations as resource_batch_action (e.g., emails_batch_update). This verb_noun structure is uniformly applied across all 112 tools, making them predictable and easy to parse.

    Tool Count2/5

    With 112 tools, the count is excessive for a single server, leading to cognitive overload and potential inefficiency. While the tools cover multiple HubSpot domains (CRM, communications, engagements), the sheer volume suggests over-fragmentation, such as having separate batch and single operations for each resource, which could be streamlined.

    Completeness5/5

    The tool set provides comprehensive CRUD and lifecycle coverage across all major HubSpot domains (calls, emails, CRM objects, engagements, meetings, notes, products, tasks). Each resource includes create, get, update, archive, list, and search operations, with batch variants for scalability, ensuring no obvious gaps for agent workflows.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      C
      quality
      C
      maintenance
      Enables interaction with HubSpot CRM through a standardized API interface. Supports managing contacts, companies, deals, engagements, products, and associations with batch operations and advanced search capabilities.
      100
      37 npm
      MIT
    • A
      license
      C
      quality
      D
      maintenance
      Provides standardized access to HubSpot's CRM API for managing contacts, companies, deals, engagements, and other CRM data through comprehensive CRUD operations, batch processing, and advanced search capabilities.
      100
      37 npm
      1
      MIT
    • A
      license
      B
      quality
      F
      maintenance
      MCP server for HubSpot CRM — 33 tools covering contacts, companies, deals, pipelines, lists, marketing emails, forms, workflows, and properties.
      30
      14 npm
      MIT