Skip to main content
Glama

Task Hub MCP

跨 AI agent 的本地任务上下文共享。Task Hub 是一个 stdio MCP server,让 Codex、Claude Code、Hermes、VS Code 等客户端读写同一份任务状态。

当你切换 agent 时,新 agent 可以直接加载任务目标、当前进度、关键决策、踩坑记录和文件快照,不必重新翻完整对话。

核心设计

  • meta.json 是任务状态的唯一真源。

  • context.md 是从 meta.json 生成的蒸馏上下文,加载时会自动修复。

  • conversation.jsonl 保存调用方显式传入的对话消息。

  • revision 防止旧 agent 覆盖其他 agent 刚保存的新状态。

  • MCP server 只维护一套接口,不为不同客户端复制业务逻辑。

Related MCP server: Agent Switchboard

六个工具

工具

用途

task_init

创建并开始追踪任务

task_save

保存上下文、进度、决策、踩坑、文件和可选对话

task_load

加载指定任务及其当前 revision

task_list

按状态或标签列出任务

task_resume

加载 active 任务或恢复 paused 任务

task_stop

暂停任务,或用 archive=true 归档任务

安装

要求 Python 3.10 或更高版本。

git clone https://github.com/zjuphD/task-hub-mcp.git
cd task-hub-mcp
python3 -m venv .venv
.venv/bin/python -m pip install --upgrade pip
.venv/bin/python -m pip install .

开发时使用 editable install:

.venv/bin/python -m pip install -e .

安装后确认命令可用:

.venv/bin/task-hub-mcp

server 使用 stdio,直接启动后安静等待 MCP client 连接属于正常行为。

Windows 虚拟环境中的可执行文件通常位于 .venv\\Scripts\\task-hub-mcp.exe

配置 MCP client

以下示例使用安装后的命令。请把 /absolute/path/to/task-hub-mcp 替换为仓库的真实绝对路径。

Codex

~/.codex/config.toml 中添加:

[mcp_servers.task-hub]
command = "/absolute/path/to/task-hub-mcp/.venv/bin/task-hub-mcp"
startup_timeout_sec = 30

Hermes

~/.hermes/config.yaml 中添加:

mcp_servers:
  task-hub:
    enabled: true
    command: /absolute/path/to/task-hub-mcp/.venv/bin/task-hub-mcp
    timeout: 120
    connect_timeout: 60

检查连接:

hermes mcp list
hermes mcp test task-hub

Hermes 模型侧的工具名通常带 server 前缀,例如 mcp_task_hub_task_save

Claude Code / VS Code

.mcp.json 中添加:

{
  "mcpServers": {
    "task-hub": {
      "command": "/absolute/path/to/task-hub-mcp/.venv/bin/task-hub-mcp"
    }
  }
}

不同 MCP client 的配置文件位置可能不同,但启动命令相同。

存储结构

默认存储目录:

~/.task-hub/tasks/

每个任务目录:

~/.task-hub/tasks/<task-id>/
├── meta.json
├── context.md
├── conversation.jsonl
└── artifacts/

可通过环境变量覆盖任务目录:

TASK_HUB_TASKS_DIR=/path/to/tasks

如果 MCP client 需要传递环境变量,可以把它放在对应 server 的 env 配置中。

Revision 冲突保护

task_inittask_loadtask_savetask_resumetask_stop 都会返回当前 revision

保存前把加载时拿到的 revision 作为 expected_revision 传回:

{
  "name": "release-v1",
  "context": "当前蒸馏状态",
  "expected_revision": 3,
  "agent": "codex"
}

如果其他 agent 已经把任务更新到 revision 4,这次保存不会产生文件或对话副作用,而是返回:

{
  "success": false,
  "code": "revision_conflict",
  "expected_revision": 3,
  "actual_revision": 4,
  "hint": "Load the latest task state, merge your changes, and save again."
}

兼容旧客户端时可以不传 expected_revision,此时保持最后写入者覆盖的行为。跨 agent 工作流建议始终传入。

工具参数

task_init

{
  "name": "任务名",
  "description": "任务目标,可选",
  "tags": ["可选标签"]
}

task_save

