PM副驾驶
一个MCP服务器,对客户支持票和功能请求进行三角测量,以帮助项目经理决定下一步要构建什么。
   ](#)
______________________________________________________________________
实际结果: 在55秒内分析了3个产品的2370个信号(2136个支持票+234个功能请求)。确定了16个主题,15个趋同主题。首要任务:预订和日程安排(得分:134.6)——629张票+77个功能请求指向同一问题。
阅读完整故事: 我构建了一个MCP服务器,改变了我对产品的优先级排序方式 --我为什么构建这个,收敛信号在实践中是如何工作的,以及我在使用Claude Code构建时学到了什么。
______________________________________________________________________
是什么让这与众不同
- 信号三角测量 --不仅仅是数据访问。将支持票与功能请求进行匹配,以找到收敛主题,然后用加权公式对其进行评分,使收敛信号的优先级提高2倍。
- 可组合性 --设计用于工作 *随着* 其他MCP服务器。将Metabase的流失数据或Google Analytics的流量趋势传递给
generate_product_plan通过kpi_context,并且该方法相应地调整优先级。 - 内置PM方法 --基于9种产品和100多万用户7年实际产品管理经验的观点评分。不是一个通用的框架,而是一个作为MCP资源公开的实际决策过程。
- PII清洗 --客户数据从未未经过滤就到达LLM。在分析之前,SSN、信用卡(Luhn验证)、电子邮件和电话号码都会被编辑。代理响应从引号中过滤出来。
建筑
graph TD
A[Claude Desktop / Code] -->|stdio| B[pm-copilot]
A -->|stdio| C[Metabase MCP]
A -->|stdio| D[Google Analytics MCP]
B -->|Qualitative| E[HelpScout: tickets]
B -->|Qualitative| F[ProductLift: feature requests]
C -->|Quantitative| G[Conversion, Churn, Revenue]
D -->|Acquisition| H[Traffic, Channels, Trends]
B -.->|kpi_context| AClaude协调多个MCP服务器。PM Copilot处理定性客户信号。其他服务器提供定量的业务指标。这 kpi_context 参数是集成点,不需要点对点集成。
快速开始
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克劳德桌面版
添加 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"pm-copilot": {
"command": "node",
"args": ["/absolute/path/to/pm-copilot/dist/index.js"]
}
}
}克劳德代码
claude mcp add pm-copilot -- node /absolute/path/to/pm-copilot/dist/index.js或者使用 .mcp.json 已经在项目根目录中,Claude Code会自动拾取它。
工具
synthesize_feedback
交叉引用HelpScout门票和ProductLift功能请求,返回主题匹配分析和优先级分数。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
timeframe_days | 数字 | 30 | 回顾过去的日子(1-90) |
top_voted_limit | number | 50 | 按投票计数的最大功能请求数 |
mailbox_id | string | -- | HelpScout邮箱筛选器 |
portal_name | string | -- | ProductLift入口过滤器 |
detail_level | 字符串 | "summary" | "summary" (约19KB), "standard" (约68KB),或 "full" (约563KB) |
返回按优先级分数排序的主题,每个主题都有反应/主动计数、收敛标志、证据摘要和代表性客户报价。
generate_product_plan
根据证据和客户报价制定优先产品计划。通过以下方式接受外部业务指标 kpi_context.
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
timeframe_days | 数字 | 30 | 回顾过去的日子(1-90) |
top_voted_limit | number | 50 | 按投票计数的最大功能请求数 |
mailbox_id | string | -- | HelpScout邮箱筛选器 |
portal_name | string | -- | ProductLift入口过滤器 |
kpi_context | string | -- | 来自其他MCP服务器的业务指标 |
max_priorities | number | 5 | 要返回的优先级数量(1-10) |
preview_only | boolean | false | 审核模式:显示哪些数据 *会* 被发送 |
detail_level | 字符串 | "summary" | "summary" (~7KB), "standard" (~21KB),或 "full" (~584KB) |
get_feature_requests
直接访问原始ProductLift数据以浏览功能请求。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
portal_name | string | -- | 筛选到特定门户 |
include_comments | boolean | true | 包括对每个请求的注释 |
行动中的可组合性
PM Copilot旨在与其他MCP服务器协同工作。以下是一个示例,展示了如何 kpi_context override会更改排名。数字是说明性的。
第一步:总理只问一个问题
提取我们的客户流失和预订完成数据,然后使用pm副驾驶根据所有这些背景创建产品计划。
步骤2:pm副驾驶分析信号并返回最高优先级
| # | 主题 | 配乐 | 门票 | 功能请求 | 信号 |
|---|---|---|---|---|---|
| 1 | 账单和付款 | 91.1 | 2336 | 20 | 融合 |
| 2 | 预订和日程安排 | 87.1 | 682 | 74 | 趋同 |
| 3 | 帐户和许可 | 69.7 | 1955 | 8 | 融合 |
| 4 | 团队与协作 | 64.4 | 1875 | 19 | 融合 |
| 5 | 白标和品牌 | 50.2 | 92 | 30 | 融合 |
步骤3:仪表板中的业务指标作为 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%.第四步:克劳德综合两者,并重写公式
分数显示账单和付款排名第一。但该方法论称 *搅动数据会覆盖公式*随着产品A的预订完成率下降8分,客户流失率飙升35%, 预订和日程安排成为现实#1 --这是核心产品的突破。
产品B优先级降低(指标稳定,无火灾)。产品A 22%的有机流量增长提升了白标和品牌作为增长游戏的地位。
服务器提供信号排名。KPI上下文提供了覆盖判断。克劳德综合了两者。
方法论
PM Copilot揭露 pm-copilot://methodology 资源——David Kelly的产品规划框架,在7年多的时间里向100多万用户推出了9款产品。
关键原则:
- 5%规则 --您每月完成客户要求的约5%。该框架确定了哪5%最重要。
- 汇聚的信号总是赢 --支持票和功能请求中的主题相同=最高置信度信号。
- 被动>主动 --破碎的东西会引发混乱。你可以在没有特征的情况下生存;你无法在错误中幸存下来。
- 业务指标覆盖公式 --流失率上升、转化率下降或收入影响都会改变一切。
该方法是版本化的(v2.0),并通过MCP资源协议作为降价内容。Claude在使用时会自动引用它 generate_product_plan.
安全
客户数据通过PM Copilot流向Claude。所有文本在进入分析管道或离开服务器之前都会被擦除。
PII清洗
| 类别 | 方法 | 替换 |
|---|---|---|
| SSN | 图案匹配(XXX-XX-XXXX) | [SSN REDACTED] |
| 信用卡 | 13-19位数字序列+Luhn验证 | [CREDIT CARD REDACTED] |
| 电子邮件地址 | 标准电子邮件模式 | [EMAIL REDACTED] |
| 电话号码 | 美国格式(+1、括号、破折号、圆点) | [PHONE REDACTED] |
| 客户电子邮件字段 | 始终已编辑 | [REDACTED] |
我们完全排除的
| 数据 | 为什么 |
|---|---|
| 代理/管理员回复 | 只有客户的声音很重要;代理的回复可能会泄露内部进程 |
| 内部HelpScout笔记 | 可能包含凭据、解决方法、内部讨论 |
| 附件 | 可能包含带有个人身份信息、发票、医疗文件的屏幕截图 |
| 选民身份 | 选票计数足够;个人身份不会增加PM值 |
审计控制
preview_only: true上generate_product_plan显示哪些数据 *会* 未提取就发送- 每个回复都包括
pii_scrubbing_applied和pii_categories_redacted元数据 - 每次调用时记录到stderr的数据类别(仅类别,从不内容)
发展
npm install # Install dependencies
npm run build # Compile TypeScript
npm run dev # Watch mode
npm start # Run the server主题配置
themes.config.json 在项目根中定义要查找的主题。编辑而不重建--在运行时加载。
包含9个类别的16个数据驱动主题。通过附加到 themes 阵列。使用二元/三元频率检测来分析不匹配的数据点以寻找新出现的模式。
评分公式
priority = (frequency × 0.35 + severity × 0.35 + vote_momentum × 0.30) × convergence_boost- 频率 (0.35):数据点计数,跨主题标准化
- 严重性 (0.35):仅反应信号——线程深度、最近度(7天半衰期衰减)、标签增强
- 投票势头 (0.30):仅主动信号——80%的选票+20%的评论
- 收敛 (2x):当主题同时具有反应性和主动性信号时应用
贡献
- 分叉存储库
- 创建要素分支(
git checkout -b feature/your-feature) - 确保
npm run build成功无误 - 遵循现有模式:工具使用
registerTool,API客户端获得自己的模块,PII清理发生在格式层 - 打开拉取请求
