Todokit MCP Server

Todokit MCP Server

A task management and productivity tool that enables creating, updating, filtering, and organizing todos with tags, priorities, and due dates, all stored locally in JSON format.

Category
访问服务器

README

todokit-mcp

<img src="docs/logo.png" alt="Todokit MCP Server Logo" width="150">

An MCP server for Todokit, a task management and productivity tool with JSON storage.

npm version License Node.js

One-Click Install

Install with NPX in VS CodeInstall with NPX in VS Code Insiders

Install in Cursor

Features

  • Task management: add, update, complete/reopen, and delete todos.
  • Batch operations: add multiple todos and bulk delete with filters.
  • Rich filtering: status, priority, tags, due dates, and free-text search.
  • Tagging: tags are normalized (trimmed, lowercase, unique) and can be added or removed.
  • Safe deletion: dry-run previews before deleting; bulk delete defaults to a safety limit.
  • JSON persistence with queued writes and atomic file writes.
  • List summaries with counts (pending, completed, overdue) and pagination metadata.

Quick Start

npx -y @j0hanz/todokit-mcp@latest

The server runs over stdio (no HTTP endpoint) and registers MCP tools on startup.

Installation

NPX (recommended)

npx -y @j0hanz/todokit-mcp@latest

Global install

npm install -g @j0hanz/todokit-mcp

Then run:

todokit-mcp

From source

git clone https://github.com/j0hanz/todokit-mcp-server.git
cd todokit-mcp-server
npm install
npm run build
npm start

Configuration

Storage path

By default, todos are stored in todos.json next to the server package (the project root when running from source). To control where data is written, set the TODOKIT_TODO_FILE environment variable to an absolute or relative path ending with .json. Relative paths resolve from the current working directory. The directory is created as needed; if the file does not exist, the server starts with an empty list.

Examples:

# macOS/Linux
TODOKIT_TODO_FILE=/path/to/todos.json npx -y @j0hanz/todokit-mcp@latest
# Windows PowerShell
$env:TODOKIT_TODO_FILE = 'C:\path\to\todos.json'
npx -y @j0hanz/todokit-mcp@latest

Tools

All tools return a JSON payload in both content (stringified) and structuredContent. Inputs are validated with strict Zod schemas, so unknown fields are rejected.

Success payload:

{
  "ok": true,
  "result": {}
}

Error payload:

{
  "ok": false,
  "error": { "code": "E_CODE", "message": "Details" }
}

The result shape is tool-specific. If a query matches multiple todos, tools return E_AMBIGUOUS with preview matches and a hint to use an exact id.

add_todo

Add a new todo item.

Parameter Type Required Default Description
title string Yes - The title of the todo (1-200 chars)
description string No - Optional description (max 2000 chars)
priority string No normal Priority level: low, normal, high
dueDate string No - Due date in ISO format (YYYY-MM-DD)
tags array No - Array of tags (max 50, 1-50 chars)

Result fields:

  • item (todo)
  • summary
  • nextActions

add_todos

Add multiple todo items in one call.

Parameter Type Required Default Description
items array Yes - Array of todo objects (same fields as add_todo, 1-50 items)

Result fields:

  • items (todos)
  • summary
  • nextActions

list_todos

List todos with filtering, search, sorting, and pagination.

Parameter Type Required Default Description
status string No all Filter by status: pending, completed, all
completed boolean No - Deprecated; status takes precedence when provided
priority string No - Filter by priority: low, normal, high
tag string No - Filter by tag (must contain)
query string No - Search text in title, description, or tags
dueBefore string No - Filter todos due before this date (YYYY-MM-DD)
dueAfter string No - Filter todos due after this date (YYYY-MM-DD)
sortBy string No createdAt Sort by: dueDate, priority, createdAt, title
order string No asc Sort order: asc, desc
limit number No 50 Max number of results (1-200)
offset number No 0 Number of results to skip (0-10000)

Result fields:

  • items (todos)
  • summary
  • counts (total, pending, completed, overdue)
  • limit
  • offset
  • hasMore (true if more results are available after this page)

Notes:

  • Overdue calculations compare dueDate against the server's local calendar date (YYYY-MM-DD).

update_todo

Update fields on a todo item. Provide either id or query to identify the todo.

Parameter Type Required Default Description
id string No - The ID of the todo to update
query string No - Search text to find a single todo to update
title string No - New title
description string No - New description
completed boolean No - Completion status
priority string No - New priority level
dueDate string No - New due date (YYYY-MM-DD)
tags array No - Replace all tags (max 50)
tagOps object No - Tag modifications to apply (add/remove arrays)
clearFields array No - Fields to clear: description, dueDate, tags

