mcp-server-tasktracker
An MCP server that exposes the full Task-Tracker REST API as MCP tools, enabling AI agents to manage trackers, tasks, notes, checklists, and projects conversationally.
README
mcp-server-tasktracker
An MCP (Model Context Protocol) server for AI integration into Task-Tracker.
It exposes the full Task-Tracker REST API — trackers, tasks, notes, checklists, and projects (with steps and references) — as MCP tools, so any MCP-compatible AI agent (Claude Desktop, Claude Code, or others) can manage your Task-Tracker instance conversationally, with the same capabilities as the web dashboard.
This is a standalone companion project, not published to any package registry. Clone it, point it at your own running Task-Tracker instance, and wire it into your MCP client's configuration.
Requirements
- Node.js 18+
- A running Task-Tracker instance you can reach over HTTP
- That instance's
API_SECRET_TOKEN(see Task-Tracker's own.envconfiguration)
Install
git clone https://github.com/itlostandfound/mcp-server-tasktracker.git
cd mcp-server-tasktracker
npm install
npm run build
This produces a compiled server at dist/index.js.
Configuration
The server reads its connection details from environment variables — set these in your MCP client's configuration, not in a committed file:
| Variable | Required | Description |
|---|---|---|
TASKTRACKER_API_URL |
Yes | Base URL of your running Task-Tracker instance, e.g. http://localhost:8000 |
TASKTRACKER_API_TOKEN |
Yes | The API_SECRET_TOKEN configured on your Task-Tracker backend |
DEBUG |
No | Set to true to log outgoing requests/responses to stderr |
The server fails fast at startup with a clear message if either required variable is missing.
Using it with an MCP client
Claude Desktop
Add an entry to claude_desktop_config.json:
{
"mcpServers": {
"tasktracker": {
"command": "node",
"args": ["/absolute/path/to/mcp-server-tasktracker/dist/index.js"],
"env": {
"TASKTRACKER_API_URL": "http://localhost:8000",
"TASKTRACKER_API_TOKEN": "your-api-secret-token"
}
}
}
}
Claude Code
Add the same server to your project or user MCP configuration (.mcp.json or via claude mcp add):
{
"mcpServers": {
"tasktracker": {
"command": "node",
"args": ["/absolute/path/to/mcp-server-tasktracker/dist/index.js"],
"env": {
"TASKTRACKER_API_URL": "http://localhost:8000",
"TASKTRACKER_API_TOKEN": "your-api-secret-token"
}
}
}
}
Any other MCP-compatible client should work the same way: spawn node dist/index.js with the two environment variables set.
Tools
Every tool mirrors a Task-Tracker API endpoint 1:1 — no invented aggregate operations, no client-side validation duplicating what the API already does.
Trackers
| Tool | Description |
|---|---|
list_trackers |
List all trackers with open task counts |
create_tracker |
Create a tracker (name must be unique) |
get_tracker |
Get a single tracker by id |
update_tracker |
Update a tracker's name/type |
delete_tracker |
Delete a tracker and its tasks/notes |
Tasks
| Tool | Description |
|---|---|
list_tasks |
List tasks on a tracker |
create_task |
Create a task on a tracker |
get_task |
Get a single task by id |
update_task |
Update title, completion, sort order, severity |
delete_task |
Delete a task and its notes |
Notes
| Tool | Description |
|---|---|
list_notes |
List notes on a task |
create_note |
Create a rich-text note on a task |
get_note |
Get a single note by id |
update_note |
Update a note's title, date, content |
delete_note |
Delete a note |
Checklists
| Tool | Description |
|---|---|
list_checklists |
List checklists/templates, filterable by template/search |
create_checklist |
Create a checklist or reusable template |
get_checklist |
Get a checklist with its items and steps |
update_checklist |
Replace a checklist's name and/or items (full replace) |
delete_checklist |
Delete a checklist (undoable once) |
clone_checklist |
Clone a template into a new instance for a device list |
undo_checklist_delete |
Restore the most recently deleted checklist |
Projects, Steps & References
| Tool | Description |
|---|---|
list_projects |
List projects, filterable by incomplete/search |
create_project |
Create a project |
get_project |
Get a project with all steps and references |
update_project |
Update a project's title |
delete_project |
Delete a project and its steps/references |
list_project_steps |
List a project's ordered steps |
add_project_step |
Add a step to the end of a project |
reorder_project_steps |
Reorder steps by full ordered id list |
update_project_step |
Update a step's title/rich-text content |
toggle_project_step_complete |
Toggle a step's completion state |
delete_project_step |
Delete a step and its references |
list_step_references |
List reference links on a step |
add_step_reference |
Add a reference link to a step |
update_step_reference |
Update a reference link |
delete_step_reference |
Delete a reference link |
Rich-text content (notes & project steps)
create_note, update_note, add_project_step, and update_project_step all take a content
field. Task-Tracker stores this internally as a TipTap JSON document, but you don't need to
construct that by hand — pass a plain string of Markdown or plain text and it's converted
automatically:
{ "content": "Goal: create the widget\n\n## Sub-tasks\n\n1. Create directory\n2. Init package.json" }
Supported Markdown: paragraphs, # headings, **bold**, _italic_, `inline code`,
[links](url), bullet (-) and numbered (1.) lists, > blockquotes, fenced code blocks, and
hard line breaks. Constructs the converter doesn't understand (tables, images, raw HTML,
task-list checkboxes) are never silently dropped — they degrade to plain text so the content
survives, just not as their intended rich element.
If you need something the converter can't express exactly, you can still pass a raw TipTap JSON document directly instead of a string — it's stored as-is.
For project steps, content_text (used for search) is derived automatically from content when
omitted, so you only need to write the text once. Pass content_text explicitly if you want the
search index to see different text than what's rendered.
Error handling
- Connection failures (Task-Tracker unreachable): returned as a clear message naming the configured URL, not a stack trace.
- Authentication failures (401): returned as a message pointing at
TASKTRACKER_API_TOKEN. - Validation errors: the API's own FastAPI/Pydantic error details are passed through as-is.
- Unexpected/non-JSON responses (e.g. a reverse proxy error page instead of the API): surfaced as a clear message rather than crashing on an invalid-JSON parse.
- Destructive operations (deletes): exposed as plain tools with no extra confirmation step — the same trust model as calling the API directly. Only checklists support
undo_checklist_delete; other deletes are permanent.
Development
npm run dev # run directly from source with tsx
npm run build # compile to dist/
npm start # run the compiled server (dist/index.js)
npm run typecheck # type-check without emitting
npm test # run the automated test suite (mocked HTTP, no live Task-Tracker needed)
Compatibility
Built and tested against Task-Tracker v3.0.x's /api/v1 REST API. Versioned independently of Task-Tracker itself, starting at v1.0.0.
License
MIT — see LICENSE.
推荐服务器
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 模型以安全和受控的方式获取实时的网络信息。