AgentPM 是一个用于 AI 驱动软件开发的规划和编排系统。作为本地安装的 MCP 服务器,它与支持 Anthropic 的模型上下文协议规范的任何 IDE 集成,包括 Cursor、Augment、VS Code Copilot、Cline 和 Roo。
AgentPM 担任产品经理的角色,帮助开发者规划、优先处理并执行复杂的项目:
https://github.com/user-attachments/assets/6ddb551c-0c10-4a93-8665-fc5c1e3127c1
在项目 .cursor/mcp.json 文件中添加以下内容(或全局安装在 ~/.cursor/mcp.json)。
{
"mcpServers": {
"agent-pm": {
"command": "npx",
"args": [
"-y",
"@gannonh/agent-pm@latest"
],
"env": {
"PROJECT_ROOT": "/path/to/project/root/",
"ANTHROPIC_API_KEY": "sk-your-anthropic-api-key",
"PERPLEXITY_API_KEY": "pplx-your-perplexity-api-key"
}
}
}
}
在 VS-Code Augment 用户设置文件中添加以下内容(CMD+SHIFT+P > Augment: 编辑设置 > 在 settings.json 中编辑):~/Library/Application Support/Code/User/settings.json。
"augment.advanced": {
"mcpServers": [
{
"name": "agent-pm",
"command": "npx",
"args": [
"-y",
"@gannonh/agent-pm@latest"
],
"env": {
"PROJECT_ROOT": "/path/to/project/root/",
"ANTHROPIC_API_KEY": "sk-your-anthropic-api-key",
"PERPLEXITY_API_KEY": "pplx-your-perplexity-api-key"
},
]
}
有关 MCP 服务器配置的更多信息,请参阅特定 IDE 的文档:
⚠️ 警告:大多数配置选项已经经过精心调整以获得最佳结果。除非有特殊要求,否则建议仅设置所需的变量,并保留其余默认值。
| 变量 | 描述 | 默认值 |
|---|---|---|
PROJECT_ROOT | 项目目录路径 | 当前目录 |
ANTHROPIC_API_KEY | Claude AI 集成的 API 密钥 | 无 |
| 变量 | 描述 | 默认值 |
|---|---|---|
PERPLEXITY_API_KEY | Perplexity AI 集成的 API 密钥 | 无 |
DEBUG_LOGS | 启用带有文件日志的调试模式 | false |
| 变量 | 描述 | 默认值 |
|---|---|---|
ANTHROPIC_MODEL | 使用的 Claude 模型 | "claude-3-7-sonnet-20250219" |
ANTHROPIC_TEMPERATURE | Claude API 调用的温度 | 0.2 |
ANTHROPIC_MAX_TOKENS | Claude API 的最大令牌数 | 64000 |
ANTHROPIC_MAX_CACHE_SIZE | Claude API 的最大缓存大小 | 100 |
ANTHROPIC_CACHE_TTL | Claude API 的缓存 TTL(毫秒) | 3600000 |
ANTHROPIC_MAX_RETRIES | Claude API 的最大重试次数 | 5 |
ANTHROPIC_BASE_URL | Claude API 的基础 URL | "https://api.anthropic.com" |
ANTHROPIC_SYSTEM_PROMPT | Claude API 的系统提示 | "You are a helpful assistant." |
| 变量 | 描述 | 默认值 |
|---|---|---|
PERPLEXITY_MODEL | 使用的 Perplexity 模型 | "sonar-pro" |
PERPLEXITY_MAX_TOKENS | Perplexity API 的最大令牌数 | 1024 |
PERPLEXITY_MAX_CACHE_SIZE | Perplexity API 的最大缓存大小 | 1_00 |
PERPLEXITY_CACHE_TTL | Perplexity API 的缓存 TTL(毫秒) | 3600000 |
PERPLEXITY_MAX_RESULTS | Perplexity API 的最大结果数 | 5 |
PERPLEXITY_MAX_RETRIES | Perplexity API 的最大重试次数 | 5 |
PERPLEXITY_BASE_URL | Perplexity API 的基础 URL | "https://api.perplexity.ai" |
PERPLEXITY_TEMPERATURE | Perplexity API 调用的温度 | 0.7 |
PERPLEXITY_SYSTEM_PROMPT | Perplexity API 的系统提示 | "You are a helpful research assistant. Provide factual information with sources." |
| 变量 | 描述 | 默认值 |
|---|---|---|
ARTIFACTS_DIR | 存储工件的目录 | "apm-artifacts" |
ARTIFACTS_FILE | 工件的文件名 | "artifacts.json" |
PRODUCT_BRIEF_FILE | 项目简介的文件名 | "project-brief.md" |
设置 DEBUG_LOGS=true 可启用:
logs 目录中详细记录到文件apm-2025-05-04-18-16.log)当 DEBUG_LOGS=false(默认)时:
目的:查询项目中的任务。
动作:
get_all:列出任务,可按状态过滤get_single:通过 ID 查看特定任务get_next:查找下一个要做的任务filter_by_status 或 filter_by_priority:目标任务列表当调用 apm_task 工具时:
参数验证:
action 参数(必需,必须是有效动作之一)projectRoot 参数(必需,必须是绝对路径)get_single:验证 id 参数(必需,非空字符串)filter_by_status:验证 status 参数(必需,必须是有效状态)filter_by_priority:验证 priority 参数(必需,必须是有效优先级)file、withSubtasks 和 containsText任务检索:
apm-artifacts/artifacts.json)动作执行:
action 参数执行相应的动作:
get_all:返回所有任务,可按状态过滤get_single:通过 ID 返回特定任务get_next:根据依赖关系和状态返回下一个要做的任务filter_by_status:按状态过滤任务filter_by_priority:按优先级过滤任务动作特定处理:
get_all 和 filter_by_status:
withSubtasks 参数处理子任务get_single:
get_next:
filter_by_priority:
withSubtasks 参数处理子任务响应格式化:
错误处理:
{
"method": "apm_task",
"params": {
"action": "get_all|get_single|get_next|filter_by_status|filter_by_priority",
"projectRoot": "/absolute/path/to/project",
"file": "optional/path/to/artifacts.json",
"id": "5", // 对于 get_single 动作必需
"status": "pending|in-progress|done|deferred|cancelled", // 对于 get_all 和 filter_by_status 动作
"priority": "high|medium|low", // 对于 get_next 和 filter_by_priority 动作
"withSubtasks": true|false,
"containsText": "optional search text" // 对于 get_next 动作
}
}
对于 get_all 和 filter_by_status 动作:
{
"content": [
{
"type": "text",
"text": {
"success": true,
"data": {
"tasks": [
{
"id": "1",
"title": "任务 1",
"description": "描述",
"status": "待办",
"priority": "高",
"dependencies": []
}
],
"stats": {
"总任务数": 10,
"已完成任务数": 3,
"待办任务数": 5,
"进行中任务数": 2,
"任务完成百分比": 30
},
"过滤": "待办"
},
"消息": "找到 5 个状态为 '待办' 的任务",
"内存": {
"会话ID": "session-123456",
"上下文": {
"上次查询": {
"动作": "get_all",
"状态": "待办",
"withSubtasks": false
},
"项目根目录": "/path/to/project",
"时间戳": "2023-06-15T10:30:00Z"
}
}
}
}
]
}
对于 get_single 动作:
{
"content": [
{
"type": "text",
"text": {
"success": true,
"data": {
"任务": {
"id": "5",
"标题": "实现功能",
"描述": "创建该功能",
"状态": "待办",
"优先级": "高",
"依赖项": ["3", "4"],
"详情": "实现细节..."
}
},
"消息": "找到任务:实现功能",
"内存": {
"会话ID": "session-123456",
"上下文": {
"上次查询": {
"动作": "get_single",
"id": "5"
},
"项目根目录": "/path/to/project",
"时间戳": "2203-06-15T10:30:00Z"
}
}
}
}
]
}
对于 get_next 动作:
{
"content": [
{
"type": "text",
"text": {
"success": true,
"data": {
"下一个任务": {
"id": "2",
"标题": "下一个任务",
"描述": "描述",
"状态": "待办",
"优先级": "高",
"依赖项": []
},
"所有任务": [
/* 所有任务数组 */
]
},
"消息": "找到下一个任务:下一个任务",
"内存": {
"会话ID": "session-123456",
"上下文": {
"上次查询": {
"动作": "get_next",
"优先级": "高",
"containsText": null
},
"任务总数": 10,
"准备就绪任务数": 3,
"时间戳": "2023-06-15T10:30:00Z"
}
}
}
}
]
}
对于 filter_by_priority 动作:
{
"content": [
{
"type": "text",
"text": {
"success": true,
"data": {
"任务": [
{
"id": "1",
"标题": "任务 1",
"描述": "描述",
"状态": "待办",
"优先级": "高",
"依赖项": []
}
],
"统计": {
"总任务数": 10,
"已完成任务数": 3,
"待办任务数": 5,
"进行中任务数": 2,
"任务完成百分比": 30
},
"过滤": "高"
},
"消息": "找到 5 个优先级为 '高' 的任务",
"内存": {
"会话ID": "session-123456",
"上下文": {
"上次查询": {
"动作": "filter_by_priority",
"优先级": "高",
"withSubtasks": false
},
"项目根目录": "/path/to/project",
"时间戳": "2023-06-15T10:30:00Z"
}
}
}
}
]
}
</details>
目的:创建、更新和删除任务及其子任务
动作:
create:添加新任务update:更新任务详情update_status:更改任务状态delete:删除任务add_subtask:向任务添加子任务remove_subtask:从任务中