Skip to main content
Glama
HubSpot MCP Extended

HubSpot MCP Extended

by calypsoCodex

License: Source Available Version CI/CD CodeQL codecov

Note: Coverage reporting will be available after setting up Codecov token and app integration.

HubSpot MCP Extended

Independent MCP server built directly from HubSpot's public OpenAPI specifications, providing comprehensive CRM automation with 106 tools including advanced workflows for invoices and line items.

Note: This is an independent, community-driven implementation and not affiliated with or endorsed by HubSpot. Built using HubSpot's official public OpenAPI specifications.

šŸ“œ Licensing

This software is source available with dual licensing:

  • Free for non-commercial use (personal, educational, research, open source projects)

  • Commercial license required for business/production use by for-profit organizations

See LICENSE for full terms and LICENSING.md for details on obtaining a commercial license.

Related MCP server: hubspot-mcp

šŸ†• Recent Improvements (v1.4.0)

  • āœ… Dual Licensing Model: MIT for open source + Commercial license option for enterprise support

  • āœ… Claude Desktop Parameter Compatibility: Fixed parameter name mismatch causing "Unable to infer object type" errors

  • āœ… Line Items API Support: Added 11 new tools for complete invoice workflow functionality (95→106 tools)

  • āœ… Smart Parameter Mapping: Automatic normalization of shortened parameter names (objtype/objectType, objid/objectId)

  • āœ… Fixed macOS Compatibility: Deployment script now works natively on macOS without requiring GNU coreutils

  • āœ… Docker Compose Integration: Optimized for persistent container with docker exec access

  • āœ… Enhanced Deployment Verification: Automatic validation of tool count and JSON response integrity

  • āœ… Cross-Platform Support: Works on macOS, Linux, and Windows with consistent behavior

šŸ”® Planned Enhancements

  • šŸ”„ Rate Limit Handling: Automatic throttling and exponential backoff for HubSpot API limits (planned for v1.5.0)

šŸš€ Features

  • 106 HubSpot Tools - Complete CRM functionality including contacts, companies, deals, tickets, quotes, invoices, and line items

  • Docker Support - Containerized deployment for consistent environments

  • Security First - Environment variable-based configuration, no hardcoded secrets, token redaction in logs

  • Production Ready - Comprehensive error handling, secure logging, and testing

  • TypeScript - Fully typed for reliability and developer experience

šŸ“‹ Prerequisites

Essential (Required)

  • Node.js (v20 or higher)

  • npm (for dependency management)

  • HubSpot Private App or Connected App with appropriate scopes and access token

  • Claude Desktop or compatible MCP client

Optional (For Full Deployment)

  • Docker and Docker Compose (only needed for ./deploy.sh)

  • macOS/Linux/Windows (deployment script optimized for macOS)

šŸ’” First time? You can skip Docker and use ./deploy-local.sh for quick testing!

šŸ”„ Updating to Latest Version

For Existing Users

If you already have HubSpot MCP Extended installed and want to update to the latest version:

# Navigate to your project directory
cd hubspot-mcp-extended

# Pull the latest changes
git pull origin main

# Rebuild the project
npm install
npm run build

# If using Docker, rebuild the image
docker compose down
docker compose up -d --build

Option 2: Fresh Installation

# Backup your .env file first
cp .env .env.backup

# Remove old installation
rm -rf hubspot-mcp-extended

# Fresh clone and setup
git clone https://github.com/calypsoCodex/hubspot-mcp-extended.git
cd hubspot-mcp-extended
cp .env.backup .env
./deploy-local.sh  # or ./deploy.sh for Docker

Current Version: v1.4.0

Latest improvements:

  • 106 tools (added 11 Line Items API tools)

  • Enhanced parameter compatibility (objtype/objectType auto-mapping)

  • Fixed macOS deployment script (no longer requires GNU coreutils)

  • Improved Docker integration with persistent container

šŸš€ Quick Start

1. Clone Repository

git clone https://github.com/calypsoCodex/hubspot-mcp-extended.git
cd hubspot-mcp-extended

2. Configure Environment

# Copy environment template
cp .env.example .env

# Edit .env and add your HubSpot API token
# Make sure the variable name is exactly: HUBSPOT_ACCESS_TOKEN
vim .env  # or use your preferred editor

