@iamsamuelfraga/mcp-hubspot
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LOG_LEVEL | No | Logging level: debug, info, warn, error | info |
| HUBSPOT_TOOLSETS | No | Comma-separated domains to enable: sales,engagements,associations,properties,workflows,automation | all |
| HUBSPOT_ACCESS_TOKEN | Yes | HubSpot Private App access token (pat-na1-...) |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {} |
| prompts | {} |
| resources | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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 |
| hubspot_crm_getA | Retrieve a single HubSpot CRM record by its ID. Works with all object types. IMPORTANT: Specify the |
| 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, |
| 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 |
| hubspot_crm_batch_createA | Create up to 100 HubSpot CRM records in a single request. Applies to all object types. Each input requires a |
| hubspot_crm_batch_readA | Read up to 100 HubSpot CRM records by ID in a single request. Applies to all object types. Specify |
| 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 |
| 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 |
| 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 |
| 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 |
| 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
| Name | Description |
|---|---|
| create-deal-with-line-items | Guide to create a Deal and attach Line Items from HubSpot Products |
| assemble-quote | Guide to assemble a HubSpot Quote from an existing Deal |
| log-engagement-and-associate | Guide to log a CRM engagement (call, email, or meeting) and associate it with contacts/deals |
| enroll-contact-in-workflow | Guide to enroll a contact (or other object) in a HubSpot Workflow |
| search-crm-records | Guide to search CRM records with filters, sort, and pagination |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| HubSpot Private App Scopes Guide | Required OAuth scopes for each toolset/domain. Use this before creating a Private App to ensure you request the correct permissions. |
| CRM Object Types Catalog | Supported objectType values and their key properties. Reference this when calling hubspot_crm_* or hubspot_associations_* tools. |
| HubSpot MCP Usage Conventions | Rate 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