A Kanban-style task management system implemented as a single-file MCP stdio server. Provides create, read, update, delete, archive, and search operations for tasks backed by SQLite with auto-increment integer IDs.
- Deno 2.8.1+
deno run --allow-read --allow-write --allow-env --allow-ffi main.tsThe server speaks the MCP stdio protocol. Connect it to your MCP host (Claude Desktop, OpenCode, etc.) to start using it.
Optional: task-manager.jsonc at project root.
Both fields are optional. Defaults to ./data and ./logs if the file is
absent or a field is missing.
Add to your MCP host config like any stdio MCP server. Either run directly with Deno or use the compiled binary:
deno task compile{
"mcpServers": {
"task-manager": {
"command": "/path/to/task-manager",
"args": []
}
}
}If you prefer to use deno run directly instead:
{
"mcpServers": {
"task-manager": {
"command": "deno",
"args": [
"run",
"--allow-read",
"--allow-write",
"--allow-env",
"--allow-ffi",
"/path/to/project/main.ts"
]
}
}
}Create a new task with status todo and priority medium by default.
| Parameter | Type | Required | Description |
|---|---|---|---|
title |
string |
yes | Task title |
description |
string |
no | Detailed description |
assignee |
string |
no | Person assigned |
labels |
string[] |
no | List of labels/tags |
priority |
"low" | "medium" | "high" | "critical" |
no | Priority level |
Returns the created task object.
Get a single task by ID.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
yes | ID of the task |
Returns the task object, or an error if not found.
List tasks with optional filters. Results ordered newest first.
| Parameter | Type | Required | Description |
|---|---|---|---|
status |
"todo" | "in_progress" | "review" | "done" | "archived" |
no | Filter by status |
priority |
"low" | "medium" | "high" | "critical" |
no | Filter by priority |
assignee |
string |
no | Filter by assignee (exact) |
label |
string |
no | Filter by label (exact) |
Returns an array of task objects.
Update one or more fields of an existing task. Only provided fields are changed.
updated_at is set automatically.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
yes | ID of the task |
title |
string |
no | New title |
status |
"todo" | "in_progress" | "review" | "done" | "archived" |
no | New status |
description |
string |
no | New description |
assignee |
string |
no | New assignee |
labels |
string[] |
no | New labels array |
priority |
"low" | "medium" | "high" | "critical" |
no | New priority |
Returns the updated task object.
Permanently delete a task by ID.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
yes | ID of the task |
Returns a confirmation message.
Set a task's status to archived. Shorthand for update_task with
status: "archived".
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
yes | ID of the task |
Returns the archived task object.
Full-text search across task titles and descriptions using LIKE-based matching
(special SQL chars % and _ are escaped). Results ordered newest first.
| Parameter | Type | Required | Description |
|---|---|---|---|
query |
string |
yes | Search term |
Returns an array of matching task objects.
- Single file —
main.tswith no external project dependencies beyond Deno standard library - SQLite — WAL mode journaling for concurrent read performance
- Auto-increment IDs — Integer primary keys assigned automatically by SQLite
- Labels — Stored as JSON array of strings in a TEXT column, filtered via
SQLite's
json_each - Validation — Zod schemas on all tool inputs
- Logging — LogTape writes to both
logs/task-manager.log(file sink) and stderr
| Field | Type | Default | Notes |
|---|---|---|---|
id |
number |
Auto-increment | Primary key, assigned by SQLite |
title |
string |
— | Required |
status |
string |
"todo" |
One of: todo, in_progress, review, done, archived |
description |
string |
"" |
|
assignee |
string |
"" |
|
labels |
string[] |
[] |
JSON array stored in TEXT column |
priority |
string |
"medium" |
One of: low, medium, high, critical |
created_at |
string |
ISO 8601 | Set on creation |
updated_at |
string |
ISO 8601 | Updated on modification |
SQLite database file stored at {dataDir}/tasks.db (default: data/tasks.db).
Created automatically on first run. WAL mode is enabled for concurrent reads
without blocking writes.
{ // Paths are relative to project root "dataDir": "data", "logDir": "logs" }