3. Deploy

Option A: Local Development (No Docker)

./deploy-local.sh

What this does:

  • Installs dependencies

  • Builds TypeScript

  • Validates deployment (checks for 106 tools)

  • No Docker required!

Option B: Docker Deployment (Production-Ready)

./deploy.sh

What this does:

  • Builds Docker image

  • Starts container with docker compose

  • Validates deployment automatically

  • Persistent container for quick docker exec access

4. Configure Claude Desktop

Update your Claude Desktop config at:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

For Local Deployment:

{
  "mcpServers": {
    "hubspot-mcp-extended": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/hubspot-mcp-extended/build/index.js"],
      "env": {
        "HUBSPOT_ACCESS_TOKEN": "YOUR_TOKEN_HERE"
      }
    }
  }
}

For Docker Deployment:

{
  "mcpServers": {
    "hubspot-mcp-extended": {
      "command": "docker",
      "args": ["exec", "-i", "hubspot-mcp-extended", "node", "build/index.js", "--stdio"]
    }
  }
}

Important: Restart Claude Desktop after configuration changes.

5. Verify Installation

Quick Validation Commands

# 1. Verify deployment (no API key needed)
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' | node build/index.js --stdio | jq '.result.tools | length'
# Expected output: 106

# 2. Test tool execution (requires API key in .env)
echo '{"jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": {"name": "get_v3_obj", "arguments": {"objectType": "contacts", "limit": "1"}}}' | node build/index.js --stdio
# Expected: Contact data or authentication error

After Successful Deployment

You should see:

  • āœ… 106 tools available in Claude Desktop

  • āœ… Tools appear in Claude's MCP tools list

  • āœ… All HubSpot operations accessible through natural language

Docker-Specific Verification

# Verify the container is running (should show "Up" status)
docker compose ps

# Check logs (should show "106 tools")
docker compose logs

# Test the MCP server through Docker exec
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' | docker exec -i hubspot-mcp-extended node build/index.js --stdio

šŸ’” Usage Examples

Example 1: Search Contacts by Email

"Find all contacts with email domain @acme.com"

Claude will:

  1. Use post-crm-v3-objects-objtype-search_search tool

  2. Construct search with:

    • objectType: "contacts" (or objtype: "contacts" - both work!)

    • filterGroups with email filter

Example 2: Create an Invoice with Line Items

"Create an invoice for Acme Corp with:
- Item 1: Consulting Services - $500
- Item 2: Software License - $1,200
Total: $1,700"

Claude will:

  1. Use post-crm-v3-objects-invoices_invoices to create invoice

  2. Use post-crm-v3-objects-line_items-batch-create_create to add line items

  3. Associate line items with invoice

Example 3: Batch Update Deals

"Update all deals in stage 'negotiation' to set close_date to end of month"

Claude will:

  1. Search deals with post-crm-v3-objects-objtype-search_search

  2. Batch update with post-crm-v3-objects-objtype-batch-update_update

Parameter Compatibility Note

Tools work with both parameter naming conventions:

  • āœ… Short names: objtype, objid (from tool names)

  • āœ… Full names: objectType, objectId (from schemas)

The server automatically maps between them, so Claude can use either form.

šŸ› ļø Development

Project Structure

hubspot-mcp-extended/
ā”œā”€ā”€ src/              # TypeScript source code
│   ā”œā”€ā”€ index.ts      # Main MCP server entry point
│   ā”œā”€ā”€ tools/        # Tool implementations
│   └── schemas/      # OpenAPI schemas
ā”œā”€ā”€ scripts/          # Build and deployment scripts
ā”œā”€ā”€ docs/             # Documentation
│   └── specs/        # OpenAPI specification files
ā”œā”€ā”€ build/            # Compiled JavaScript (generated)
└── tests/            # Test files

Building from Source

# Install dependencies
npm install

# Build TypeScript
npm run build

# Run in development mode with auto-reload
npm run dev

# Verify tool count
node -e "const tools = require('./build/index.js'); console.log('Tools:', tools.hubspotTools?.length || 'Not available');"

Testing

# Run unit tests
npm test

# Run integration tests
npm run test:integration

# Test tool listing (works without API key - shows 106 tools)
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' | node build/index.js --stdio

