HubSpot MCP
This server provides a standardized interface for accessing and managing HubSpot CRM data and engagements using the Model Context Protocol (MCP).
Core CRM Operations: Perform CRUD operations on core CRM objects like companies, contacts, deals, tickets, products, line items, quotes, and custom objects.
Batch Processing: Create, update, or delete multiple CRM objects in a single request for improved efficiency.
Advanced Search: Execute complex searches with filters, sorting, and pagination.
Engagement Management: Manage engagements such as calls, emails, meetings, notes, and tasks, including tracking detailed activities and metadata.
Associations Management: Handle relationships between CRM objects, including creation, deletion, and batch operations.
Communication Preferences: Manage subscription statuses and preferences for contacts, including global subscribe/unsubscribe capabilities.
Custom Properties: Create and manage custom properties for companies, contacts, and leads.
Provides a standardized interface for accessing and managing HubSpot CRM data, including operations for companies, contacts, deals, tickets, and other CRM objects. Supports advanced association management, batch operations, search functionality, and property validation for efficient CRM data management.
Leverages Zod for type-safe parameter validation across all HubSpot API operations, ensuring data integrity when working with CRM objects and their properties.
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 companies in San Francisco"
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.
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.
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 |
|
| Enable telemetry | No |
|
Supported Tools
Core CRM Objects
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_archive_object: Archive (delete) a CRM objectcrm_search_objects: Search CRM objects using advanced filterscrm_batch_create_objects: Create multiple objects in a single requestcrm_batch_read_objects: Read multipl objects in a single requestcrm_batch_update_objects: Update multiple objects in a single requestcrm_batch_archive_objects: Archive (delete) multiple objects in a single request
Companies
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 filterscrm_batch_create_companies: Create multiple companies in a single requestcrm_batch_update_companies: Update multiple companies in a single requestcrm_get_company_properties: Get all available company propertiescrm_create_company_property: Create a new company property
Contacts
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 filterscrm_batch_create_contacts: Create multiple contacts in a single requestcrm_batch_update_contacts: Update multiple contacts in a single requestcrm_get_contact_properties: Get all available contact propertiescrm_create_contact_property: Create a new contact property
Leads
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 filterscrm_batch_create_leads: Create multiple leads in a single requestcrm_batch_update_leads: Update multiple leads in a single requestcrm_get_lead_properties: Get all available lead propertiescrm_create_lead_property: Create a new lead property
Engagement Management
engagement_details_get: Get details of a specific engagementengagement_details_create: Create a new engagementengagement_details_update: Update an existing engagementengagement_details_archive: Archive (delete) an engagementengagement_details_list: List all engagements with filteringengagement_details_get_associated: Get associated engagements
Calls
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 callscalls_batch_create: Create multiple callscalls_batch_read: Read multiple callscalls_batch_update: Update multiple callscalls_batch_archive: Archive multiple calls
Emails
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 emailsemails_batch_create: Create multiple emailsemails_batch_read: Read multiple emailsemails_batch_update: Update multiple emailsemails_batch_archive: Archive multiple emails
Meetings
meetings_create: Create a new meetingmeetings_get: Get meeting detailsmeetings_update: Update a meetingmeetings_archive: Archive (delete) a meetingmeetings_list: List all meetingsmeetings_search: Search meetingsmeetings_batch_create: Create multiple meetingsmeetings_batch_update: Update multiple meetingsmeetings_batch_archive: Archive multiple meetings
Notes
notes_create: Create a new notenotes_get: Get note detailsnotes_update: Update a notenotes_archive: Archive a notenotes_list: List all notesnotes_search: Search notesnotes_batch_create: Create multiple notesnotes_batch_read: Read multiple notesnotes_batch_update: Update multiple notesnotes_batch_archive: Archive multiple notes
Tasks
tasks_create: Create a new tasktasks_get: Get task detailstasks_update: Update a tasktasks_archive: Archive a tasktasks_list: List all taskstasks_search: Search taskstasks_batch_create: Create multiple taskstasks_batch_read: Read multiple taskstasks_batch_update: Update multiple taskstasks_batch_archive: Archive multiple tasks
Associations and Relationships
crm_list_association_types: List available association typescrm_get_associations: Get all associations between objectscrm_create_association: Create an associationcrm_archive_association: Archive (delete) an associationcrm_batch_create_associations: Create multiple associationscrm_batch_archive_associations: Archive (delete) multiple associations
Communication Preferences
communications_get_preferences: Get contact preferencescommunications_update_preferences: Update contact preferencescommunications_unsubscribe_contact: Global unsubscribecommunications_subscribe_contact: Global subscribecommunications_get_subscription_definitions: Get subscription definitionscommunications_get_subscription_status: Get status for multiple contactscommunications_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 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 productsproducts_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.
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 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), associations, properties.
calls_listC
List all calls with optional filtering
Inputs: after, archived, associations, limit, +1 more.
calls_searchD
Search calls with specific filters
Inputs: filterGroups (required), after, limit, properties, +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_searchC
Search emails with specific filters
Inputs: filterGroups (required), after, limit, properties, +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_searchC
Search meetings with specific filters
Inputs: filterGroups (required), after, limit, properties, +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_searchC
Search notes with specific filters
Inputs: filterGroups (required), after, limit, properties, +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_searchD
Search products
Inputs: filterGroups (required), after, limit, properties, +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), associations, properties.
tasks_listC
List all tasks with optional filtering
Inputs: after, archived, associations, limit, +1 more.
tasks_searchD
Search tasks with specific filters
Inputs: filterGroups (required), after, limit, properties, +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
Scored across 112 tools
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 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.
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.
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
Related MCP Connectors
Native MCP access to CRM contacts, organizations, deals and tasks with user permissions.
The 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.
335 MCP tools, 75 playbooks. AI-native CRM, email/SMS, events, OAuth.
MCP server for the HubSpot Integrations Center HubDB: search and retrieve integration data.
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.10037 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.10037 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.10037 npm1MIT
- AlicenseBqualityFmaintenanceMCP server for HubSpot CRM — 33 tools covering contacts, companies, deals, pipelines, lists, marketing emails, forms, workflows, and properties.3014 npmMIT