Source profileQuality 91/100

WYRE-AI/msp-claude-plugins/msp-claude-plugins/hubspot/hubspot/skills/api-patterns/SKILL.md

HubSpot API Patterns

HubSpot's official remote MCP server and the CRM Search API behind it: the complete MCP tool catalog, OAuth 2.0 + PKCE connection over Streamable HTTP, automatic scope derivation, sensitive-data (PHI) exclusion, filter/sort/ pagination syntax, plan-tier rate limits, and error handling.

Source repository stars
42
Declared platforms
0
Static risk flags
1
Last source update
2026-08-28
Source checked
2026-08-28

Decision brief

What it does: where it fits

HubSpot's official remote MCP server and the CRM Search API behind it: the complete MCP tool catalog, OAuth 2. 0 + PKCE connection over Streamable HTTP, automatic scope derivation, sensitive-data (PHI) exclusion, filter/sort/ pagination syntax, plan-tier rate limits, and error handling.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/hubspot/hubspot/skills/api-patterns"
    Safe inspection promptEditorial

    Inspect the Agent Skill "HubSpot API Patterns" from https://github.com/WYRE-AI/msp-claude-plugins/blob/5005f73ba2f52cd299f58aa6bb79f4e70ae87103/msp-claude-plugins/hubspot/hubspot/skills/api-patterns/SKILL.md at commit 5005f73ba2f52cd299f58aa6bb79f4e70ae87103. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Anti-triggers

      What properties an object has and what its enum values mean — the field,

      What properties an object has and what its enum values mean — the field,A different hosted OAuth MCP server — the connection shape rhymes but- What properties an object has and what its enum values mean — the field, lifecycle-stage, and pipeline tables live with the object; use hubspot-contacts, hubspot-companies, hubspot-deals, or hubspot-tickets. - A diffe…
    2. 02

      Connection & Authentication

      HubSpot hosts an official remote MCP server. Authentication uses OAuth 2.0 with PKCE, handled by the mcp-remote bridge:

      Go to developers.hubspot.comNavigate to Development MCP Auth AppsCreate a new MCP Auth App
    3. 03

      MCP Server

      HubSpot hosts an official remote MCP server. Authentication uses OAuth 2.0 with PKCE, handled by the mcp-remote bridge:

      Go to developers.hubspot.comNavigate to Development MCP Auth AppsCreate a new MCP Auth App
    4. 04

      Environment Variables

      Review the “Environment Variables” section in the pinned source before continuing.

      Review and apply the “Environment Variables” source section.
    5. 05

      Claude Desktop Configuration

      Review the “Claude Desktop Configuration” section in the pinned source before continuing.

      Review and apply the “Claude Desktop Configuration” source section.

    Permission review

    Static risk signals and limitations

    Network access

    medium · line 6

    The documentation includes network, browsing, or remote request actions.

    HubSpot provides a first-party remote MCP server at `https://mcp.hubspot.com/` for AI tool integration. The MCP server uses OAuth 2.0 with PKCE for authentication and Streamable HTTP as its transport protocol. Tools are backed by the HubSpo

    Network access

    medium · line 51

    The documentation includes network, browsing, or remote request actions.

    "https://mcp.hubspot.com/"

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score91/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars42SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    WYRE-AI/msp-claude-plugins
    Skill path
    msp-claude-plugins/hubspot/hubspot/skills/api-patterns/SKILL.md
    Commit
    5005f73ba2f52cd299f58aa6bb79f4e70ae87103
    License
    Apache-2.0
    Collected
    2026-08-28
    Default branch
    main
    View the original SKILL.md

    HubSpot MCP Tools & API Patterns

    Overview

    HubSpot provides a first-party remote MCP server at https://mcp.hubspot.com/ for AI tool integration. The MCP server uses OAuth 2.0 with PKCE for authentication and Streamable HTTP as its transport protocol. Tools are backed by the HubSpot CRM Search API and cover contacts, companies, deals, tickets, tasks, notes, and associations. This skill covers MCP server connection, the complete tool reference, search patterns, error handling, and best practices.

    Anti-triggers

    • What properties an object has and what its enum values mean — the field, lifecycle-stage, and pipeline tables live with the object; use hubspot-contacts, hubspot-companies, hubspot-deals, or hubspot-tickets.
    • A different hosted OAuth MCP server — the connection shape rhymes but the tenant, scopes, session model, and tools do not; use warmly-api-patterns or pandadoc-api-patterns.

    Connection & Authentication

    MCP Server

    HubSpot hosts an official remote MCP server. Authentication uses OAuth 2.0 with PKCE, handled by the mcp-remote bridge:

    1. Go to developers.hubspot.com
    2. Navigate to Development > MCP Auth Apps
    3. Create a new MCP Auth App
    4. Copy the Client ID and Client Secret

    MCP Server URL: https://mcp.hubspot.com/

    Transport: Streamable HTTP

    Authentication: OAuth 2.0 + PKCE (handled automatically by mcp-remote)

    Environment Variables

    export HUBSPOT_CLIENT_ID="your-client-id"
    export HUBSPOT_CLIENT_SECRET="your-client-secret"
    

    Claude Desktop Configuration

    {
      "mcpServers": {
        "hubspot": {
          "command": "npx",
          "args": [
            "-y", "mcp-remote",
            "https://mcp.hubspot.com/"
          ],
          "env": {
            "HUBSPOT_CLIENT_ID": "YOUR_CLIENT_ID",
            "HUBSPOT_CLIENT_SECRET": "YOUR_CLIENT_SECRET"
          }
        }
      }
    }
    

    Scopes

    HubSpot MCP automatically derives required OAuth scopes from the tools you use. You do not need to manually configure scopes. For example:

    • Using contact tools automatically requests crm.objects.contacts.read and crm.objects.contacts.write
    • Using deal tools automatically requests crm.objects.deals.read and crm.objects.deals.write
    • Using association tools automatically requests the appropriate association scopes

    Sensitive Data

    HubSpot MCP excludes sensitive data properties (PHI -- Protected Health Information) from tool responses by default. Properties marked as sensitive in HubSpot settings will not appear in MCP tool results.

    Complete MCP Tool Reference

    Contact Tools

    ToolDescriptionKey Parameters
    hubspot_retrieve_contactGet a single contact by IDcontactId (required)
    hubspot_create_contactCreate a new contactemail (required), firstname, lastname, phone, company
    hubspot_update_contactUpdate an existing contactcontactId (required), property fields to update
    hubspot_list_contactsList contacts with paginationlimit, after (cursor)
    hubspot_list_contact_propertiesList all contact propertiesNone
    hubspot_search_contactsSearch contacts by criteriafilterGroups, sorts, limit, after

    Company Tools

    ToolDescriptionKey Parameters
    hubspot_retrieve_companyGet a single company by IDcompanyId (required)
    hubspot_create_companyCreate a new companyname (required), domain, industry, phone
    hubspot_update_companyUpdate an existing companycompanyId (required), property fields to update
    hubspot_list_company_propertiesList all company propertiesNone
    hubspot_search_companiesSearch companies by criteriafilterGroups, sorts, limit, after

    Deal Tools

    ToolDescriptionKey Parameters
    hubspot_retrieve_dealGet a single deal by IDdealId (required)
    hubspot_create_dealCreate a new dealdealname (required), amount, dealstage, pipeline
    hubspot_update_dealUpdate an existing dealdealId (required), property fields to update
    hubspot_list_deal_propertiesList all deal propertiesNone
    hubspot_search_dealsSearch deals by criteriafilterGroups, sorts, limit, after

    Ticket Tools

    ToolDescriptionKey Parameters
    hubspot_retrieve_ticketGet a single ticket by IDticketId (required)
    hubspot_create_ticketCreate a new ticketsubject (required), content, hs_pipeline, hs_pipeline_stage
    hubspot_update_ticketUpdate an existing ticketticketId (required), property fields to update

    Activity Tools

    ToolDescriptionKey Parameters
    hubspot_create_taskCreate a taskhs_task_subject (required), hs_task_body, hs_task_priority, hs_timestamp
    hubspot_create_noteCreate a notehs_note_body (required), hs_timestamp

    Utility Tools

    ToolDescriptionKey Parameters
    hubspot_open_hubspot_uiOpen HubSpot UI for an objectobjectType, objectId
    hubspot_get_user_detailsGet details of the current userNone

    Association Tools

    ToolDescriptionKey Parameters
    hubspot_create_associationCreate an association between objectsfromObjectType, fromObjectId, toObjectType, toObjectId, associationType
    hubspot_access_associationsList associations for an objectobjectType, objectId, toObjectType

    CRM Search API

    Search Patterns

    HubSpot MCP tools that search records use the CRM Search API under the hood. Search tools accept filterGroups for structured queries:

    Filter Group Structure:

    {
      "filterGroups": [
        {
          "filters": [
            {
              "propertyName": "email",
              "operator": "CONTAINS_TOKEN",
              "value": "acme.com"
            }
          ]
        }
      ]
    }
    

    Available Operators

    OperatorDescriptionExample
    EQEquals{"propertyName": "lifecyclestage", "operator": "EQ", "value": "customer"}
    NEQNot equals{"propertyName": "lifecyclestage", "operator": "NEQ", "value": "subscriber"}
    LTLess than{"propertyName": "amount", "operator": "LT", "value": "1000"}
    LTELess than or equal{"propertyName": "amount", "operator": "LTE", "value": "5000"}
    GTGreater than{"propertyName": "amount", "operator": "GT", "value": "10000"}
    GTEGreater than or equal{"propertyName": "createdate", "operator": "GTE", "value": "2026-01-01"}
    CONTAINS_TOKENContains token (word match){"propertyName": "email", "operator": "CONTAINS_TOKEN", "value": "acme"}
    NOT_CONTAINS_TOKENDoes not contain token{"propertyName": "email", "operator": "NOT_CONTAINS_TOKEN", "value": "test"}
    HAS_PROPERTYProperty has a value{"propertyName": "phone", "operator": "HAS_PROPERTY"}
    NOT_HAS_PROPERTYProperty has no value{"propertyName": "phone", "operator": "NOT_HAS_PROPERTY"}
    INValue in list{"propertyName": "dealstage", "operator": "IN", "values": ["stage1", "stage2"]}
    NOT_INValue not in list{"propertyName": "dealstage", "operator": "NOT_IN", "values": ["closedlost"]}
    BETWEENBetween two values{"propertyName": "amount", "operator": "BETWEEN", "value": "1000", "highValue": "5000"}

    Sorting

    {
      "sorts": [
        {
          "propertyName": "createdate",
          "direction": "DESCENDING"
        }
      ]
    }
    

    Sort Directions: ASCENDING, DESCENDING

    Pagination

    Search results use cursor-based pagination:

    ParameterDescriptionDefaultMax
    limitResults per page10100
    afterCursor for next pageNone-

    Iterating through all results:

    1. Call the search tool with limit=100
    2. Check the response for a paging.next.after value
    3. If present, call again with after set to that value
    4. Repeat until no paging.next.after is returned

    Response Format

    Single Resource:

    {
      "id": "12345",
      "properties": {
        "firstname": "John",
        "lastname": "Smith",
        "email": "[email protected]",
        "company": "Acme Corporation",
        "phone": "555-123-4567",
        "lifecyclestage": "customer",
        "createdate": "2025-06-15T10:30:00.000Z",
        "lastmodifieddate": "2026-01-20T14:15:00.000Z"
      },
      "createdAt": "2025-06-15T10:30:00.000Z",
      "updatedAt": "2026-01-20T14:15:00.000Z"
    }
    

    Search Results:

    {
      "total": 47,
      "results": [
        {
          "id": "12345",
          "properties": {
            "firstname": "John",
            "lastname": "Smith",
            "email": "[email protected]"
          }
        }
      ],
      "paging": {
        "next": {
          "after": "12345"
        }
      }
    }
    

    Rate Limiting

    Rate Limit Details

    MetricLimit
    Requests per 10 seconds100 (per OAuth app)
    Requests per day500,000 (varies by plan)
    Search requests per day1,000 (Free), 10,000+ (paid plans)

    When rate limited, the MCP tool will return a 429 error. Wait before retrying. The MCP server handles OAuth token refresh automatically.

    Plan-Based Limits

    HubSpot PlanDaily API LimitSearch Limit
    Free100,0001,000
    Starter250,0005,000
    Professional500,00010,000
    Enterprise1,000,00025,000

    Error Handling

    Common Errors

    ErrorCauseResolution
    Tool not foundMCP server not connectedVerify OAuth credentials and server URL
    401 UnauthorizedOAuth token expired or invalidRestart MCP connection to re-authenticate
    403 ForbiddenInsufficient scopes or plan limitationCheck HubSpot plan tier and MCP Auth App permissions
    404 Not FoundInvalid object IDVerify the record ID exists
    409 ConflictDuplicate recordCheck for existing records before creating
    429 Too Many RequestsRate limit exceededWait 10 seconds and retry
    Invalid propertyProperty name not validUse list_*_properties tools to check available properties

    Troubleshooting MCP Connection

    1. Verify credentials - Ensure HUBSPOT_CLIENT_ID and HUBSPOT_CLIENT_SECRET are correct
    2. Check URL - MCP server URL must be https://mcp.hubspot.com/
    3. Test with a simple call - Try hubspot_get_user_details to verify connectivity
    4. Re-authenticate - Restart the MCP connection to force a fresh OAuth flow
    5. Check plan - Ensure your HubSpot plan supports the API features you need

    Best Practices

    1. Filter server-side - Use hubspot_search_* tools with filterGroups instead of listing all records
    2. Use maximum page size - Set limit=100 to minimize total tool calls
    3. Monitor rate limits - Stay well under 100 requests per 10 seconds
    4. Use associations - Link related objects (contacts to companies, deals to contacts) for full context
    5. Check properties first - Use list_*_properties tools to discover available fields before searching
    6. Validate before creating - Search for existing records before creating duplicates
    7. Use lifecycle stages - Track contacts and companies through their lifecycle for accurate reporting
    8. Cache property lists - Property definitions change infrequently; reference them across multiple operations

    Related Skills

    Frequently asked questions

    What to verify before installation and use

    What does the HubSpot API Patterns source document cover?

    HubSpot's official remote MCP server and the CRM Search API behind it: the complete MCP tool catalog, OAuth 2. 0 + PKCE connection over Streamable HTTP, automatic scope derivation, sensitive-data (PHI) exclusion, filter/sort/ pagination syntax, plan-tier rate limits, and error handling.

    How do I install HubSpot API Patterns?

    The source record exposes this install command: npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/hubspot/hubspot/skills/api-patterns". Inspect the command and pinned source before running it.

    Which permission-related actions were detected?

    Static rules flagged network in the source; the page lists the matching lines and excerpts.

    Alternatives

    Compare before choosing

    Computed 9836,049

    K-Dense-AI/scientific-agent-skills

    medchem

    Medicinal chemistry filters for compound triage. Apply drug-likeness rules (Lipinski, Veber, CNS), structural alert catalogs (PAINS, NIBR, ChEMBL), complexity metrics, and the medchem query language for library filtering.

    Computed 9682

    vasilyu1983/AI-Agents-public

    agents-swarm-orchestration

    Coordinates multi-agent execution across subagents, teams, and workflows. Use when planning dependency-aware fan-out, verifier passes, runtime selection, or Loop Engineering.

    Computed 9645

    objectstack-ai/objectstack

    objectstack-platform

    Bootstrap, configure, extend, and operate ObjectStack runtimes. Covers project setup (`defineStack`, drivers, adapters, scaffolding), plugin and service development (PluginContext, DI, kernel hooks like `kernel:ready`), and operations (CLI commands, migrations, deployment, test harnesses via LiteKernel). Use when the user is writing `objectstack.config.ts`, building a plugin or driver, wiring a framework adapter, running `os` CLI commands, or planning deployment. Do not use for data schema desig

    Computed 9614

    adaptico/adaptico-os

    gtm-interviews

    Customer-conversation engine for /gtm interviews <target>. Two jobs in one command - generate a customer-discovery interview kit (who to talk to, where to find them, questions that surface real past behavior instead of compliments, a per-conversation capture sheet), and synthesize the founder's transcripts or notes into validated pains, verbatim customer quotes, segments, and switching triggers, written back into PROFILE.md so positioning, copy, and outreach start from real customer language. Us