MCP Task Manager Server
The MCP Task Manager Server is a backend tool for managing tasks within projects using a SQLite database. It provides these capabilities:
Project Management: Create, delete, and export/import projects as JSON
Task Management: Add, list, show, update, and delete tasks with descriptions, priorities, and dependencies
Task Organization: Break down tasks into subtasks and manage their relationships
Status Tracking: Update and filter tasks by their completion status
Workflow Optimization: Identify the next actionable task based on dependencies, status, priority, and creation date
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Task Manager Server add a high priority task to finish the quarterly report by Friday"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
# MCP Task Manager Server
A local Model Context Protocol (MCP) server providing backend tools for client-driven project and task management using a SQLite database.
Overview
This server acts as a persistent backend for local MCP clients (like AI agents or scripts) that need to manage structured task data within distinct projects. It handles data storage and provides a standardized set of tools for interaction, while the strategic workflow logic resides within the client.
Key Features:
Project-Based: Tasks are organized within distinct projects.
SQLite Persistence: Uses a local SQLite file (
./data/taskmanager.dbby default) for simple, self-contained data storage.Client-Driven: Provides tools for clients; does not dictate workflow.
MCP Compliant: Adheres to the Model Context Protocol for tool definition and communication.
Task Management: Supports creating projects, adding tasks, listing/showing tasks, updating status, expanding tasks into subtasks, and identifying the next actionable task.
Import/Export: Allows exporting project data to JSON and importing from JSON to create new projects.
Related MCP server: MATRIX
Implemented MCP Tools
The following tools are available for MCP clients:
createProject:Description: Creates a new, empty project.
Params:
projectName(string, optional, max 255)Returns:
{ project_id: string }
addTask:Description: Adds a new task to a project.
Params:
project_id(string, required, UUID),description(string, required, 1-1024),dependencies(string[], optional, max 50),priority(enum 'high'|'medium'|'low', optional, default 'medium'),status(enum 'todo'|'in-progress'|'review'|'done', optional, default 'todo')Returns: Full
TaskDataobject of the created task.
listTasks:Description: Lists tasks for a project, with optional filtering and subtask inclusion.
Params:
project_id(string, required, UUID),status(enum 'todo'|'in-progress'|'review'|'done', optional),include_subtasks(boolean, optional, default false)Returns: Array of
TaskDataorStructuredTaskDataobjects.
showTask:Description: Retrieves full details for a specific task, including dependencies and direct subtasks.
Params:
project_id(string, required, UUID),task_id(string, required)Returns:
FullTaskDataobject.
setTaskStatus:Description: Updates the status of one or more tasks.
Params:
project_id(string, required, UUID),task_ids(string[], required, 1-100),status(enum 'todo'|'in-progress'|'review'|'done', required)Returns:
{ success: true, updated_count: number }
expandTask:Description: Breaks a parent task into subtasks, optionally replacing existing ones.
Params:
project_id(string, required, UUID),task_id(string, required),subtask_descriptions(string[], required, 1-20, each 1-512),force(boolean, optional, default false)Returns: Updated parent
FullTaskDataobject including new subtasks.
getNextTask:Description: Identifies the next actionable task based on status ('todo'), dependencies ('done'), priority, and creation date.
Params:
project_id(string, required, UUID)Returns:
FullTaskDataobject of the next task, ornullif none are ready.
exportProject:Description: Exports complete project data as a JSON string.
Params:
project_id(string, required, UUID),format(enum 'json', optional, default 'json')Returns: JSON string representing the project.
importProject:Description: Creates a new project from an exported JSON string.
Params:
project_data(string, required, JSON),new_project_name(string, optional, max 255)Returns:
{ project_id: string }of the newly created project.
updateTask:Description: Updates specific details (description, priority, dependencies) of an existing task.
Params:
project_id(string, required, UUID),task_id(string, required, UUID),description(string, optional, 1-1024),priority(enum 'high'|'medium'|'low', optional),dependencies(string[], optional, max 50, replaces existing)Returns: Updated
FullTaskDataobject.
deleteTask:Description: Deletes one or more tasks (and their subtasks/dependency links via cascade).
Params:
project_id(string, required, UUID),task_ids(string[], required, 1-100)Returns:
{ success: true, deleted_count: number }
deleteProject:Description: Permanently deletes a project and ALL associated data. Use with caution!
Params:
project_id(string, required, UUID)Returns:
{ success: true }
(Note: Refer to the corresponding src/tools/*Params.ts files for detailed Zod schemas and parameter descriptions.)
Getting Started
Prerequisites: Node.js (LTS recommended), npm.
Install Dependencies:
npm installRun in Development Mode: (Uses
ts-nodeandnodemonfor auto-reloading)npm run devThe server will connect via stdio. Logs (JSON format) will be printed to stderr. The SQLite database will be created/updated in
./data/taskmanager.db.Build for Production:
npm run buildRun Production Build:
npm start
Configuration
Database Path: The location of the SQLite database file can be overridden by setting the
DATABASE_PATHenvironment variable. The default is./data/taskmanager.db.Log Level: The logging level can be set using the
LOG_LEVELenvironment variable (e.g.,debug,info,warn,error). The default isinfo.
Project Structure
/src: Source code./config: Configuration management./db: Database manager and schema (schema.sql)./repositories: Data access layer (SQLite interaction)./services: Core business logic./tools: MCP tool definitions (*Params.ts) and implementation (*Tool.ts)./types: Shared TypeScript interfaces (currently minimal, mostly in repos/services)./utils: Logging, custom errors, etc.createServer.ts: Server instance creation.server.ts: Main application entry point.
/dist: Compiled JavaScript output./docs: Project documentation (PRD, Feature Specs, RFC)./data: Default location for the SQLite database file (created automatically).tasks.md: Manual task tracking file for development.Config files (
package.json,tsconfig.json,.eslintrc.json, etc.)
Linting and Formatting
Lint:
npm run lintFormat:
npm run format
(Code is automatically linted/formatted on commit via Husky/lint-staged).
Available Tools
12 toolsaddTaskA
Adds a new task to a specified project within the Task Management Server. Requires the project ID and a description for the task. Optionally accepts a list of dependency task IDs, a priority level, and an initial status. Returns the full details of the newly created task upon success.
Inputs: description (required), project_id (required), dependencies, priority, +1 more.
createProjectA
Creates a new, empty project entry in the Task Management Server database. This tool is used by clients (e.g., AI agents) to initiate a new workspace for tasks. It returns the unique identifier (UUID) assigned to the newly created project. An optional name can be provided; otherwise, a default name including a timestamp will be generated.
Inputs: projectName.
deleteProjectA
Permanently deletes a project and ALL associated tasks and dependencies. Requires the project ID. This is a highly destructive operation and cannot be undone. Returns a success confirmation upon completion.
Inputs: project_id (required).
deleteTaskA
Deletes one or more tasks within a specified project. Requires the project ID and an array of task IDs to delete. Note: Deleting a task also deletes its subtasks and dependency links due to database cascade rules. Returns the count of successfully deleted tasks.
Inputs: project_id (required), task_ids (required).
expandTaskB
Breaks down a specified parent task into multiple subtasks based on provided descriptions. Requires the project ID, the parent task ID, and an array of descriptions for the new subtasks. Optionally allows forcing the replacement of existing subtasks using the 'force' flag. Returns the updated parent task details, including the newly created subtasks.
Inputs: project_id (required), subtask_descriptions (required), task_id (required), force.
exportProjectA
Exports the complete data set for a specified project as a JSON string. This includes project metadata, all tasks (hierarchically structured), and their dependencies. Requires the project ID. The format is fixed to JSON for V1. Returns the JSON string representing the project data.
Inputs: project_id (required), format.
getNextTaskA
Identifies and returns the next actionable task within a specified project. A task is considered actionable if its status is 'todo' and all its dependencies (if any) have a status of 'done'. If multiple tasks are ready, the one with the highest priority ('high' > 'medium' > 'low') is chosen. If priorities are equal, the task created earliest is chosen. Returns the full details of the next task, or null if no task is currently ready.
Inputs: project_id (required).
importProjectA
Creates a new project by importing data from a JSON string. The JSON data must conform to the structure previously generated by the 'exportProject' tool. Performs validation on the input data (parsing, basic structure, size limit). Returns the unique project_id of the newly created project upon success.
Inputs: project_data (required), new_project_name.
listTasksB
Retrieves a list of tasks for a specified project. Allows optional filtering by task status ('todo', 'in-progress', 'review', 'done'). Provides an option to include nested subtasks directly within their parent task objects in the response. Returns an array of task objects.
Inputs: project_id (required), include_subtasks, status.
setTaskStatusA
Updates the status ('todo', 'in-progress', 'review', 'done') for one or more tasks within a specified project. Requires the project ID, an array of task IDs (1-100), and the target status. Verifies all tasks exist in the project before updating. Returns the count of updated tasks.
Inputs: project_id (required), status (required), task_ids (required).
showTaskA
Retrieves the full details of a single, specific task, including its dependencies and direct subtasks. Requires the project ID and the task ID. Returns a task object containing all details if found.
Inputs: project_id (required), task_id (required).
updateTaskA
Updates specific details of an existing task within a project. Requires the project ID and task ID. Allows updating description, priority, and/or dependencies. At least one optional field (description, priority, dependencies) must be provided. Returns the full details of the updated task upon success.
Inputs: project_id (required), task_id (required), dependencies, description, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
Every tool has a clearly distinct purpose with no ambiguity. For example, 'addTask' creates a new task, 'updateTask' modifies an existing one, 'showTask' retrieves a single task, and 'listTasks' retrieves multiple tasks, all with well-defined boundaries. Tools like 'getNextTask' and 'expandTask' offer unique functionality that doesn't overlap with others.
The naming follows a consistent verb_noun pattern throughout, such as 'addTask', 'createProject', 'deleteProject', 'exportProject', and 'importProject'. There is one minor deviation with 'showTask' (where 'getTask' might be more consistent with 'getNextTask'), but overall the pattern is highly predictable and readable.
With 12 tools, the count is well-scoped for a task management server, covering core operations like CRUD for tasks and projects, status management, and advanced features like import/export and task breakdown. Each tool earns its place without feeling excessive or insufficient for the domain.
The tool set provides complete CRUD/lifecycle coverage for task management, including project creation, deletion, import/export, and task operations from addition to deletion, status updates, and retrieval. There are no obvious gaps; agents can manage tasks end-to-end without dead ends, such as handling dependencies, priorities, and hierarchical structures.
Related MCP Connectors
Project management MCP for AI agents with safe task reads and writes.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Project management shared by people and AI agents, with persistent project state through MCP.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server providing AI assistants with comprehensive project, task, and subtask management capabilities with project-specific storage.2924 npm88MIT
- AlicenseNot gradedqualityBmaintenanceA local, project-scoped requirement management MCP server that enables AI agents to manage tasks and requirements via SQLite.9 npmMIT
- FlicenseBqualityDmaintenanceA Model Context Protocol server implementing a Getting Things Done assistant with tools for tasks, projects, inbox, next actions, and statistics. Supports local SQLite and Databricks deployment.17-
- AlicenseNot gradedqualityDmaintenanceA personal task management MCP server that allows LLM clients to create, read, update, and delete tasks with projects, labels, and comments, using a local SQLite database that can also be accessed via a web UI.MIT