任务管理工具

一款基于SQLite数据库的完整任务管理器,支持任务创建、组织、过滤、排序和导出,并原生支持项目、子任务和标签。

  • by AlexChariot
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 AlexChariot/mcp-task-manager

使用说明

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模式写入锁定。对于密集的并行使用,应考虑连接池管理。