ghl-context-mcp
ghl-context-mcp
一个刻意保持精简的 GoHighLevel MCP 服务器。六种工具,只专注一件事:让你在打电话之前,心里有数对面是谁。
为什么会有它
在 CRM 之上接入一个智能体,最常见的失败模式是暴露一块又宽又泛的工具面,把原始 API JSON 直接倒出来:模型会选择错误的工具,把上下文窗口烧在那些没有出人会说出口的字段上,偶尔还捏造或覆盖一条记录。这台服务器选的是另一个方向。它只提供六个工具,每个工具都对上一次与联系人交谈的那个时刻。它返回出的每个字段,要么是别人会说出口的话,要么是别人下一次调用时需要传回去的东西。日期计算它自己做,写入功能则在点亮之前始终关闭。窄工具面是否真的胜过宽工具面,这是可衡量的;配套的基准 mc-tool-suface-bench 就是用来量它的。
Related MCP server: GHL MCP Server
工具
工具 | 作用 | 类型 | 上限 |
| 将姓名、电话或邮箱解析为恰好一个联系人;否则返回候选项 | 读 | 400 |
| 将近期记录、短信、笔记、预约和阶段变更组织成一段陈述性文本,并带一个概拒 | 读 | 1200 |
| 每个商机位于哪个阶段、阶段内停留天数、金额、是否已停滞 | 读 | 500 |
| 某人或日历即将来的预约,以及相对时间 | 读 | 900 |
| 写一条笔记,具有可重试幂等性,并回显已存内容 | 写 | 200 |
| 把商机移动到另一个阶段,由 stale-context 检查保护 | 写 | 250 |
上限是每次响应的 token 预算,它由一个测试强制保证:如果响开始超过上限,构建就会失败。这里“token”差不多,见 DESIGN.md。
使用方法
这是一个 MCP 服务器,目标用户是 AI 智能体,而不是坐在终端前的人。你需要把服务器接到你的智能体上(Claude Code、Claude Desktop 或任何支持 MCP 的运行时),然后用直观语言和智能体对话。解析联系人、拉取上下文,这部分交给智能体自己决定。
团队快速开始:Claude Code
克隆代码库,然后安装并构建:
npm install && npm run build加入你的凭据:
cp .env.example .env
# then edit .env and fill in GHL_PIT and GHL_LOCATION_ID在 Claude Code 中打开对应文件夹。它会读取已检入的
.mcp.json,提示你ghl-context服务器存在,你只需批准一次。服务器在启动时自动加载.env,所以没有 token 会落在配置文件里。用销售代表在开始一天工作时的方式对你的智能体说话:
我今天要给 Marcus Halloway 和 Priya Nair 打电话。在每位接线之前,给我一份通话前简报。
智能体会解析每个联系人,拉去时间线、管道位置、快到来的约会,并给你汇报。
其他 MCP 客户端
任何 MCP 客户端都可以通过 stdio 连接这个服务器。发布版不需要普通体,也不需要构建。使用 Claude Desktop 时,往 claude_desktop_config.json 里加入这段配置:
{
"mcpServers": {
"ghl-context": {
"command": "npx",
"args": ["-y", "ghl-context-mcp"],
"env": {
"GHL_PIT": "pit-...",
"GHL_LOCATION_ID": "your-sub-account-id"
}
}
}
}如果想使用本地代码,而不是发布版,请把 command 设为 node,把 args 指向你构建好的 dist/index.js。
环境变量
变量 | 系必填 | 默认 | 含义 |
| 是 | 一个子账户的 Private Integration Token | |
| 是 | 该 token 所属的子账户 ID | |
| 否 |
| 除非某它恰好为 |
| 否 |
| 用于计算“停滞”阈值的倍数,基准是阶段在停留的中往时间 |
| 否 |
| 联系人解析对方法: |
在 Settings、Integrations、Private Integrations 下创建这个 token,信域选中 contacts.readonly、contacts.write、opportunities.readonly、opportunities.wite 和 calendars.readonly。
没有客户端也先看到并且效果
如果手边没有 MCP 客户端,代码库里带了一个终端 demo,它会跑跟智能体几乎完全相同操作步骤,然后打印走那会前现场:
npm run brief -- "Marcus Halloway"它不是最终产品,只是证明“这套做法有价值”的演示。最终产品,是上面那个智能体连接。
从源码运行
npm install
npm run build
npm testnpm test,在没有任何凭据的情况下,也要能构建通过。在线检查 npm run live-check 和 npm run live-write-check,需要一份真实的。
响应结构
一份能解析出来的联系人:
{
"resolution": "exact",
"contact": {
"contact_id": "NnAyKFnTSAVKg1amAArO",
"name": "Marcus Halloway",
"primary_phone": "+15551230010",
"primary_email": "marcus.halloway@example.com",
"tags": ["synthetic-seed"],
"owner": null,
"last_activity_at": null,
"last_activity_summary": null
}
}一个不精确匹配时返回候选项,而不是去猜:
{
"resolution": "ambiguous",
"candidates": [
{
"contact_id": "...",
"name": "Jordan Wells",
"primary_phone": "+15551230012",
"primary_email": "jordan.wells@example.com",
"last_activity_at": null
},
{
"contact_id": "...",
"name": "Jordan Wells",
"primary_phone": "+15551230013",
"primary_email": "jordan.wells.cpa@example.com",
"last_activity_at": null
}
],
"disambiguate_by": ["email", "primary_phone"],
"instruction": "Ask the user which one, or call again with the exact email or phone."
}出现不清晰,我们算成功。智能体遇到报从一开始会停止;拿到了候选项列表的智能体,会继续往下走並问你“你指的是哪一位”。
错误
所有错误都是同一种形态,原始 HTTP 状态码不会直接进到模型。
错误 | 什么并非时候 | 可被重试 |
| 没有联系人与那个查询匹配 | 否 |
| 没有对应该 ID 的商机 | 否 |
| 目标阶段不存在于该 pipeline 中(会返回合法阶段列表) | 否 |
| 断言中所说的“当前阶段”与端上真实状态不一致 | 是,需重新读取后 |
| 调用 | 是 |
| 写入被关闭的培养下发起写操作 | 否 |
| token 缺少一个必须的 scope | 否 |
| token 被拒绝 | 否 |
| GoHighLevel 正在限流(带上 `retry_after_seconds) | 是 |
| GoHighLevel 返回了一个错误 | 是,只重试一次 |
| 请求的时间窗内超过 365 天 | 是 |
设计笔记
这条服务器建立在八条规则上,这里每条一句话。完整版、以及预期间里面会出现那“过了未知”式问答的推演,在 DESIGN.md。
一把工具只做一件事。如果工具描述落得需要写“实现”,说明这是两个工具。
描述是写给模型看的:它什么时候应该用它、不要用它,以及它和哪个兄弟工具容易搞混。
原始的 API 数据形态不得越过该边界,有测试强制。
错误是指令式的,使用祈对语气写,并列出它现在该选哪些合法选项。
每个响应都带 token 上限,有测试强制,超出就会导致构建失败。
服务器本身完成算术:年龄、时长、相对时间、次数计算都是在它计算。
写操作只会基础上它们所依赖的状态发生变化上执行,如果状态不一致,就会大声失败。
写入默认关着,只有
GHL_ALLOW_WRITES=true才开。
一切它不做的事
这些“不做”都是留有余地。
没选上 | 为什么 |
| 智能体在凭空创建一个或覆盖记录,是现实世界出现过的最大翻车场景。创建走表但或走人流程。 |
| 受控于 APP下发给订阅者短信/邮件,是合规这台服务器不该去跑的。 |
| 无限制结果集合会把上下文窗口烧干。智能体真正需要的,是一次解析到一个确定的结果,而不是一张列表。 |
| 这类“列出对象名”的工具,经常浪费有利一次来回。名称在工具内部已经由 io url 转 ID,凡是给错名字,就会拿到合法名字列表。 |
工作流/自动化触发器 | 它引发的副作用,服务器事先解释不清又无法事撤销。 |
| 刻意先不上,因为这个组合要留到基准测试时单独作为“一个臂”。如果它能赢,那就跟着它依赖的数据一起,v2 见。 |
局限
只支持单个 location、只有 Private Integration Token 认证,不支持 OAuth。分项有上限:每工具可取的列表数量固定。停滞检测需要有一定规模的数据才有意义,写在出来的代码中目前用了一个定值兜底,原因是 GoUpLevel 不暴露阶段历史。电话号匹配是 North America 为中心的。Token 限上是代理 token 计,不是 Claude 原生 token 计。GoHighLevel 的读取比写入慢大概 1 秒。目前的测试只验证一个“账号形状应样本”。
许可证
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides access to over 460 tools within the GoHighLevel CRM, allowing AI assistants to manage contacts, opportunities, messaging, and business workflows through natural language.2397ISC
- AlicenseNot gradedqualityCmaintenanceEnables Claude to manage GoHighLevel CRM contacts, pipelines, and workflows through natural language commands.35MIT
- FlicenseNot gradedqualityDmaintenanceEnables LLMs to read conversations, send messages, create tasks, and manage calendar appointments within GoHighLevel CRM locations.1
- AlicenseAqualityBmaintenanceEnables AI assistants to interact with GoHighLevel CRM via natural language for lead lookup, pipeline management, messaging, and calendar operations, with read-only mode by default.12MIT
Related MCP Connectors
Stop re-explaining yourself to Agents. Give it the right context, right when needed.
LeadConnector / GoHighLevel MCP Pack — wraps the GoHighLevel CRM for AI agents.
Agent-native CRM. 25 tools — contacts, deals, sequences, enrichment waterfall, audit log.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ceosykes/ghl-context-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server