2026-08-31 10:30:53 +08:00
|
|
|
|
# Todo Skill 环境配置指南
|
|
|
|
|
|
|
|
|
|
|
|
## 1. 安装 MySQL MCP Server
|
|
|
|
|
|
|
|
|
|
|
|
推荐使用 `@benborla29/mcp-server-mysql`(支持读写操作)。
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
### QwenPaw 配置方式
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
在 `~/.qwenpaw/config.json` 的 `mcp.clients` 中添加:
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
```json
|
2026-09-01 20:58:53 +08:00
|
|
|
|
"mysql": {
|
|
|
|
|
|
"name": "mysql",
|
|
|
|
|
|
"description": "MySQL MCP for todo skill",
|
|
|
|
|
|
"enabled": true,
|
|
|
|
|
|
"transport": "stdio",
|
|
|
|
|
|
"command": "npx",
|
|
|
|
|
|
"args": ["-y", "@benborla29/mcp-server-mysql"],
|
|
|
|
|
|
"env": {
|
|
|
|
|
|
"MYSQL_HOST": "<主机地址>",
|
|
|
|
|
|
"MYSQL_PORT": "<端口,默认 3306>",
|
|
|
|
|
|
"MYSQL_USER": "<用户名>",
|
|
|
|
|
|
"MYSQL_PASS": "<密码>",
|
|
|
|
|
|
"MYSQL_DB": "<数据库名>",
|
|
|
|
|
|
"ALLOW_INSERT_OPERATION": "true",
|
|
|
|
|
|
"ALLOW_UPDATE_OPERATION": "true",
|
|
|
|
|
|
"ALLOW_DELETE_OPERATION": "true",
|
|
|
|
|
|
"SCHEMA_DDL_PERMISSIONS": "<数据库名>:true"
|
2026-08-31 10:30:53 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
> **注意**:环境变量名是 `MYSQL_PASS`(不是 `MYSQL_PASSWORD`)和 `MYSQL_DB`(不是 `MYSQL_DATABASE`)。
|
|
|
|
|
|
|
|
|
|
|
|
### Claude Code 配置方式
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
claude mcp add mysql \
|
|
|
|
|
|
-e MYSQL_HOST="<主机地址>" \
|
|
|
|
|
|
-e MYSQL_PORT="<端口>" \
|
|
|
|
|
|
-e MYSQL_USER="<用户名>" \
|
|
|
|
|
|
-e MYSQL_PASS="<密码>" \
|
|
|
|
|
|
-e MYSQL_DB="<数据库名>" \
|
|
|
|
|
|
-e ALLOW_INSERT_OPERATION="true" \
|
|
|
|
|
|
-e ALLOW_UPDATE_OPERATION="true" \
|
|
|
|
|
|
-e ALLOW_DELETE_OPERATION="true" \
|
|
|
|
|
|
-e SCHEMA_DDL_PERMISSIONS="<数据库名>:true" \
|
|
|
|
|
|
-- npx -y @benborla29/mcp-server-mysql
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-08-31 10:30:53 +08:00
|
|
|
|
### 验证 MCP 可用
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
配置完成后重启客户端,然后尝试:
|
2026-08-31 10:30:53 +08:00
|
|
|
|
- 列出数据库中的表
|
|
|
|
|
|
- 执行一条简单查询
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
如果 MCP 工具可用,会看到 `mysql_query` 工具。
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 2. 创建 todos 表
|
|
|
|
|
|
|
|
|
|
|
|
在目标数据库中执行以下 SQL:
|
|
|
|
|
|
|
|
|
|
|
|
```sql
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS todos (
|
|
|
|
|
|
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
|
title VARCHAR(500) NOT NULL COMMENT '任务标题',
|
|
|
|
|
|
description TEXT COMMENT '任务描述',
|
|
|
|
|
|
status ENUM('pending', 'in_progress', 'done', 'archived') NOT NULL DEFAULT 'pending' COMMENT '状态: pending-待办, in_progress-进行中, done-已完成, archived-已归档',
|
|
|
|
|
|
priority ENUM('low', 'medium', 'high', 'urgent') NOT NULL DEFAULT 'medium' COMMENT '优先级: low-低, medium-中, high-高, urgent-紧急',
|
|
|
|
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
|
|
|
|
|
|
last_accessed_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后访问时间(LRU 淘汰依据)',
|
|
|
|
|
|
access_count INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '访问次数',
|
|
|
|
|
|
INDEX idx_status (status),
|
|
|
|
|
|
INDEX idx_lru (last_accessed_at),
|
|
|
|
|
|
INDEX idx_priority_status (priority, status),
|
|
|
|
|
|
INDEX idx_created (created_at)
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='待办事项表,支持 LRU 淘汰策略';
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 字段说明
|
|
|
|
|
|
|
|
|
|
|
|
| 字段 | 类型 | 说明 |
|
|
|
|
|
|
|------|------|------|
|
|
|
|
|
|
| id | BIGINT UNSIGNED | 自增主键 |
|
|
|
|
|
|
| title | VARCHAR(500) | 任务标题,必填 |
|
|
|
|
|
|
| description | TEXT | 任务描述,可选 |
|
2026-09-01 20:58:53 +08:00
|
|
|
|
| status | ENUM | pending / in_progress / done / archived |
|
|
|
|
|
|
| priority | ENUM | low / medium / high / urgent |
|
2026-08-31 10:30:53 +08:00
|
|
|
|
| created_at | DATETIME | 创建时间,自动填充 |
|
|
|
|
|
|
| updated_at | DATETIME | 更新时间,自动刷新 |
|
2026-09-01 20:58:53 +08:00
|
|
|
|
| last_accessed_at | DATETIME | 最后访问时间,LRU 依据 |
|
|
|
|
|
|
| access_count | INT UNSIGNED | 访问计数,每次 +1 |
|
2026-08-31 10:30:53 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 3. LRU 淘汰策略
|
|
|
|
|
|
|
|
|
|
|
|
基于 `last_accessed_at` 字段实现 LRU(Least Recently Used)淘汰:
|
|
|
|
|
|
|
2026-09-01 20:58:53 +08:00
|
|
|
|
- 每次查看、更新 todo 时刷新 `last_accessed_at` 和 `access_count`
|
|
|
|
|
|
- 待办总数超过 100 条时自动归档
|
|
|
|
|
|
- 先归档最久未访问的 `done` 事项,再归档 `pending` 事项
|
|
|
|
|
|
- 不归档 `in_progress` 状态的事项
|