mcpField
P
PM Copilot

PM Copilot

本地服务
dmkthinks.org生产力306 天前更新

关于 PM Copilot

PM Copilot 是一个 MCP 服务,将 HelpScout 工单、ProductLift 功能请求和 Chatbase AI 客服对话汇总分析,帮助产品经理确定下一步开发方向。它面向产品经理,区别在于把 AI 客服中被自助解决的问题也纳入信号来源。

主要功能

  1. 01汇总工单、功能请求与 AI 客服对话三类信号
  2. 02工单与功能请求匹配后提升收敛主题的优先级
  3. 03输出每个主题的自助失败率与平均回答置信度
  4. 04按主题返回原始记录与引用的追溯工具
  5. 05支持将外部 MCP 服务的业务指标作为上下文输入

适用场景

  1. 01根据客户反馈排列季度产品开发优先级
  2. 02查找同时出现在工单和功能请求中的共同问题
  3. 03评估 AI 客服未能解决的问题并决定是否开发对应功能

MCP 相关

该项目是 MCP 服务,通过 synthesize_feedback、generate_product_plan 等工具向 MCP 客户端提供分析结果,并可接收其他 MCP 服务提供的指标数据。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

PM Copilot

一个 MCP 服务,可交叉分析客户支持工单、功能请求和 AI 支持 Agent 对话,帮助 PM 决定接下来要开发什么。

TypeScript License: MIT MCP SDK Node.js


实际结果: 在一个为期 30 天的时间段内分析了 3,353 条信号:1,678 个支持工单、276 个功能请求,以及来自 4 款产品的 1,399 段 AI 支持 Agent 对话。

仅分析工单永远无法发现这些聊天中的信号。

阅读完整故事: 我构建了一个改变产品优先级排序方式的 MCP 服务


有何不同

  • 信号交叉分析。 将支持工单与功能请求进行匹配,找出趋同主题,并将这些主题的优先级提高 2 倍。
  • 遗漏的拦截信号。 AI 支持 Agent 会回答那些永远不会转化为工单的问题,因此,基于工单的优先级排序会低估机器人处理的所有主题。Chatbase 对话作为第三类信号纳入分析,并为每个主题提供 self_serve_failure_rate。
  • 可组合性。 通过 kpi_context 将其他 MCP 服务中的流失率或流量数据传入 generate_product_plan,方法会据此调整优先级。

架构

graph TD
    A[Claude Desktop / Code] -->|stdio| B[pm-copilot]
    A -->|stdio| C[Metabase MCP]
    A -->|stdio| D[Google Analytics MCP]
    B -->|Reactive| E[HelpScout: tickets]
    B -->|Proactive| F[ProductLift: feature requests]
    B -->|Deflected| I[Chatbase: AI agent chats]
    C -->|Quantitative| G[Conversion, Churn, Revenue]
    D -->|Acquisition| H[Traffic, Channels, Trends]
    B -.->|kpi_context| A

快速开始

需要 Node 20+。项目未发布到 npm,请从源代码安装:

git clone https://github.com/dkships/pm-copilot.git
cd pm-copilot
npm install
cp .env.example .env   # Edit with your credentials
npm run build

.env 文件位于仓库根目录。无论从哪个工作目录启动服务,它都会从那里加载该文件。

凭据

至少配置一个数据源;分析会根据你配置的数据源进行调整。如果没有 HelpScout,就没有支持工单,因此主题不会获得严重程度评分或趋同加权;ProductLift 和 Chatbase 仍会按频次和投票数对主题排序。

变量必需说明
HELPSCOUT_APP_ID否来自 https://secure.helpscout.net/apps/custom/ 的 OAuth 应用 ID(两项要么都设置,要么都不设置)
HELPSCOUT_APP_SECRET否OAuth 应用密钥
PRODUCTLIFT_PORTALS否多门户:name|url|key,name2|url2|key2
PRODUCTLIFT_PORTAL_URL否单个门户 URL
PRODUCTLIFT_API_KEY否单个门户的 Bearer 令牌
PRODUCTLIFT_PORTAL_NAME否门户显示名称(默认值:default)
CHATBASE_API_KEY否Chatbase → Settings → API keys 中的账户级密钥
CHATBASE_AGENTS否多个 Agent:name|agentId,name2|agentId2
CHATBASE_AGENT_ID否单个 Agent ID
CHATBASE_AGENT_NAME否单个 Agent 显示名称(默认值:default)

