
TaskFlow MCP
A task management server that helps AI assistants break down user requests into manageable tasks and track their completion with user approval steps.
Tools
mark_task_done
Mark a given task as done after you've completed it. Provide 'requestId' and 'taskId', and optionally 'completedDetails'. After marking a task as done, a progress table will be displayed showing the updated status of all tasks. After this, DO NOT proceed to 'get_next_task' again until the user has explicitly approved this completed task using 'approve_task_completion'.
mark_subtask_done
Mark a subtask as done. Provide 'requestId', 'taskId', and 'subtaskId'. A progress table will be displayed showing the updated status of all tasks and subtasks. All subtasks must be completed before a task can be marked as done.
update_subtask
Update a subtask's title or description. Provide 'requestId', 'taskId', 'subtaskId', and optionally 'title' and/or 'description'. Only uncompleted subtasks can be updated. A progress table will be displayed showing the updated task with its subtasks.
delete_subtask
Delete a subtask from a task. Provide 'requestId', 'taskId', and 'subtaskId'. Only uncompleted subtasks can be deleted. A progress table will be displayed showing the updated task with its remaining subtasks.
export_task_status
Export the current status of all tasks in a request to a file. This tool allows you to save the current state of tasks, subtasks, dependencies, and notes to a file for reference. You can specify the output format as 'markdown', 'json', or 'html'. It's recommended to use absolute paths (e.g., 'C:/Users/username/Documents/task-status.md') rather than relative paths for more reliable file creation.
add_note
Add a note to a request. Notes can contain important information about the project, such as user preferences or guidelines. Notes are displayed in the task progress table and can be referenced when working on tasks.
plan_task
Register a new user request and plan its associated tasks. You must provide 'originalRequest' and 'tasks', and optionally 'splitDetails'. Tasks can now include subtasks, which are smaller units of work that make up a task. All subtasks must be completed before a task can be marked as done. You can also include: - 'dependencies': List of project or task-specific dependencies (libraries, tools, etc.) - 'notes': General notes about the project (preferences, guidelines, etc.) - 'outputPath': Path to save a Markdown file with the task plan for reference. It's recommended to use absolute paths (e.g., 'C:/Users/username/Documents/task-plan.md') rather than relative paths for more reliable file creation. This tool initiates a new workflow for handling a user's request. The workflow is as follows: 1. Use 'plan_task' to register a request and its tasks (with optional subtasks, dependencies, and notes). 2. After adding tasks, you MUST use 'get_next_task' to retrieve the first task. A progress table will be displayed. 3. Use 'get_next_task' to retrieve the next uncompleted task. 4. If the task has subtasks, complete each subtask using 'mark_subtask_done' before marking the task as done. 5. **IMPORTANT:** After marking a task as done, a progress table will be displayed showing the updated status of all tasks. The assistant MUST NOT proceed to another task without the user's approval. The user must explicitly approve the completed task. 6. Once a task is approved, you can proceed to 'get_next_task' again to fetch the next pending task. 7. Repeat this cycle until all tasks are done. 8. After all tasks are completed (and approved), 'get_next_task' will indicate that all tasks are done and that the request awaits approval for full completion. 9. The user must then approve the entire request's completion. If the user does not approve and wants more tasks, you can again use 'plan_task' to add new tasks and continue the cycle. The critical point is to always wait for user approval after completing each task and after all tasks are done, wait for request completion approval. Do not proceed automatically.
get_next_task
Given a 'requestId', return the next pending task (not done yet). If all tasks are completed, it will indicate that no more tasks are left and that you must ask the user what to do next. A progress table showing the current status of all tasks will be displayed with each response. If the same task is returned again or if no new task is provided after a task was marked as done, you MUST NOT proceed. In such a scenario, you must prompt the user for approval before calling 'get_next_task' again. Do not skip the user's approval step. In other words: - After calling 'mark_task_done', do not call 'get_next_task' again until 'approve_task_completion' is called by the user. - If 'get_next_task' returns 'all_tasks_done', it means all tasks have been completed. At this point, confirm with the user that all tasks have been completed, and optionally add more tasks via 'plan_task'.
open_task_details
Get details of a specific task by 'taskId'. This is for inspecting task information at any point.
list_requests
List all requests with their basic information and summary of tasks. This provides a quick overview of all requests in the system.
add_tasks_to_request
Add new tasks to an existing request. This allows extending a request with additional tasks. Tasks can include subtasks and dependencies. A progress table will be displayed showing all tasks including the newly added ones.
update_task
Update an existing task's title and/or description. Only uncompleted tasks can be updated. A progress table will be displayed showing the updated task information.
delete_task
Delete a specific task from a request. Only uncompleted tasks can be deleted. A progress table will be displayed showing the remaining tasks after deletion.
add_subtasks
Add subtasks to an existing task. Provide 'requestId', 'taskId', and 'subtasks' array. Subtasks are smaller units of work that make up a task. All subtasks must be completed before a task can be marked as done. A progress table will be displayed showing the updated task with its subtasks.
update_note
Update an existing note's title or content. Provide the 'requestId' and 'noteId', and optionally 'title' and/or 'content' to update.
delete_note
Delete a note from a request. Provide the 'requestId' and 'noteId' of the note to delete.
add_dependency
Add a dependency to a request or task. Dependencies can be libraries, tools, or other requirements needed for the project or specific tasks. If 'taskId' is provided, the dependency will be added to that specific task. Otherwise, it will be added to the request.
README
TaskFlow MCP 🔄✅
<p align="center"> <img src="taskflow.png" alt="TaskFlow MCP"> </p>
A task management Model Context Protocol (MCP) server for planning and executing tasks with AI assistants.
🌟 Overview
TaskFlow MCP is a specialized server that helps AI assistants break down user requests into manageable tasks and track their completion. It enforces a structured workflow with user approval steps to ensure tasks are properly tracked and users maintain control over the process.
✨ Features
- 📋 Task Planning: Break down complex requests into manageable tasks
- 🔍 Subtasks: Divide tasks into smaller, more manageable subtasks
- 📊 Progress Tracking: Track the status of tasks, subtasks, and requests with visual progress tables
- 👍 User Approval: Enforce user approval steps to ensure quality and control
- 💾 Persistence: Save tasks and requests to disk for persistence across sessions
- 🔄 Flexible Management: Add, update, or delete tasks and subtasks as needed
- 📝 Detailed Reporting: View task details and progress tables
- 📤 Export Options: Export task plans and status reports in Markdown, JSON, or HTML formats
- 📦 Dependencies: Track project and task-level dependencies with version information
- 📌 Notes: Add project-level notes for important information and preferences
🚀 Installation
Global Installation
npm install -g @pinkpixel/taskflow-mcp
Local Installation
npm install @pinkpixel/taskflow-mcp
🛠️ Usage
Starting the Server
If installed globally:
taskflow-mcp
If installed locally:
npx taskflow-mcp
Configuration
By default, TaskFlow MCP saves tasks to ~/Documents/tasks.json
. You can change this by setting the TASK_MANAGER_FILE_PATH
environment variable:
TASK_MANAGER_FILE_PATH=/path/to/tasks.json taskflow-mcp
MCP Configuration
To use TaskFlow MCP with AI assistants, you need to configure your MCP client to use the server. Create an mcp_config.json
file with the following content:
{
"mcpServers": {
"taskflow": {
"command": "npx",
"args": ["-y", "@pinkpixel/taskflow-mcp"],
"env": {
"TASK_MANAGER_FILE_PATH": "/path/to/tasks.json"
}
}
}
}
🔄 Workflow
TaskFlow MCP enforces a specific workflow:
- Plan Tasks: Break down a user request into tasks (with optional subtasks)
- Get Next Task: Retrieve the next pending task
- Complete Subtasks: If the task has subtasks, complete each subtask before marking the task as done
- Mark Task Done: Mark a task as completed (requires all subtasks to be completed first)
- Wait for Approval: Wait for user approval of the completed task
- Repeat: Continue with the next task until all tasks are complete
- Final Approval: Get user approval for the entire request
For AI assistants to consistently follow this workflow, see the example-system-prompt.md file for system prompts you can add to your assistant's instructions.
🧰 Available Tools
TaskFlow MCP exposes the following tools to AI assistants:
plan_task
Register a new user request and plan its associated tasks (with optional subtasks).
{
"originalRequest": "Create a new website for my business",
"outputPath": "C:/Users/username/Documents/website-project-plan.md",
"dependencies": [
{
"name": "Node.js",
"version": ">=14.0.0",
"description": "JavaScript runtime"
},
{
"name": "npm",
"version": ">=6.0.0",
"description": "Package manager"
}
],
"notes": [
{
"title": "Package Manager Preference",
"content": "User prefers pnpm over npm for package management."
},
{
"title": "Design Guidelines",
"content": "Follow the company's brand guidelines for colors and typography."
}
],
"tasks": [
{
"title": "Design homepage",
"description": "Create a design for the homepage with logo, navigation, and hero section",
"dependencies": [
{
"name": "Figma",
"description": "Design tool"
}
],
"subtasks": [
{
"title": "Design logo",
"description": "Create a logo that represents the business brand"
},
{
"title": "Design navigation",
"description": "Create a user-friendly navigation menu"
}
]
},
{
"title": "Implement HTML/CSS",
"description": "Convert the design to HTML and CSS",
"dependencies": [
{
"name": "HTML5",
"description": "Markup language"
},
{
"name": "CSS3",
"description": "Styling language"
}
]
}
]
}
get_next_task
Retrieve the next pending task for a request.
{
"requestId": "req-1"
}
mark_task_done
Mark a task as completed.
{
"requestId": "req-1",
"taskId": "task-1",
"completedDetails": "Created a modern design with a clean layout"
}
approve_task_completion
Approve a completed task.
{
"requestId": "req-1",
"taskId": "task-1"
}
approve_request_completion
Approve an entire request as completed.
{
"requestId": "req-1"
}
open_task_details
Get details about a specific task.
{
"taskId": "task-1"
}
list_requests
List all requests in the system.
{}
add_tasks_to_request
Add more tasks to an existing request.
{
"requestId": "req-1",
"tasks": [
{
"title": "Add contact form",
"description": "Create a contact form with validation"
}
]
}
update_task
Update a task's title or description.
{
"requestId": "req-1",
"taskId": "task-1",
"title": "Design responsive homepage",
"description": "Create a responsive design for the homepage"
}
delete_task
Delete a task from a request.
{
"requestId": "req-1",
"taskId": "task-1"
}
add_subtasks
Add subtasks to an existing task.
{
"requestId": "req-1",
"taskId": "task-1",
"subtasks": [
{
"title": "Design logo",
"description": "Create a logo that represents the business brand"
},
{
"title": "Design navigation",
"description": "Create a user-friendly navigation menu"
}
]
}
mark_subtask_done
Mark a subtask as completed.
{
"requestId": "req-1",
"taskId": "task-1",
"subtaskId": "subtask-1"
}
update_subtask
Update a subtask's title or description.
{
"requestId": "req-1",
"taskId": "task-1",
"subtaskId": "subtask-1",
"title": "Design modern logo",
"description": "Create a modern logo that represents the business brand"
}
delete_subtask
Delete a subtask from a task.
{
"requestId": "req-1",
"taskId": "task-1",
"subtaskId": "subtask-1"
}
export_task_status
Export the current status of all tasks in a request to a file. It's recommended to use absolute paths for more reliable file creation.
{
"requestId": "req-1",
"outputPath": "C:/Users/username/Documents/task-status.md",
"format": "markdown"
}
add_note
Add a note to a request.
{
"requestId": "req-1",
"title": "Package Manager Preference",
"content": "User prefers pnpm over npm for package management."
}
update_note
Update an existing note.
{
"requestId": "req-1",
"noteId": "note-1",
"title": "Package Manager Preference",
"content": "User prefers pnpm over npm and yarn for package management."
}
delete_note
Delete a note from a request.
{
"requestId": "req-1",
"noteId": "note-1"
}
add_dependency
Add a dependency to a request or task.
{
"requestId": "req-1",
"taskId": "task-1",
"dependency": {
"name": "react",
"version": "^18.2.0",
"description": "JavaScript library for building user interfaces",
"url": "https://reactjs.org"
}
}
📚 Documentation
For more detailed information about the project architecture and implementation, see the OVERVIEW.md file.
📝 License
This project is licensed under the MIT License - see the LICENSE file for details.
🤝 Contributing
Contributions are welcome! Please see the CONTRIBUTING.md file for guidelines.
📜 Changelog
See the CHANGELOG.md file for a history of changes to this project.
🙏 Acknowledgements
- Built with Model Context Protocol (MCP)
- Created by Pink Pixel
Made with ❤️ by Pink Pixel
推荐服务器

Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。