HubSpot MCP connector
OAuth 2.1CRM & SalesMarketingAnalyticsConnect to HubSpot MCP. Manage CRM contacts, companies, deals, landing pages, campaigns, and analytics from your AI workflows.
HubSpot MCP connector
-
Install the SDK
Section titled “Install the SDK”Terminal window npm install @scalekit-sdk/nodeTerminal window pip install scalekit -
Set your credentials
Section titled “Set your credentials”Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret> -
Set up the connector
Section titled “Set up the connector”Register your HubSpot MCP credentials with Scalekit so it handles the token lifecycle. You do this once per environment.
Dashboard setup steps
Register your Scalekit environment with the HubSpot MCP connector so Scalekit handles the OAuth flow and token lifecycle for your users. HubSpot MCP uses a dedicated MCP Auth App — not a Legacy App or a standard Public App.
-
Copy the redirect URI from Scalekit
- In Scalekit dashboard, go to AgentKit > Connections > Create Connection.
- Search for HubSpot MCP and click Create.
- Copy the Redirect URI from the connection details panel. It looks like:
https://<YOUR_ENV>.scalekit.cloud/sso/v1/oauth/conn_<ID>/callback
-
Create an MCP auth app in HubSpot
- Log in to developers.hubspot.com and open your developer account.
- In the left sidebar, click MCP Auth Apps (marked Beta). Do not use Legacy Apps or Projects.