Chatbase API 需要 Standard 套餐或更高级别;如果套餐较低,拦截信号会显示为警告。每款产品使用一个 Agent,能提供产品级归因;而共用邮箱则无法做到这一点。

Claude Desktop

添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "pm-copilot": {
      "command": "node",
      "args": ["/absolute/path/to/pm-copilot/dist/index.js"]
    }
  }
}
Claude Code
claude mcp add pm-copilot -- node /absolute/path/to/pm-copilot/dist/index.js

或者在仓库中打开 Claude Code:它会提示你批准项目的 .mcp.json。

验证

重启客户端,并让它运行 list_sources。它应列出你配置的数据源:HelpScout 邮箱、ProductLift 门户和 Chatbase Agent。

工具

常用筛选条件

synthesize_feedback 和 generate_product_plan 共用。

参数类型默认值描述
timeframe_daysnumber30回溯天数(1-90)
top_voted_limitnumber50每个门户中获票数最高的请求(1-200)。时间范围内的近期请求始终会额外包含在内
mailbox_idstring—HelpScout 邮箱 ID
mailbox_namestring—HelpScout 邮箱名称(不区分大小写),会解析为 ID
portal_namestring—ProductLift 门户
agent_namestring—Chatbase Agent
source_filterstring—Chatbase 对话来源,多个来源以逗号分隔(例如 Widget or Iframe 或 WhatsApp,API)。不区分大小写
include_commentsbooleanfalse同时获取功能请求中的客户评论文本(已清理;会移除姓名和管理员回复),用于主题匹配和引用。每条含评论的请求需额外调用一次,效果会略有提升;大型门户可能需要近一分钟
detail_levelstring"summary""summary"、"standard" 或 "full"。输出内容会逐级增加

运行 list_sources 查看有效的邮箱、门户、Agent 和来源名称。

synthesize_feedback

返回按优先级分数排序的主题,每个主题包含各类别的数量、收敛标记、证据摘要和代表性引文。summary 模式下约为 15 KB,full 模式下为数百 KB。仅支持常用筛选条件。

generate_product_plan

生成包含证据和客户引文的优先级计划。除常用筛选条件外,还支持:

参数类型默认值描述
kpi_contextstring—来自其他 MCP 服务的业务指标,按原样传入
max_prioritiesnumber5返回的优先事项数量(1-10)
preview_onlybooleanfalse审核模式:显示将要发送的数据,但不获取数据
formatstring"json""json"(结构化)或 "markdown"(可直接阅读的简报)
get_theme_evidence

深入查看某个主题:查看该主题背后的单条工单、功能请求和聊天记录,按时间从新到旧排列,并包含工单编号、请求 URL、投票数、渠道和日期。在分析调用后的几分钟内传入相同的常用筛选条件,即可复用缓存数据,不会发起新的 API 调用。返回标识符、元数据和已清理的标题(对于聊天记录,是截断至 200 个字符的客户开场消息),不返回完整对话。

参数类型默认值描述
theme_idstring—分析结果中的 theme_id,例如 booking-scheduling
sourcestring"all""all"、"tickets"、"feature_requests" 或 "chats"
limitnumber25每个来源返回的记录数(1-200),避免某个繁忙来源挤占其他来源的结果

此外还支持常用筛选条件。

get_feature_requests

直接访问 ProductLift 原始数据。每个请求都包含其公开的 url。

参数类型默认值描述
portal_namestring—筛选单个门户
include_commentsbooleantrue包含每条请求的评论
statusstring—按状态筛选(不区分大小写),例如 open、planned、completed
limitnumber—每个门户返回的请求数(1-500),在状态筛选和排序后应用。仅获取保留请求的评论
sortstring—"votes" 或 "recent"。省略则保留门户原有顺序
list_sources

