backlog
backlog
为 Claude Code 提供持久化、跨会话的任务管理。任务可以在会话间保留,因此一个智能体开始的工作可以由另一个智能体继续完成。
构建于 @backloghq/agentdb 之上 —— 支持类型化模式、自动递增 ID、虚拟过滤器和 Blob 存储。纯 TypeScript,零原生依赖。
安装
/plugin marketplace add backloghq/backlog
/plugin install backlog@backloghq-backlog从源码安装
git clone https://github.com/backloghq/backlog.git
cd backlog && npm install && npm run build
claude --plugin-dir /path/to/backlog独立 MCP 服务器
添加到项目的 .claude/settings.json 中:
{
"mcpServers": {
"backlog": {
"command": "node",
"args": ["/path/to/agent-teams-task-mcp/dist/index.js"],
"env": {
"TASKDATA": "/path/to/task-data"
}
}
}
}Related MCP server: Vibe Board VE
技能
技能 | 描述 |
| 显示当前待办事项 —— 待处理、进行中、阻塞、逾期任务 |
| 将目标拆解为带有依赖项、优先级和规范的任务 |
| 每日站会 —— 已完成、进行中、阻塞、下一步 |
| 整理待办事项 —— 修复模糊的任务、缺失的优先级、损坏的依赖项、陈旧的项目 |
| 在实施前为任务编写规范文档 |
| 领取任务、阅读规范、实施并标记为完成 |
| 为下一次会话做准备 —— 注释进度、停止活动任务、总结状态 |
智能体
当有人需要规划工作时,Claude 可以自动调用 task-planner 智能体。它会读取代码库,将目标分解为带有依赖项的任务,并为复杂项目编写规范。
钩子
事件 | 作用 |
| 会话开始时显示待处理任务数量 |
| 将 Claude 内置任务同步到持久化待办事项中 |
| 当 Claude 完成内置任务时,将对应的待办事项标记为完成 |
| 将未分配的待处理任务自动分配给生成的智能体 |
工具 (MCP)
用于完整任务生命周期管理的工具:
工具 | 描述 |
| 使用过滤语法查询任务。返回包含所有字段的 JSON 数组。 |
| 计算符合过滤条件的任务数量。语法与 task_list 相同。 |
| 创建新的待处理任务。仅需描述;所有其他字段可选。 |
| 直接以已完成状态记录已完成的工作。 |
| 对符合过滤条件的一个或多个任务进行部分更新。仅更改提供的字段。 |
| 复制现有任务,并可选择覆盖字段。 |
| 将任务标记为完成,并记录结束时间戳。 |
| 软删除任务。可通过 task_undo 恢复。使用 task_purge 永久移除。 |
| 添加带时间戳的备注。长内容请使用 task_doc_write。 |
| 通过精确文本匹配移除注释。 |
| 将任务标记为正在进行中。在 +ACTIVE 查询中可见。 |
| 停止处理任务。将其返回至待处理状态。 |
| 撤销最近的操作。可重复调用。 |
| 通过 ID 或 UUID 获取单个任务的完整 JSON 详情。 |
| 从 JSON 数组批量创建任务。原子批处理操作。 |
| 永久移除已删除的任务。不可逆。 |
| 为任务附加/替换 Markdown 文档(规范、备注、上下文)。 |
| 读取附加到任务的 Markdown 文档。 |
| 移除任务的文档。永久性操作。 |
| 将旧的已完成/已删除任务移动到季度归档段。 |
| 列出可用的归档段。 |
| 加载归档任务以进行只读检查。 |
| 列出带有待处理/循环任务的项目名称。 |
| 列出带有待处理/循环任务的标签。 |
过滤语法
status:pending # all pending tasks
project:backend +bug # bugs in backend project
priority:H due.before:friday # high priority due before friday
+OVERDUE # overdue tasks
+ACTIVE # tasks currently being worked on
+BLOCKED # tasks blocked by dependencies
+READY # actionable tasks (past scheduled date)
agent:explorer # tasks assigned to the explorer agent
( project:web or project:api ) # boolean with parentheses
description.contains:auth # substring match支持属性修饰符(.before, .after, .by, .has, .not, .none, .any, .startswith, .endswith)、标签(+tag, -tag)、虚拟标签(+OVERDUE, +ACTIVE, +BLOCKED, +READY, +TAGGED, +ANNOTATED 等)以及布尔运算符(and, or)。
任务文档
为任何任务附加 Markdown 文档(规范、上下文、交接备注):
task_doc_write id:"1" content:"# Spec\n\nBuild the auth flow.\n"
task_doc_read id:"1"
task_doc_delete id:"1"编写文档会添加 +doc 标签和 has_doc:yes,以便智能体可以发现带有文档的任务:
task_list filter:"+doc"
task_list filter:"has_doc:yes"智能体身份
任务支持 agent 字段,用于跟踪哪个智能体拥有该任务:
task_add description:"Investigate bug" agent:"explorer"
task_list filter:"agent:explorer status:pending"项目隔离
每个项目都会自动获得自己的任务数据。作为插件使用时,任务数据位于 ~/.claude/plugins/data/backlog/projects/<project-slug>/。独立使用时,请显式设置 TASKDATA。
变量 | 描述 |
| 任务数据目录的显式路径(覆盖自动推导) |
| 自动推导的项目级任务数据的根目录 |
| 显式集合名称(默认: |
| 设置为 |
| 用于多写入支持的智能体 ID(Claude, Gemini 等) |
| 存储后端:省略则为文件系统(默认), |
| S3 存储桶名称(当 |
| AWS 区域(如果使用默认凭证则可选) |
多写入支持
Backlog 支持来自多个进程(例如 Claude Desktop 和 Gemini CLI)共享同一数据的并发访问。要启用此功能:
为每个进程分配一个唯一的
BACKLOG_AGENT_ID(例如claude,gemini)。设置智能体 ID 后,引擎将使用各智能体的写入日志,避免文件锁定。
每个进程在操作前会自动调用
refresh()以获取其他智能体的更改。
命名空间
如果您希望为多个项目使用单个 TASKDATA 目录(例如共享的 S3 存储桶或全局 ~/.backlog 文件夹),可以使用命名空间来保持任务隔离:
手动:设置
BACKLOG_NAMESPACE=my-project以使用特定的集合名称。自动:设置
BACKLOG_AUTO_NAMESPACE=true,让 Backlog 自动从当前工作目录推导集合名称(例如my-app-a1b2c3d4)。
配置示例 (.claude/settings.json):
{
"mcpServers": {
"backlog": {
"command": "node",
"args": ["/path/to/backlog/dist/index.js"],
"env": {
"TASKDATA": "/home/user/.backlog",
"BACKLOG_AUTO_NAMESPACE": "true",
"BACKLOG_AGENT_ID": "claude-desktop"
}
}
}
}这两种方法都允许多个项目共享同一个存储后端,同时保持隔离的、特定于项目的待办事项。
S3 后端
将任务数据存储在 S3 中以实现团队共享或云端持久化。需要 @backloghq/opslog-s3:
npm install @backloghq/opslog-s3通过 .claude/settings.json 中的环境变量进行配置:
{
"mcpServers": {
"backlog": {
"command": "node",
"args": ["/path/to/backlog/dist/index.js"],
"env": {
"TASKDATA": "my-project/tasks",
"BACKLOG_BACKEND": "s3",
"BACKLOG_S3_BUCKET": "my-team-backlog",
"BACKLOG_S3_REGION": "us-east-1"
}
}
}
}使用 S3 时,TASKDATA 将成为存储桶中的键前缀,而不是文件系统路径。
Docker
docker build -t backlog .
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' \
| docker run --rm -i backlog开发
npm install
npm run build # compile TypeScript
npm run lint # run ESLint
npm test # run tests
npm run test:coverage # run tests with coverage
npm run dev # watch mode社区
GitHub Discussions — 问题、想法、展示与交流
Issue Tracker — 错误报告和功能请求
Documentation — 完整文档、技能参考、过滤语法
如果 backlog 对您有帮助,请考虑给它点个星标 — 这有助于其他人发现该项目。
许可证
MIT
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
20 tool updates
v1.5.0- Changed
task_add12 fields changed- changed
Input schema / properties / agent / descriptionPrevious value: -"Agent identity, e.g. 'explorer', 'planner', 'reviewer'"New value: +"Agent identity for tracking task ownership across agent teams. E.g. 'explorer', 'planner', 'reviewer'." - changed
Input schema / properties / depends / descriptionPrevious value: -"UUID(s) of tasks this depends on, comma-separated"New value: +"Comma-separated UUIDs of tasks this depends on. Task shows as +BLOCKED until dependencies are completed." - changed
Input schema / properties / description / descriptionPrevious value: -"Task description text"New value: +"Task description (required, max 500 chars). Brief summary of what needs to be done." - changed
Input schema / properties / due / descriptionPrevious value: -"Due date, e.g. 'tomorrow', '2025-12-31', 'eow'"New value: +"Due date. Accepts: ISO dates ('2025-12-31'), relative ('3d', '2w'), named ('tomorrow', 'friday', 'eow', 'eom'), compound ('now+3d')." - changed
Input schema / properties / extra / descriptionPrevious value: -"Additional raw attributes"New value: +"Space-separated additional attributes or +tag/-tag modifiers." - changed
Input schema / properties / priority / descriptionPrevious value: -"Priority: H (high), M (medium), L (low)"New value: +"Priority: H (high), M (medium), L (low). Affects urgency score and sort order." - changed
Input schema / properties / project / descriptionPrevious value: -"Project name, e.g. 'backend'"New value: +"Project name for grouping (alphanumeric, hyphens, underscores). E.g. 'backend', 'auth-refactor'" - changed
Input schema / properties / recur / descriptionPrevious value: -"Recurrence frequency, e.g. 'daily', 'weekly', '2wks', 'monthly'. Requires a due date."New value: +"Recurrence pattern. Requires 'due' to be set. Values: 'daily', 'weekly', 'weekdays', 'biweekly', 'monthly', 'quarterly', 'yearly', or numeric like '3d', '2w'." - changed
Input schema / properties / scheduled / descriptionPrevious value: -"Scheduled date — when to start working on the task, e.g. 'monday', 'tomorrow'"New value: +"Scheduled start date — when to begin working. Same date formats as 'due'." - changed
Input schema / properties / tags / descriptionPrevious value: -"Tags to apply, as comma-separated list or JSON array. E.g. 'bug,urgent' or '[\"bug\",\"urgent\"]'"New value: +"Tags as comma-separated list or JSON array. E.g. 'bug,urgent' or '[\"bug\",\"urgent\"]'. Used for filtering with +tag/-tag syntax." - changed
Input schema / properties / until / descriptionPrevious value: -"End date for recurrence — no instances generated past this date, e.g. '2026-12-31'"New value: +"End date for recurrence — no instances generated past this date. Only meaningful with 'recur'. Same date formats as 'due'." - changed
Input schema / properties / wait / descriptionPrevious value: -"Wait date — task hidden until this date"New value: +"Wait date — task is hidden from default views until this date. Same date formats as 'due'."
- Changed
task_annotate2 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID." - changed
Input schema / properties / text / descriptionPrevious value: -"Annotation text"New value: +"Annotation text to add. Stored with a timestamp. Keep concise — use task_doc_write for longer content."
- Changed
task_archive1 field changed- changed
Input schema / properties / older_than_days / descriptionPrevious value: -"Number of days. Archive tasks completed/deleted more than this many days ago. Default: 90"New value: +"Archive tasks completed/deleted more than this many days ago. Default: 90. E.g. '30' for tasks older than a month."
- Changed
task_archive_load1 field changed- changed
Input schema / properties / segment / descriptionPrevious value: -"Archive segment name, e.g. '2026-Q1'"New value: +"Archive segment name, e.g. '2026-Q1'. Use task_archive_list to see available segments."
- Changed
task_count1 field changed- changed
Input schema / properties / filter / descriptionPrevious value: -"Filter expression. Leave empty for all pending tasks."New value: +"Filter expression. Same syntax as task_list. Examples: 'status:pending', '+OVERDUE', 'project:backend +bug'. Leave empty for all pending tasks."
- Changed
task_delete1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID of the task to delete."
- Changed
task_denotate2 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID." - changed
Input schema / properties / text / descriptionPrevious value: -"Exact annotation text to remove"New value: +"Exact annotation text to remove (case-sensitive). Must match a previously added annotation."
- Changed
task_doc_delete1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID."
- Changed
task_doc_read1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID."
- Changed
task_doc_write2 fields changed- changed
Input schema / properties / content / descriptionPrevious value: -"Document content (markdown)"New value: +"Document content in markdown format. Replaces any existing document on this task." - changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID."
- Changed
task_done1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID. Task must be in pending or active status."
- Changed
task_duplicate8 fields changed- changed
Input schema / properties / agent / descriptionPrevious value: -"Agent identity"New value: +"Agent identity for the new task." - changed
Input schema / properties / description / descriptionPrevious value: -"New description (overrides original)"New value: +"New description to override the original." - changed
Input schema / properties / due / descriptionPrevious value: -"New due date"New value: +"New due date. Pass empty string to clear." - changed
Input schema / properties / extra / descriptionPrevious value: -"Additional raw attributes"New value: +"Space-separated additional attributes or +tag/-tag modifiers." - changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID to duplicate"New value: +"Task ID number (e.g. '1') or UUID of the task to copy." - changed
Input schema / properties / priority / descriptionPrevious value: -"New priority"New value: +"New priority. Pass empty string to clear." - changed
Input schema / properties / project / descriptionPrevious value: -"New project"New value: +"New project. Pass empty string to clear." - changed
Input schema / properties / tags / descriptionPrevious value: -"Tags to add or remove, as comma-separated list. E.g. 'frontend,urgent' or '-old,+new'"New value: +"Tags to add (+) or remove (-). E.g. '+frontend,-old'. Applied on top of the copied tags."
- Changed
task_import1 field changed- changed
Input schema / properties / tasks / descriptionPrevious value: -"JSON array of task objects, e.g. '[{\"description\":\"My task\",\"project\":\"foo\"}]'"New value: +"JSON array of task objects. Required field: 'description'. Optional: 'project', 'tags' (string[]), 'priority' (H/M/L), 'due', 'status', 'depends' (UUID[]), 'recur', 'agent', 'uuid' (to set explicit ID). Example: '[{\"description\":\"My task\",\"project\":\"foo\",\"priority\":\"H\"}]'"
- Changed
task_info1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID. Returns an error if no task matches."
- Changed
task_list1 field changed- changed
Input schema / properties / filter / descriptionPrevious value: -"Filter expression. Leave empty for all pending tasks."New value: +"Filter expression to match tasks. Examples: 'status:pending', 'project:backend +bug', 'due.before:tomorrow', '+OVERDUE', '+BLOCKED', 'priority:H', 'agent:explorer'. Combine with 'and'/'or' and parentheses. Leave empty for all pending tasks."
- Changed
task_log6 fields changed- changed
Input schema / properties / agent / descriptionPrevious value: -"Agent identity"New value: +"Agent identity that completed the work." - changed
Input schema / properties / description / descriptionPrevious value: -"Task description text"New value: +"Description of the completed work (required, max 500 chars)." - changed
Input schema / properties / extra / descriptionPrevious value: -"Additional raw attributes"New value: +"Space-separated additional attributes or +tag modifiers." - changed
Input schema / properties / priority / descriptionPrevious value: -"Priority: H/M/L"New value: +"Priority: H (high), M (medium), L (low)." - changed
Input schema / properties / project / descriptionPrevious value: -"Project name"New value: +"Project name for grouping." - changed
Input schema / properties / tags / descriptionPrevious value: -"Tags to apply, as comma-separated list. E.g. 'done,reviewed'"New value: +"Tags as comma-separated list. E.g. 'done,reviewed'"
- Changed
task_modify13 fields changed- changed
Input schema / properties / agent / descriptionPrevious value: -"Agent identity, e.g. 'explorer', 'planner', 'reviewer'"New value: +"Agent identity. Pass empty string to unassign." - changed
Input schema / properties / depends / descriptionPrevious value: -"New dependency UUIDs"New value: +"New dependency UUIDs (comma-separated). Replaces existing dependencies. Pass empty string to clear." - changed
Input schema / properties / description / descriptionPrevious value: -"New description text"New value: +"New description text (max 500 chars). Only set if you want to change it." - changed
Input schema / properties / due / descriptionPrevious value: -"New due date"New value: +"New due date. Accepts ISO dates, relative ('3d'), named ('friday', 'eow'). Pass empty string to clear." - changed
Input schema / properties / extra / descriptionPrevious value: -"Additional raw attributes"New value: +"Space-separated additional attributes or +tag/-tag modifiers." - changed
Input schema / properties / filter / descriptionPrevious value: -"Filter to select tasks to modify (ID, UUID, or filter expression)"New value: +"Filter to select tasks. Can be a numeric ID ('1'), UUID, or filter expression ('project:backend priority:H'). Matches may update multiple tasks." - changed
Input schema / properties / priority / descriptionPrevious value: -"New priority (empty string to clear)"New value: +"New priority. Pass empty string to clear priority entirely." - changed
Input schema / properties / project / descriptionPrevious value: -"New project name"New value: +"New project name. Pass empty string to clear." - changed
Input schema / properties / recur / descriptionPrevious value: -"New recurrence frequency"New value: +"New recurrence pattern ('daily', 'weekly', '3d', etc). Pass empty string to clear." - changed
Input schema / properties / scheduled / descriptionPrevious value: -"New scheduled date"New value: +"New scheduled start date. Pass empty string to clear." - changed
Input schema / properties / tags / descriptionPrevious value: -"Tags to add (+) or remove (-), as comma-separated list. E.g. 'frontend,urgent' or '-old,+new'"New value: +"Tags to add (+) or remove (-). E.g. '+frontend,+urgent' or '-old,+new'. Prefix with + to add, - to remove. Without prefix, tags are added." - changed
Input schema / properties / until / descriptionPrevious value: -"End date for recurrence — no instances generated past this date, e.g. '2026-12-31'"New value: +"End date for recurrence. Pass empty string to clear." - changed
Input schema / properties / wait / descriptionPrevious value: -"New wait date"New value: +"New wait date. Task hidden from default views until this date. Pass empty string to clear."
- Changed
task_purge1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID of a deleted task"New value: +"Task ID number (e.g. '1') or UUID. Task must be in 'deleted' status."
- Changed
task_start1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID. Task must be in pending status."
- Changed
task_stop1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID. Task must be currently active (started)."
24 tool updates
v1.4.0- First observed
task_add - First observed
task_annotate - First observed
task_archive - First observed
task_archive_list - First observed
task_archive_load - First observed
task_count - First observed
task_delete - First observed
task_denotate - First observed
task_doc_delete - First observed
task_doc_read - First observed
task_doc_write - First observed
task_done - First observed
task_duplicate - First observed
task_import - First observed
task_info - First observed
task_list - First observed
task_log - First observed
task_modify - First observed
task_projects - First observed
task_purge - First observed
task_start - First observed
task_stop - First observed
task_tags - First observed
task_undo
TDQS
Each tool has a distinct, clearly separated purpose with explicit cross-references in descriptions (e.g., 'use task_log instead', 'use task_doc_write instead'). No overlapping functionality—CRUD, lifecycle, archival, and document operations are cleanly partitioned.
Strict snake_case convention with consistent 'task_' prefix. Sub-resources follow predictable patterns (task_doc_read/write/delete, task_archive_list/load). Verbs are clear and consistently placed (task_add, task_delete, task_modify).
24 tools is above the typical ideal range but justified by the domain complexity. The set covers full task lifecycle, document attachments, archival management, annotations, and discovery without redundancy. Each tool earns its place for a comprehensive backlog system.
Excellent coverage of CRUD, status workflow (start/stop/done), soft-delete with purge, annotations, document attachments, and archival. Minor gap: archived tasks are view-only with no restore-to-active operation, though this appears to be an intentional cold-storage design.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Persistent AI memory shared across Claude, ChatGPT, coding agents, and compatible MCP clients.
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
AI-native Kanban board — connect Claude to claim, work and move your tasks over MCP.
- mcpOAuthai.butlerbrain
Persistent memory for AI assistants. Save once; recall from Claude, ChatGPT, or any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAI-native project management with persistent memory for coding agents. 17 MCP tools for features, stories, sprints, architecture decisions, knowledge base, and session tracking.3MIT
- AlicenseAqualityBmaintenancePersistent memory and task board for Claude Code. 14 tools spanning projects, tasks, sessions, and activity logs — backed by Firestore, runs on the free tier. Handoff notes survive context compaction; the next session reads the last handoff and picks up where you stopped.14MIT
- AlicenseNot gradedqualityDmaintenanceA comprehensive project management and workflow tracking system that integrates with Claude Code via MCP, automatically capturing sessions, tools, agents, and project tasks into a centralized dashboard and database.20MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for project planning inside Claude. It tracks progress, knows your codebase, and resumes exactly where you left off every session.145-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/backloghq/backlog'
If you have feedback or need assistance with the MCP directory API, please join our Discord server