mcp-todo
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-todoShow me my tasks due today, sorted by priority"
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-ToDo
A task manager with a web interface and an MCP server. Both interfaces use the same application services and SQLite database. Tasks support reusable tags, due dates, times, priorities, and statuses.
Requirements and setup
Node.js 22.6 or later.
Run
npm installto install dependencies.Run
npm run devto start the web interface and API for development. The web app is available at http://127.0.0.1:5173; Vite proxies API requests to127.0.0.1:4178.Run
npm startto build the web app and start the production web/API server at http://127.0.0.1:4178.Run
npm run buildto build the web app without starting the server.Run
npm run test:smoketo build and run the isolated web/API smoke test against a temporary SQLite database.Run
npm run user:createto create a user and access token. The command prints the token once; store it securely.
The MCP server is a separate stdio process. Configure it in your MCP client using the client’s equivalent of command, args, and env:
{
"mcpServers": {
"mcp-todo": {
"command": "node",
"args": ["--experimental-strip-types", "/absolute/path/to/mcp-todo/src/mcp.ts"],
"env": {
"MCP_TODO_TOKEN": "your-access-token"
}
}
}
}The env object is optional for local use. Restart or reload the MCP client after changing its configuration.
Related MCP server: TickTick/Dida365 MCP Server
Configuration
Variable | Default | Description |
|
| SQLite database file path shared by the web server and MCP process. |
|
| Directory for automatic and manual SQLite snapshots. |
|
| Web/API bind address. Use a loopback address for unauthenticated local access. |
|
| Web/API server port. |
| unset | User access token for an MCP process or the web server. Stored credentials are hashed in the database. |
|
| Set to |
When the web server binds to loopback and MCP_TODO_TOKEN is unset, the app opens directly in the built-in local workspace without asking for credentials. Remote-bound web servers require authentication for API access. Use the in-app key control to sign in with a user token; the server then issues an HTTP-only browser session. The MCP process authenticates with the same token through MCP_TODO_TOKEN.
User codes are five-character identifiers for display and administration. They are not secrets. The randomly generated access token is the credential: keep it private, and do not put it in source control. The local workspace is reserved for the default local experience.
Storage architecture and migrations
SQLite is the only implemented storage adapter. Database connection setup is isolated in src/shared/db/adapter.ts; application code obtains the configured connection through src/shared/db/index.ts. User context is resolved per request with async-local context, and task/tag records are scoped by user_id.
The unreleased schema history is consolidated into one initial migration in src/shared/db/migrations.ts. New databases are created directly with the current user-scoped schema. Existing task/tag databases are upgraded into that schema and their data is assigned to the local workspace. Databases already using the previous version 4 schema are recognized without rewriting their data. The migration runs automatically when the database opens.
The adapter boundary isolates connection creation, but query code currently uses SQLite SQL and synchronous node:sqlite APIs. Supporting another database will require a compatible adapter and a persistence/query layer for that database’s dialect; changing a connection string alone is not sufficient.
MCP tools
create_task— create a task with zero or more tags. New tags are created automatically when needed.list_tasks— list tasks with optional tag, status, due-date, undated, overdue, priority, and text-search filters. A task must have all requested tags to match. Setlimitandoffsetfor pagination.get_task— get one task by ID, including its tags.get_tags— list available tags, optionally with open-task counts.delete_tag— delete a tag only if it is not assigned to a task.update_task— update a task by ID, including replacing its tags. Pass an emptytagsarray to remove all tags.update_task_status— complete, defer, or reopen a task.delete_task— permanently delete a task by ID.get_day_plan— generate a suggested plan for a selected date without modifying task data.
Task dates, priorities, and statuses
Dates use the YYYY-MM-DD format. Priorities are low, normal, and high. Statuses are open, done, and deferred. Without a status filter, list_tasks returns open tasks.
By default, get_day_plan returns up to 8 open tasks: overdue tasks, tasks due on or before the selected date, and undated high- or normal-priority tasks. Completed and deferred tasks are excluded. Undated low-priority tasks are not included.
Backups
MCP-ToDo creates one verified SQLite snapshot per UTC day when the web/API server or MCP process opens the database, then checks hourly while running in case a new day has started. It keeps the 14 newest daily snapshots. Before applying a schema migration, it also creates a separate snapshot and preserves it until you remove it. Automatic backup failures are logged and do not prevent the app from starting; a migration backup failure stops the migration so the existing database is not rewritten without a recovery point.
Create an additional snapshot at any time with:
npm run backupSnapshots are made with SQLite VACUUM INTO, checked with PRAGMA integrity_check, and stored with owner-only file permissions. Set MCP_TODO_BACKUP_DIR to change the snapshot directory. Manual and pre-migration snapshots are not automatically removed.
To restore a snapshot, stop all MCP-ToDo processes, preserve copies of the current database and its -wal/-shm sidecars, then copy the selected snapshot over the configured MCP_TODO_DB file. Remove any stale -wal/-shm sidecars only while the processes are stopped, then restart the app. If manually copying the live database instead of restoring a snapshot, stop all MCP-ToDo processes first and copy the database together with any WAL state.
License
This project is licensed under the MIT License. See LICENSE for details.
This server cannot be deployed
Maintenance
Related MCP Connectors
- mcpOAuthnet.todoist
Official Todoist MCP server for AI assistants to manage tasks, projects, and workflows.
Local-first task manager: create, edit, and complete tasks, projects, and checklists via MCP.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Model Context Protocol server for todo.vu task management and time tracking.
Related MCP Servers
- AlicenseAqualityDmaintenanceA Model Context Protocol server that integrates with TickTick task management service, allowing AI assistants to list, create, update, and complete tasks with proper timezone handling.95MIT
- AlicenseAqualityFmaintenanceA Model Context Protocol server that enables AI assistants to interact with TickTick/Dida365 task management API, supporting operations like creating, reading, updating, and deleting tasks and projects.116 npm33MIT
- AlicenseNot gradedqualityFmaintenanceA robust Model Context Protocol server for managing todos with capabilities for task creation, filtering, and statistical analysis. It enables AI assistants to interact with todo datasets through specialized tools, structured resources, and intelligent productivity prompts.3 npmMIT
- FlicenseBqualityDmaintenanceA simple task management server that allows users to add, list, complete, and delete tasks directly within Claude Desktop. It provides a suite of tools for efficient personal task organization using the Model Context Protocol.4-