be7720e732
- 添加 wiki skill:文档站管理,支持向 MkDocs 文档站添加/更新技术文档 - SSH 连通性检查脚本 - 文章模板参考(标准格式:摘要→核心概念→详解→代码→陷阱→练习题) - mkdocs.yml 导航结构参考 - 添加 todo skill:任务待办管理,通过自然语言操作 MySQL 待办事项 - LRU 淘汰策略(基于 last_accessed_at) - MySQL MCP 配置指南及建表 SQL - 自然语言到 SQL 的映射规则 - 添加 README.md 说明文档
113 lines
3.8 KiB
Markdown
113 lines
3.8 KiB
Markdown
# Todo Skill 环境配置指南
|
||
|
||
## 1. 安装 MySQL MCP Server
|
||
|
||
推荐使用 `@benborla29/mcp-server-mysql`(支持读写操作)。
|
||
|
||
### 配置方式
|
||
|
||
在项目的 `.mcp.json` 文件中添加(或在 `~/.claude.json` 中配置):
|
||
|
||
```json
|
||
{
|
||
"mcpServers": {
|
||
"mysql": {
|
||
"command": "npx",
|
||
"args": ["-y", "@benborla29/mcp-server-mysql"],
|
||
"env": {
|
||
"MYSQL_HOST": "<替换为你的主机地址>",
|
||
"MYSQL_PORT": "<替换为你的端口,默认 3306>",
|
||
"MYSQL_USER": "<替换为你的用户名>",
|
||
"MYSQL_PASSWORD": "<替换为你的密码>",
|
||
"MYSQL_DATABASE": "<替换为你的数据库名>"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### 验证 MCP 可用
|
||
|
||
配置完成后重启 Claude Code,然后尝试:
|
||
- 列出数据库中的表
|
||
- 执行一条简单查询
|
||
|
||
如果 MCP 工具可用,会看到 `mysql` 相关的工具。
|
||
|
||
---
|
||
|
||
## 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 | 任务描述,可选 |
|
||
| status | ENUM | 状态:pending / in_progress / done / archived |
|
||
| priority | ENUM | 优先级:low / medium / high / urgent |
|
||
| created_at | DATETIME | 创建时间,自动填充 |
|
||
| updated_at | DATETIME | 更新时间,自动刷新 |
|
||
| last_accessed_at | DATETIME | 最后访问时间,每次查看/更新时刷新 |
|
||
| access_count | INT UNSIGNED | 访问计数,每次访问 +1 |
|
||
|
||
---
|
||
|
||
## 3. LRU 淘汰策略
|
||
|
||
### 原理
|
||
|
||
基于 `last_accessed_at` 字段实现 LRU(Least Recently Used)淘汰:
|
||
|
||
- 每次查看、更新 todo 时,刷新 `last_accessed_at` 为当前时间,`access_count` +1
|
||
- 当待办事项总数超过阈值(默认 100 条非 archived 记录)时,自动触发归档
|
||
- 归档优先级:先归档最久未访问的 `done` 事项,再归档最久未访问的 `pending` 事项
|
||
|
||
### 归档 SQL
|
||
|
||
```sql
|
||
-- 查询非 archived 的事项总数
|
||
SELECT COUNT(*) FROM todos WHERE status != 'archived';
|
||
|
||
-- 归档最久未访问的已完成事项(取最旧的 10 条)
|
||
UPDATE todos
|
||
SET status = 'archived'
|
||
WHERE status = 'done'
|
||
ORDER BY last_accessed_at ASC
|
||
LIMIT 10;
|
||
|
||
-- 如果仍然超标,归档最久未访问的待办事项
|
||
UPDATE todos
|
||
SET status = 'archived'
|
||
WHERE status = 'pending'
|
||
ORDER BY last_accessed_at ASC
|
||
LIMIT 10;
|
||
```
|
||
|
||
### 触发时机
|
||
|
||
- 每次 INSERT 新事项后,检查总数是否超标
|
||
- 用户主动要求"清理"或"归档旧任务"时
|
||
- 不会自动归档 `in_progress` 状态的事项(保护正在做的任务)
|