Notes:

  • If both tags and tagOps are provided, tags wins and replaces the list.
  • If no updatable fields are provided, the tool returns an error.

Result fields:

  • item (todo)
  • summary
  • nextActions

complete_todo

Set completion status for a todo item. Provide either id or query.

Parameter Type Required Default Description
id string No - The ID of the todo to complete
query string No - Search text to find a single todo
completed boolean No true Set completion status

Result fields:

  • item (todo)
  • summary (includes already-complete or reopen messages)
  • nextActions

delete_todo

Delete a todo item. Provide either id or query.

Parameter Type Required Default Description
id string No - The ID of the todo to delete
query string No - Search text to find a single todo
dryRun boolean No false Simulate deletion without changing data

Result fields:

  • deletedIds (array)
  • summary
  • nextActions (only when not dryRun)
  • dryRun (when dryRun is true)
  • matches, totalMatches (dry-run + multiple matches)

delete_todos

Delete multiple todos matching filters. At least one filter is required; defaults to limit=10 for safety.

Parameter Type Required Default Description
status string No - Filter by status: pending, completed, all
priority string No - Filter by priority: low, normal, high
tag string No - Filter by tag
dueBefore string No - Delete todos due before this date (YYYY-MM-DD)
dueAfter string No - Delete todos due after this date (YYYY-MM-DD)
query string No - Search text filter (1-200 chars)
dryRun boolean No false Preview deletion without removing data
limit number No 10 Max items to delete (1-100, safety limit)

Notes:

  • At least one filter (status, priority, tag, dueBefore, dueAfter, query) is required.
  • The default limit of 10 prevents accidental mass deletions.

Result fields:

  • deletedIds (array)
  • summary
  • totalMatched
  • matches (dry-run only, array of previews)
  • dryRun (when dryRun is true)
  • nextActions (only when not dryRun)

Data Model

A todo item has the following shape:

{
  "id": "string",
  "title": "string",
  "description": "string?",
  "completed": false,
  "priority": "low|normal|high",
  "dueDate": "YYYY-MM-DD?",
  "tags": ["string"],
  "createdAt": "ISO timestamp with offset",
  "updatedAt": "ISO timestamp with offset?",
  "completedAt": "ISO timestamp with offset?"
}

Notes:

  • dueDate uses YYYY-MM-DD (date only).
  • createdAt, updatedAt, and completedAt are ISO 8601 timestamps with offset (e.g., 2025-02-28T10:30:00Z).

Client Configuration

<details> <summary><b>VS Code</b></summary>

Add this to your mcpServers configuration in settings.json:

{
  "todokit": {
    "command": "npx",
    "args": ["-y", "@j0hanz/todokit-mcp@latest"]
  }
}

</details>

<details> <summary><b>Claude Desktop</b></summary>

Add this to your claude_desktop_config.json:

{
  "mcpServers": {
    "todokit": {
      "command": "npx",
      "args": ["-y", "@j0hanz/todokit-mcp@latest"]
    }
  }
}

</details>

<details> <summary><b>Cursor</b></summary>

  1. Go to Cursor Settings > Features > MCP
  2. Click + Add New MCP Server
  3. Name: todokit
  4. Type: command
  5. Command: npx -y @j0hanz/todokit-mcp@latest

</details>

Development

Prerequisites

  • Node.js >= 20.0.0

Scripts

Command Description
npm run build Compile TypeScript to JavaScript
npm run dev Run server in watch mode for development
npm start Run the built server
npm run test Run unit tests (node --test + tsx)
npm run test:coverage Run unit tests with coverage
npm run lint Run ESLint
npm run format Format with Prettier
npm run format:check Check formatting with Prettier
npm run type-check Run TypeScript type checking
npm run dup-check Run duplicate code checks (jscpd)
npm run clean Remove the dist/ build output
npm run inspector Launch the MCP inspector (pass server cmd after --)

Manual verification

npm run build
npm run inspector -- node dist/index.js

Project structure

src/
  index.ts   # MCP server entrypoint (stdio)
  tools/     # Tool registrations
  schemas/   # Zod input/output schemas
  lib/       # Storage, matching, shared helpers
tests/       # Unit tests
docs/        # Assets (logo)

Contributing

Contributions are welcome. Please run npm run format, npm run lint, npm run type-check, npm run build, npm test, npm run test:coverage, and npm run dup-check before opening a PR.

License

This project is licensed under the MIT License - see the LICENSE file for details.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选