# Cursor 自动任务执行机制 ## 问题背景 **MCP(Model Context Protocol)的工作原理**: - MCP是一个**被动协议**,工具必须被主动调用才会执行 - task-manager MCP可以读取任务并将状态改为processing - **但是**,MCP返回的结果只是文本,**不会自动触发Cursor执行任何操作** - Cursor需要用户或脚本**主动调用**MCP工具来获取并执行任务 ## 解决方案 我们提供了**3种方式**让Cursor自动感知并执行任务: --- ## 方案1:手动触发(最简单) 在Cursor Chat中直接说: ``` 请检查并执行所有pending任务 ``` 或者: ``` @task-manager 执行所有pending任务 ``` Cursor会: 1. 调用`get_pending_tasks`工具获取任务列表 2. 对每个任务调用`execute_task`工具 3. 根据任务描述生成代码 4. 自动调用`update_task_status`更新任务状态 **优点**:最简单,无需额外配置 **缺点**:需要手动触发 --- ## 方案2:Python自动执行脚本(推荐) 使用我们提供的自动执行脚本: ### 2.1 执行一次检查 ```bash python scripts/auto_execute_tasks.py --once ``` 脚本会: 1. 从数据库读取所有pending任务 2. 以特定格式打印任务详情 3. 创建任务通知文件 `.cursor/pending_tasks.json` 4. Cursor可以识别这个文件并自动执行任务 ### 2.2 持续监控模式 ```bash python scripts/auto_execute_tasks.py --interval 300 ``` 参数: - `--interval`: 检查间隔(秒),默认300秒(5分钟) 脚本会每隔指定时间自动检查新任务。 ### 2.3 在后台运行 **Windows(PowerShell):** ```powershell Start-Process python -ArgumentList "scripts/auto_execute_tasks.py" -WindowStyle Hidden ``` **Linux/Mac:** ```bash nohup python scripts/auto_execute_tasks.py > logs/auto_execute.log 2>&1 & ``` **优点**:真正的自动化,无需人工干预 **缺点**:需要运行额外的Python进程 --- ## 方案3:Cursor Agent脚本 使用Cursor Agent脚本创建任务提示文件: ### 3.1 执行一次 ```bash python scripts/cursor_task_agent.py --once ``` ### 3.2 守护进程模式 ```bash python scripts/cursor_task_agent.py --daemon --interval 300 ``` 这个脚本会: 1. 从数据库读取pending任务 2. 为每个任务创建一个Markdown提示文件 3. 文件保存在 `.cursor/task_prompts/` 目录 4. 用户打开Cursor时会看到这些提示文件 **优点**:提供友好的任务通知界面 **缺点**:不是完全自动化,用户仍需手动执行 --- ## 自动执行工作流程 ### 完整流程(以方案2为例) ``` 1. 用户在Web界面创建任务 ↓ 2. 任务保存到PostgreSQL (status = 'pending') ↓ 3. auto_execute_tasks.py 定期检查数据库 ↓ 4. 发现pending任务,打印任务详情 ↓ 5. 创建 .cursor/pending_tasks.json 通知文件 ↓ 6. Cursor检测到通知文件(或脚本输出) ↓ 7. Cursor自动调用 execute_task MCP工具 ↓ 8. task-manager MCP将任务状态改为 'processing' ↓ 9. 返回执行指令给Cursor ↓ 10. Cursor根据任务描述生成Python代码 ↓ 11. Cursor自动调用 update_task_status 工具 ↓ 12. 任务状态更新为 'completed' ↓ 13. 任务完成!✅ ``` --- ## 配置说明 ### 数据库配置 确保 `mcp-servers/task-manager/config.json` 配置正确: ```json { "database": { "uri": "postgresql://postgres:dataOps@192.168.3.143:5432/dataops" } } ``` ### 脚本配置 两个脚本都会自动读取上述配置文件,无需额外配置。 ### 日志查看 日志文件位置: - `logs/cursor_task_agent.log` - Agent脚本日志 - `logs/auto_execute.log` - 自动执行脚本日志(如果在后台运行) --- ## 快速开始 ### 方式1:最简单(推荐新手) 在Cursor Chat中说: ``` 请检查并执行所有pending任务 ``` ### 方式2:自动化(推荐生产环境) 1. 安装依赖: ```bash pip install psycopg2-binary ``` 2. 运行脚本: ```bash python scripts/auto_execute_tasks.py ``` 3. 让脚本在后台持续运行,它会自动检查并执行新任务 --- ## 故障排查 ### 问题1:脚本报错"ModuleNotFoundError: No module named 'psycopg2'" **解决方案**: ```bash pip install psycopg2-binary ``` ### 问题2:无法连接数据库 **检查**: 1. PostgreSQL服务是否运行 2. `mcp-servers/task-manager/config.json` 中的数据库URI是否正确 3. 网络连接是否正常(如果数据库在远程服务器) ### 问题3:Cursor没有执行任务 **可能原因**: 1. Cursor没有看到任务通知 → 检查 `.cursor/pending_tasks.json` 是否存在 2. 任务状态不是pending → 检查数据库中任务的status字段 3. 任务描述格式不正确 → 确保任务描述包含清晰的需求说明 ### 问题4:任务一直是processing状态 **原因**: - 任务被执行但Cursor没有调用`update_task_status`更新状态 **解决方案**: 1. 在Cursor中手动调用: ``` 调用工具: update_task_status 参数: { "task_id": <任务ID>, "status": "completed", "code_name": "<生成的文件名>.py", "code_path": "<文件路径>" } ``` 2. 或者在数据库中手动更新: ```sql UPDATE task_list SET status = 'pending', update_time = CURRENT_TIMESTAMP WHERE task_id = <任务ID>; ``` 然后重新执行任务。 --- ## MCP工具使用 如果你想在Cursor中手动使用MCP工具: ### 获取pending任务列表 ``` 调用工具: get_pending_tasks ``` ### 执行特定任务 ``` 调用工具: execute_task 参数: { "task_id": 8, "auto_complete": true } ``` ### 更新任务状态 ``` 调用工具: update_task_status 参数: { "task_id": 8, "status": "completed", "code_name": "import_dept_mapping.py", "code_path": "app/core/data_flow" } ``` ### 批量处理所有任务 ``` 调用工具: process_all_tasks 参数: { "auto_poll": true } ``` --- ## 最佳实践 1. **任务描述要清晰**:包含足够的技术细节和需求说明 2. **使用markdown格式**:任务描述应该是结构化的markdown文档 3. **指定文件路径**:在任务描述中明确代码文件的保存路径 4. **监控任务状态**:定期检查任务的执行状态 5. **查看日志**:遇到问题时查看日志文件 --- ## 总结 - **最简单**:在Cursor中直接说"执行pending任务" - **最自动**:运行 `auto_execute_tasks.py` 脚本 - **最友好**:运行 `cursor_task_agent.py` 脚本创建任务提示 选择适合你的方式,开始自动化你的开发任务吧!🚀