列出已配置的邮箱、门户和 Agent;如果已配置 Chatbase,还会列出 chatbase_conversation_sources(即 source_filter 接受的值)。不会返回密钥或客户数据。无需参数。

信号类别

类别来源含义影响
响应式HelpScout 工单某些功能出了问题频率、严重程度、信号汇聚
主动式ProductLift 请求用户想要某些功能频率、投票势头、信号汇聚
已化解Chatbase 对话用户提出了问题,自助服务可能解决了,也可能没有仅频率

已化解信号不会影响严重程度、投票势头或信号汇聚加成。每个主题都会包含:

  • deflected_count:与该主题匹配的对话数量
  • self_serve_failure_rate:这些对话中 Agent 的最低答案置信度低于 0.5 的占比
  • mean_answer_confidence:同一置信度分数的平均值

Chatbase 没有说明其 min_score 衡量的是什么,因此这些数据只是供大模型权衡的证据,不属于评分的一部分。分析还会统计各渠道的对话数量(chatbase_sources)。无法识别的 source_filter 值会在发出警告后直接传递,不会被拒绝。没有 Chatbase 时,不会包含这些已化解信号字段。

输出示例

以下是 summary 详细程度下经过精简的 synthesize_feedback 响应。数值仅供参考。请注意,第一条引述中的电子邮件地址已脱敏。

{
  "timeframe_days": 30,
  "detail_level": "summary",
  "pii_scrubbing_applied": true,
  "pii_categories_redacted": ["email", "phone", "credit_card"],
  "analysis": {
    "total_data_points": 924,
    "reactive_count": 548,
    "proactive_count": 64,
    "deflected_count": 312,
    "themes": [
      {
        "theme_id": "booking-scheduling",
        "label": "Booking & Scheduling",
        "priority_score": 78.4,
        "convergent": true,
        "reactive_count": 211,
        "proactive_count": 19,
        "deflected_count": 96,
        "self_serve_failure_rate": 0.41,
        "representative_quotes": [
          "[Support ticket] \"Double-booked slots again after the timezone change — reach me at [EMAIL REDACTED]\"",
          "[Feature request, 47 votes] \"Let me block buffer time between meetings\"",
          "[AI chat, answer confidence 0.31] \"how do i stop people booking on weekends\""
        ]
      }
    ],
    "emerging_themes": [{ "pattern": "csv export", "frequency": 12 }],
    "unmatched_count": 38
  }
}

组合使用

让 Claude 从其他 MCP 服务中提取流失率和转化率数据,并将其作为 kpi_context 传入:

Product A: booking completion rate dropped from 74% to 66% over last
30 days. Monthly churn increased from 3.1% to 4.2%. Organic traffic
up 22% MoM. Product B: document completion rate steady at 81%.
Churn flat at 2.8%.

方法论指出,流失率会覆盖公式,因此,即使另一个主题得分更高,与 Product A 完成率下降相关的主题也可能跃升至第 1 位。服务会对信号排序;KPI 上下文则提供判断依据。

方法论

pm-copilot://methodology 资源是我的产品规划框架,源自 7 年间将 9 款产品推向市场、服务超过 100 万用户的经验。核心规则如下:

  • 5% 规则。 每个月,你大约只能完成客户所提需求的 5%。该框架会帮你挑选这 5%。
  • 信号汇聚者胜出。 同时出现在工单和功能请求中的主题,是置信度最高的信号。
  • 响应式 > 主动式。 故障会导致用户流失。缺少某项功能还能撑过去;错误则不行。
  • 业务指标优先于公式。 流失率上升或转化率下降会改变一切。

该方法论采用版本控制(v2.2)。每个 generate_product_plan 响应都会链接到该方法论,并在设置了 kpi_context 时告知 Claude 应用它。是否会读取,取决于客户端是否展示资源。

评估

主题通过关键词列表进行匹配,不使用嵌入或大模型分类器。客户文本不会离开服务,并且相同输入始终会产生相同主题,因此可以审计排序结果。代价是召回率较低。