- Click Create MCP auth app (top right).
- Enter an App name, for example
Agent Auth, and complete any required fields. - Click Create.
-
Add the redirect URI and configure scopes
-
Inside your new MCP auth app, navigate to the Auth or OAuth settings section.
-
Under Redirect URLs, paste the Scalekit redirect URI you copied in step 1 and save.
-
Under Scopes, add the scopes your agent needs. Start with:
crm.objects.contacts.readcrm.objects.contacts.writecrm.objects.companies.readcrm.objects.deals.readAdd additional scopes based on the tools your agent will use (for example,
contentscopes for landing pages and campaigns).
-
-
Copy your app credentials
- In your MCP auth app settings, find the App ID (visible in the app list as a number, for example
43664586). - Locate your Client ID and Client Secret under the OAuth settings.
- In your MCP auth app settings, find the App ID (visible in the app list as a number, for example
-
Add credentials in Scalekit
- In Scalekit dashboard, go to AgentKit > Connections and open the HubSpot MCP connection you created.
- Enter:
- Client ID — from your MCP auth app
- Client Secret — from your MCP auth app
- Permissions — the scope strings you configured in step 3 (for example,
crm.objects.contacts.read crm.objects.deals.read)
- Click Save.
-
-
Authorize and make your first call
Section titled “Authorize and make your first call”quickstart.ts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENV_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'hubspotmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize HubSpot MCP:', link)process.stdout.write('Press Enter after authorizing...')await new Promise(r => process.stdin.once('data', r))// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'hubspotmcp_get_campaign_analytics',toolInput: {},})console.log(result)quickstart.py import osfrom scalekit.client import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENV_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "hubspotmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize HubSpot MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="hubspotmcp_get_campaign_analytics",connection_name=connection_name,identifier=identifier,)print(result)
What you can do
Section titled “What you can do”Connect this agent connector to let your agent:
- Guidance tool — Retrieve usage instructions and guidance for one or more HubSpot MCP tools
- Feedback submit — Submit user feedback about the HubSpot MCP connector to HubSpot
- Search properties, owners, crm objects — Find the most relevant CRM property definitions using keyword-based search
- Ui render landing page — Display the landing page card (preview image and open-in-editor link) in the chat UI
- Query crm data — Query HubSpot CRM data using SQL with HubSpot-specific extensions
- Page manage landing — Read from or write to HubSpot landing pages
Tool list
Section titled “Tool list”Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.
hubspotmcp_get_campaign_analytics#Retrieve engagement analytics (sessions, new contacts, influenced contacts) for one or more HubSpot campaigns.1 param
Retrieve engagement analytics (sessions, new contacts, influenced contacts) for one or more HubSpot campaigns.
requestsarrayoptionalRequired: List of analytics requests to process. Each entry is a full CampaignAnalyticsRequest. Maximum 20 requests per batch.hubspotmcp_get_campaign_asset_metrics#Retrieve performance metrics for assets (emails, landing pages, CTAs) associated with a campaign.5 params
Retrieve performance metrics for assets (emails, landing pages, CTAs) associated with a campaign.
assetTypestringrequiredThe asset type name, such as LANDING_PAGE, SITE_PAGE, BLOG_POST, or MEETING_EVENT. If invalid, the error will list valid types.campaignCrmObjectIdintegerrequiredThe numeric ID of the campaign to get asset metrics for. Must be greater than 0.crmObjectIdsarrayoptionalOptional list of CRM object IDs to scope metrics to specific assets. When omitted or empty, metrics are returned for all assets of the given assetType associated with the campaign.endDatestringoptionalEnd of the date range in YYYY-MM-DD format.startDatestringoptionalStart of the date range in YYYY-MM-DD format.hubspotmcp_get_campaign_contacts_by_type#Retrieve paginated contact IDs for a campaign filtered by attribution type (NEW_CONTACTS, INFLUENCED_CONTACTS, or ALL_CONTACTS).6 params
Retrieve paginated contact IDs for a campaign filtered by attribution type (NEW_CONTACTS, INFLUENCED_CONTACTS, or ALL_CONTACTS).
campaignCrmObjectIdintegerrequiredThe numeric object ID of the campaign. Must be greater than 0.contactTypestringrequiredThe contact attribution type: NEW_CONTACTS_FIRST_TOUCH (first marketing interaction was this campaign), NEW_CONTACTS_LAST_TOUCH (last interaction before conversion), or INFLUENCED_CONTACTS (any engagement within the date range).endDatestringoptionalEnd of the date range in YYYY-MM-DD format.limitintegeroptionalMaximum number of results to return per page.offsetintegeroptionalPagination offset — number of records to skip before returning results.startDatestringoptionalStart of the date range in YYYY-MM-DD format.hubspotmcp_get_content_analytics_report#Run a content analytics report across HubSpot landing pages, website pages, and blog posts for a given date range.15 params
Run a content analytics report across HubSpot landing pages, website pages, and blog posts for a given date range.
modestringrequiredWhich report mode to run. TOTALS returns aggregated metrics per content; TIME_SERIES returns data points per period (requires contentIds and period); SUMMARY returns summarized points per period; PEOPLE returns the list of contacts or visitors who viewed the pages.contentIdsarrayoptionalContent IDs to filter results to. Numeric for pages and posts; composite string (e.g. hubdb-{tableId}-{rowId}) for HubDB rows. Leave empty to query all pages in the portal. Required for TIME_SERIES and PEOPLE modes.endstringoptionalEnd of the reporting period in YYYY-MM-DD format.excludedIdsarrayoptionalContent IDs to exclude from the result set. Same format as contentIds (numeric or composite string).includeMetadatabooleanoptionalTOTALS mode: include per-content metadata (title, URL, type) in the response.limitintegeroptionalMaximum number of results to return per page.offsetintegeroptionalPagination offset — number of records to skip before returning results.paginationCursorstringoptionalPagination cursor from the previous response to fetch the next page.peopleTypestringoptionalPEOPLE mode: whether to return CONTACTS (known people) or VISITORS (anonymous). Required for PEOPLE mode.periodstringoptionalTIME_SERIES or SUMMARY mode: bucket size for the time series. Required for those modes.scaleByPercentbooleanoptionalTOTALS mode: scale metric values by their percent contribution to the totals.searchstringoptionalFree-text search to filter content by title or URL.sortDirectionstringoptionalTOTALS mode: sort direction. Ignored in other modes.sortMetricstringoptionalTOTALS mode: metric to sort by (e.g. rawViews, submissions, contacts). Ignored in other modes.startstringoptionalStart of the reporting period in YYYY-MM-DD format.hubspotmcp_get_crm_objects#Fetch multiple CRM objects of the same type in a single request by their IDs.3 params
Fetch multiple CRM objects of the same type in a single request by their IDs.
objectTypestringrequiredThe HubSpot CRM object type to operate on (e.g. contacts, companies, deals).objectIdsarrayoptionalList of object IDs to fetch. Min: 1, Max: 100propertiesarrayoptionalList of property names to include in results.hubspotmcp_get_organization_details#Retrieve organization-wide details including teams, job titles, seats, account settings, and timezone.1 param
Retrieve organization-wide details including teams, job titles, seats, account settings, and timezone.
includearrayoptionalOptional list of data to include in the response.
Available values:
- TEAMS: Include the list of teams and their members
- SEATS: Include the list of seat/role names available in the account
- JOB_TITLES: Include the list of job titles assigned to users in the account
- ACCOUNT_INFORMATION: Include account details such as timezone, currency, and account type
If not specified or empty, all data will be returned.
Specify only the values you need to reduce response size.
Unrecognized values will result in an error.hubspotmcp_get_properties#Fetch property definitions for a CRM object type, including data types and enumeration values.2 params
Fetch property definitions for a CRM object type, including data types and enumeration values.
objectTypestringrequiredThe HubSpot CRM object type to operate on (e.g. contacts, companies, deals).propertyNamesarrayoptionalThe set of property names to retrievehubspotmcp_get_user_details#Return details for the current user including team membership, CRM tool availability, and hub info.1 param
Return details for the current user including team membership, CRM tool availability, and hub info.
includearrayoptionalOptional list of data sections to include in the user details response.
Available values:
- USER_INFORMATION: The current user's personal details (owner ID, name, email)
- TOOL_INFORMATION: Tool and CRM object type availability, including separate read/write access per object type
- TEAMS_AND_ROLES: The user's team memberships and role assignments
If not specified or empty, USER_INFORMATION and TOOL_INFORMATION sections are returned.
Specify only the sections you need to reduce response size.
Unrecognized values will result in an error.hubspotmcp_manage_crm_objects#Create or update CRM objects with properties and associations. Use createRequest to create, updateRequest to update.3 params
Create or update CRM objects with properties and associations. Use createRequest to create, updateRequest to update.
confirmationStatusstringoptionalUser confirmation for write actions. Must be CONFIRMED or CONFIRMATION_NOT_REQUIRED.createRequestobjectoptionalRequired when creating new CRM objects.updateRequestobjectoptionalRequired when updating existing CRM objects.hubspotmcp_manage_landing_page#Read from or write to HubSpot landing pages. Specify the action field to control the operation (LIST, GET, CREATE, UPDATE, DELETE, etc.).29 params
Read from or write to HubSpot landing pages. Specify the action field to control the operation (LIST, GET, CREATE, UPDATE, DELETE, etc.).
actionstringrequiredAction to perform. One per call. READ actions (no side effects): "MODULES": list every module on the page draft. Each entry includes the module's field values, its layout position (sectionId, rowIndex, parentCellName when it lives inside a nested column, and cellWidth/cellX on the 12-column grid), and ownership flags (overrideable, globalOwned, globalPartialPath, themePartialOwned). Positions are populated even on a freshly created template page, before any edit. Capture a module's position here BEFORE you REMOVE or MOVE it so you can restore or reposition it precisely. Check ownership before REMOVE/MOVE: true global partials (header/footer) and global widgets are refused, but modules inside theme dnd_partial sections are removable and movable. "MODULE_TYPES": list available module types for this page's theme (call before INSERT). "MODULE_DEF": full field schema for a module type (requires modulePath). The response also includes the curated guide in moduleGuide when one exists, so a separate MODULE_GUIDE call is usually unnecessary. "MODULE_STYLES": read the layout styles (padding, margin, background, visibility) for a module (requires moduleId). "MODULE_GUIDE": (rarely needed — MODULE_DEF already returns the same guide inline) curated markdown for the modulePath covering required fields, common traps, and a minimal INSERT body. Errors if no guide exists; check MODULE_TYPES.hasGuide first. "REVISIONS": list recent page revisions for undo. "TEMPLATES": list landing page templates available in the portal (contentId not required). "FORMS": list forms available in the portal for embedding via the @hubspot/form module (contentId not required). Returns guid, name, portalId, formType, isPublished, createdAt, updatedAt. "BRAND_KIT": fetch the portal's primary brand kit (colors, fonts, logos) when brand-consistent content would help — e.g. picking a CTA color, a hero font, or a logo to drop into a header (contentId not required). WRITE actions (mutate the same shared draft — issue them ONE AT A TIME, never in parallel): "CLONE": duplicate an existing page (requires contentId of the source page; optional pageName and slug for the clone). Returns a new contentId. "CREATE_FROM_TEMPLATE": create the page from a template (requires pageName and templatePath; optional slug). MUST be preceded by a proposal card (call render_landing_page_ui directly with a "propose" target — there is no separate write step to propose) and an explicit user confirmation IN CHAT — never the first step of creating a page, and choosing a template is NOT confirmation. Returns contentId. "SET_MODULE_FIELDS": verbatim field patch on one module (requires contentId, moduleId, fieldOverridesJson). "SET_MODULE_STYLES": set layout styles (padding, margin, background, visibility) on one module (requires contentId, moduleId, stylesJson). Merge semantics — only supplied fields are updated. Call action=MODULE_STYLES first to see current values. "SET_SECTION_STYLES": set the background, padding, margin, or full-width of the ENTIRE SECTION band a module sits in (requires contentId, moduleId, stylesJson; moduleId is any module inside the band, used as an anchor). This is the correct way to do "make this section's background <color>" — do NOT inject CSS via SET_METADATA headHtml for section backgrounds. Merge semantics. Page-scoped bands — including theme dnd_partial sections — CAN be styled; only true global sections (header/footer/global widgets) are refused. "INSERT": add a new module (requires contentId, modulePath; then EITHER anchorModuleId+anchorPosition for anchor-based placement, OR sectionId+rowStart+columnStart+columnsSpanned for grid-coord placement; optional fieldOverridesJson). "REMOVE": delete one module (requires contentId, moduleId). If it was the last module in its section band, the now-empty band — background and padding included — is collapsed too, so no empty "Drop modules here" ghost band is left behind. "REMOVE_SECTION": delete the ENTIRE section band a module sits in — the whole top-level row, every module in it, AND the band's own background/padding styles (requires contentId, moduleId; moduleId is any module inside the target band, used as an anchor). Page-scoped sections — including theme dnd_partial sections like a logo bar — CAN be removed; only true global sections are refused. "MOVE": reposition module (requires contentId, moduleId; optional sectionId, rowStart, columnStart). "SET_METADATA": update page metadata — pageName, htmlTitle, slug, metaDescription, featuredImageUrl, language, headHtml (requires contentId; all metadata fields optional). "PUBLISH": publish draft (requires contentId; confirm with the user first). "RESTORE_REVISION": roll back to revision (requires contentId, revisionId; confirm first).anchorModuleIdstringoptionalAnchor-based placement: moduleId of an existing module that the new INSERT should land relative to. When provided, omit rowStart / columnStart / columnsSpanned — the backend resolves the target row from the anchor and auto-redistributes column widths across siblings. Pair with anchorPosition.anchorPositionstringoptionalAnchor placement direction. Used with anchorModuleId on INSERT. Values: "BEFORE" (new module on a new row immediately above the anchor's row), "AFTER" (new row immediately below), "IN_ROW_WITH" (sibling cell appended to the right of all existing cells in the anchor's row — siblings give up width), "IN_ROW_BEFORE" (sibling cell positioned to the LEFT of the anchor within the same row), "IN_ROW_AFTER" (sibling cell positioned to the RIGHT of the anchor within the same row, regardless of any cells beyond the anchor), "START_OF_SECTION" (first row of anchor's section), "END_OF_SECTION" (last row of anchor's section), "STACK_ABOVE" (wrap the anchor in a column and place the new module ABOVE it as a stacked row), "STACK_BELOW" (same, stacked BELOW). STACK_* builds a "unified section" — both modules share ONE wrapper cell as separate rows (the shape the editor's drag-to-stack creates); use it instead of BEFORE/AFTER when the two modules should read as one visual group rather than independent section rows. STACK requires a module anchor inside a section (not a top-level section id).availableForNewContentbooleanoptionalWhen action=TEMPLATES: filter to templates available for new page creation. Omit to return all templates.columnsSpannedintegeroptionalWidth in columns on the 12-column grid. Required for INSERT when using legacy grid-coord placement. Full width=12, two halves=6 each, three thirds=4 each. Omit when using anchor-based placement (anchorModuleId + anchorPosition) — width is computed automatically by stealing from siblings.columnStartintegeroptional1-based column position on a 12-column grid. Required for INSERT (grid-coord placement). Optional for MOVE. columnStart=1 is leftmost.contentIdintegeroptionalContent ID of the landing page. Required for most actions. NOT required for CREATE_FROM_TEMPLATE (creates a new page), TEMPLATES, FORMS, BRAND_KIT, MODULE_DEF, and MODULE_GUIDE.featuredImageUrlstringoptionalFeatured image URL for social sharing. Only used for SET_METADATA. Omit to leave unchanged.fieldOverridesJsonstringoptionalJSON object of verbatim field values (e.g. {"heading":"Close deals faster"}). Required for SET_MODULE_FIELDS. Optional for INSERT (sets initial field values on the new module).folderNamestringoptionalWhen action=TEMPLATES: filter by folder name (e.g. "my-theme/templates").headHtmlstringoptionalRaw HTML injected into <head> (e.g. "<style>body{background:#2563eb}</style>"). Only used for SET_METADATA. Omit to leave unchanged.htmlTitlestringoptionalHTML <title> tag for the page (~50–60 chars). Only used for SET_METADATA. Omit to leave unchanged.languagestringoptionalISO-639-1 language code (e.g. "en", "de"). Used for SET_METADATA (omit to leave unchanged).limitintegeroptionalMaximum number of results to return per page.metaDescriptionstringoptionalMeta description for search snippets (~140–160 chars). Only used for SET_METADATA. Omit to leave unchanged.moduleIdstringoptionalModule ID to operate on. Required for SET_MODULE_FIELDS, SET_MODULE_STYLES, SET_SECTION_STYLES, REMOVE, REMOVE_SECTION, MOVE, and MODULE_STYLES. For REMOVE_SECTION and SET_SECTION_STYLES it is any module inside the target section band (an anchor). Find IDs via action=MODULES.modulePathstringoptionalModule type path (e.g. "@hubspot/rich_text"). Required for INSERT, MODULE_DEF, and MODULE_GUIDE. Use paths exactly as returned by action=MODULE_TYPES.offsetintegeroptionalPagination offset — number of records to skip before returning results.pageNamestringoptionalName for the landing page. Required for CREATE_FROM_TEMPLATE. Optional for CLONE (defaults to a copy of the source page name). Also used by SET_METADATA to update the internal listing name shown in the HubSpot content listing UI (not the HTML title).querystringoptionalText to search for within the default searchable properties of the specified object type.responseFormatstringoptionalVerbosity of the response. "DETAILED" returns all fields and is the default when omitted. "SUMMARY" trims verbose fields to save tokens on large pages: when action=MODULES, drops module field values and returns only module IDs, modulePaths, and section info. For MODULE_TYPES, MODULE_DEF, and REVISIONS, SUMMARY currently returns the same payload as DETAILED.revisionIdstringoptionalRevision ID to restore. Required for RESTORE_REVISION. Find IDs via action=REVISIONS.rowStartintegeroptional1-based row position within the section. Required for INSERT (grid-coord placement). Optional for MOVE. Modules with the same rowStart and sectionId are placed side-by-side.sectionIdstringoptionalLayout section ID to place the module in. Required for INSERT (grid-coord placement). Optional for MOVE (omit to keep current section). Find section IDs via action=MODULES.slugstringoptionalURL slug (lowercase, hyphenated, no leading slash). Used for SET_METADATA (omit to leave unchanged), CREATE_FROM_TEMPLATE (omit to derive from pageName), or CLONE (omit to auto-generate).stylesJsonstringoptionalJSON object of structured layout styles to merge. Required for SET_MODULE_STYLES (onto a module) and SET_SECTION_STYLES (onto a section band). Uses merge semantics: only supplied fields are updated, existing styles are preserved. Shape: {"breakpoint_styles":{"default":{"padding":{"top":{"value":20,"units":"px"}},"margin":{"top":{"value":10,"units":"px"}}}}}. Supported breakpoints: "default" (desktop), "mobile". Supported spacing sides — padding: top, right, bottom, left; margin: top, bottom. Each side is a Size: {"value":<number>,"units":"px"|"em"|"rem"|..."}. Background color (mainly for SET_SECTION_STYLES) goes in the top-level backgroundColor field as r/g/b/a: {"backgroundColor":{"r":255,"g":238,"b":0,"a":1}} (r/g/b 0–255, a 0–1). Section-only fields (SET_SECTION_STYLES): "forceFullWidthSection":true OR "maxWidthSectionCentering":<px> (mutually exclusive). Use camelCase keys (e.g. backgroundColor, breakpointStyles, forceFullWidthSection) — they mirror what action=MODULE_STYLES returns. Also supports per-breakpoint "hidden":true/false to toggle visibility. Layout only — for TEXT color use the separate textColor field, not this.templatePathstringoptionalTemplate path to build the page on. Required for CREATE_FROM_TEMPLATE. Use action=TEMPLATES to discover available templates, then pass the templatePath exactly as returned.textColorstringoptionalFor action=SET_MODULE_STYLES: set the text color of ALL text in a module (headings, paragraphs, list items) to this CSS color, e.g. "#cc0000", "red", or "rgb(204,0,0)". This is the reliable way to recolor module text — it writes a scoped, !important rule the renderer applies to the module's own elements, overriding the theme. Do NOT hand-roll headHtml CSS for text color, and do NOT use it to recolor a whole section (use the section's sectionStyleVariant for that). Supply with moduleId; may be combined with stylesJson.themePathstringoptionalWhen action=TEMPLATES: filter templates by theme path. Use for HubSpot themes ("@hubspot/elevate", "@hubspot/growth"), marketplace themes ("@marketplace/vendor/theme-name"), or custom themes ("my-custom-theme"). Omit to return templates across all themes.hubspotmcp_query_crm_data#Query HubSpot CRM data using SQL with HubSpot-specific extensions. Call get_properties first to discover valid property names.3 params
Query HubSpot CRM data using SQL with HubSpot-specific extensions. Call get_properties first to discover valid property names.
sqlstringrequiredSQL query to execute against HubSpot CRM data.chatInsightsobjectoptionalInsights about the chat including user intent and satisfaction level.verbosityLevelstringoptionalControls the amount of data returned in the response:
- LOW: Data only, no citation links
- MEDIUM/HIGH: Data with citation links for each record when availablehubspotmcp_render_landing_page_ui#Display the landing page card (preview image and open-in-editor link) in the chat UI.1 param
Display the landing page card (preview image and open-in-editor link) in the chat UI.
targetstringrequiredWhat to render. Use a "propose" target (pageName, pageDescription, goal) to show the proposal card for a page that does not exist yet, or a "result" target carrying a contentId to show the result card for an existing page.hubspotmcp_search_crm_objects#Search and retrieve CRM records from HubSpot using filters, sorting, and keyword queries.8 params
Search and retrieve CRM records from HubSpot using filters, sorting, and keyword queries.
objectTypestringrequiredThe HubSpot CRM object type to operate on (e.g. contacts, companies, deals).chatInsightsobjectoptionalInsights about the chat including user intent and satisfaction level.
IMPORTANT: MUST be provided for all scenarios.filterGroupsarrayoptional* The filter groups that define the search criteria.
* Filters that match ALL of several conditions (AND logic) should be put in the same filterGroup.
* Filters that match AT LEAST ONE of several conditions (OR logic) should be put in a separate filterGroup.limitintegeroptionalMaximum number of results to return per page.offsetintegeroptionalPagination offset — number of records to skip before returning results.propertiesarrayoptionalList of property names to include in results.querystringoptionalText to search for within the default searchable properties of the specified object type.sortsarrayoptionalOptional sorting rules for results. Only one sort rule can be appliedhubspotmcp_search_owners#List and search for HubSpot owners who can be assigned to CRM records.4 params
List and search for HubSpot owners who can be assigned to CRM records.
limitintegeroptionalMaximum number of results to return per page.offsetintegeroptionalPagination offset — number of records to skip before returning results.ownerIdsarrayoptionalOptional list of owner IDs to lookup directly. When provided, search query is ignoredsearchQuerystringoptionalOptional search query to find owners by name or email. Returns all owners if not providedhubspotmcp_search_properties#Find the most relevant CRM property definitions using keyword-based search.3 params
Find the most relevant CRM property definitions using keyword-based search.
objectTypestringrequiredThe HubSpot CRM object type to operate on (e.g. contacts, companies, deals).keywordsarrayoptionalMultiple search keywords (max 5) to find relevant properties using efficient keyword-based search.
Supports searching for multiple related property concepts in a single request.
Examples:
- ["urgency"] - Single keyword search
- ["assignee", "assigned_to", "owner"] - Multiple related keywords for assignment
- ["name", "employees", "zip", "contact"] - Multiple unrelated keywords for different properties
If both query and keywords are provided, keywords takes precedence.
If empty and no query provided, returns all properties for the object type.querystringoptionalText to search for within the default searchable properties of the specified object type.hubspotmcp_submit_feedback#Submit user feedback about the HubSpot MCP connector to HubSpot.6 params
Submit user feedback about the HubSpot MCP connector to HubSpot.
explanationOfSatisfactionstringrequiredBrief explanation of what went wrong from the agent's perspective.
When errors occurred: Explain why the agent made a request that failed validation, including what the agent's reasoning was and why it failed. This helps with investigation and improvement. Example: 'Error: "A non-empty list of objects to create or update must be provided" - Agent attempted to batch update contacts but incorrectly passed an empty list because it filtered out all objects based on a misunderstanding of the user's criteria.'feedbackstringrequiredUser's verbatim feedback about the HubSpot connector. CRITICAL RULES:
- Use the user's EXACT words. NEVER paraphrase, summarize, or rewrite.
- If the user said it in their language, keep it in their language.
- If the user hasn't typed specific feedback yet, do NOT fill this in yourself — ask them first.
- Avoid PII — use anonymized references.goalstringrequiredUser's goal or what they were trying to accomplish and relevant conversation context.
Avoid PII - use anonymized references.
Important: Avoid adding extraneous information, especially from memory.feedbackTypestringoptionalCategory of the feedback being submitted. Used to triage and analyze feedback trends.
- PROBLEM: Something is broken or not working as expected (errors, incorrect results, bugs).
- FEATURE_REQUEST: A request for new functionality or capability, including enhancements to existing features that would require new behavior to be built.
- GENERAL_FEEDBACK: Opinions, observations, or suggestions about an existing tool or workflow — e.g., usability impressions, praise, workflow friction, or improvement ideas that don't rise to the level of a bug report or feature request.
- OTHER: Use only when the feedback genuinely does not fit any of the above categories.sourceInterfacestringoptionalWhere the feedback originated.
- MCP_UI: Submitted from the dedicated in-app feedback UI rendered by the MCP host (e.g. a feedback form/widget the user explicitly opened).
- NON_UI: Submitted from a regular chat conversation (no dedicated feedback UI).triggeringToolNamestringoptionalName of the HubSpot tool related to this feedback.
IMPORTANT: This tool ONLY collects feedback about HubSpot connector tools.
Do NOT submit feedback about non-HubSpot tools (e.g. Slack, Microsoft 365, Notion, iMessage, Intercom, Bash, etc.).hubspotmcp_tool_guidance#Retrieve usage instructions and guidance for one or more HubSpot MCP tools.1 param
Retrieve usage instructions and guidance for one or more HubSpot MCP tools.
toolNamesarrayrequiredList of tool names to get usage instructions for