{
  "name": "任务名或 task id",
  "context": "当前蒸馏状态",
  "progress": "本次进度,可选",
  "decisions": ["新决策,可选"],
  "pitfalls": ["新踩坑,可选"],
  "artifacts": [
    {
      "path": "/absolute/path/to/file",
      "description": "文件说明"
    }
  ],
  "agent": "codex",
  "messages": [
    {
      "role": "user",
      "content": "用户消息"
    }
  ],
  "expected_revision": 1
}

MCP server 无法自动读取 agent 私有会话窗口。只有调用方显式传入 messages 时,消息才会写入 conversation.jsonl

部分 MCP client 会把数组包装成 {"item": [...]}{"items": [...]}{"value": [...]};server 会自动归一化这些输入。

task_load

{
  "name": "任务名或 task id",
  "include_conversation": false
}

task_list

{
  "status": "active",
  "tag": "可选标签"
}

status 可选值为 activepausedarchived

task_resume

{
  "name": "可选任务名或 task id"
}
  • 指定 active 任务时直接加载。

  • 指定 paused 任务时恢复为 active。

  • 不指定任务时优先加载最近的 active 任务;如果没有 active 任务,则恢复最近的 paused 任务。

  • archived 任务不能恢复。

task_stop

{
  "name": "任务名或 task id",
  "reason": "停止原因,可选",
  "archive": false,
  "expected_revision": 2
}

默认状态变为 paused;archive=true 时状态变为 archived。

Artifact 限制

默认单个 artifact 最大为 50 MiB。超限文件会跳过并作为 warning 返回。

TASK_HUB_MAX_ARTIFACT_BYTES=104857600

设为 0 可以关闭大小限制。还可以限制允许读取的目录,多个目录使用操作系统路径分隔符连接:

TASK_HUB_ALLOWED_ARTIFACT_ROOTS=/workspace/project:/workspace/results

启用允许目录后,符号链接也会按解析后的真实路径检查。

可靠性与隐私

  • meta.jsoncontext.md 使用临时文件、fsync 和原子替换。

  • context.md 发生缺失或过期时,task_load 会从 meta.json 自动重建。

  • Unix 系统使用文件锁串行化同一任务的写入;创建任务使用全局锁避免同名竞争。

  • revision 解决文件锁无法发现的语义级旧状态覆盖。

  • artifact 同名时自动生成唯一文件名。

  • conversation.jsonl 的坏行会被标记并跳过,不会导致整个任务加载失败。

Task Hub 以当前用户权限运行。保存的上下文、对话和 artifact 可能包含源代码、绝对路径、密钥或其他隐私数据;不要把 ~/.task-hub/tasks/ 直接提交到公开仓库。对不完全信任的 agent,建议配置 TASK_HUB_ALLOWED_ARTIFACT_ROOTS

开发验证

python -m compileall -q task_hub_mcp tests
python -m unittest discover -s tests -v
python -m pip wheel --no-deps . -w dist

MCP 握手验证:

import asyncio
from pathlib import Path

from mcp import ClientSession
from mcp.client.stdio import StdioServerParameters, stdio_client


async def main():
    executable = Path(".venv/bin/task-hub-mcp").resolve()
    params = StdioServerParameters(command=str(executable))
    async with stdio_client(params) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            tools = await session.list_tools()
            print([tool.name for tool in tools.tools])


asyncio.run(main())

预期工具列表:

task_init, task_save, task_load, task_list, task_resume, task_stop

License

MIT

Available Tools

6 tools
task_initA

Create a new task and start tracking it.

Use this when the user wants to begin a new tracked task. The task will be saved to ~/.task-hub/tasks//.

Args: name: Task name (will be slugified for the directory name) description: What this task is about tags: Optional tags for filtering (e.g. ["bioinfo", "ngs"])

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
tagsNo
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the save location (~/.task-hub/tasks/<id>/) and the slugification of the task name, plus the fact that it starts tracking immediately. It does not mention potential overwrite behavior or error conditions, but the key side effects are transparent for a create-and-start tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a one-line purpose statement, a usage sentence, a storage location note, and an Args list. Every sentence contributes new information — no fluff or repetition. It is appropriately sized for a three-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, usage, storage side-effect, and parameter semantics, which is strong for a simple init tool. The output schema is present, so return value details are not required. Minor omissions like duplicate-name behavior or whether tracking auto-stops on errors are not critical for this tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero description coverage, so the description must explain parameters. It does so comprehensively: 'name' (slugified for directory), 'description' (what the task is about), and 'tags' (optional filtering with an example). This adds meaning beyond the bare schema fields and fully compensates for the missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Create a new task and start tracking it' — a specific verb+resource+outcome. It clearly distinguishes this from siblings like task_resume and task_save by emphasizing 'new task' and 'start tracking', which aligns with the tool name 'task_init'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states 'Use this when the user wants to begin a new tracked task', providing explicit usage context. It does not directly name alternatives, but the 'new' qualifier implicitly differentiates from task_resume/task_load, and sibling names are available in context. Lacks an explicit 'when not to use' clause but is otherwise clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

