Skip to main content
Glama
nubiia-dev

@iamsamuelfraga/mcp-hubspot

by nubiia-dev

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
LOG_LEVELNoLogging level: debug, info, warn, errorinfo
HUBSPOT_TOOLSETSNoComma-separated domains to enable: sales,engagements,associations,properties,workflows,automationall
HUBSPOT_ACCESS_TOKENYesHubSpot Private App access token (pat-na1-...)

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{}
prompts
{}
resources
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
hubspot_crm_listA

List HubSpot CRM records of any object type (deals, line_items, products, quotes, calls, meetings, tasks, notes, emails). Returns a paginated collection with shape { results, total, pagination: { nextCursor } | null }. IMPORTANT: HubSpot returns only default properties unless you specify them explicitly via the properties parameter (e.g., "dealname,amount,closedate"). Use pagination.nextCursor from the response as the after parameter to page through large result sets.

hubspot_crm_getA

Retrieve a single HubSpot CRM record by its ID. Works with all object types. IMPORTANT: Specify the properties parameter to get non-default property values (e.g., "dealname,amount,closedate"). Returns 404 if the record does not exist or is archived (use archived=true to fetch archived records).

hubspot_crm_createA

Create a new HubSpot CRM record (deal, line item, product, quote, call, meeting, task, note, or email engagement). Required properties vary by type — for engagements, hs_timestamp (epoch ms string) is mandatory. For deals, dealname is required. For tasks, hs_task_subject is required. Optionally associate the new record to existing objects inline via the associations parameter (avoids a separate association API call). Returns the created record with its HubSpot-assigned id.

hubspot_crm_updateA

Update an existing HubSpot CRM record (partial update — only provided properties are changed). Applies to all object types. Pass only the properties you want to modify; omitted properties are left unchanged. To clear a property, pass an empty string "" as the value. Returns the updated record.

hubspot_crm_archiveA

Archive (soft-delete) a HubSpot CRM record. Archived records are not permanently deleted and can be retrieved with archived=true on list/get calls. Applies to all object types. Returns an empty response (HTTP 204) on success. To permanently delete, use the HubSpot UI or the GDPR delete endpoint.

hubspot_crm_searchA

Search HubSpot CRM records using filters, sorts, and full-text query. Applies to all object types. Supports up to 5 filter groups (OR-ed) with up to 6 filters per group (AND-ed). IMPORTANT NOTES: (1) Search has stricter rate limits (~5 req/s per token) than regular reads — avoid polling. (2) Search has an indexing latency of several seconds — do NOT use immediately after create/update. Use hubspot_crm_get instead for read-after-write. (3) Max total results via paging: 10 000. (4) Specify properties explicitly — HubSpot returns only defaults otherwise. Returns matching records with their requested properties.

hubspot_crm_batch_createA

Create up to 100 HubSpot CRM records in a single request. Applies to all object types. Each input requires a properties map and may optionally include inline associations. For engagements, each record must include hs_timestamp in its properties. Returns a batch response with created records and any per-record errors. LIMIT: Maximum 100 inputs per request.

hubspot_crm_batch_readA

Read up to 100 HubSpot CRM records by ID in a single request. Applies to all object types. Specify properties to control which fields are returned. Optionally use idProperty to look up records by a custom unique property value (e.g., your own external system ID) instead of the HubSpot hs_object_id. Returns a batch response with found records and any per-record errors. LIMIT: Maximum 100 inputs per request.

hubspot_crm_batch_updateA

Update up to 100 existing HubSpot CRM records in a single request. Applies to all object types. Each input must include the record id and the properties to change (partial update — omitted properties are unchanged). Pass "" as a property value to clear it. Returns a batch response with updated records and any per-record errors. LIMIT: Maximum 100 inputs per request.

hubspot_crm_batch_archiveA

Archive (soft-delete) up to 100 HubSpot CRM records in a single request. Applies to all object types. Archived records are not permanently deleted and can be retrieved with archived=true. Returns an empty response (HTTP 204) on success. LIMIT: Maximum 100 inputs per request.

hubspot_crm_batch_upsertA

Upsert up to 100 HubSpot CRM records: creates them if they do not exist, updates them if they do. Each input must include idProperty (the unique property name used for matching, e.g., "email" or a custom external ID property), id (the value of that property), and properties (fields to set). The idProperty must be marked as unique in HubSpot. LIMIT: Maximum 100 inputs per request.

hubspot_deals_mergeA

Merge two HubSpot deal records into one. The secondary deal is absorbed into the primary: all associated contacts, companies, activities, and line items are moved to the primary deal. Properties from the secondary deal fill in any blanks on the primary (primary values take precedence on conflicts). The secondary deal is then archived. This operation is IRREVERSIBLE — confirm the deal IDs before calling. Required scopes: crm.objects.deals.write.