# Test actual tool execution (requires valid API key in .env)
echo '{"jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": {"name": "get_v3_obj", "arguments": {"objectType": "contacts", "limit": "5"}}}' | node build/index.js --stdio

# Test Docker deployment
./scripts/verify-docker-project.sh

# Automated Docker setup validation (NEW!)
./scripts/validate-docker-setup.sh

Environment Variables

  • HUBSPOT_ACCESS_TOKEN (required): Your HubSpot API access token

  • LOG_LEVEL (optional): Set logging verbosity (default: info)

šŸ”„ Tool Regeneration

This server's tools are automatically generated from HubSpot's official OpenAPI specifications. To regenerate tools when HubSpot updates their APIs:

Quick Regeneration

npm run regenerate:all

Manual Step-by-Step

# 1. Ensure HubSpot specs are at known-good version (CRITICAL)
./scripts/ensure-hubspot-version.sh

# 2. Generate tools
npm run regenerate:specs
npm run regenerate:tools

# 3. Test and verify
npm run test:tools
./deploy.sh --allow-non-main

# 4. Update documentation
npm run regenerate:manifest

Current Status

  • Tools: 106 (includes Line Items API - updated 2025-01-13)

  • Source: HubSpot official OpenAPI specs

  • Compatibility: Claude Desktop (names < 64 chars, parameter normalization)

šŸ¤ Contributing

  1. Fork the repository

  2. Create your feature branch (git checkout -b feature/amazing-feature)

  3. Commit your changes (git commit -m 'Add amazing feature')

  4. Push to the branch (git push origin feature/amazing-feature)

  5. Open a Pull Request

šŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

šŸ†˜ Support

Built with ā¤ļø for the AI and automation community

Available Tools

106 tools
delete-crm-object-schemas-v3-schemas-objtype-associations-va_varD

Remove an association

Inputs: objectType (required), associationIdentifier (required).

delete-crm-object-schemas-v3-schemas-objtype_objtypeC

Delete a schema

Inputs: objectType (required), archived.

delete-crm-v3-objects-invoices-var_varD

Archive

Inputs: invoiceId (required).

delete-crm-v3-objects-line_items-var_varD

Archive

Inputs: lineItemId (required).

delete-crm-v3-objects-objtype-objid-associations-var-var-var_varC

Remove an association between two objects

Inputs: objectId (required), objectType (required), toObjectId (required), toObjectType (required), +1 more.

delete-crm-v3-objects-objtype-objid_objidD

Archive

Inputs: objectId (required), objectType (required).

delete-crm-v3-objects-quotes-var_varC

Archive

Inputs: quoteId (required).

delete-crm-v3-properties-objtype-groups-var_varB

Archive a property group

Inputs: groupName (required), objectType (required).

delete-crm-v3-properties-objtype-var_varC

Archive a property

Inputs: objectType (required), propertyName (required).

delete-crm-v4-associations-var-var-labels-var_varD

Delete

Inputs: toObjectType (required), fromObjectType (required), associationTypeId (required).

delete-crm-v4-objects-objtype-objid-associations-var-var_varD

Delete

Inputs: objectId (required), objectType (required), toObjectId (required), toObjectType (required).

delete-crm-v4-objects-objtype-objid_objidD

Archive

Inputs: objectId (required), objectType (required).

get-crm-object-schemas-v3-schemas-objtype_objtypeC

Get an existing schema

Inputs: objectType (required).

get-crm-object-schemas-v3-schemas_schemasC

Get all schemas

Inputs: archived.

get-crm-v3-associations-var-var-types_typesC

List association types

Inputs: toObjectType (required), fromObjectType (required).

get-crm-v3-object-library-enablement_enablementD

Read All

Inputs: no named parameters.

get-crm-v3-object-library-enablement-var_varD

Read

Inputs: objectTypeId (required).

get-crm-v3-objects-invoices_invoicesD

List

Inputs: after, limit, archived, properties, +2 more.

get-crm-v3-objects-invoices-var_varD

Read

Inputs: invoiceId (required), archived, idProperty, properties, +2 more.

get-crm-v3-objects-line_items_line_itemsD

List

Inputs: after, limit, archived, properties, +2 more.

get-crm-v3-objects-line_items-var_varD

Read

Inputs: lineItemId (required), archived, idProperty, properties, +2 more.