npm run eval 用于衡量这一指标。在已提交的 86 个示例测试集中,配置 v3 的微平均精确率为 96.1%,召回率为 99.0%,F1 分数为 97.5%,漏判率为 1.3%。这个数值来自样本内数据(配置就是根据这些数据调优的),因此它是一个回归测试门槛。在留出的真实聊天数据中,仍有三分之一的对话无法匹配任何主题。

完整结果、首次运行的发现及已知限制:docs/evaluation.md。

安全

所有客户文本在进入分析流程或离开服务之前都会经过脱敏处理:

  • 社会安全号码、信用卡号(通过 Luhn 算法验证)、电子邮件地址和电话号码(美国格式及以 + 开头的国际号码)都会被屏蔽,功能请求 URL 中的信息也会经过脱敏。客户电子邮件字段始终显示为 [REDACTED]。
  • Agent/管理员回复、内部备注、附件、投票者身份、评论者姓名,以及 Chatbase 助手轮次、潜在客户表单、用户 ID 和国家/地区信息都会被完全排除。
  • 在 generate_product_plan 中设置 preview_only: true,即可查看将要发送的内容,而不获取数据。
  • 每个响应都会包含 pii_scrubbing_applied 和 pii_categories_redacted。

详情、已知限制及报告流程:SECURITY.md。

主题配置

仓库根目录中的 themes.config.json 定义了主题。该文件会在运行时读取,因此修改后无需重新构建。文件内置了涵盖 12 个类别的 18 个主题;你可以将自己的主题添加到 themes 数组中。未匹配的数据点会通过二元组和三元组频率挖掘新兴模式。

单词关键字会按单词边界匹配,并可选匹配规则复数形式。多词关键字也会按单词边界匹配。编辑后,运行 npm run eval,检查是否有关键字错误地触发了其他主题。

评分公式

priority = (frequency × 0.35 + severity × 0.35 + vote_momentum × 0.30) × convergence_boost
  • 频率(0.35):数据点数量,按主题归一化。包括转移信号。
  • 严重程度(0.35):仅限响应式信号。线程数量、近期程度(按 7 天半衰期衰减),以及最高严重程度匹配标签带来的加权提升。
  • 投票趋势(0.30):仅限主动信号。80% 计入投票,20% 计入评论。
  • 聚合度(2 倍):当某个主题同时具有响应式和主动信号时应用。转移信号不会触发此项。

频率和投票趋势会根据同一次调用中的最高主题进行归一化,因此分数仅在单次分析窗口内具有相对意义。请比较不同调用之间的排名,而不是原始分数。

故障排除

  • No data sources configured。 检查仓库根目录中是否存在 .env,并确认其中至少配置了一个数据源。
  • HELPSCOUT_APP_SECRET is missing(或 _ID)。 设置两个 HelpScout 值,或同时移除二者,以便在不使用 HelpScout 的情况下运行。
  • 每次调用都出现 HelpScout auth expired or invalid (403)。 如果令牌请求成功,但 API 调用返回 403,则拥有 OAuth 应用的 HelpScout 用户已停用或失去访问权限。更换密钥无济于事;请使用仍在使用的用户账号创建新应用,并更新两个 HELPSCOUT_* 值。
  • 更改未生效。 客户端运行的是已编译的 dist/。运行 npm run build 并重启客户端。
  • No HelpScout mailbox named "…"。 运行 list_sources 查看准确名称,或传入 mailbox_id。
  • No portal found with name "…" / No ProductLift portal named "…"。 门户必须位于 PRODUCTLIFT_PORTALS 中(或配置在单门户变量中)。运行 list_sources。
  • Chatbase 警告:API access needs a Chatbase Standard plan or higher。 其余分析仍会运行;只有转移字段缺失。
  • list_sources 中的 chatbase_agents 为空。 设置 CHATBASE_API_KEY,并设置 CHATBASE_AGENTS 或 CHATBASE_AGENT_ID 中的一个。仅设置密钥不会配置任何内容。

贡献

请参阅 CONTRIBUTING.md。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。