Files
my-skills/todo/references/setup.md
T
wonder be7720e732 feat: 初始化 skills 仓库,添加 wiki 和 todo 两个 skill
- 添加 wiki skill:文档站管理,支持向 MkDocs 文档站添加/更新技术文档
  - SSH 连通性检查脚本
  - 文章模板参考(标准格式:摘要→核心概念→详解→代码→陷阱→练习题)
  - mkdocs.yml 导航结构参考
- 添加 todo skill:任务待办管理,通过自然语言操作 MySQL 待办事项
  - LRU 淘汰策略(基于 last_accessed_at)
  - MySQL MCP 配置指南及建表 SQL
  - 自然语言到 SQL 的映射规则
- 添加 README.md 说明文档
2026-08-31 10:30:53 +08:00

3.8 KiB
Raw Blame History

Todo Skill 环境配置指南

1. 安装 MySQL MCP Server

推荐使用 @benborla29/mcp-server-mysql(支持读写操作)。

配置方式

在项目的 .mcp.json 文件中添加(或在 ~/.claude.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:

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

-- 查询非 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 状态的事项(保护正在做的任务)