get-crm-v3-objects-objtype-objid-associations-var_varC

List associations of an object by type

Inputs: objectId (required), objectType (required), toObjectType (required).

get-crm-v3-objects-objtype-objid_objidD

Read

Inputs: objectId (required), objectType (required).

get-crm-v3-objects-objtype_objtypeD

List

Inputs: objectType (required).

get-crm-v3-objects-quotes_quotesD

List

Inputs: after, limit, archived, properties, +2 more.

get-crm-v3-objects-quotes-var_varC

Read

Inputs: quoteId (required), archived, idProperty, properties, +2 more.

get-crm-v3-properties-objtype-groups_groupsB

Read all property groups

Inputs: objectType (required).

get-crm-v3-properties-objtype-groups-var_varC

Read a property group

Inputs: groupName (required), objectType (required).

get-crm-v3-properties-objtype_objtypeC

Read all properties

Inputs: objectType (required), archived, properties.

get-crm-v3-properties-objtype-var_varC

Read a property

Inputs: objectType (required), propertyName (required), archived, properties.

get-crm-v4-associations-definitions-configurations-all_allC

Read All

Inputs: no named parameters.

get-crm-v4-associations-definitions-configurations-var-var_varD

Read

Inputs: toObjectType (required), fromObjectType (required).

get-crm-v4-associations-var-var-labels_labelsC

Read

Inputs: toObjectType (required), fromObjectType (required).

get-crm-v4-objects-objtype-objid-associations-var_varD

List

Inputs: objectId (required), objectType (required), toObjectType (required).

get-crm-v4-objects-objtype-objid_objidD

Read

Inputs: objectId (required), objectType (required).

get-crm-v4-objects-objtype_objtypeD

List

Inputs: objectType (required).

patch-crm-object-schemas-v3-schemas-objtype_objtypeD

Update a schema

Inputs: objectType (required), labels, restorable, description, +5 more.

patch-crm-v3-objects-invoices-var_varC

Update

Inputs: invoiceId (required), properties (required), idProperty.

patch-crm-v3-objects-line_items-var_varD

Update

Inputs: lineItemId (required), properties (required), idProperty.

patch-crm-v3-objects-objtype-objid_objidC

Update. REQUIRES body parameter with properties to update. Example: {body: {properties: {"firstname": "Updated Name", "email": "newemail@example.com"}}}

Inputs: objectId (required), objectType (required), properties (required).

patch-crm-v3-objects-quotes-var_varD

Update

Inputs: quoteId (required), properties (required), idProperty.

patch-crm-v3-properties-objtype-groups-var_varC

Update a property group

Inputs: groupName (required), objectType (required), label, displayOrder.

patch-crm-v3-properties-objtype-var_varD

Update a property

Inputs: objectType (required), propertyName (required), type, label, +8 more.

patch-crm-v4-objects-objtype-objid_objidB

Update. REQUIRES body parameter with properties to update. Example: {body: {properties: {"firstname": "Updated Name", "email": "newemail@example.com"}}}

Inputs: objectId (required), objectType (required), properties (required).

post-crm-object-schemas-v3-schemas-objtype-associat_associationsC

Create an association. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: objectType (required), toObjectTypeId (required), fromObjectTypeId (required), name.

post-crm-object-schemas-v3-schemas_schemasC

Create a new schema. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: name (required), labels (required), properties (required), associatedObjects (required), +5 more.

post-crm-objects-v4-objtype-batch-upsert_upsertB

Create or update a batch of objects by unique property values. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: inputs (required), objectType (required).

post-crm-objects-v4-objtype-merge_mergeB

Merge two objects with same type. REQUIRES body parameter with merge details. Example: {body: {objectIdToMerge: "123", primaryObjectId: "456"}}

Inputs: objectType (required), objectIdToMerge (required), primaryObjectId (required).

post-crm-v3-associations-var-var-batch-archive_archiveC

Archive a batch of associations. REQUIRES body parameter with object IDs to archive. Example: {body: {inputs: [{"id": "123"}, {"id": "456"}]}}

Inputs: inputs (required), toObjectType (required), fromObjectType (required).

post-crm-v3-associations-var-var-batch-create_createC

Create a batch of associations. REQUIRES body parameter with objects to create. Example: {body: {inputs: [{"properties": {"firstname": "John", "lastname": "Doe", "email": "john@example.com"}}]}}

