MCP server for HubSpot CRM integration, providing tools to manage contacts, companies, deals, and associations
HubSpot MCP has well-structured tool definitions with complete input schemas and reasonable descriptions. All 6 tools are explicitly registered with proper JSON Schema. Naming follows verb_noun convention (list_, get_, create_, update_, delete_, search_). However, descriptions lack LLM-optimization guidance (e.g., when to use search vs list), parameter descriptions are minimal in some cases, and output schemas are not documented. Error handling is absent, no guidance on retryability, user-fixable errors, or recovery paths. The server lacks tool annotations (readOnlyHint, destructiveHint) despite having clear risk classifications in metadata.
Create a new contact
Delete a contact
Get a single contact by ID
List contacts from HubSpot CRM with pagination. Results are compacted by default (truncated at 500 chars, no metadata). Use excludeCompanies/excludeJobTitles to filter out specific contacts.
Search contacts with filters. Filters within a group are ANDed, groups are ORed. Results are compacted by default (truncated at 500 chars, no metadata). Use excludeCompanies to filter out contacts from specific companies (e.g., existing clients). Use excludeJobTitles to filter out certain roles (e.g., ["CEO"] to exclude C-level executives).
Update an existing contact
Missing output schema documentation. Tools return compacted results but LLMs cannot see the response structure (fields, types, pagination format). This forces LLMs to guess what data is available and risks malformed downstream tool calls.
Minimal parameter descriptions. 'Get a single contact by ID' lacks context on when to use get_contact vs search_contacts, what properties are returned by default, and whether the contact must exist. LLMs cannot distinguish between similar tools.
No error handling guidance. Tools lack descriptions of failure modes (e.g., 'Contact not found', 'Invalid email format', 'Permission denied'). LLMs receive raw API errors with no recovery path.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Missing tool annotations. Risk metadata (READ_ONLY, WRITE, DESTRUCTIVE) exists in comments but is not exposed via MCP tool annotations (readOnlyHint, destructiveHint). LLMs cannot infer operation safety from the tool definition alone.
Ambiguous filter parameter. hubspot_search_contacts accepts 'filterGroups', 'filters', and 'filter' (singular) with complex normalization logic. The inputSchema only documents 'filterGroups', leaving LLMs unaware of the aliases. This violates the principle that the schema must be self-documenting.