task_listA

List all saved tasks.

Call this when the user says "what tasks do I have", "有哪些任务", or wants to see what's available before loading one.

Args: status: Filter by status ("active", "paused", "archived") tag: Filter by tag

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
statusNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden. It correctly implies read-only behavior via 'List' but does not explicitly state that it is safe or non-destructive, nor does it mention any permissions or side effects. Minimal but not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the main purpose, and includes only necessary usage triggers and parameter explanations. Every sentence earns its place without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple listing tool with two optional parameters and an existing output schema, the description fully covers what the tool does, when to use it, and how parameters behave. No critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning to the parameters beyond the schema by explaining 'Filter by status' and listing the valid statuses ('active', 'paused', 'archived'), and clarifying 'Filter by tag'. Schema coverage is 0%, so the description compensates well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists saved tasks ('List all saved tasks'), which distinguishes it from siblings like task_save, task_load, etc. It uses a specific verb and resource, leaving no ambiguity about its function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit triggers ('what tasks do I have', '有哪些任务') and a clear use case ('before loading one'). It does not explicitly state when not to use it or mention alternatives, but the context is strong enough to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

task_loadA

Load a task's context to continue working on it.

Call this when the user says "load task X", "加载 X 任务", or wants to resume a specific task. Returns the distilled context (context.md) that gives you everything you need to continue the task.

Args: name: Task name or ID include_conversation: If true, also include the full conversation log

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
include_conversationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility for disclosing behavior. It explains the return value and the optional conversation log, but does not state whether the operation is read-only, whether it modifies task state, or what happens on missing tasks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and stays reasonably compact. The trigger phrases and Args section are useful, though there is minor redundancy between 'continue working' and 'everything you need to continue the task'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter loader, the description covers the essential input and output semantics. However, it lacks explicit read-only assurance, error behavior, and differentiation from task_resume, so an agent may still be uncertain about side effects or alternatives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description's Args section adds real meaning: name is a task name or ID, and include_conversation controls whether the full log is included. This goes beyond the bare schema and effectively documents both parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool loads a task's context to continue working, with a specific verb and resource. It also notes the return value (context.md), which helps distinguish from siblings, though it doesn't explicitly contrast with task_resume.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit trigger phrases ('load task X', '加载 X 任务') and the general case 'wants to resume a specific task'. However, it doesn't mention when not to use it or point to task_resume as an alternative, which is a notable gap given the sibling tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

task_resumeA

Continue a task, reactivating it when paused.

Call this when the user says "continue where I left off", "继续上次的", or "resume". With no name, the most recent active task is loaded; if none is active, the most recent paused task is reactivated.

Args: name: Optional task name or ID to load or reactivate

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses selection logic for when no name is provided (most recent active, then most recent paused). With no annotations provided, this adds valuable context beyond the tool's name, though it does not mention potential errors or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise yet informative, front-loading the core purpose and including usage triggers and fallback logic in a compact format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and an output schema, the description covers the essential aspects: purpose, usage, parameter semantics, and default behavior. It does not mention error handling, but that is likely covered by the output schema or is unnecessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains the 'name' parameter as an optional task name or ID, and clarifies the default behavior when omitted. Given the schema has no descriptions, this fully compensates for the 0% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Continue a task, reactivating it when paused' with a specific verb and resource. It distinguishes from sibling tools like task_load by emphasizing reactivation and fallback behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly specifies trigger phrases including natural language examples and 'resume'. It describes the fallback behavior without naming alternatives, so it lacks explicit when-not-to-use guidance but provides clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

task_saveA

Save the current state of a task.

Call this when the user says "save", "保存", or wants to checkpoint progress. The context parameter should be a concise summary of the current state — goals, what's done, what's next, key decisions.