Inputs: inputs (required), toObjectType (required), fromObjectType (required).

post-crm-v3-associations-var-var-batch-read_readC

Read a batch of associations. REQUIRES body parameter with object IDs and properties to retrieve. Example: {body: {inputs: [{"id": "123"}, {"id": "456"}], properties: ["firstname", "lastname", "email"], propertiesWithHistory: []}}

Inputs: inputs (required), toObjectType (required), fromObjectType (required).

post-crm-v3-objects-invoices-batch-archive_archiveA

Archive a batch of invoices by ID. REQUIRES body parameter with object IDs to archive. Example: {body: {inputs: [{"id": "123"}, {"id": "456"}]}}

Inputs: inputs (required).

post-crm-v3-objects-invoices-batch-create_createB

Create a batch of invoices. REQUIRES body parameter with objects to create. Example: {body: {inputs: [{"properties": {"firstname": "John", "lastname": "Doe", "email": "john@example.com"}}]}}

Inputs: inputs (required).

post-crm-v3-objects-invoices-batch-read_readA

Read a batch of invoices by internal ID, or unique property values. REQUIRES body parameter with object IDs and properties to retrieve. Example: {body: {inputs: [{"id": "123"}, {"id": "456"}], properties: ["firstname", "lastname", "email"], propertiesWithHistory: []}}

Inputs: inputs (required), properties (required), propertiesWithHistory (required), archived, +1 more.

post-crm-v3-objects-invoices-batch-update_updateA

Update a batch of invoices by internal ID, or unique property values. REQUIRES body parameter with objects to update. Example: {body: {inputs: [{"id": "123", "properties": {"firstname": "John Updated"}}]}}

Inputs: inputs (required).

post-crm-v3-objects-invoices-batch-upsert_upsertA

Create or update a batch of invoices by unique property values. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: inputs (required).

post-crm-v3-objects-invoices_invoicesD

Create. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: properties (required), associations.

post-crm-v3-objects-invoices-search_searchA

POST /crm/v3/objects/invoices/search. REQUIRES body parameter with search criteria. Example: {body: {filterGroups: [{filters: [{propertyName: "email", operator: "EQ", value: "john@example.com"}]}], properties: ["firstname", "lastname", "email"]}}

Inputs: after, limit, query, sorts, +2 more.

post-crm-v3-objects-line_items-batch-archive_archiveA

Archive a batch of line items by ID. REQUIRES body parameter with object IDs to archive. Example: {body: {inputs: [{"id": "123"}, {"id": "456"}]}}

Inputs: inputs (required).

post-crm-v3-objects-line_items-batch-create_createB

Create a batch of line items. REQUIRES body parameter with objects to create. Example: {body: {inputs: [{"properties": {"firstname": "John", "lastname": "Doe", "email": "john@example.com"}}]}}

Inputs: inputs (required).

post-crm-v3-objects-line_items-batch-read_readA

Read a batch of line items by internal ID, or unique property values. REQUIRES body parameter with object IDs and properties to retrieve. Example: {body: {inputs: [{"id": "123"}, {"id": "456"}], properties: ["firstname", "lastname", "email"], propertiesWithHistory: []}}

Inputs: inputs (required), properties (required), propertiesWithHistory (required), archived, +1 more.

post-crm-v3-objects-line_items-batch-update_updateA

Update a batch of line items by internal ID, or unique property values. REQUIRES body parameter with objects to update. Example: {body: {inputs: [{"id": "123", "properties": {"firstname": "John Updated"}}]}}

Inputs: inputs (required).

post-crm-v3-objects-line_items-batch-upsert_upsertB

Create or update a batch of line items by unique property values. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: inputs (required).

post-crm-v3-objects-line_items_line_itemsC

Create. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: properties (required), associations.

post-crm-v3-objects-line_items-search_searchB

POST /crm/v3/objects/line_items/search. REQUIRES body parameter with search criteria. Example: {body: {filterGroups: [{filters: [{propertyName: "email", operator: "EQ", value: "john@example.com"}]}], properties: ["firstname", "lastname", "email"]}}

Inputs: after, limit, query, sorts, +2 more.

post-crm-v3-objects-objtype-batch-archive_archiveA

