
HubSpot
io.github.ohneben由 GitHub 帳號 ohneben 發布v2.0.1更新於 Nov 3, 2026
HubSpot API: 1,000+ endpoints as safety-categorized, hub- and plan-aware MCP tools, stdio or HTTP.
發布方自己的服務:Spot
概覽
自架式的 HubSpot MCP 伺服器,把整個公開 HubSpot API 以具備安全分級、感知 hub 與方案的工具形式,透過 stdio 或 HTTP 提供。
- 可以做什麼
- 搜尋、檢視並呼叫涵蓋 CRM、CMS、行銷、自動化、對話、商務、檔案、設定與 Webhook 的 HubSpot 端點
- 讀寫 CRM 記錄、屬性、管道、清單、關聯以及匯入匯出
- 管理 CMS 頁面、部落格文章、HubDB 資料表和原始碼,並支援檔案上傳
- 建立並寄送行銷或交易性電子郵件、加入序列、回覆對話
- 執行 CRM GraphQL 查詢與原始 API 請求,並回報權杖的權限範圍、用量和缺少的方案等級
- 適用情境
- 適合讓助理直接操作實際的 HubSpot 入口網站:查詢聯絡人和交易、建立或更新記錄、管理內容,或查核某個權杖能做什麼,而不是只依賴少數精選的 CRM 工具。
- 執行需求
- 需要 HubSpot 帳號,以及服務金鑰或舊版私有應用程式權杖(也可用 OAuth 權杖),填入 HUBSPOT_ACCESS_TOKEN。以 Docker 映像執行,或用 Node.js 18 以上從原始碼執行。使用 HTTP 傳輸時,除非僅綁定回送位址,否則必須設定 MCP_AUTH_TOKEN。歐盟資料駐留需設定 HUBSPOT_BASE_URL。需要能連線至 HubSpot API 的網路。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 HubSpot,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
ohneben's HubSpot MCP
License & checks
MCP registries
[MCP Registry] [Listed on mcpservers.org] [Hubspot-MCP MCP server]
The most complete HubSpot MCP server there is. Run your entire HubSpot account in plain language from Claude, Cursor, or any other MCP client.
This Model Context Protocol server exposes the
whole public HubSpot API — all 1,076 endpoints across 102 APIs, in 687
tools — CRM, CMS, Marketing, Automation, Conversations, Commerce, Files,
Settings, Webhooks and more, generated straight from HubSpot's own OpenAPI
definitions. Endpoints HubSpot repeats per object type are one tool each
(crm_objects_search with objectType: "deals" instead of 32 separate search
tools), and every tool description says when to use it. Every tool is
safety-categorized (🟢 read-only / 🟡 write / 🔴 destructive) and — unique to
this server — hub & plan aware: HubSpot publishes which hub and tier every
API needs (Free / Starter / Professional / Enterprise), and this server carries
that straight into each tool plus a live capability report for your
portal. It runs over stdio (Claude Desktop and other local launchers) or
Streamable HTTP (hosted in Docker), and ships with retries, client-side rate
limiting tuned to HubSpot's burst caps, and request timeouts so it holds up
against a live account.
Why you'll want this
Some MCP servers just forward a slice of the API. This one is built to be safe to hand to an LLM, complete, and easy to run for real:
How it compares
There are a few ways to reach HubSpot from an AI assistant today. Here's how this server stacks up against the alternatives:
✅ = yes · ➖ = partial / not documented · ❌ = no. Compiled from each project's public documentation; this is an unofficial project, not affiliated with HubSpot or the projects listed. Tool counts are approximate and move as APIs evolve.
The short version: the official remote server is a great managed on-ramp but covers a handful of curated tools. The community servers are solid but CRM-centric, without plan awareness or safety guardrails. This one gives you the entire public API, hub/plan awareness no one else has, both transports, a production Docker deployment, and curated safety categories — self-hosted, on your token, MIT.
What you can do
Once it's connected, ask your assistant things like:
- "Find [email protected], show her company, open deals and the last emails we exchanged."
- "Create a $12,000 deal 'Acme expansion' in the Sales pipeline, stage Qualified, associated with Acme Corp."
- "Search contacts created this month with lifecycle stage MQL and add them to the 'Q3 nurture' list."
- "Which HubDB tables exist? Add a row to 'pricing' and publish the table."
- "Clone last month's newsletter as a draft — don't publish."
- "Upload this CSV and start a contact import mapped to email + first name."
- "What can my token do? Check my API usage and which scopes are missing for HubDB." (→
hubspot_get_capabilities) - "Merge these two duplicate contacts — after showing me both records first."
Tools are generated automatically from HubSpot's specs and grouped into 🟢 read-only, 🟡 write and 🔴 destructive — so a well-behaved host can treat each group differently.
How it works
The server parses 104 bundled OpenAPI definitions (fetched from HubSpot's public
API index, which also publishes per-API hub/tier requirements) into MCP
tools — resolving $refs, guarding against recursive schemas, merging
endpoints that only differ by object type into one tool, deriving clean names
like crm_objects_search and hubdb_tables_create_table, and tagging each
tool with a curated safety category, its plan requirement and its OAuth scopes.
Your access token is injected server-side on every request; the model never
sees or handles it.
Hub & plan awareness
HubSpot isn't one API — what you can call depends on which hubs (Marketing, Sales, Service, Content, Commerce, Operations) and which tier (Free, Starter, Professional, Enterprise) the portal has, plus the scopes granted to your token. This server is built around that reality:
-
Every tool description carries the requirement, from HubSpot's own index:
Consolidated tools state it per value:
crm_objects_listlists which object types need a paid tier in itsobjectTypeparameter. -
An access check runs when the server starts. HubSpot has no API that returns a portal's subscription, so the server combines what it can observe: the token's granted scopes, and one cheap read per paid-tier or beta group (up to about 30 API calls; plan gates only surface as 403s). Every group gets a status:
available,missing_scopes,blocked(plan tier, user permission, or a 401 from an API that does not accept this kind of token) orunverified. HubSpot's error details count: a 403 that names scopes the token lacks is a missing scope, whileMISSING_SCOPESfor an object whose scopes the token already holds is how HubSpot answers a plan gate, so that is reported as blocked. A read that succeeds proves read access only; a paid-tier API can still refuse writes, and the report says so. The model receives a summary in the server instructions,hubspot_search_endpointsmarks each result (and takesusable_only: true), andhubspot_get_capabilitiesreturns the full report with reasons,"unlockedByScopes": "13/16"counts and the scopes to add;refresh: trueruns it again. Turn it off withHUBSPOT_CAPABILITY_CHECK=false. -
403s come back with the fix: missing scope → the exact scope name and where to grant it; plan-gated API → the tier HubSpot requires.
Requirements
- A HubSpot account and a service key (or an existing legacy private app token); see Get your API credentials.
- Docker (Docker Desktop on macOS/Windows) for the quick start below — or Node.js ≥ 18 to run from source.
Quick start (Docker)
1. Add your credentials. Copy the example config and fill it in:
2. Start the server:
The bundled docker-compose.yml binds to 127.0.0.1:8765 only, so the server is
reachable from your machine but not the network.
3. Confirm it's running:
4. Connect your MCP client. The MCP endpoint is http://localhost:8765/mcp.
-
Claude Desktop — add a custom connector (Settings → Connectors) pointing at the URL, or bridge it locally with
mcp-remote. Add this undermcpServersin your config, then fully quit and reopen the app:(Drop the
--headerline only if the server runs without a token, which it allows on a loopback bind alone.) -
Claude Code — one command:
-
Claude Cowork — shares Claude Code's MCP config, so the command above makes the tools available there too.
Tip: by default the model sees 6 tools and reaches every endpoint through search → inspect → invoke. For one tool per endpoint set
HUBSPOT_TOOL_MODE=all(690 tools) and trim it withHUBSPOT_INCLUDE_GROUPS(e.g.contacts,companies,deals,tickets,lists) — see Context footprint for measured numbers per configuration.
Prefer a prebuilt image?
Every push to main publishes a ready-to-run image to the GitHub Container
Registry, so you can skip the local build entirely:
Get your API credentials
The recommended way is a service key, HubSpot's replacement for legacy private apps:
- In HubSpot, open Settings → Integrations → Service Keys (or Development → Keys → Service Keys) and create a key. You need super admin rights or the Developer tools access permission.
- Select the scopes you want the assistant to reach. Scopes map 1:1 to tool
groups: grant read scopes (
crm.objects.contacts.read, …) for a reporting setup, and add write scopes only where you want changes. - Copy the key (
pat-…) →HUBSPOT_ACCESS_TOKENin.env. It is sent as a bearer token exactly like a private app token, so nothing else changes.
Notes:
-
Service keys are in public beta and differ from private apps in three ways that matter here: they do not support GraphQL (set
HUBSPOT_ENABLE_GRAPHQL=false), rotation keeps the old key valid for a 7-day grace period, and the scope and usage figures in the capability report may be incomplete for them. -
Existing private app tokens keep working. HubSpot stops the creation of new legacy private apps (existing portals from 26 October 2026, new portals from 28 September 2026); apps already created are not affected. A private app is still the only option here if you rely on the GraphQL tool.
-
OAuth access tokens work too (for apps you've built) — but they expire after ~30 minutes and this server does not refresh them; a service key or private app token is the right fit for a long-running server.
-
The token determines the portal — no portal ID needed.
-
EU data residency: if your portal lives in HubSpot's EU data center, set
HUBSPOT_BASE_URL=https://api-eu1.hubapi.com.
Configuration
Everything is set in .env (copied from .env.example):
After changing .env, reload with docker compose up -d --force-recreate.
Run npm run list-tools (no credentials needed) to print the full catalog, the
per-category counts, and every group key you can filter on — add --names to
list all 687 tool names with the endpoint each one calls.
Tool safety categories
Each tool's description starts with one of these banners and carries the matching MCP annotations:
That's 302 read-only · 305 write · 80 destructive = 687 endpoint tools
(443 · 485 · 148 = 1,076 endpoints), plus the three power tools below. Hosts
that respect annotations (Claude included) can require confirmation for
destructiveHint tools and trust readOnlyHint tools automatically. Prefer to
lock it down further? Set HUBSPOT_READ_ONLY=true to expose only the 302
read-only tools (plus the 🟢 capability and GraphQL tools).
Coverage by area (APIs / endpoints by 🟢 read / 🟡 write / 🔴 destructive / tools)
Context footprint
What does the tool list cost in model context? Measured on the bundled specs
(tools/list JSON payload; tokens ≈ chars ÷ 3.6):
In discovery mode each hubspot_get_endpoint lookup adds only the schema the
model asked for: about 350 tokens for a typical endpoint, up to ~12k for the
largest CMS page bodies.
¹ HUBSPOT_INCLUDE_GROUPS=contacts,companies,deals,tickets,lists,properties,associations,pipelines,crm-owners,notes,tasks,calls,emails,meetings
How to read that:
- Discovery mode loses no coverage: all 1,076 endpoints stay callable through search → inspect → invoke, at the cost of one or two extra calls the first time the model uses an endpoint.
- Clients with tool search / deferred loading (Claude Code, claude.ai
connectors) load tool definitions on demand, so
HUBSPOT_TOOL_MODE=allworks well there; narrow it with aHUBSPOT_INCLUDE_GROUPSpreset and/orHUBSPOT_READ_ONLY=true. - Responses consume context too. Cap outliers with
HUBSPOT_MAX_RESPONSE_CHARS(e.g.40000) and request only thepropertiesyou need on CRM reads. - Oversized inline schemas are already handled: the four pathological recursive schemas (list filters, workflow definitions — ~1.7 MB each fully inlined) are budget-pruned to ≤24 KB with their top levels intact. Input schemas also drop examples and any prose below the body's own fields; every field, type, enum and required list stays.
The power tools
Besides the generated endpoint tools, the server ships four hand-built ones:
hubspot_get_capabilities🟢 — the access report described above. Returns the startup check without new API calls;refresh: trueruns it again.hubspot_graphql_query🟢 — HubSpot's CRM GraphQL API (POST /collector/graphql). Query-only by design (HubSpot exposes no mutations), so it stays available even in read-only mode. Requires thecollector.graphql_query.executescope and Marketing/Content Hub Pro+.hubspot_api_request🔴 — raw escape hatch for any path on the HubSpot host (new betas, undocumented corners). Same auth injection, throttling and retries. Hidden in read-only mode.- Discovery mode (the default) — replaces the 687
endpoint tools with
hubspot_search_endpoints→hubspot_get_endpoint→hubspot_invoke_endpointover the same registry. All filters (groups, beta, read-only) still apply; in read-only mode the invoke tool physically cannot reach a write because writes aren't in the registry.
Upgrading from 1.x
2.0 merges endpoints that HubSpot repeats per object type into one tool with a
selector argument. Every endpoint is still reachable and sends the same
request; only tool names and a few argument names change. Update saved
prompts, client allowlists and permission rules that name tools. Group keys
for HUBSPOT_INCLUDE_GROUPS / HUBSPOT_EXCLUDE_GROUPS (contacts, deals,
pages, …) are unchanged.
Unchanged: endpoints only one type has (contacts_gdpr_delete, landing page
folders, blog post drafts and revisions, blog create/update, whose bodies differ
per resource). npm run list-tools -- --names prints every tool with the endpoint
it calls. POST endpoints that publish, schedule or restore existing content are
now labelled 🟡 updates data instead of creates data.
Two defaults change as well: HUBSPOT_TOOL_MODE is now discovery (set it to
all to expose the endpoint tools themselves), and the server runs the access
check at startup, which costs up to about 30 API calls per start
(HUBSPOT_CAPABILITY_CHECK=false turns it off).
Run from source (stdio, no Docker)
Prefer the classic stdio mode for Claude Desktop? Build it locally:
Then point Claude Desktop at the compiled entrypoint in
claude_desktop_config.json:
Keeping the specs current
The bundled files under spec/ are the source of truth for the tools. They are
fetched from HubSpot's own public API index
(https://api.hubspot.com/public/api/spec/v1/specs), which lists every public
API with per-version OpenAPI documents and the hub/tier requirements this
server bakes into tool descriptions. spec/catalog.json records what was
fetched (API, version, stage, beta flag, requirements, docs links).
To refresh against HubSpot's latest:
New endpoints become new tools automatically — no code changes. The fetch script prefers each API's stable classic version (v1/v3/v4) and falls back to dated or beta versions when that's all HubSpot offers; a couple of APIs are pinned to bundle multiple genuinely-different versions (OAuth v1 + v3, Communication Preferences v3 + v4).
Development
CI builds and tests every push across Node 20 and 22; pushes to main also
publish a Docker image to the GitHub Container Registry.
Notes & conventions
- Transports:
MCP_TRANSPORT=stdio(default) for local launchers;MCP_TRANSPORT=httpfor the always-on Streamable-HTTP server the Docker image runs. - Paging: CRM list tools use cursor paging — pass
limitand theaftercursor frompaging.next.after. Ask for the properties you need via thepropertiesparameter (arrays become repeated query params). - Selectors: consolidated tools take
objectType(crm_objects_*),pageType(cms_pages_*) orblogResource(cms_blog_*).objectTypeaccepts names (contacts,line_items), objectTypeIds (0-3) and custom object types (2-12345). - Search:
crm_objects_searchand the other*_searchtools take a JSONbodywithfilterGroups,sorts,query,properties,limitandafter. HubSpot caps search at ~5 req/s per token — the built-in search throttle keeps you under it. - Batch tools (
crm_objects_batch_read,crm_objects_batch_create, …) are the efficient way to touch many records — prefer them over loops of single calls. - Associations: use the v4 association tools (
associations_*) to link records, with optional labels via the association-schema tools. - File uploads: multipart tools accept file fields as
{"fileName": "report.pdf", "contentBase64": "…"}(orcontentfor plain text); other fields are sent as regular form fields, objects as JSON strings. - Deletes are archives for CRM objects (recycle bin, ~90 days) — the truly
permanent ones are the 🔴
gdpr_deletepurge tools and record merges. - Rate limits: HubSpot enforces burst caps per 10 s (private apps:
100–200/10 s depending on plan; OAuth apps ~110/10 s) plus daily caps. The
server self-throttles at
HUBSPOT_MAX_REQUESTSper window and retries any429it still receives, honoringRetry-After. Check real usage anytime viahubspot_get_capabilities. - Request bodies: write tools take a
bodyargument; its schema is resolved from the spec and shown to the model (e.g.crm_objects_createexpects{"properties": {…}}). - Beta APIs (developer preview / public beta) are included by default and
labelled ⚠️ in descriptions; hide them with
HUBSPOT_INCLUDE_BETA=false.
Security
- Your access token lives only in
.env, which is git-ignored. Never commit real secrets. The token grants whatever its scopes allow — if it leaks, expire it in Settings → Integrations → Service Keys (or Private Apps for a legacy token). - The HTTP endpoint refuses to start unauthenticated once it is bound beyond
this machine. Set
MCP_AUTH_TOKEN(openssl rand -hex 32) and send it as anAuthorization: Bearer <token>header, ideally behind TLS. A loopback bind still needs no token, and is additionally protected against DNS rebinding by aHostheader check. - Destructive tools (delete / merge / GDPR purge) and send tools
(marketing & transactional email, sequences) carry the right annotations so a
well-behaved host prompts before acting — keep that confirmation on, or run
with
HUBSPOT_READ_ONLY=true. - Scope the blast radius at the source: grant the service key only the scopes
you actually need — the startup access check and
hubspot_get_capabilitiestell you what's missing when you want more. The check itself only reads.
See SECURITY.md for the full policy and how to report a vulnerability.
Credits & license
An unofficial community integration for HubSpot; not affiliated with or endorsed by HubSpot. Built on the Model Context Protocol. Tools are generated from HubSpot's public OpenAPI definitions. Licensed under the MIT License.
來源:README.md,提交 7ee9987
工具
0版本歷史
1- v2.0.1最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
其他 Spot 整合
Spot
inc.spot官方發布者
Spot 是遠端 MCP 伺服器,讓助理用自然語言建立活動、售票、審核賓客、邀請他人並尋找活動。

HubSpot MCP by AdPlug
由 GitHub 帳號 danielpopamd 發布
遠端 HubSpot MCP 連接器,提供 9 個工具,涵蓋所有客戶入口網站,寫入操作會先預覽。

HubSpot Auditor
由 GitHub 帳號 M-Pineapple 發布
唯讀的 HubSpot 入口網站稽核工具,依 CRM、流程、表單、追蹤與電子郵件等檢查項目評分,並提供依優先順序排列的修正計畫。

LightSpot
由 GitHub 帳號 nmarijane 發布
LightSpot 對網站進行 SEO 與 AI 搜尋可見性稽核,並向助理回傳評分、修正建議、競品資料與專家報告。

SpotGPU
由 GitHub 帳號 flowtestpro-svg 發布
已停止服務的 MCP 伺服器,曾透過 SpotGPU API 查詢 Vast 與 RunPod 的 GPU 競價租用價格。