mcp-hubspot
MCP 协议服务器,让 AI 助手直接读写 HubSpot CRM 数据,支持语义搜索与向量缓存。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
MCP 协议服务器,让 AI 助手直接读写 HubSpot CRM 数据,支持语义搜索与向量缓存。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:销售团队每天在 CRM 系统中录入大量客户信息,AI 助手却只能在孤立的环境中工作,无法触及这些真实的业务数据。你不得不手动复制粘贴客户资料、在多个窗口间切换,一句"帮我查查最近活跃的联系人"就要折腾五分钟。
HubSpot MCP Server 打破了这一困境。这个开源项目将 Model Context Protocol(MCP)引入 HubSpot CRM,让 AI 助手能够直接读写你的客户数据库——contacts、companies、conversations、tickets,所有数据尽在掌控。
项目由社区开发者 buryhuang 创建,2024 年 12 月底开源,采用 MIT 许可证,当前获得 127 颗 GitHub Stars,在 MCP Server 生态中属于中等热度的工具类项目。
从技术视角看,这个项目的核心创新在于将向量语义搜索引入 CRM 数据管理。
传统 CRM API 的痛点在于:每次查询都要向 HubSpot 发起真实 API 请求,不仅受限于 API 调用频率配额(HubSpot 标准版每 6 秒 100 次请求),而且返回的是原始数据,缺乏语义理解能力。用户无法用自然语言"语义"查询——你只能精确匹配字段名、字段值,而不能问"最近有哪些高意向客户?"
mcp-hubspot 的解决方案是构建本地向量缓存层。每一次 API 调用返回的 CRM 数据,都会通过 SentenceTransformer(all-MiniLM-L6-v2 模型,384 维向量)转换为语义向量,存入 FAISS 向量索引。后续查询时,用户可以用自然语言描述意图,系统在本地向量库中做语义相似度搜索,直接定位相关数据,而无需反复调用 HubSpot API。
这一设计巧妙地实现了两个目标:降低 HubSpot API 调用量(节省配额)和提升语义查询能力。
项目采用经典的三层分层架构,代码组织清晰易读:
Server 层(server.py):MCP 协议入口,通过 mcp.server.stdio 与 AI 客户端(Claude Desktop、Cline 等)建立 stdio 通信。负责初始化所有依赖组件(HubSpot 客户端、FAISS 管理器、Embedding 模型),注册所有 MCP 工具定义,并路由工具调用到对应的 Handler。入口命令为 mcp-server-hubspot,可通过 --access-token 参数传入 HubSpot Token。
Handler 层(handlers/):领域驱动的工具处理器,每个 Handler 负责一类 MCP 工具的 schema 定义和执行逻辑。共 6 个 Handler:
CompanyHandler:公司(company)的增删改查工具ContactHandler:联系人(contact)的增删改查工具ConversationHandler:邮件/会话线程的获取工具TicketHandler:工单及工单会话线程工具PropertyHandler:HubSpot 自定义属性的 CRUD 工具SearchHandler:语义搜索入口每个 Handler 都继承自 BaseHandler,统一调用 store_in_faiss_safely() 将 API 返回数据写入 FAISS 索引。
Client 层(clients/):直接对接 HubSpot 官方 API Client(hubspot-api-client>=11.1.0),按领域拆分:CompanyClient、ContactClient、ConversationClient、TicketClient、PropertyClient。所有 Client 统一由 HubSpotClient 聚合管理。
向量存储(faiss_manager.py):核心基础设施。采用 IndexFlatL2(精确最近邻搜索),按天分片存储(index_YYYY-MM-DD.faiss + metadata_YYYY-MM-DD.json),自动滚动清理超过 7 天的旧索引(可配置 max_days)。会话线程单独缓存到 storage/conversation_threads.json。
创建联系人/公司时,系统会自动进行重复检测——联系人按 email 去重,公司按 domain/name 匹配,避免重复录入。每次 CRUD 操作的结果自动存入 FAISS,供后续语义搜索使用。
# 示例:创建联系人(由 ContactHandler 调用 ContactClient 实现)
hubspot_create_contact(email="john@example.com", firstname="John", lastname="Doe")
这是整个项目最具价值的亮点。hubspot_search_data 工具接受自然语言查询,在本地 FAISS 索引中执行向量相似度搜索,返回语义相关的历史 CRM 数据。
# 示例:语义搜索
hubspot_search_data(query="高意向的潜在客户有哪些?", limit=5)
原理:将查询文本通过 SentenceTransformer 转为 384 维向量 → 在 FAISS 索引中搜索 L2 距离最近的 Top-K 向量 → 通过 metadata(存储了原始数据的类型、ID、时间戳)还原业务含义。
可按"最近活跃"或"已关闭"两种条件筛选工单,获取工单详情和关联的邮件会话线程。线程数据通过 ThreadStorage 持久化缓存,避免重复调用 HubSpot API。
支持对 HubSpot CRM 对象的自定义属性进行增删改操作(create_property、update_property),这是大多数 CRM MCP 集成工具忽略的能力,但对于需要管理复杂业务属性的团队尤为重要。
项目提供开箱即用的 Docker 镜像(buryhuang/mcp-hubspot:latest),镜像基于 python:3.10-slim-bookworm,已预下载 all-MiniLM-L6-v2 模型到 /app/models/,避免了首次运行时的模型下载等待。
标准部署只需一行命令:
docker run -e HUBSPOT_ACCESS_TOKEN=your_token buryhuang/mcp-hubspot:latest
持久化存储(确保重启后 FAISS 索引不丢失):
docker run -v /path/to/storage:/storage -e HUBSPOT_ACCESS_TOKEN=your_token buryhuang/mcp-hubspot:latest
Dockerfile 中有一个小细节值得注意:模型预下载步骤放在镜像构建阶段(RUN pip install 之后),而不是首次运行时,这意味着镜像构建时间长,但容器启动快。
MCP 客户端配置方面,README 提供了 Claude Desktop 的配置 JSON 模板,通过 MCP Server 的 stdio 模式连接。
需要注意的是,这个项目没有 Web UI,quick_deploy 为 unsupported。它不是传统意义的 SaaS 服务,而是纯后端的协议服务器。用户界面完全由下游 MCP 客户端(Claude、Cline 等)提供。
测试覆盖不足:虽然 tests/ 目录存在,但项目未在 pyproject.toml 中配置 pytest 等测试框架,没有 CI/CD 流水线验证代码质量。生产环境中使用时,建议自行补充测试用例。
HubSpot Token 安全:Access Token 通过环境变量传入,需要妥善保管,不建议硬编码在脚本或 Docker Compose 文件中。
向量搜索精度依赖:FAISS IndexFlatL2 是精确最近邻搜索,搜索质量完全取决于 embedding 模型(all-MiniLM-L6-v2)对 CRM 业务语义的理解程度。对于高度专业化的行业术语,可能需要微调 embedding 模型。
无 Web UI:依赖 MCP 客户端,无独立 UI,对于不熟悉 MCP 生态的用户有一定门槛。
mcp-hubspot 代表了一个趋势:AI Native 时代的 CRM 集成新范式。
传统 CRM 集成依赖网页爬虫或 API 直接对接,数据同步滞后、语义理解能力缺失。mcp-hubspot 通过 MCP 协议 + FAISS 向量缓存的组合,实现了语义级的 CRM 数据访问。这一思路可以复用到 Salesforce、Zendesk、HubSpot 等各类 CRM 系统中。
2025 年 MCP 协议生态快速扩张,大量 MCP Server 专注于文件操作、代码生成等场景,而企业数据集成方向(MCP + CRM/MRP/ERP)的项目相对稀缺。mcp-hubspot 在这个细分赛道上占据了一个有价值的生态位。
如果你正在使用 HubSpot 作为 CRM,且希望 AI 助手能够理解你的客户数据、辅助销售决策,这个项目值得一试。对于更复杂的业务场景(如多租户、实时同步),可能需要在现有基础上进行二次开发。