Archive a batch of objects by ID. REQUIRES body parameter with object IDs to archive. Example: {body: {inputs: [{"id": "123"}, {"id": "456"}]}}

Inputs: inputs (required), objectType (required).

post-crm-v3-objects-objtype-batch-create_createC

Create a batch of objects. REQUIRES body parameter with objects to create. Example: {body: {inputs: [{"properties": {"firstname": "John", "lastname": "Doe", "email": "john@example.com"}}]}}

Inputs: inputs (required), objectType (required).

post-crm-v3-objects-objtype-batch-read_readA

Read a batch of objects by internal ID, or unique property values. REQUIRES body parameter with object IDs and properties to retrieve. Example: {body: {inputs: [{"id": "123"}, {"id": "456"}], properties: ["firstname", "lastname", "email"], propertiesWithHistory: []}}

Inputs: inputs (required), objectType (required), properties (required), propertiesWithHistory (required), +1 more.

post-crm-v3-objects-objtype-batch-update_updateA

Update a batch of objects by internal ID, or unique property values. REQUIRES body parameter with objects to update. Example: {body: {inputs: [{"id": "123", "properties": {"firstname": "John Updated"}}]}}

Inputs: inputs (required), objectType (required).

post-crm-v3-objects-objtype-batch-upsert_upsertB

Create or update a batch of objects by unique property values. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: inputs (required), objectType (required).

post-crm-v3-objects-objtype-gdpr-delete_gdpr-deleteC

GDPR DELETE. REQUIRES body parameter with object properties. Example for companies: {body: {properties: {"name": "Company Name", "domain": "example.com", "industry": "COMPUTER_SOFTWARE"}}}

Inputs: objectId (required), objectType (required), idProperty.

post-crm-v3-objects-objtype-merge_mergeC

Merge two objects with same type. REQUIRES body parameter with object properties. Example for companies: {body: {properties: {"name": "Company Name", "domain": "example.com", "industry": "COMPUTER_SOFTWARE"}}}

Inputs: objectType (required), objectIdToMerge (required), primaryObjectId (required).

post-crm-v3-objects-objtype_objtypeB

Create. REQUIRES body parameter with object properties. Example for companies: {body: {properties: {"name": "Company Name", "domain": "example.com", "industry": "COMPUTER_SOFTWARE"}}}

Inputs: objectType (required), properties (required), associations.

post-crm-v3-objects-objtype-search_searchB

POST /crm/v3/objects/{objectType}/search. REQUIRES body parameter with search criteria. Example: {body: {filterGroups: [{filters: [{propertyName: "email", operator: "EQ", value: "john@example.com"}]}], properties: ["firstname", "lastname", "email"]}}

Inputs: objectType (required), after, limit, query, +3 more.

post-crm-v3-objects-quotes-batch-archive_archiveA

Archive a batch of quotes by ID. REQUIRES body parameter with object IDs to archive. Example: {body: {inputs: [{"id": "123"}, {"id": "456"}]}}

Inputs: inputs (required).

post-crm-v3-objects-quotes-batch-create_createB

Create a batch of quotes. REQUIRES body parameter with objects to create. Example: {body: {inputs: [{"properties": {"firstname": "John", "lastname": "Doe", "email": "john@example.com"}}]}}

Inputs: inputs (required).

post-crm-v3-objects-quotes-batch-read_readA

Read a batch of quotes by internal ID, or unique property values. REQUIRES body parameter with object IDs and properties to retrieve. Example: {body: {inputs: [{"id": "123"}, {"id": "456"}], properties: ["firstname", "lastname", "email"], propertiesWithHistory: []}}

Inputs: inputs (required), properties (required), propertiesWithHistory (required), archived, +1 more.

post-crm-v3-objects-quotes-batch-update_updateA

Update a batch of quotes by internal ID, or unique property values. REQUIRES body parameter with objects to update. Example: {body: {inputs: [{"id": "123", "properties": {"firstname": "John Updated"}}]}}

Inputs: inputs (required).

post-crm-v3-objects-quotes-batch-upsert_upsertA

Create or update a batch of quotes by unique property values. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: inputs (required).

post-crm-v3-objects-quotes_quotesD

Create. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: properties (required), associations.

post-crm-v3-objects-quotes-search_searchC

