HubSpot MCP
Provides comprehensive access to HubSpot's CRM API, enabling management of CRM objects (companies, contacts, deals, leads), engagement records (calls, emails, meetings, notes, tasks), product management, association management between objects, and communication preferences with support for search, batch operations, and property management.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@HubSpot MCP find contacts from the last 7 days with deal value over $10k"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
HubSpot MCP
A Model Context Protocol (MCP) 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
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.
Smithery Remote Server (Recommended)
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-mcpEnter 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
Download the repo:
git clone https://github.com/shinzo-labs/hubspot-mcp.gitInstall packages (inside cloned repo):
pnpm iAdd 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 |
| Access Token for Hubspot Application | Yes | |
| Port for Streamable HTTP transport method | No |
|
Supported Tools
Core CRM Objects
Basic Object Operations
crm_list_objects: List CRM objects with optional filtering and paginationcrm_get_object: Get a single CRM object by IDcrm_create_object: Create a new CRM objectcrm_update_object: Update an existing CRM objectcrm_delete_object: Delete a CRM object
Search and Batch Operations
crm_search_objects: Search CRM objects using advanced filterscrm_batch_create_objects: Create multiple objects in a single requestcrm_batch_update_objects: Update multiple objects in a single requestcrm_batch_delete_objects: Delete multiple objects in a single request
CRM Records Management
Companies
Basic Operations:
crm_create_company: Create a new company with validated propertiescrm_update_company: Update an existing companycrm_get_company: Get a single company by IDcrm_search_companies: Search companies with specific filters
Batch Operations:
crm_batch_create_companies: Create multiple companies in a single requestcrm_batch_update_companies: Update multiple companies in a single request
Property Management:
crm_get_company_properties: Get all available company propertiescrm_create_company_property: Create a new company property
Contacts
Basic Operations:
crm_create_contact: Create a new contact with validated propertiescrm_update_contact: Update an existing contact's informationcrm_get_contact: Get a single contact by IDcrm_search_contacts: Search contacts with specific filters
Batch Operations:
crm_batch_create_contacts: Create multiple contacts in a single requestcrm_batch_update_contacts: Update multiple contacts in a single request
Property Management:
crm_get_contact_properties: Get all available contact propertiescrm_create_contact_property: Create a new contact property
Leads
Basic Operations:
crm_create_lead: Create a new lead with validated propertiescrm_update_lead: Update an existing lead's informationcrm_get_lead: Get a single lead by IDcrm_search_leads: Search leads with specific filters
Batch Operations:
crm_batch_create_leads: Create multiple leads in a single requestcrm_batch_update_leads: Update multiple leads in a single request
Property Management:
crm_get_lead_properties: Get all available lead propertiescrm_create_lead_property: Create a new lead property
Engagement Management
Engagement Details
Basic Operations:
engagement_details_get: Get details of a specific engagementengagement_details_create: Create a new engagementengagement_details_update: Update an existing engagementengagement_details_delete: Delete an engagementengagement_details_list: List all engagements with filteringengagement_details_get_associated: Get associated engagements
Calls
Basic Operations:
calls_create: Create a new call recordcalls_get: Get call detailscalls_update: Update a call recordcalls_archive: Archive a callcalls_list: List all callscalls_search: Search calls
Batch Operations:
calls_batch_create: Create multiple callscalls_batch_read: Read multiple callscalls_batch_update: Update multiple callscalls_batch_archive: Archive multiple calls
Emails
Basic Operations:
emails_create: Create a new email recordemails_get: Get email detailsemails_update: Update an emailemails_archive: Archive an emailemails_list: List all emailsemails_search: Search emails
Batch Operations:
emails_batch_create: Create multiple emailsemails_batch_read: Read multiple emailsemails_batch_update: Update multiple emailsemails_batch_archive: Archive multiple emails
Meetings
Basic Operations:
meetings_create: Create a new meetingmeetings_get: Get meeting detailsmeetings_update: Update a meetingmeetings_delete: Delete a meetingmeetings_list: List all meetingsmeetings_search: Search meetings
Batch Operations:
meetings_batch_create: Create multiple meetingsmeetings_batch_update: Update multiple meetingsmeetings_batch_archive: Archive multiple meetings
Notes
Basic Operations:
notes_create: Create a new notenotes_get: Get note detailsnotes_update: Update a notenotes_archive: Archive a notenotes_list: List all notesnotes_search: Search notes
Batch Operations:
notes_batch_create: Create multiple notesnotes_batch_read: Read multiple notesnotes_batch_update: Update multiple notesnotes_batch_archive: Archive multiple notes
Tasks
Basic Operations:
tasks_create: Create a new tasktasks_get: Get task detailstasks_update: Update a tasktasks_archive: Archive a tasktasks_list: List all taskstasks_search: Search tasks
Batch Operations:
tasks_batch_create: Create multiple taskstasks_batch_read: Read multiple taskstasks_batch_update: Update multiple taskstasks_batch_archive: Archive multiple tasks
Associations and Relationships
CRM Associations v4
Basic Operations:
crm_list_association_types: List available association typescrm_get_associations: Get all associations between objectscrm_create_association: Create an associationcrm_delete_association: Delete an association
Batch Operations:
crm_batch_create_associations: Create multiple associationscrm_batch_delete_associations: Delete multiple associations
Communication Preferences
Subscription Management
Basic Operations:
communications_get_preferences: Get contact preferencescommunications_update_preferences: Update contact preferencescommunications_unsubscribe_contact: Global unsubscribecommunications_subscribe_contact: Global subscribecommunications_get_subscription_definitions: Get subscription definitions
Bulk Operations:
communications_get_subscription_status: Get status for multiple contactscommunications_update_subscription_status: Update status for multiple contacts
Products
Basic Operations:
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 IDproducts_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 thepropertiesquery param.afteris the paging cursor token of the last successfully read resource will be returned as thepaging.next.afterJSON property of a paged response containing more results.products_search: Search products
Batch Operations:
products_batch_create: Create a batch of productsproducts_batch_read: Read a batch of products by internal ID, or unique property values. Retrieve records by theidPropertyparameter 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 theidPropertyquery 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.
Available Tools
111 toolscalls_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), properties, associations.
calls_listC
List all calls with optional filtering
Inputs: limit, after, properties, associations, +1 more.
calls_searchD
Search calls with specific filters
Inputs: filterGroups (required), properties, limit, after, +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: subscriptionId (required), contactIds (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), subscriptionId (required), preferences (required).
communications_update_subscription_statusC
Update subscription status for multiple contacts
Inputs: subscriptionId (required), updates (required).
crm_batch_create_associationsC
Create multiple associations in a single request
Inputs: fromObjectType (required), toObjectType (required), inputs (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: objectType (required), inputs (required).
crm_batch_delete_associationsC
Delete multiple associations in a single request
Inputs: fromObjectType (required), toObjectType (required), inputs (required).
crm_batch_delete_objectsC
Delete multiple CRM objects in a single request
Inputs: objectType (required), objectIds (required).
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: objectType (required), inputs (required).
crm_create_associationC
Create an association between two objects
Inputs: fromObjectType (required), toObjectType (required), fromObjectId (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: name (required), label (required), type (required), fieldType (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: name (required), label (required), type (required), fieldType (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: name (required), label (required), type (required), fieldType (required), +7 more.
crm_create_objectD
Create a new CRM object
Inputs: objectType (required), properties (required), associations.
crm_delete_associationC
Delete an association between two objects
Inputs: fromObjectType (required), toObjectType (required), fromObjectId (required), toObjectId (required).
crm_delete_objectC
Delete a CRM object
Inputs: objectType (required), objectId (required).
crm_get_associationsC
Get all associations of a specific type between objects
Inputs: fromObjectType (required), toObjectType (required), fromObjectId (required), after, +1 more.
crm_get_companyC
Get a single company by ID with specific properties and associations
Inputs: companyId (required), properties, associations.
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), properties, associations.
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), properties, associations.
crm_get_lead_propertiesC
Get all properties for leads
Inputs: archived, properties.
crm_get_objectC
Get a single CRM object by ID
Inputs: objectType (required), objectId (required), properties, associations.
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), properties, after, limit, +1 more.
crm_search_companiesC
Search companies with company-specific filters
Inputs: filterGroups (required), properties, limit, after, +1 more.
crm_search_contactsC
Search contacts with contact-specific filters
Inputs: filterGroups (required), properties, limit, after, +1 more.
crm_search_leadsC
Search leads with lead-specific filters
Inputs: filterGroups (required), properties, limit, after, +1 more.
crm_search_objectsC
Search CRM objects using filters
Inputs: objectType (required), filterGroups (required), properties, 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: objectType (required), objectId (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), properties, associations.
emails_listC
List all emails with optional filtering
Inputs: limit, after, properties, associations, +1 more.
emails_searchC
Search emails with specific filters
Inputs: filterGroups (required), properties, limit, after, +1 more.
emails_updateC
Update an existing email record
Inputs: emailId (required), properties (required).
engagement_details_createD
Create a new engagement with details
Inputs: engagement (required), associations, metadata.
engagement_details_deleteD
Delete an engagement
Inputs: engagementId (required).
engagement_details_getC
Get details of a specific engagement
Inputs: engagementId (required).
engagement_details_get_associatedC
Get all engagements associated with an object
Inputs: objectType (required), objectId (required), startTime, endTime, +3 more.
engagement_details_listC
List all engagements with optional filtering
Inputs: limit, offset, startTime, endTime, +1 more.
engagement_details_updateC
Update an existing engagement's details
Inputs: engagementId (required), engagement (required), metadata.
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_deleteC
Delete a meeting
Inputs: meetingId (required).
meetings_getC
Get details of a specific meeting
Inputs: meetingId (required), properties, associations.
meetings_listB
List all meetings with optional filtering
Inputs: after, limit, createdAfter, createdBefore, +1 more.
meetings_searchC
Search meetings with specific filters
Inputs: filterGroups (required), properties, limit, after, +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), properties, associations.
notes_listC
List all notes with optional filtering
Inputs: limit, after, properties, associations, +1 more.
notes_searchC
Search notes with specific filters
Inputs: filterGroups (required), properties, limit, after, +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 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: propertiesWithHistory (required), inputs (required), properties (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: limit, after, properties.
products_readC
Read an Object identified by ID
Inputs: productId (required), properties, associations.
products_searchD
Search products
Inputs: filterGroups (required), query, limit, after, +2 more.
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), properties, associations.
tasks_listC
List all tasks with optional filtering
Inputs: limit, after, properties, associations, +1 more.
tasks_searchD
Search tasks with specific filters
Inputs: filterGroups (required), properties, limit, after, +1 more.
tasks_updateC
Update an existing task
Inputs: taskId (required), properties (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 111 tools
Every tool has a clearly distinct purpose with no ambiguity, as they are organized by resource type (e.g., calls, crm, emails) and action (e.g., create, get, update, batch operations). Overlap is minimal and intentional, such as list vs. search for filtering options, which are clearly differentiated in descriptions.
Tool names follow a highly consistent verb_noun pattern throughout, with a clear structure of resource_action (e.g., calls_create, crm_get_company). Minor variations like 'archive' vs. 'delete' in descriptions are consistent within contexts, and batch operations are uniformly prefixed with 'batch_'.
With 111 tools, the count is excessive and feels heavy for the HubSpot CRM domain, likely leading to cognitive overload for agents. While the tools cover many resources, the high number suggests over-fragmentation rather than a well-scoped set, making it difficult to manage efficiently.
The tool surface provides complete CRUD/lifecycle coverage across all major HubSpot resources (calls, communications, CRM objects, emails, engagements, meetings, notes, products, tasks), including batch operations and specific functionalities like subscriptions and associations. No obvious gaps exist for the CRM domain.
Maintenance
Related MCP Connectors
Read deals, persons, organizations, activities and pipelines; create and update CRM records.
CRM1The HubSpot MCP Server acts as a bridge that enables AI assistants and Large Language Models to securely interact with HubSpot CRM data through natural conversation, without requiring users to understand complex API structures. It provides read-only access to standard CRM objects (contacts, companies, deals, tickets, products, invoices, and more) and their associations, secured via OAuth 2.0, allowing AI agents to perform tasks like summarizing deals, fetching company updates, and looking up record changes.
Read and write Less Annoying CRM contacts, notes, tasks, events, pipelines and groups.
Read and filter Beacon CRM records of any type; create, update, upsert, delete records; run exports.
Related MCP Servers
- AlicenseCqualityDmaintenanceProvides comprehensive access to HubSpot CRM API for managing contacts, companies, deals, engagements, and associations. Supports batch operations, advanced search, and complete CRUD functionality across all standard CRM objects.10047 npmMIT
- AlicenseCqualityDmaintenanceProvides comprehensive access to HubSpot CRM data and operations, enabling management of contacts, companies, deals, engagements, and associations through a standardized interface with type-safe validation.10047 npmMIT
- AlicenseCqualityCmaintenanceEnables 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.10047 npmMIT
- AlicenseCqualityDmaintenanceProvides 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.10047 npm1MIT