pm-copilot 是一个 MCP(Model Context Protocol)服务器,通过三角定位客户支持工单、功能请求和 AI 支持代理对话,帮助产品经理决定下一步构建什么。它旨在解决工单驱动的优先级排序中遗漏 AI 支持代理所处理问题(偏转)的盲点。
主要能力:
- 信号三角定位:匹配支持工单与功能请求,找出收敛主题,并给予收敛主题 2 倍优先级加成。
- 偏转盲点处理:AI 支持代理回答的问题永远不会变成工单,因此基于工单的优先级排序会低估机器人处理的每个主题。Chatbase 对话作为第三类信号引入,并为每个主题提供 self_serve_failure_rate(自助失败率)。
- 可组合性:通过 kpi_context 将其他 MCP 服务器的流失或流量数据传入 generate_product_plan,方法论会据此调整优先级。
提供的主要 MCP 工具:
- synthesize_feedback:返回按优先级分数排序的主题,每个主题包含各类别计数、收敛标志、证据摘要和代表性引用。在 summary 详情下约 15KB,在 full 下可达数百 KB。支持通用过滤。
- generate_product_plan:构建带证据和客户引用的优先级计划。接受通用过滤条件及额外参数。
- get_theme_evidence:深入查看单个主题,返回其背后的具体工单、功能请求和聊天记录,按最新优先排序,包含工单号、请求 URL、投票、渠道和日期。在分析调用后几分钟内传入相同通用过滤条件可复用缓存数据,不会发起新的 API 调用。返回标识符、元数据和清洗后的标题(对于聊天,为其开场客户消息截断至 200 字符),而非完整对话。
- get_feature_requests:原始 ProductLift 访问。每个请求包含其公开 url。
- list_sources:列出已配置的邮箱、门户和代理,以及设置 Chatbase 时的 chatbase_conversation_sources(即 source_filter 接受的值)。绝不返回密钥或客户数据。无参数。
使用方式:
- 需要 Node 20+。未发布到 npm,需从源码安装。
- .env 文件位于仓库根目录,服务器无论从哪个工作目录启动都会从那里加载。
- 至少配置一个数据源;分析会根据所设置的源自适应。没有 HelpScout 则没有支持工单,主题没有严重性分数和收敛加成;ProductLift 和 Chatbase 仍按频率和投票对主题排序。
- Chatbase API 访问需要 Standard 计划或更高;较低计划下偏转信号会变成警告。每个产品一个代理,可提供产品级归因,共享邮箱则没有。
- 添加到 Claude 桌面配置:~/Library/Application Support/Claude/claude_desktop_config.json。或在仓库中打开 Claude Code,会提示批准项目 .mcp.json。重启客户端后让其运行 list_sources,应列出已配置的源。
适用场景:
- 产品经理需要基于客户反馈决定下一步构建什么。
- 需要跨多个产品(如 4 个产品)分析大量信号(如 30 天窗口内 3,353 个信号:1,678 个支持工单、276 个功能请求、1,399 个 AI 支持代理对话)。
- 希望通过 KPI 上下文(流失、转化数据)覆盖公式进行优先级判断。
限制:
- 主题匹配使用关键词列表,而非嵌入或 LLM 分类器,因此召回率有代价。在提交的 86 个示例夹具上,配置 v3 得分为微观精确率 96.1%、召回率 99.0%、F1 97.5%,漏报率 1.3%;该数字为样本内(配置针对其调优),仅作为回归门禁。在留出的真实聊天数据上,仍有三分之一的对话匹配不到任何主题。
- 所有客户文本在进入分析或离开服务器前都会清洗:社保号、信用卡(Luhn 验证)、电子邮件地址和电话号码(美国格式及 + 前缀国际格式)会被涂黑,功能请求 URL 中也会清洗。客户电子邮件字段始终为 [REDACTED]。代理/管理员回复、内部笔记、附件、投票者身份、评论者姓名、Chatbase 助手轮次、潜在客户表单、用户 ID 和国家完全排除。generate_product_plan 上的 preview_only: true 显示将发送的内容而不获取数据。每个响应都包含 pii_scrubbing_applied 和 pii_categories_redacted。
- 偏转信号从不会影响严重性、投票动量或收敛加成。每个主题携带 deflected_count(匹配该主题的对话)、self_serve_failure_rate(其中代理最低答案置信度低于 0.5 的比例)、mean_answer_confidence(同一分数的均值)。Chatbase 未记录其 min_score 衡量什么,因此这些是供 LLM 权衡的证据,而非评分的一部分。分析还按渠道统计对话(chatbase_sources)。无法识别的 source_filter 值会带警告传递,而非拒绝。没有 Chatbase 时,偏转字段缺失。
方法论(pm-copilot://methodology,版本 v2.2,来自作者 7 年发布 9 个产品至 100 万+用户的产品规划框架)核心规则:
- 5% 规则:每月大约完成客户所要求的 5%,框架挑选哪 5%。
- 收敛信号胜出:同时出现在工单和功能请求中的主题是置信度最高的信号。
- 反应式 > 主动式:坏掉的东西驱动流失。可以忍受缺少功能;不能忍受错误。
- 业务指标覆盖公式:流失上升或转化下降会改变一切。 每个 generate_product_plan 响应都链接到它,并告知 Claude 在设置 kpi_context 时应用它。是否被读取取决于客户端是否展示资源。
主题配置:仓库根目录的 themes.config.json 定义主题,运行时读取,编辑无需重建。自带 12 个类别下的 18 个主题;可在 themes 数组中添加。未匹配数据点会用二元/三元组频率挖掘新兴模式。单字关键词按词边界匹配并可选的常规复数。多字关键词也按词边界匹配。编辑后运行 npm run eval 以捕获在错误主题上触发的关键词。
评分公式:
- 频率(0.35):数据点计数,跨主题归一化。包括偏转信号。
- 严重性(0.35):仅反应式信号。线程数、近期性(7 天半衰期衰减)以及最高严重性匹配标签的加成。
- 投票动量(0.30):仅主动式信号。80% 投票,20% 评论。
- 收敛(2 倍):当主题同时具有反应式和主动式信号时应用。偏转信号不触发它。 频率和投票动量针对同一次调用中的顶部主题归一化,因此分数相对于同一分析窗口。跨调用比较排名,而非原始分数。
故障排除:
- 未配置数据源:检查 .env 存在于仓库根目录并设置至少一个源。
- 缺少 HELPSCOUT_APP_SECRET(或 _ID):设置两个 HelpScout 值,或同时移除两者以在无 HelpScout 下运行。
- 每次调用 HelpScout 认证过期或无效(403):如果令牌请求成功但 API 调用返回 403,则拥有 OAuth 应用的 HelpScout 用户被停用或失去访问权限。轮换密钥无济于事;从活跃用户资料创建新应用并更新两个 HELPSCOUT_* 值。
- 更改未生效:客户端运行编译后的 dist/。运行 npm run build 并重启客户端。
- 没有名为“…”的 HelpScout 邮箱:运行 list_sources 获取准确名称,或传入 mailbox_id。
- 未找到名为“…”的门户 / 没有名为“…”的 ProductLift 门户:门户必须在 PRODUCTLIFT_PORTALS(或单门户变量)中。运行 list_sources。
- Chatbase 警告:API 访问需要 Chatbase Standard 计划或更高。分析的其余部分仍会运行;仅偏转字段缺失。
- list_sources 中 chatbase_agents 为空:同时设置 CHATBASE_API_KEY 和 CHATBASE_AGENTS / CHATBASE_AGENT_ID 之一。仅密钥不配置任何内容。
贡献:见 CONTRIBUTING.md。