客户数据集成工具

通过Model Context Protocol将AI工具与Custify客户成功数据连接,实现账户查询、健康评分、使用数据获取及任务创建等功能。

  • by CustifyOfficial
  • TypeScript
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 CustifyOfficial/custify-mcp

使用说明

@客户化/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)
  1. 打开 设置>MCP
  2. 点击 添加新的MCP服务器
  3. 使用以下配置:
  • 姓名: 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_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 启用字符串筛选器 email.

账户深度挖掘

“给我一份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中的服务器未连接

  1. 验证配置文件路径是否适用于您的操作系统。
  2. 请确保在编辑配置后重新启动了Claude Desktop。
  3. 检查一下 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
  1. 分叉存储库
  2. 创建要素分支: git checkout -b feature/my-feature
  3. 进行更改并添加测试
  4. 运行测试套件: npm test
  5. 提交拉取请求

如果您计划进行重大更改,请先打开一个问题。


许可证

麻省理工学院-见 许可证 了解详情。