POST /crm/v3/objects/quotes/search. REQUIRES body parameter with search criteria. Example: {body: {filterGroups: [{filters: [{propertyName: "email", operator: "EQ", value: "john@example.com"}]}], properties: ["firstname", "lastname", "email"]}}

Inputs: after, limit, query, sorts, +2 more.

post-crm-v3-properties-objtype-batch-archive_archiveC

Archive a batch of properties. REQUIRES body parameter with object IDs to archive. Example: {body: {inputs: [{"id": "123"}, {"id": "456"}]}}

Inputs: inputs (required), objectType (required).

post-crm-v3-properties-objtype-batch-create_createC

Create a batch of properties. REQUIRES body parameter with objects to create. Example: {body: {inputs: [{"properties": {"firstname": "John", "lastname": "Doe", "email": "john@example.com"}}]}}

Inputs: inputs (required), objectType (required).

post-crm-v3-properties-objtype-batch-read_readD

Read a batch of properties. REQUIRES body parameter with object IDs and properties to retrieve. Example: {body: {inputs: [{"id": "123"}, {"id": "456"}], properties: ["firstname", "lastname", "email"], propertiesWithHistory: []}}

Inputs: inputs (required), archived (required), objectType (required).

post-crm-v3-properties-objtype-groups_groupsB

Create a property group. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: name (required), label (required), objectType (required), displayOrder.

post-crm-v3-properties-objtype_objtypeC

Create a property. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: name (required), type (required), label (required), fieldType (required), +11 more.

post-crm-v4-associations-definitions-configurations-var-va_purgeD

Delete. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: inputs (required), toObjectType (required), fromObjectType (required).

post-crm-v4-associations-definitions-configurations-var-v_createD

Create. REQUIRES body parameter with objects to create. Example: {body: {inputs: [{"properties": {"firstname": "John", "lastname": "Doe", "email": "john@example.com"}}]}}

Inputs: inputs (required), toObjectType (required), fromObjectType (required).

post-crm-v4-associations-definitions-configurations-var-v_updateD

Update. REQUIRES body parameter with objects to update. Example: {body: {inputs: [{"id": "123", "properties": {"firstname": "John Updated"}}]}}

Inputs: inputs (required), toObjectType (required), fromObjectType (required).

post-crm-v4-associations-usage-high-usage-report-var_varD

Report. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: body (required), userId (required).

post-crm-v4-associations-var-var-batch-archive_archiveC

Delete. REQUIRES body parameter with object IDs to archive. Example: {body: {inputs: [{"id": "123"}, {"id": "456"}]}}

Inputs: inputs (required), toObjectType (required), fromObjectType (required).

post-crm-v4-associations-var-var-batch-associate-default_defaultC

Create Default Associations. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: inputs (required), toObjectType (required), fromObjectType (required).

post-crm-v4-associations-var-var-batch-create_createD

Create. REQUIRES body parameter with objects to create. Example: {body: {inputs: [{"properties": {"firstname": "John", "lastname": "Doe", "email": "john@example.com"}}]}}

Inputs: inputs (required), toObjectType (required), fromObjectType (required).

post-crm-v4-associations-var-var-batch-labels-archive_archiveC

Delete Specific Labels. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: inputs (required), toObjectType (required), fromObjectType (required).

post-crm-v4-associations-var-var-batch-read_readC

Read. REQUIRES body parameter with object IDs and properties to retrieve. Example: {body: {inputs: [{"id": "123"}, {"id": "456"}], properties: ["firstname", "lastname", "email"], propertiesWithHistory: []}}

Inputs: inputs (required), toObjectType (required), fromObjectType (required).

post-crm-v4-associations-var-var-labels_labelsC

Create. REQUIRES body parameter with request data. Check the inputSchema for required body structure.

Inputs: name (required), label (required), toObjectType (required), fromObjectType (required), +1 more.

post-crm-v4-objects-objtype-batch-archive_archiveA

Archive a batch of objects by ID. REQUIRES body parameter with object IDs to archive. Example: {body: {inputs: [{"id": "123"}, {"id": "456"}]}}

Inputs: inputs (required), objectType (required).

post-crm-v4-objects-objtype-batch-create_createB

