# 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` 脚本创建任务提示

选择适合你的方式，开始自动化你的开发任务吧！🚀