hubspot_quotes_assembleA

Create a HubSpot Quote and associate it to a deal and line items in a single operation. This is a high-level helper that wraps the standard quote create endpoint with inline associations, saving multiple separate API calls. PREREQUISITES: The deal and all line items must already exist. Create line items first with: hubspot_crm_create objectType="line_items". ASSOCIATION TYPE IDs: Uses HUBSPOT_DEFINED typeId 64 (Quote→Deal) and 67 (Quote→LineItem) by default. Override with dealAssociationTypeId / lineItemAssociationTypeId if your portal uses different IDs. Verify IDs with hubspot_associations_labels_list for fromType=quotes. Required scopes: crm.objects.quotes.write.

hubspot_associations_createC

Create or update an association between two HubSpot CRM objects using the v4 API. Use this to link a call/meeting/note/task/email to a contact, company, deal, or ticket, or to link any two objects with a labeled relationship.

Default HUBSPOT_DEFINED typeIds (verify via hubspot_associations_labels_list): Call: Contact 194 | Company 182 | Deal 206 | Ticket 220 Email: Contact 198 | Company 186 | Deal 210 | Ticket 224 Meeting: Contact 200 | Company 188 | Deal 212 | Ticket 226 Note: Contact 202 | Company 190 | Deal 214 | Ticket 228 Task: Contact 204 | Company 192 | Deal 216 | Ticket 230

hubspot_associations_archiveA

Remove all associations between two HubSpot CRM objects (v4 API). This deletes the relationship link — it does NOT delete the objects themselves. To remove only a specific labeled association, use the batch archive endpoint instead.

hubspot_associations_listA

List all associated records of a given type for a specific HubSpot object (v4 API). For example, retrieve all contacts associated with a deal, or all deals linked to a call. Returns { results, total, pagination: { nextCursor } | null }. Use pagination.nextCursor as the "after" parameter to fetch subsequent pages.

hubspot_associations_batch_createA

Batch-create associations between multiple HubSpot object pairs in a single request (v4 API). More efficient than individual creates when linking many records at once. Maximum 100 pairs per request. Use this to associate a set of calls with their respective contacts after bulk import, or to link multiple deals to a single company.

Default HUBSPOT_DEFINED typeIds (verify via hubspot_associations_labels_list): Call: Contact 194 | Company 182 | Deal 206 | Ticket 220 Email: Contact 198 | Company 186 | Deal 210 | Ticket 224 Meeting: Contact 200 | Company 188 | Deal 212 | Ticket 226 Note: Contact 202 | Company 190 | Deal 214 | Ticket 228 Task: Contact 204 | Company 192 | Deal 216 | Ticket 230

hubspot_associations_labels_listA

List all available association label types between two HubSpot object types (v4 API). Use this BEFORE creating associations to discover valid associationTypeId values for your portal. Association typeIds can differ between HubSpot portals — always verify in runtime rather than hardcoding.

Example: call this with fromType="calls", toType="contacts" to see all labeled association types available for linking calls to contacts, including their typeIds and categories.

hubspot_properties_listA

List all properties (fields) defined for a HubSpot CRM object type. Returns both default HubSpot properties and custom properties created by your team. Use this to discover available property names before reading or writing record data.

Standard object types: "contacts", "companies", "deals", "tickets", "products", "line_items", "quotes", "calls", "meetings", "tasks", "notes", "emails". Custom objects use their numeric object type ID.

hubspot_properties_getA

Retrieve the full definition of a specific HubSpot CRM property by its internal name. Returns the property type, field type, group, options (for enumeration fields), and whether it is a HubSpot default or custom property. Useful for inspecting field constraints before creating or updating records.

hubspot_properties_createA

Create a new custom property (field) on a HubSpot CRM object type. Use this to extend deal, contact, company, or other object records with business-specific data fields.

Common type+fieldType combinations: Single-line text: type="string", fieldType="text" Multi-line text: type="string", fieldType="textarea" Number: type="number", fieldType="number" Date: type="date", fieldType="date" Dropdown: type="enumeration", fieldType="select" (requires options) Checkbox list: type="enumeration", fieldType="checkbox" (requires options) Yes/No toggle: type="bool", fieldType="booleancheckbox"

Note: property names must be lowercase with underscores (e.g., "my_custom_field"). The name cannot be changed after creation.

hubspot_workflows_listA

[BETA] List automation workflows (flows) from HubSpot Automation v4 API. Returns a paginated list of all flows in the portal with shape { results, total, pagination: { nextCursor } | null }. Use pagination.nextCursor from the response as the "after" parameter to fetch subsequent pages. Requires the "automation" OAuth scope.

hubspot_workflows_getA

[BETA] Get a single automation workflow (flow) by its ID from HubSpot Automation v4 API. Returns the full flow definition including actions, enrollment criteria, and settings. Requires the "automation" OAuth scope.

