使用说明
MCP任务管理器
通过协议公开的完整任务管理器 MCP(模型上下文协议),在SQLite中持续。它允许您创建、组织、筛选、排序和导出任务,并支持项目、子任务和标记。
索梅尔
建筑
task-manager/
├── server.py # Serveur MCP — définition de tous les tools
└── database.py # Initialisation SQLite et helper de connexion
服务器是用 FastMCP et利用 SQLite 直接(无ORM)。数据存储在文件中 tasks.db 第一次启动时自动创建。
安装
先决条件
- Python 3.10+
mcp,pydantic,fpdf2
依赖性
pip install mcp pydantic fpdf2
开始
python server.py
⚠️ Ne pas利用者
print()在调用方代码中:MCP使用stdout作为其通信协议。
数据库 tasks.db 在第一次启动时自动创建。初始化是幂等的(CREATE TABLE IF NOT EXISTS).
数据模型
任务(Task)
| 冠军 | 类型 | 描述 |
|---|---|---|
id |
int |
唯一标识符(自动递增) |
title |
str |
任务标题 |
completed |
bool |
完成状态 |
priority |
"low" | "medium" | "high" |
优先权 |
tags |
List[str] |
免费标签列表 |
due_date |
str | None |
格式截止日期 YYYY-MM-DD |
description |
str | None |
长描述(自由文本) |
project_id |
int | None |
相关项目 |
parent_id |
int | None |
父任务(用于子任务) |
sort_order |
int | None |
手动显示顺序中的位置 |
created_at |
str |
创建时间戳 |
项目(Project)
| 冠军 | 类型 | 描述 |
|---|---|---|
id |
int |
唯一标识符 |
name |
str |
项目名称独特 |
description |
str | None |
描述自由 |
color |
str | None |
十六进制颜色(例如: "#FF5733") |
created_at |
str |
创建时间戳 |
关系
- 任务可能属于 只有一个项目 (
project_id). - 一个任务可以有一个 父任务 (
parent_id),这使它成为一个子任务。 - 删除父任务会导致其所有子任务的级联删除。
- 删除项目可以取消关联任务(
unassign_tasks=True),或者删除它们(unassign_tasks=False).
工具参考
任务-CRUD
create_task
创建新任务。
| 参数 | 类型 | 缺陷 | 描述 |
|---|---|---|---|
title |
str |
- | 任务标题 (必填) |
priority |
"low" | "medium" | "high" |
"medium" |
优先权 |
tags |
List[str] |
[] |
相关标签 |
due_date |
str | None |
None 截止日期(YYYY-MM-DD) |
返回: Task
list_tasks
返回所有任务(已完成和打开),不带过滤器。
返回: List[Task]
delete_task
按任务ID删除任务。如果任务有子任务,它们也将被删除。
| 参数 | 类型 | 描述 |
|---|---|---|
id |
int |
任务ID |
⚠️ 不可逆操作。
返回: str (消息取消确认)
update_task_title
更改现有任务的标题。
| 参数 | 类型 | 描述 |
|---|---|---|
id |
int |
任务ID |
title |
str 新标题 |
返回: Task
update_task_priority
更改任务的优先级。
| 参数 | 类型 | 描述 |
|---|---|---|
id |
int |
任务ID |
priority |
"low" | "medium" | "high" 新的优先事项 |
返回: Task
update_task_tags
增量添加或删除标记(不覆盖现有标记)。
| 参数 | 类型 | 缺陷 | 描述 |
|---|---|---|---|
id |
int |
- | 任务ID |
add_tags |
List[str] |
[] |
要添加的标签(如果已经存在,则忽略) |
remove_tags |
List[str] |
[] |
要删除的标签(如果不存在,则忽略) |
返回: Task
update_task_due_date
更改或删除任务的截止日期。
| 参数 | 类型 | 描述 |
|---|---|---|
id |
int |
任务ID |
due_date |
str | None |
新截止日期(YYYY-MM-DD),ou None 要删除 |
返回: Task
update_task_description
添加、修改或删除任务的长描述。
| 参数 | 类型 | 描述 |
|---|---|---|
id |
int |
任务ID |
description |
str | None |
新文本,或 None 要删除 |
返回: Task
任务-状态
complete_task
将任务标记为已完成。
| 参数 | 类型 | 描述 |
|---|---|---|
id |
int |
任务ID |
返回: Task
uncomplete_task
将任务标记为未完成(重新打开任务)。
| 参数 | 类型 | 描述 |
|---|---|---|
id |
int |
任务ID |
返回: Task
complete_task_with_subtasks
标记任务 及其所有子任务 如在单个操作中完成的。
| 参数 | 类型 | 描述 |
|---|---|---|
id |
int |
父任务ID |
返回: List[Task] (父任务+所有已完成的子任务)
mark_all_completed
知名品牌 全部 打开的任务已完成。
⚠️ 全球和不可逆操作。
返回: str (分配的任务数)
任务-过滤和搜索
list_open_tasks
仅返回按创建日期排序的未完成任务。
返回: List[Task]
list_completed_tasks
仅返回已完成的任务,按创建日期降序排序。
返回: List[Task]
list_tasks_by_priority
返回按优先级递减排序的所有任务(high → medium → low),然后按创建日期。
返回: List[Task]
list_tasks_due_today
返回到期日为的未完成任务 今天,按优先级排序。
返回: List[Task]
list_overdue_tasks
返回到期日为的未完成任务 过时,按日期升序排序。
返回: List[Task]
list_tasks_by_tag
返回包含特定标记的任务。
| 参数 | 类型 | 描述 |
|---|---|---|
tag |
str |
要搜索的标签 |
⚠️ 研究利用
LIKE在CSV字段中-它可以返回具有类似名称的标签的误报(例如:"dev"可以对应于"devops").
返回: List[Task]
search_tasks
搜索标题和标签中的全文。
| 参数 | 类型 | 描述 |
|---|---|---|
keyword |
str 要搜索的关键字 |
返回: List[Task] (按创建日期降序排序)
filter_tasks
高级多标准过滤器。所有参数都是可选的,可以组合(逻辑) AND).
| 参数 | 类型 | 缺陷 | 描述 |
|---|---|---|---|
tag |
str | None |
None |
标签上的过滤器(搜索 LIKE) |
priority |
"low" | "medium" | "high" | None |
None |
优先级过滤器 |
completed |
bool | None |
None |
True =完成, False =打开, None =全部 |
project_id |
int | None |
None |
筛选项目 |
has_due_date |
bool | None |
None |
True =到期时, False =无 |
parent_id |
int | None |
None |
-1 =仅限顶级任务, >0 =特定父级的子任务 |
结果按优先级、截止日期和创建日期排序。
返回: List[Task]
任务-调度
set_task_order
设置任务在显示器中的手动位置。其他任务会自动移位,以避免重复。
| 参数 | 类型 | 描述 |
|---|---|---|
task_id |
int |
任务ID |
position |
int |
所需位置(1=第一) |
返回: Task
list_tasks_ordered
返回按手动顺序排序的所有任务(sort_order)的。没有定义顺序的任务最后出现。
返回: List[Task]
reset_task_order
删除所有任务的手动顺序(重置 sort_order 至 NULL).
返回: str (消息取消确认)
子任务
create_subtask
创建链接到父任务的子任务。子任务支持与经典任务相同的字段。
| 参数 | 类型 | 缺陷 | 描述 |
|---|---|---|---|
parent_id |
int |
- | 父任务ID (必填) |
title |
str |
- | 子任务标题 (必填) |
priority |
"low" | "medium" | "high" |
"medium" |
优先权 |
tags |
List[str] |
[] |
标签 |
due_date |
str | None |
None 截止日期(YYYY-MM-DD) |
⚠️ 删除父任务会导致其所有子任务的级联删除。
返回: Task
list_subtasks
列出父任务的所有子任务,按创建日期排序。
| 参数 | 类型 | 描述 |
|---|---|---|
parent_id |
int |
父任务ID |
返回: List[Task]
项目
create_project
创建一个新项目。名称必须是唯一的。
| 参数 | 类型 | 缺陷 | 描述 |
|---|---|---|---|
name |
str |
-- | 项目名称独特 (必填) |
description |
str | None |
None |
描述自由 |
color |
str | None |
None |
十六进制颜色(例如: "#3B82F6") |
返回: Project
list_projects
按创建日期排序的所有项目列表。
返回: List[Project]
delete_project
删除项目。相关任务的行为是可配置的。
| 参数 | 类型 | 缺陷 | 描述 |
|---|---|---|---|
id |
int |
- | 项目ID |
unassign_tasks |
bool |
True |
True =任务保留,但丢失 project_id ; False =随着项目删除任务 |
返回: str (消息取消确认)
assign_task_to_project
将任务与项目关联,或通过传递将其分离 project_id=None.
| 参数 | 类型 | 描述 |
|---|---|---|
task_id |
int |
任务ID |
project_id |
int | None |
项目标识符,或 None 为了分离 |
返回: Task
list_tasks_by_project
列出项目中的所有任务,按排序 sort_order 然后按创建日期。
| 参数 | 类型 | 描述 |
|---|---|---|
project_id |
int |
项目ID |
返回: List[Task]
出口
export_tasks_json
以JSON格式导出所有任务(解析项目名称)。
| 参数 | 类型 | 缺陷 | 描述 |
|---|---|---|---|
include_completed |
bool |
True |
包括已完成的任务 |
返回: str (JSON字符串准备写入文件 .json)
export_tasks_csv
以CSV格式导出所有作业,带分隔符 ; 和编码 QUOTE_ALL.
导出的列: id, title, completed, priority, tags, due_date, description, project, parent_id, sort_order, created_at.
| 参数 | 类型 | 缺陷 | 描述 |
|---|---|---|---|
include_completed |
bool |
True |
包括已完成的任务 |
返回: str (CSV字符串准备写入文件 .csv)
export_tasks_pdf
生成任务的PDF文件并将其保存到磁盘。每行交替着色;优先级以颜色(红色/黄色/绿色)显示。如果任务有描述,它将显示在子行中。
| 参数 | 类型 | 缺陷 | 描述 |
|---|---|---|---|
output_path |
str |
"tasks_export.pdf" |
要创建的PDF文件的路径 |
include_completed |
bool |
True |
包括已完成的任务 |
title |
str |
"Task Export" |
PDF顶部显示的标题 |
⚠️ 需要依赖
fpdf2(pip install fpdf2)的。标准ASCII范围之外的字符可能会导致默认Helvetica字体出现问题-更喜欢没有特殊字符的标题。
返回: str (创建的文件路径)
统计
get_stats
返回所有任务的全局统计摘要。
返回: TaskStats
{
"total": 38,
"completed": 5,
"open": 33,
"overdue": 2,
"by_priority": {
"high": 14,
"medium": 16,
"low": 8
},
"by_tag": {
"backend": 3,
"design": 4,
"RH": 2
}
}
大规模行动
delete_completed_tasks
删除状态为已完成的所有任务。
⚠️ 不可逆操作。
返回: str (已删除的任务数)
reset_all_tasks
删除 绝对所有 任务,已完成或未完成。
⚠️ 破坏性和不可逆操作。小心使用。
返回: str (消息取消确认)
使用示例
创建项目并向其中添加任务
# 1. Créer un projet
project = create_project(
name="Refonte site web",
description="Refonte complète du site vitrine",
color="#3B82F6"
)
# 2. Créer une tâche
task = create_task(
title="Concevoir les maquettes UI",
priority="high",
tags=["design", "figma"],
due_date="2026-03-15"
)
# 3. Associer la tâche au projet
assign_task_to_project(task_id=task.id, project_id=project.id)
创建子任务
# Tâche parente (id=1)
sub = create_subtask(
parent_id=1,
title="Créer les wireframes basse fidélité",
priority="high",
tags=["figma", "wireframe"]
)
# Compléter la tâche et toutes ses sous-tâches d'un coup
complete_task_with_subtasks(id=1)
高级过滤器
# Tâches haute priorité, non complétées, dans le projet 2
filter_tasks(priority="high", completed=False, project_id=2)
# Tâches top-level uniquement (pas de sous-tâches), avec une échéance
filter_tasks(parent_id=-1, has_due_date=True)
# Tâches ouvertes taguées "backend" triées par urgence
filter_tasks(tag="backend", completed=False)
导出数据
# Export JSON
json_str = export_tasks_json(include_completed=False)
with open("mes_taches.json", "w") as f:
f.write(json_str)
# Export CSV
csv_str = export_tasks_csv()
with open("mes_taches.csv", "w") as f:
f.write(csv_str)
# Export PDF
export_tasks_pdf(
output_path="rapport_taches.pdf",
title="Rapport du 27 février 2026",
include_completed=True
)
管理显示顺序
# Mettre la tâche 5 en première position
set_task_order(task_id=5, position=1)
# Afficher les tâches dans l'ordre manuel
tasks = list_tasks_ordered()
# Réinitialiser l'ordre
reset_task_order()
笔记技巧
标签库存 -标签以CSV字符串的形式存储在数据库中("backend,api,sécurité")的。按标签搜索使用运算符 LIKE,这可能会对非常接近的标签名称产生罕见的误报。对于精确搜索,建议在标记前加前缀/后缀或使用单独的名称。
级联抑制 -子任务在代码中明确删除(不依赖于 ON DELETE CASCADE SQLite,需要 PRAGMA foreign_keys = ON 每次连接时激活)。
幂等性 --L基础初始化(init_db)是不言而喻的,因为 CREATE TABLE IF NOT EXISTS.重新启动服务器不会覆盖现有数据。
显示顺序 -没有的任务 sort_order 定义接收虚拟值 9999 在ORDER BY查询中,这将它们放在手动排序任务之后的列表末尾。
线程安全 -每次呼叫 get_connection() 打开新的SQLite连接。如果需要,SQLite支持WAL模式写入锁定。对于密集的并行使用,应考虑连接池管理。