使用说明
@客户化/mcp服务器
通过模型上下文协议将AI工具连接到您的Custify客户成功数据。
查询帐户、健康评分、使用数据等,或创建笔记、任务和触发剧本,所有这些都可以在Claude、Cursor、VS Code或任何兼容MCP的AI工具中完成。
快速开始
在2分钟内起床跑步。
1.获取API密钥
首选 Custify设置>开发人员>API访问 并创建或复制您的API密钥。
2.安装
npx @custify/mcp-server
3.配置您的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-here
ChatGPT (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/mcp
Other 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": ["<company_tag_id>"]
}
支持的标签 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": ["<company_tag_id>"], "tag_match": "any"} |
| 已列出所有帐户标签 | {"tag_ids": ["<company_tag_id_1>", "<company_tag_id_2>"], "tag_match": "all"} |
| 没有列出的帐户标签 | {"tag_ids": ["<company_tag_id>"], "tag_match": "none_of"} |
| 健康评分>50 | {"fieldName": "metrics.health_scores.<score_id>", "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": ["<segment_id>"]} |
| 是否分配了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": ["<people_tag_id>"], "tag_match": "any"} |
| 没有列出标签的联系人 | {"tag_ids": ["<people_tag_id>"], "tag_match": "none_of"} |
| 电子邮件包含域 | {"filters": [{"fieldName": "email", "fieldType": "String", "filterType": "contains", "filterValue": "@example.com"}]} |
| 链接到帐户的联系人 | {"filters": [{"fieldName": "companies", "fieldType": "Company", "filterType": "is_in", "filterValue": "<account_id>"}]} |
健康和使用工具
| 工具 | 类型 | 描述 |
|---|---|---|
get_health_scores |
阅读 | 获取帐户的所有健康评分,包括评分名称和值 |
get_usage_data |
阅读 | 获取帐户的产品使用情况和事件数据 |
get_usage_trends |
阅读 | 获取随时间变化的健康评分值以进行趋势分析 |
警报和分段
| 工具 | 类型 | 描述 |
|---|---|---|
get_alerts |
阅读 | 获取帐户的警报/信号 |
get_segment_membership |
阅读 | 获取帐户所属的细分市场 |
任务工具
| 工具 | 类型 | 描述 |
|---|---|---|
list_tasks |
读取 | 使用过滤器和分页跨所有帐户查询任务 |
get_task |
阅读 | 按ID获取特定任务的完整详细信息 |
update_task_status |
写 | 将任务标记为 open, done,或 not_relevant |
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": "<user_id>", "status": "open", "due": "today"} |
| 帐户的过期任务 | {"account_id": "<account_id>", "status": "overdue"} |
| 所有标记为“入职跟进”的任务 | {"tag_ids": ["<tag_id>"], "status": "open"} |
| 本周到期的高优先级任务 | {"priority": "high", "due": "this_week"} |
| 在自定义日期范围内到期的任务 | {"due_after": "2026-04-01", "due_before": "2026-04-30"} |
| 分配给CSM的任务,按截止日期排序 | {"assignee_id": "<user_id>", "sort_by": "dueDate", "sort_direction": "asc"} |
可用状态筛选器值:
| 状态 | 含义 |
|---|---|
open |
状态为打开且未打盹 |
done |
任务已完成 |
not_relevant |
标记为不相关 |
overdue |
打开和 dueDate <=昨天 |
on_time |
打开和(否 dueDate 或 dueDate >昨天) |
outstanding |
打开和 dueDate <=今天 |
update_task_status 仅写入持久任务状态: open, done,以及 not_relevant.使用 list_tasks 首先找到内部 task_id,然后致电 update_task_status 新的状态。
可用 due 快捷方式: past_due, today, this_week, this_month, later。对于定制范围,请提供 两者 due_after 和 due_before (ISO日期)。这 due 快捷方式和日期范围对是互斥的——只传递范围的一个边界会被忽略。
目标工具
| 工具 | 类型 | 描述 |
|---|---|---|
get_account_objectives |
阅读 | 使用Custify帐户ID或您的外部帐户获取特定帐户的客户目标 company_id |
get_account_objectives 接受 account_id (定制内部公司ID)或 external_account_id (你的 company_id).它支持对字段进行分页、排序和Custify筛选对象,例如 objectiveStatus, importance, risk,以及 dueAt.
行动工具
| 工具 | 类型 | 描述 |
|---|---|---|
create_note |
写 | 在帐户的时间线上添加注释 |
create_task |
编写 | 创建分配给CSM的任务 |
run_playbook |
编写 | 在帐户上触发手动启动的剧本 |
update_custom_fields |
写入 | 更新帐户或联系人的自定义属性值 |
add_tag_to_entities |
写入 | 将现有标签添加到一个或多个帐户或联系人 |
remove_tag_from_entities |
写入 | 从一个或多个帐户或联系人中删除现有标记 |
标记操作 接受 entity_type: "account" 或 entity_type: "contact",Custify内部数组 entity_ids和a tag_id.使用 list_tags 或 custify://tags 资源首先将标签名解析为ID。
可用资源
资源提供了AI代理可以用来理解Custify工作区的只读上下文:
| 资源 | URI | 描述 |
|---|---|---|
| 细分市场 | custify://segments |
所有具有名称和ID的段定义 |
| 播放手册 | custify://playbooks |
所有带有名称、类型和ID的剧本定义 |
| 健康评分定义 | custify://health-score-definitions |
所有包含名称、阈值和ID的健康评分配置 |
| 计算指标 | custify://calculated-metrics |
公司和个人的所有计算指标定义 |
| 生命周期 | custify://lifecycles |
所有生命周期定义,包括目标和任务模板 |
| 标签 | custify://tags |
按类别分组的所有标签 |
例子
以下是连接后你可以问你的人工智能助手的真实例子:
查询账户
“我有多少流失的账户?” 用途
list_accounts使用搅拌过滤器来计算搅拌=真的账户。
“显示健康评分低于30的所有帐户” 用途
list_attributes要查找健康评分字段名称,请执行以下操作list_accounts使用数字过滤器。
“查找由管理的所有帐户jane@company.com" 用途
list_accountsCSM字段上有一个用户过滤器。
“本季度注册了哪些账户?” 用途
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".
“将入职审核任务标记为已完成” 用途
list_tasks要查找匹配的任务ID,则update_task_status随着status: "done".使用status: "open"重新打开任务或status: "not_relevant"将其标记为不相关。
查询目标
“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:latest
MCP端点将在 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 - 提交拉取请求
如果您计划进行重大更改,请先打开一个问题。
许可证
麻省理工学院-见 许可证 了解详情。