Args: name: Task name or ID context: Current context summary (distilled, not raw conversation) progress: Progress update to append decisions: New key decisions made (list of strings) pitfalls: New pitfalls discovered (list of strings) artifacts: Files to snapshot [{"path": "/abs/path", "description": "..."}] agent: Which agent is saving (e.g. "claude-code", "codex", "hermes") messages: Optional conversation messages to append to conversation.jsonl expected_revision: Revision returned by task_load; rejects stale saves

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
agentNo
contextYes
messagesNo
pitfallsNo
progressNo
artifactsNo
decisionsNo
expected_revisionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must carry the full burden. It does disclose important behaviors: expected_revision rejects stale saves, progress is appended, messages append to conversation.jsonl, and artifacts are snapshotted. However, it doesn't clarify overwrite vs. merge semantics for the entire task state or behavior when the task doesn't exist, leaving some behavioral ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: an action line, a trigger sentence, guidance on the context parameter, and a detailed Args list. Each section adds value, though the initial context guidance slightly overlaps with the context parameter description, preventing a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 9 parameters and no annotations, the description covers purpose, triggers, and all parameter semantics, and even adds a concurrency note. The output schema exists, so return values need not be explained. However, it omits the relationship to task_init/task_load and failure behavior, leaving some context gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the Args section provides meaningful descriptions for all 9 parameters, including formats (e.g., '/abs/path', list of strings) and semantic guidance (e.g., 'distilled, not raw conversation'). This fully compensates for the schema's lack of descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Save the current state of a task' with a specific verb and resource, clearly identifying the action. The trigger phrasing ('when the user says "save"') also differentiates it from sibling tools like task_load and task_init.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit trigger conditions: 'Call this when the user says "save", "保存", or wants to checkpoint progress.' This is clear usage guidance, though it does not explicitly mention alternatives or when not to use it. The context is sufficient for a save/checkpoint operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

task_stopA

Stop tracking a task by pausing or archiving it.

Call this when the user says "stop tracking", "不用追踪了", or wants to archive/finish a task.

Args: name: Task name or ID reason: Why the task is being stopped archive: Permanently archive instead of pausing expected_revision: Revision returned by task_load; rejects stale updates

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
reasonNo
archiveNo
expected_revisionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It reveals that archive is 'Permanently archive instead of pausing' and that expected_revision 'rejects stale updates,' which are useful behavioral traits. Yet it does not elaborate on side effects, reversibility of pause, or what 'stop tracking' entails beyond the basic pause/archive distinction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a one-sentence summary, trigger phrases, and an Args list. It is front-loaded and every sentence earns its place, with no redundant or vague content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains all four parameters and the core behavior, and since an output schema exists, return values need not be described. Minor gaps remain, such as the exact state transition when pausing vs archiving, but the overall context is sufficiently complete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description compensates fully for the 0% schema coverage by explaining every parameter in the Args section, including the purpose of expected_revision ('Revision returned by task_load; rejects stale updates'). This adds meaning far beyond the bare schema titles and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action with a specific verb and resource: 'Stop tracking a task by pausing or archiving it.' It also provides concrete trigger phrases, effectively distinguishing it from siblings like task_resume, task_save, and task_init.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use context: 'Call this when the user says "stop tracking", "不用追踪了", or wants to archive/finish a task.' However, it does not mention when not to use it or explicitly reference alternatives, so it falls short of a perfect 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct lifecycle step: init creates, save checkpoints, list queries, load restores, resume reactivates, and stop pauses/archives. The only potential overlap between task_load and task_resume is resolved by task_resume's explicit role in reactivating paused tasks, while task_load requires a name and returns context.

Naming Consistency5/5

All tools follow the consistent pattern task_<verb> in snake_case, with clear verbs (init, save, list, load, resume, stop). This makes the toolset predictable and easy to navigate.

Tool Count5/5

With six tools, the server is well-scoped for task tracking: creation, state saving, listing, loading, resuming, and stopping. No redundancy or unnecessary tools are present.

Completeness5/5

The task lifecycle is fully covered: init creates a task, save persists progress, load retrieves context, resume reactivates, stop pauses or archives, and list provides an overview. No obvious missing operations for the stated purpose.

Maintenance

ActivitySlowing
ResponsivenessSyncing

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

Related MCP Servers

Latest Blog Posts

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/zjuphD/task-hub-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server