Create a batch of objects. REQUIRES body parameter with objects to create. Example: {body: {inputs: [{"properties": {"firstname": "John", "lastname": "Doe", "email": "john@example.com"}}]}}

Inputs: inputs (required), objectType (required).

post-crm-v4-objects-objtype-batch-read_readA

Read a batch of objects by internal ID, or unique property values. REQUIRES body parameter with object IDs and properties to retrieve. Example: {body: {inputs: [{"id": "123"}, {"id": "456"}], properties: ["firstname", "lastname", "email"], propertiesWithHistory: []}}

Inputs: inputs (required), objectType (required), properties (required), propertiesWithHistory (required), +1 more.

post-crm-v4-objects-objtype-batch-update_updateB

Update a batch of objects by internal ID, or unique property values. REQUIRES body parameter with objects to update. Example: {body: {inputs: [{"id": "123", "properties": {"firstname": "John Updated"}}]}}

Inputs: inputs (required), objectType (required).

post-crm-v4-objects-objtype-gdpr-delete_gdpr-deleteB

GDPR DELETE. REQUIRES body parameter with object properties. Example for companies: {body: {properties: {"name": "Company Name", "domain": "example.com", "industry": "COMPUTER_SOFTWARE"}}}

Inputs: objectId (required), objectType (required), idProperty.

post-crm-v4-objects-objtype_objtypeC

Create. REQUIRES body parameter with object properties. Example for companies: {body: {properties: {"name": "Company Name", "domain": "example.com", "industry": "COMPUTER_SOFTWARE"}}}

Inputs: objectType (required), properties (required), associations.

put-crm-v3-objects-objtype-objid-associations-var-var-var_varC

Associate an object with another object

Inputs: body (required), objectId (required), objectType (required), toObjectId (required), +2 more.

put-crm-v4-associations-var-var-labels_labelsD

Update

Inputs: label (required), toObjectType (required), fromObjectType (required), associationTypeId (required), +1 more.

put-crm-v4-objects-objtype-objid-associations-var-var_varD

Create

Inputs: body (required), objectId (required), objectType (required), toObjectId (required), +1 more.

put-crm-v4-objects-var-var-associations-default-var-var_varD

Create Default

Inputs: body (required), toObjectId (required), fromObjectId (required), toObjectType (required), +1 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.1/5.0

    Scored across 106 tools

    Disambiguation1/5

    The tool names are raw API paths with placeholders like 'objtype' and 'var', and there are multiple v3/v4 versions of the same operations (e.g., get-crm-v3-objects-objtype-objid_objid vs get-crm-v4-objects-objtype-objid_objid). Generic objtype tools overlap with specific object type tools (quotes, invoices, line_items), and descriptions are often just 'Read' or 'Archive', making accurate selection nearly impossible.

    Naming Consistency3/5

    All tools follow a uniform pattern of HTTP method + hyphenated path segments, which is consistent. However, the heavy use of vague placeholders like 'objtype' and 'var', and the mixing of generic and specific object types in the same pattern, reduces readability and predictability.

    Tool Count1/5

    With 106 tools, the set is far beyond what an agent can effectively navigate. Many tools are near-duplicates, such as v3/v4 variants and generic vs specific object type versions of the same CRUD operations, so most do not earn their place.

    Completeness4/5

    The tool set comprehensively covers CRM object operations: CRUD, batch, search, upsert, associations, properties, schemas, and specific object types like quotes and invoices. The generic objtype tools allow any object type, so core workflows are supported, though the redundancy of v3/v4 and generic/specific tools makes the surface bloated.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      F
      maintenance
      MCP server for HubSpot CRM — 33 tools covering contacts, companies, deals, pipelines, lists, marketing emails, forms, workflows, and properties.
      30
      14 npm
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server for the HubSpot CRM API with tools for managing contacts, companies, deals, tickets, and CRM workflows. Generated with MCPForge. Sensitive operations can be protected with permissions, audit logs, and approval workflows.
      19 npm
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      A comprehensive MCP server providing Claude with enterprise-grade access to HubSpot CRM, including contacts, deals, quotes, workflows, and automation through 37 tools.
      37
      10 npm
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      Custom MCP server for HubSpot CRM providing ICP segmentation, scoring, duplicate detection, Data Quality Score, and lifecycle stage automation. Exposes 39 tools to enhance HubSpot's native capabilities.
      -