HubSpot MCP Server
Exposes HubSpot CRM data and actions as tools for AI agents, enabling contact lookup, company search, contact creation, and activity logging via natural language.
README
HubSpot MCP Server
A Model Context Protocol (MCP) server that exposes HubSpot CRM data and actions as tools for AI agents (Claude, Cursor, and any other MCP-compatible client) — so an agent can look up a contact, search companies, upsert a lead, and log a call or note, all through typed, validated tool calls instead of hand-rolled API glue.
Battle-tested against a live HubSpot account: contact lookup/upsert, company search, and note logging all verified end-to-end (see Tools for sample I/O).
If you find this useful, a star helps other people building MCP integrations find it.
Architecture
src/
hubspotClient.ts HubSpot REST API wrapper (auth, requests, 429 retry, typed responses)
index.ts MCP server: tool definitions + stdio transport wiring
- Transport:
StdioServerTransport— the server communicates with its MCP client over stdin/stdout, so it's launched as a subprocess (no network port to manage). - Auth: A HubSpot Private App access token is read from the
HUBSPOT_ACCESS_TOKENenvironment variable at startup. The token is never hardcoded or logged. - Error handling: All HubSpot API calls go through
HubSpotClient, which:- Converts network/HTTP failures into a typed
HubSpotApiErrorwith a client-safe message. - Retries
429 Too Many Requestsresponses (respecting theRetry-Afterheader, with exponential backoff as a fallback) up to 2 times before surfacing the error. - Never throws out of a tool handler —
index.tscatches every error and returns an MCPisError: truetool result instead of crashing the server.
- Converts network/HTTP failures into a typed
- Tool schemas: Each tool's input is defined with
zod, giving strict runtime validation and auto-generated JSON Schema for the MCP client.
Setup
cd hubspot-mcp-server
npm install
cp .env.example .env # then fill in HUBSPOT_ACCESS_TOKEN
npm run build
Generate a HubSpot Private App access token: HubSpot → Settings → Integrations → Private Apps → Create a private app. Grant at minimum:
crm.objects.contacts.read/crm.objects.contacts.writecrm.objects.companies.readcrm.objects.notes.write(or the relevant engagements scope for the activity types you plan to log)
Running standalone
HUBSPOT_ACCESS_TOKEN=pat-xxxxx npm start
For local development without a build step:
HUBSPOT_ACCESS_TOKEN=pat-xxxxx npm run dev
Configuring Claude Desktop
Add this server to your claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"hubspot": {
"command": "node",
"args": ["/absolute/path/to/hubspot-mcp-server/dist/index.js"],
"env": {
"HUBSPOT_ACCESS_TOKEN": "pat-xxxxx"
}
}
}
}
Restart Claude Desktop after saving. The four HubSpot tools will appear in the tool picker.
Tools
hubspot_get_contact
Look up a contact by email.
{ "email": "jane.doe@example.com" }
Returns first name, last name, lifecycle stage, and associated company name (if any).
hubspot_search_companies
Search companies by name or domain.
{ "query": "acme" }
Returns matching company names and domains.
hubspot_create_contact
Create a contact, or update it if the email already exists.
{
"email": "jane.doe@example.com",
"firstName": "Jane",
"lastName": "Doe",
"company": "Acme Corp"
}
hubspot_log_activity
Log an engagement on a contact's timeline.
{
"contactId": "12345",
"activityType": "NOTE",
"body": "Discussed renewal timeline on the call."
}
activityType is one of NOTE, EMAIL, or CALL.
Notes
- Rate limits: HubSpot returns
429when the account's rate limit is exceeded. The client retries automatically; if retries are exhausted, the tool returns a clear error message rather than crashing. - All tool errors (invalid input, HubSpot API errors, network failures) are returned as MCP tool errors (
isError: true) so the calling agent can react instead of the server process dying.
License
MIT — see LICENSE.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.