hubspot_workflows_createA

[BETA] Create a new automation workflow (flow) in HubSpot Automation v4 API. The "name" and "type" fields are required. All other fields are optional and can be configured after creation using hubspot_workflows_update. Complex fields like enrollmentCriteria use recursive filter branch structures — see the HubSpot Automation v4 BETA documentation for the full schema. Requires the "automation" OAuth scope.

hubspot_workflows_updateA

[BETA] Fully replace an existing automation workflow (flow) in HubSpot Automation v4 API. This is a PUT operation — it replaces the entire flow definition. Fields not included in the request body will be reset to their defaults. To fetch the current state before updating, use hubspot_workflows_get first. Requires the "automation" OAuth scope.

hubspot_workflows_deleteA

[BETA] WARNING: IRREVERSIBLE. Delete an automation workflow (flow) from HubSpot. The workflow CANNOT be recovered after deletion via the API. Consider disabling the flow (isEnabled: false) instead if you may need it later. Use hubspot_workflows_get to confirm the flow ID before proceeding. Requires the "automation" OAuth scope.

hubspot_workflows_batch_readA

[BETA] Read multiple automation workflows (flows) by their IDs in a single API call. More efficient than multiple individual hubspot_workflows_get calls when fetching several flows at once. Maximum 100 flow IDs per request. Requires the "automation" OAuth scope.

hubspot_workflows_email_campaignsA

[BETA] Get the email marketing campaigns associated with a specific automation workflow (flow) in HubSpot Automation v4 API. Returns campaign data linked to Send Email actions within the flow. Requires the "automation" OAuth scope.

hubspot_workflows_performanceA

[BETA] Get performance metrics for a specific automation workflow (flow) from HubSpot Automation v4 API. Returns enrollment counts, action completion rates, and other performance statistics. Requires the "automation" OAuth scope.

hubspot_workflows_id_mappingsA

[BETA] Map legacy HubSpot Workflows v3 integer IDs to the new Automation v4 flow string IDs. Use this when migrating from the deprecated v3 Workflows API to the v4 Flows API, or when you have stored references to v3 workflow IDs and need the corresponding v4 IDs. Returns a mapping of legacyWorkflowId → v4 flowId. Requires the "automation" OAuth scope.

hubspot_automation_callback_completeA

Complete a single async custom-action callback in a HubSpot Workflow (v4 automation runtime). Called after your external action finishes. Set hs_execution_state to SUCCESS to continue, FAIL_CONTINUE to continue despite failure, or BLOCK to stop enrollment at this step.

hubspot_automation_callback_complete_batchA

Complete multiple async custom-action callbacks in bulk (HubSpot Automation v4). Useful when your external system processed several workflow enrollments concurrently. Each item in callbackInputs must include its own callbackId and hs_execution_state.

hubspot_enrollment_enrollA

Enroll a contact into a HubSpot Workflow (Automation v2). The contact must exist in HubSpot. Use the workflow's numeric ID and the contact's email address.

hubspot_enrollment_unenrollA

Unenroll a contact from a HubSpot Workflow (Automation v2). Stops the contact from progressing through remaining workflow actions.

hubspot_enrollment_get_enrollmentsA

Get all active workflow enrollments for a contact by their HubSpot VID (contact record ID). Returns the list of workflows the contact is currently enrolled in.

hubspot_workflows_v3_listA

[LEGACY] List all Workflows using the HubSpot Automation v3 API. This is the legacy API — prefer Automation v4 flows for new integrations. Returns a flat list of workflow definitions.

hubspot_workflows_v3_getA

[LEGACY] Get a single Workflow by ID using the HubSpot Automation v3 API. This is the legacy API — prefer Automation v4 flows for new integrations.

Prompts

Interactive templates invoked by user choice

NameDescription
create-deal-with-line-itemsGuide to create a Deal and attach Line Items from HubSpot Products
assemble-quoteGuide to assemble a HubSpot Quote from an existing Deal
log-engagement-and-associateGuide to log a CRM engagement (call, email, or meeting) and associate it with contacts/deals
enroll-contact-in-workflowGuide to enroll a contact (or other object) in a HubSpot Workflow
search-crm-recordsGuide to search CRM records with filters, sort, and pagination

Resources

Contextual data attached and managed by the client

NameDescription
HubSpot Private App Scopes GuideRequired OAuth scopes for each toolset/domain. Use this before creating a Private App to ensure you request the correct permissions.
CRM Object Types CatalogSupported objectType values and their key properties. Reference this when calling hubspot_crm_* or hubspot_associations_* tools.
HubSpot MCP Usage ConventionsRate limits, batch size caps, search indexing latency, pagination patterns, and other operational caveats.

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/nubiia-dev/mcp-hubspot'

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