使用说明
HubSpot MCP Server
Streamable HTTP + per-request HubSpot token · Docker-ready
上游
该项目基于 新三实验室/hubspot mcp --广泛 模型上下文协议(MCP) 服务器 HubSpot API感谢原作者提供的实现和工具界面。
与原来相比有什么变化
| 区域 | 原始 | 此叉子 |
|---|---|---|
| HTTP传输 | @smithery/sdk createStatefulServer (通过Smithery/init负载进行配置) |
快速 +官方 StreamableHTTPServerTransport 从 @modelcontextprotocol/sdk |
| HTTP身份验证 | env或Smithery提供的配置中的令牌 | Authorization: Bearer … 按请求(LibreChat OAuth注入此内容);可选的 HUBSPOT_ACCESS_TOKEN 仅在容器的env中 |
| 史密瑟里 | smithery.yaml,专注于Smithery的文档 |
移除 --仅限自托管 |
| 码头工人 | 基于pnpm的图像 | npm ci + package-lock.json, EXPOSE 3000,入口点 node dist/index.js |
| 编排 | — | docker-compose.yml:主机端口 8003 → 容器 3000 |
| npm | Docker中的pnpm锁文件 | .npmrc (legacy-peer-deps=true) + package-lock.json 用于可重复安装 |
| 构建 | tsc |
node --max-old-space-size=4096 包装 npm run build 用于大型单文件编译 |
| 持续集成 | GitHub操作工作流 | 已删除工作流 (没有 .github/workflows) |
get_current_time 工具 |
— | 添加 --返回服务器的当前UTC时间戳,以便LLM可以将相对日期表达式(“今年”、“上个月”、“今天”)解析为精确的 startTime/endTime 价值观。LibreChat不会在系统提示中注入当前日期,因此这对于可靠的日期过滤查询是必要的。 |
参与总结: engagement_summary_associated 返回a 默认LLM已优化 JSON形状(threads + other_engagements 和 timestamp, from, to, content).用这个来回答以下问题 “总结与X公司的沟通” --它避免了来自 engagement_details_get_associated清洁工作包括: 标准化小写主题 和 合并线程 不同之处仅在于 Re:/Fw:/空白; UTF-8清理 (滴mojibake像 ÿè); 硬切 在第一个 From: / Sent: / On … wrote: / -----; 免责声明/签名/警告 剥离; 领先的 Hi Name, 移除 当剩下足够的尸体时; 删除消息 少于 10 有意义的(非停用词)单词,除非它们包含 统一资源定位符 (然后≥5个这样的单词)。集 llmOptimize: false 对于年龄较大的群体 engagements 阵列(EMAIL_THREAD +生的 body). 真相来源: src/llmEmailCleaner.ts.可选 Python镜像: preprocessing/email_cleaner.py (离线CLI;手动保持同步)。
不变: stdio传输,原始 112 HubSpot API工具, HUBSPOT_ACCESS_TOKEN 从本地/stdio的env,可选 TELEMETRY_ENABLED,核心MIT许可证和原始工具代码路径。
先决条件
HubSpot专用应用访问令牌(PAT)。看 HubSpot API概述.
快速入门(Docker)
docker compose up --build -d
MCP URL(来自主机): http://localhost:8003/mcp
在Docker网络内部,使用 http://<service>:3000/mcp 并设置 PORT=3000 (compose中的默认设置)。
Librechat(streamable-http)
将LibreChat指向您部署的URL 私人应用令牌 (无OAuth),将其作为Bearer传递:
mcpServers:
hubspot:
type: streamable-http
url: "https://your-host:8003/mcp"
headers:
Authorization: "Bearer {{HUBSPOT_ACCESS_TOKEN}}"
customUserVars:
HUBSPOT_ACCESS_TOKEN:
title: "HubSpot access token"
description: "Private app token from HubSpot developer settings"
MCP Accept 标头必须同时允许JSON和SSE,例如。 application/json, text/event-stream (LibreChat这样做是为了流式传输HTTP)。
上海证券交易所 GET /mcp 返回一个keep-alive事件流(某些客户端同时使用 POST /mcp).
LibreChat+HubSpot OAuth(LibreChat的承载者)
LibreChat运行OAuth流并发送 Authorization: Bearer <access_token> 对于这个MCP。配置 oauth: 阻止您的服务器密钥输入 librechat.yaml (授权URL、令牌URL、客户端id/秘密、重定向URI、作用域)--请参阅 LibreChat MCP服务器→ oauth.
OAuth如何与此MCP协同工作
MCP 不实现OAuth本身LibreChat处理完整的OAuth流程(重定向、令牌交换、存储)。MCP是一种 被动代币消费者.
- LibreChat连接到MCP并完成MCP握手(
initialize,tools/list) — 这可以在没有令牌的情况下工作. - LibreChat看到
oauth在其配置中插入块,并使用HubSpot启动OAuth流。 - 用户授权后,LibreChat存储令牌并重新连接
Authorization: Bearer <token>. - 工具调用现在已成功到达HubSpot。
如果工具运行 之前 代币可用,HubSpot API工具返回 isError: true 和文本 Authentication required.
每次请求使用的凭据: Authorization: Bearer … 胜利否则 HUBSPOT_ACCESS_TOKEN 从容器环境(例如,用于非OAuth设置的PAT)。
HubSpot HTTP调用使用 10秒 默认超时;用以下方式覆盖 HUBSPOT_API_TIMEOUT_MS (毫秒)。
本地stdio(光标、克劳德桌面等)
与上游相同:运行构建的服务器并设置 HUBSPOT_ACCESS_TOKEN 在客户端环境中。
{
"mcpServers": {
"hubspot": {
"command": "node",
"args": ["/absolute/path/to/hubspot-mcp/dist/index.js"],
"env": {
"HUBSPOT_ACCESS_TOKEN": "your-access-token-here"
}
}
}
}
从克隆构建:
npm ci
npm run build
npm start
环境变量
| 变量 | 描述 | 必填项? | 默认值 |
|---|---|---|---|
HUBSPOT_ACCESS_TOKEN |
HubSpot PAT(stdio/默认服务器实例) | 是,仅用于stdio,不带标头 | -- |
PORT |
容器内的HTTP侦听器端口 | 否 | 3000 |
TELEMETRY_ENABLED |
OpenTetry到供应商端点 | 否 | true (套 false 在编写中禁用) |
对于 超文本传输协议,有效令牌取自 X-Auth-Token 或 Authorization: Bearer 根据每一项请求;环境 HUBSPOT_ACCESS_TOKEN 仍被使用 标准 同一过程的侧面。
工具
这个叉子暴露了 114工具 (上游 112 加 get_current_time 和 engagement_summary_associated)--看 新三实验室/hubspot mcp (公司、联系人、潜在客户、交易管道通过通用对象、约定、批处理API等)。使用客户的 tools/list 对于规范名称和模式。
离线LLM清洁(可选)
之后 npm run build,您可以从已保存的文件中复制与默认工具输出相同的JSON { "engagements": [...] } 有效载荷(例如,与 llmOptimize: false):
npm run llm-clean -- path/to/grouped.json path/to/output.json
# equivalent: node scripts/run-llm-clean.mjs …
看 examples/llm_optimized_format.example.json 对于响应形状。不要提交真实的CRM数据(请参阅 .gitignore例如。 examples/llm_optimized_comparison_output.json, deduped_clean.json).
开发与测试
npm ci
npm run build
npm test # Jest: e2e (MCP) + unit tests for llmEmailCleaner
LLM清洁行为涵盖在 **test/llmEmailCleaner.test.ts**The preprocessing/ 文件夹是仅用于脚本的可选Python端口(此仓库中没有pytest套件)。
贡献
欢迎发布问题和PR 这 Docker、HTTP认证和LibreChat集成的仓库。对于核心HubSpot工具行为的更改,考虑在上游做出贡献 新三实验室/hubspot mcp 所以每个人都受益。
数据收集和隐私
上游可以通过以下方式收集可选遥测数据 @shinzolabs/instrumentation-mcp.见原件 隐私政策 并设置 TELEMETRY_ENABLED=false 如果你不想要它(例如 docker-compose.yml).
许可证
麻省理工学院
