@客户化/mcp服务器
](https://www.npmjs.com/package/@custify/mcp-server)   ](https://github.com/CustifyOfficial/custify-mcp)
通过模型上下文协议将AI工具连接到您的Custify客户成功数据。
查询帐户、健康评分、使用数据等,或创建笔记、任务和触发剧本,所有这些都可以在Claude、Cursor、VS Code或任何兼容MCP的AI工具中完成。
______________________________________________________________________
快速开始
在2分钟内起床跑步。
1.获取API密钥
首选 Custify设置>开发人员>API访问 并创建或复制您的API密钥。
2.安装
npx @custify/mcp-server3.配置您的AI工具
请参阅 配置 下面的部分针对您的特定工具。
4.试试看
问你的AI助手:
How many churned accounts do I have?______________________________________________________________________
配置
Claude Desktop (STDIO)
将以下内容添加到您的 claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 窗户: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"custify": {
"command": "npx",
"args": ["-y", "@custify/mcp-server"],
"env": {
"CUSTIFY_API_KEY": "your-api-key-here"
}
}
}
}保存后重新启动Claude Desktop。
Cursor (STDIO)
- 打开 设置>MCP
- 点击 添加新的MCP服务器
- 使用以下配置:
- 姓名:
custify - 命令:
npx -y @custify/mcp-server - 环境变量:
CUSTIFY_API_KEY=your-api-key-here
VS Code (STDIO)
添加到您的 .vscode/mcp.json 在您的工作区根目录中:
{
"servers": {
"custify": {
"command": "npx",
"args": ["-y", "@custify/mcp-server"],
"env": {
"CUSTIFY_API_KEY": "your-api-key-here"
}
}
}
}Claude Code (CLI)
claude mcp add custify -- npx -y @custify/mcp-server \
--env CUSTIFY_API_KEY=your-api-key-hereChatGPT (Streamable HTTP)
ChatGPT需要基于HTTP的MCP服务器。使用Docker进行部署:
docker run -d \
-p 3000:3000 \
-e CUSTIFY_API_KEY=your-api-key-here \
ghcr.io/custifyofficial/custify-mcp:latest然后配置ChatGPT以连接到服务器的URL:
https://your-server.example.com/mcpOther MCP Clients
Custify MCP服务器支持两种传输方式:
- 工作室 (默认):运行
npx @custify/mcp-server随着CUSTIFY_API_KEY环境变量集。 - 流式HTTP:设置
MCP_TRANSPORT=streamable-http服务器将监听端口3000(可通过以下方式配置PORT).MCP端点为/mcp.
有关如何使用任一传输配置MCP服务器,请参阅MCP客户端的文档。
______________________________________________________________________
可用工具
帐户工具
| 工具 | 类型 | 描述 |
|---|---|---|
list_accounts | 阅读 | 使用标签ID或Custify的高级过滤系统列出和过滤帐户 |
get_account | 阅读 | 按ID获取特定帐户的完整详细信息 |
search_accounts | 阅读 | 按名称或域搜索帐户 |
list_attributes | 阅读 | 发现所有可用字段及其类型以进行筛选 |
list_accounts 支持 tag_ids 用于简单的标签过滤和Custify用于高级领域的完整过滤系统。使用 list_tags 随着 category: "company" 将帐户标签名称解析为ID。使用 list_attributes 随着 entity_type: "account" 以发现可用字段。
标签过滤器在手动传递时使用此后端格式 filters:
{
"fieldName": "tags",
"fieldType": "Tag",
"filterType": "is_any_of",
"filterValue": [""]
}支持的标签 filterType 值是 is_any_of, is_all_of, is_none_of, is_unknown,以及 any_value对于基于ID的标签过滤器, filterValue 必须是非空的标记ID数组。
筛选器示例:
| 您想要什么 | 筛选对象 |
|---|---|
| 被撤销的账户 | {"fieldName": "churned", "fieldType": "Boolean", "filterType": "true"} |
| 名称包含“acme” | {"fieldName": "name", "fieldType": "String", "filterType": "contains", "filterValue": "acme"} |
| 有任何列出的帐户标签 | {"tag_ids": [""], "tag_match": "any"} |
| 已列出所有帐户标签 | {"tag_ids": ["", ""], "tag_match": "all"} |
| 没有列出的帐户标签 | {"tag_ids": [""], "tag_match": "none_of"} |
| 健康评分>50 | {"fieldName": "metrics.health_scores.", "fieldType": "Number", "filterType": "greater", "filterValue": "50"} |
| 约会后注册 | {"fieldName": "signed_up_at", "fieldType": "Date", "filterType": "after", "filterValue": "2024-01-01"} |
| 在特定细分市场 | {"fieldName": "buckets", "fieldType": "Segment", "filterType": "is_any_of", "filterValue": [""]} |
| 是否分配了CSM | {"fieldName": "owners_csm", "fieldType": "User", "filterType": "any_value"} |
按字段类型列出的可用筛选器类型:
| 字段类型 | 筛选器类型 |
|---|---|
| 布尔值 | true, false |
| 编号 | greater, lower, between, is_unknown, any_value |
| 字符串 | contains, starts_with, ends_with, does_not_contain, is_unknown, any_value |
| 日期 | more_than, less_than, exactly, after, before, between, on, last_week, this_week, last_month, this_month, last_quarter, this_quarter, last_year, this_year, is_unknown, any_value |
| 下拉 | is_any_of, is_all_of, is_none_of, is_unknown, any_value |
| 细分市场 | is_any_of, is_all_of, is_none_of |
| 标签 | is_any_of, is_all_of, is_none_of, is_unknown, any_value |
| 用户 | is_in, is_not_in, is_unknown, any_value |
| 货币 | greater, lower, between, is_unknown, any_value |
联系工具
| 工具 | 类型 | 描述 |
|---|---|---|
list_contacts | 读取 | 使用标签ID或Custify过滤器列出并过滤所有帐户中的联系人 |
get_contacts | 阅读 | 列出链接到一个帐户的联系人/人员 |
get_contact | 阅读 | 按ID获取完整的联系方式 |
list_contacts 接触等效于 list_accounts.使用 tag_ids 使用人员标签进行简单的标签过滤,或通过高级Custify过滤器。使用 list_tags 随着 category: "people" 将联系人标签名称解析为ID。使用 list_attributes 随着 entity_type: "contact" 以发现可用的联系人字段。
联系人筛选器示例:
| 您想要什么 | 参数 |
|---|---|
| 联系人标记为“冠军” | `{"tag_ids": [" |
| "], "tag_match": "any"}` | |
| 没有列出标签的联系人 | `{"tag_ids": [" |
| "], "tag_match": "none_of"}` | |
| 电子邮件包含域 | {"filters": [{"fieldName": "email", "fieldType": "String", "filterType": "contains", "filterValue": "@example.com"}]} |
| 链接到帐户的联系人 | {"filters": [{"fieldName": "companies", "fieldType": "Company", "filterType": "is_in", "filterValue": ""}]} |
健康和使用工具
| 工具 | 类型 | 描述 |
|---|---|---|
get_health_scores | 阅读 | 获取帐户的所有健康评分,包括评分名称和值 |
get_usage_data | 阅读 | 获取帐户的产品使用情况和事件数据 |
get_usage_trends | 阅读 | 获取随时间变化的健康评分值以进行趋势分析 |
警报和分段
| 工具 | 类型 | 描述 |
|---|---|---|
get_alerts | 阅读 | 获取帐户的警报/信号 |
get_segment_membership | 阅读 | 获取帐户所属的细分市场 |
任务工具
| 工具 | 类型 | 描述 |
|---|---|---|
list_tasks | 读取 | 使用过滤器和分页跨所有帐户查询任务 |
get_task | 阅读 | 按ID获取特定任务的完整详细信息 |
list_task_filter_values | 阅读 | 发现任务中当前使用的受让人、帐户和创建者ID(带姓名) |
list_tags | 读取 | 将人类可读的标签名称解析为标签ID。使用 category: "task" 范围到任务标签。 |
list_tasks 使用平坦的人体工程学参数。过滤器与AND结合使用。要将“入职跟进”等标签名称解析为ID,请致电 list_tags 随着 category: "task"。要解析受让人姓名,请致电 list_task_filter_values (返回带名称的用户ID)。
筛选器示例:
| 您想要什么 | 参数 |
|---|---|
| 我今天要交的未完成任务 | {"assignee_id": "", "status": "open", "due": "today"} |
| 帐户的过期任务 | {"account_id": "", "status": "overdue"} |
| 所有标记为“入职跟进”的任务 | {"tag_ids": [""], "status": "open"} |
| 本周到期的高优先级任务 | {"priority": "high", "due": "this_week"} |
| 在自定义日期范围内到期的任务 | {"due_after": "2026-04-01", "due_before": "2026-04-30"} |
| 分配给CSM的任务,按截止日期排序 | {"assignee_id": "", "sort_by": "dueDate", "sort_direction": "asc"} |
可用状态值:
| 状态 | 含义 |
|---|---|
open | 状态为打开且未打盹 |
done | 任务已完成 |
not_relevant | 标记为不相关 |
overdue | 打开和 dueDate \昨天) |
outstanding | 打开和 dueDate \ “我有多少流失的账户?” |
用途 list_accounts 使用搅拌过滤器来计算搅拌=真的账户。“显示健康评分低于30的所有帐户” 用途list_attributes要查找健康评分字段名称,请执行以下操作list_accounts使用数字过滤器。
“查找由管理的所有帐户jane@company.com" 用途 list_accounts CSM字段上有一个用户过滤器。“本季度注册了哪些账户?” 用途list_accounts使用日期筛选器:filterType: "this_quarter"上signed_up_at.
“显示标记为续订风险的帐户” 用途list_tags随着category: "company"要解析标签ID,则list_accounts随着tag_ids.
查询联系人
“显示标记为冠军的联系人” 用途list_tags随着category: "people"要解析标签ID,则list_contacts随着tag_ids.
“查找具有example.com电子邮件地址的联系人” 用途list_contacts启用字符串筛选器
账户深度挖掘
“给我一份Acme Corp的完整摘要” 用途search_accounts那就去找Acme吧get_account,get_health_scores,get_contacts,get_usage_data,以及get_segment_membership建立一个全面的简报会。
“Acme公司在哪些领域?” 用途search_accounts要查找帐户ID,则get_segment_membership.
“向我展示Acme Corp上个月的健康评分趋势” 用途get_health_scores要查找分数ID,则get_usage_trends历史价值。
查询任务
“今天我的盘子里有什么?” 用途list_tasks随着assignee_id(您的用户ID)和due: "today"提取每日任务列表。
“显示分配给Jane的所有标记为“入职跟进”的逾期任务” 用途list_tags随着category: "task"为了将标签名称解析为ID,list_task_filter_values要解析Jane的用户ID,则list_tasks随着tag_ids,assignee_id,以及status: "overdue".
“Acme Corp有什么机会?” 用途search_accounts要查找帐户ID,则list_tasks随着account_id和status: "open".
查询目标
“Acme Corp有哪些目标?” 用途search_accounts要查找帐户ID,则get_account_objectives.
采取行动
“为Acme Corp创建一个后续任务:审查入职进度,下周五到期” 用途search_accounts那就去找Acme吧create_task带有标题、截止日期和帐户ID。
“向Acme Corp添加注释:与工程副总裁就API延迟问题进行了交谈” 用途search_accounts然后create_note与笔记正文。
“运行Acme Corp的续约准备手册” 使用playbooks查找剧本ID的资源,search_accounts对于账户,那么run_playbook.
“将Acme Corp标记为续约风险” 用途search_accounts为了找到帐户ID,list_tags或custify://tags要查找标签ID,则add_tag_to_entities.
发现您的数据模型
“我可以按哪些字段筛选帐户?” 用途 list_attributes 返回所有可用字段及其名称和类型。“我们有哪些细分市场?” 阅读 custify://segments 资源。“有什么剧本?” 阅读 custify://playbooks 资源。“我们有哪些计算指标和生命周期阶段?” 阅读custify://calculated-metrics和custify://lifecycles资源。
“我可以在帐户和联系人上使用哪些标签?” 阅读 custify://tags 资源。______________________________________________________________________
环境变量
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
CUSTIFY_API_KEY | 是 | - | 您的Custify API密钥 |
CUSTIFY_API_URL | 没有 | https://api.custify.com | 自定义API基本URL(适用于不同的群集) |
MCP_TRANSPORT | 没有 | stdio | 运输方式: stdio 或 streamable-http |
PORT | 没有 | 3000 | HTTP服务器端口(仅与 streamable-http 运输) |
______________________________________________________________________
码头工人
将服务器作为基于HTTP的MCP客户端的Docker容器运行:
docker run -d \
--name custify-mcp \
-p 3000:3000 \
-e CUSTIFY_API_KEY=your-api-key-here \
ghcr.io/custifyofficial/custify-mcp:latestMCP端点将在 http://localhost:3000/mcp 健康检查终点位于 http://localhost:3000/health.
______________________________________________________________________
安全
- 数据流: 您的人工智能工具与Custify MCP服务器进行通信,然后后者对Custify REST API进行经过身份验证的API调用。MCP服务器本身不存储任何数据。
- API密钥处理: 你的
CUSTIFY_API_KEY从环境变量中读取,从不记录、缓存或通过MCP响应公开。使用STDIO传输时,密钥保留在本地进程中。使用HTTP传输时,请确保您的部署在TLS之后。 - 权限: MCP服务器继承您的API密钥的权限。使用范围为工作流所需最低访问级别的密钥。只读键适用于所有读取工具;写工具需要具有写权限的密钥。
- 无遥测: 服务器不会收集分析数据或将数据发送给任何第三方。
______________________________________________________________________
故障排除
“错误:CUSTIFY_API_KEY环境变量是必需的” 确保 CUSTIFY_API_KEY 环境变量在MCP客户端配置中设置。仔细检查拼写错误,确保没有多余的空格。
Claude Desktop中的服务器未连接
- 验证配置文件路径是否适用于您的操作系统。
- 请确保在编辑配置后重新启动了Claude Desktop。
- 检查一下
npx在您的系统PATH中可用。
身份验证错误(401) 您的API密钥可能无效或已过期。从生成新密钥 Custify设置>开发人员>API访问.
权限错误(403) 端点可能无法用于API密钥访问。检查您的Custify帐户是否具有所需的权限。
超时或连接错误 如果使用HTTP传输,请验证服务器是否正在运行且可访问。检查一下 PORT 环境变量与您的部署配置相匹配。对于STDIO传输,确保没有防火墙或代理阻止本地进程通信。
不同的Custify集群? 如果您的Custify实例位于不同的集群(例如EU)上,请设置 CUSTIFY_API_URL 到集群的API URL。
Docker容器立即退出 检查容器日志 docker logs custify-mcp最常见的原因是失踪 CUSTIFY_API_KEY 环境变量。
______________________________________________________________________
贡献
欢迎投稿!开始:
git clone https://github.com/CustifyOfficial/custify-mcp.git
cd custify-mcp-server
npm install
npm run dev- 分叉存储库
- 创建要素分支:
git checkout -b feature/my-feature - 进行更改并添加测试
- 运行测试套件:
npm test - 提交拉取请求
如果您计划进行重大更改,请先打开一个问题。
______________________________________________________________________
许可证
麻省理工学院-见 许可证 了解详情。
