Taskhold
REMOTE · TASKHOLD.COM
Shared task list for Claude Code, Cursor and Codex: live progress per step, questions you answer.
Available components
Last scanned (4 hours ago)
Scores higher than 87% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Project Management
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security97
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server supports Client ID Metadata Documents, the current MCP client-registration mechanism. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability66
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4247 tokens (~193/item across 22 items; 22 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management33
- Stability observed for 10 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 22 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 23 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 0
- Server version: 1.5.5 → 1.5.6 functional
- 4 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.
- 2 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.
- 1 Nov 26 0
- Server version: 1.5.4 → 1.5.5 functional
- 31 Oct 26 +3
- Authorization: fail → pass ▲ security
- First check of Authorization: pass security
- New tool “taskhold_update_project”, which the server declares destructive security
- Tool “taskhold_add_note” rewrote its description, which is the text the model reads security
- Tool “taskhold_begin” rewrote its description, which is the text the model reads security
- Tool “taskhold_block” rewrote its description, which is the text the model reads security
- Tool “taskhold_complete” rewrote its description, which is the text the model reads security
- Tool “taskhold_create” rewrote its description, which is the text the model reads security
- Tool “taskhold_create_from_todo” rewrote its description, which is the text the model reads security
- Tool “taskhold_create_project” rewrote its description, which is the text the model reads security
- Tool “taskhold_get” rewrote its description, which is the text the model reads security
- Tool “taskhold_get_current” rewrote its description, which is the text the model reads security
- Tool “taskhold_get_summary” rewrote its description, which is the text the model reads security
- Tool “taskhold_list” rewrote its description, which is the text the model reads security
- Tool “taskhold_list_labels” rewrote its description, which is the text the model reads security
- Tool “taskhold_list_projects” rewrote its description, which is the text the model reads security
- Tool “taskhold_plan” rewrote its description, which is the text the model reads security
- Tool “taskhold_progress” rewrote its description, which is the text the model reads security
- Tool “taskhold_search” rewrote its description, which is the text the model reads security
- Tool “taskhold_set_priority” rewrote its description, which is the text the model reads security
- Tool “taskhold_start” rewrote its description, which is the text the model reads security
- Tool “taskhold_unblock” rewrote its description, which is the text the model reads security
- Tool “taskhold_update” rewrote its description, which is the text the model reads security
- Tool “taskhold_updates” rewrote its description, which is the text the model reads security
- Tool “taskhold_plan” is now declared destructive security
- Tool “taskhold_update” is now declared destructive security
- Schema quality: 126 → 193 ▼ functional
- Schema quality: good → excellent functional
- Server version: 1.2.0 → 1.5.4 functional
- “taskhold_block” added an optional parameter “if_no_answer” cosmetic
- “taskhold_block” added an optional parameter “options” cosmetic
- “taskhold_block” added an optional parameter “recommended” cosmetic
- “taskhold_complete” added an optional parameter “finish_task” cosmetic
- “taskhold_complete” added an optional parameter “needs_review” cosmetic
- “taskhold_complete” added an optional parameter “outcome” cosmetic
- “taskhold_create_from_todo” added an optional parameter “labels” cosmetic
- “taskhold_create_from_todo” added an optional parameter “priority” cosmetic
- “taskhold_search” added an optional parameter “project_id” cosmetic
- “taskhold_begin” reworded the description of “labels” cosmetic
- “taskhold_complete” reworded the description of “summary” cosmetic
- Tool “taskhold_add_note” changed its title: Add a note cosmetic
- Tool “taskhold_begin” changed its title: Begin a task cosmetic
- Tool “taskhold_block” changed its title: Block a task with a question cosmetic
- Tool “taskhold_complete” changed its title: Complete a task cosmetic
- Tool “taskhold_create” changed its title: Create a task cosmetic
- Tool “taskhold_create_from_todo” changed its title: Create a task from a TODO cosmetic
- Tool “taskhold_create_project” changed its title: Create a project cosmetic
- Tool “taskhold_get” changed its title: Get a task cosmetic
- Tool “taskhold_get_current” changed its title: Get current tasks cosmetic
- Tool “taskhold_get_summary” changed its title: Get a summary cosmetic
- Tool “taskhold_list” changed its title: List tasks cosmetic
- Tool “taskhold_list_labels” changed its title: List labels cosmetic
- Tool “taskhold_list_projects” changed its title: List projects cosmetic
- Tool “taskhold_plan” changed its title: Plan task steps cosmetic
- Tool “taskhold_progress” changed its title: Report progress cosmetic
- Tool “taskhold_search” changed its title: Search tasks cosmetic
- Tool “taskhold_set_priority” changed its title: Set priority cosmetic
- Tool “taskhold_start” changed its title: Start a task cosmetic
- Tool “taskhold_unblock” changed its title: Unblock a task cosmetic
- Tool “taskhold_update” changed its title: Edit a task cosmetic
- Tool “taskhold_updates” changed its title: Get the person's updates cosmetic
- 30 Oct 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “taskhold_start” rewrote its description, which is the text the model reads security
- Tool “taskhold_add_note” rewrote its description, which is the text the model reads security
- Tool “taskhold_block” rewrote its description, which is the text the model reads security
- Tool “taskhold_complete” rewrote its description, which is the text the model reads security
- Tool “taskhold_create” rewrote its description, which is the text the model reads security
- Tool “taskhold_get” rewrote its description, which is the text the model reads security
- Tool “taskhold_get_current” rewrote its description, which is the text the model reads security
- Tool “taskhold_list” rewrote its description, which is the text the model reads security
- Tool “taskhold_list_projects” rewrote its description, which is the text the model reads security
- Tool “taskhold_plan” rewrote its description, which is the text the model reads security
- Tool “taskhold_progress” rewrote its description, which is the text the model reads security
- Tool “taskhold_search” rewrote its description, which is the text the model reads security
- Tool “taskhold_unblock” rewrote its description, which is the text the model reads security
- Tool “taskhold_updates” rewrote its description, which is the text the model reads security
- Schema quality: pass → fail ▼ functional
- New tool “taskhold_begin” functional
- New tool “taskhold_create_project” functional
- “taskhold_complete” added an optional parameter “start_next” cosmetic
- “taskhold_create” added an optional parameter “project” cosmetic
- “taskhold_create_from_todo” added an optional parameter “project” cosmetic
- “taskhold_get_current” added an optional parameter “project” cosmetic
- “taskhold_list” added an optional parameter “project” cosmetic
- “taskhold_search” added an optional parameter “project” cosmetic
- “taskhold_update” added an optional parameter “project” cosmetic
- “taskhold_updates” added an optional parameter “project” cosmetic
- “taskhold_updates” added an optional parameter “task_id” cosmetic
- “taskhold_updates” added an optional parameter “wait” cosmetic
- “taskhold_complete” reworded the description of “summary” cosmetic
- “taskhold_create” reworded the description of “project_id” cosmetic
- “taskhold_list” reworded the description of “project_id” cosmetic
- “taskhold_progress” reworded the description of “task_id” cosmetic
- “taskhold_start” reworded the description of “agent” cosmetic
- “taskhold_update” reworded the description of “project_id” cosmetic
- “taskhold_updates” reworded the description of “include_agent” cosmetic
- “taskhold_updates” reworded the description of “since” cosmetic
- 28 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Oct 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “taskhold_block” rewrote its description, which is the text the model reads security
- Stability: unverified → 0.03 ▲ functional
- “taskhold_block” reworded the description of “reason” cosmetic
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://taskhold.com/api/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_256_GCM_SHA384 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=taskhold.com | CN=YE2,O=Let's Encrypt,C=US | 8 Oct 2026 | 6 Jan 2027 | ECDSA 256 | ECDSA-SHA384 | 6c8d6adb7cc3c0241ad82e5103328f66208 |
| SANs: taskhold.com, www.taskhold.com | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of taskhold.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| taskhold.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer resource_metadata="https://taskhold.com/.well-known/oauth-protected-resource"
Bearer resource_metadata="https://taskhold.com/.well-known/oauth-protected-resource" | Header | Value |
|---|---|
| strict-transport-security | max-age=31536000 |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | strict-origin-when-cross-origin |
Protected resource metadata
| Document | https://taskhold.com/.well-known/oauth-protected-resource |
|---|---|
| Retrieved | Yes |
| Resource | https://taskhold.com/api/mcp |
| Authorisation server | https://taskhold.com |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://taskhold.com/api/mcp | Verified | 200 | |
| http (plaintext) | http://taskhold.com/api/mcp | HTTPS enforced | 301 | https://taskhold.com/api/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
taskhold_add_note Add a note ~92
Add a note to a task: findings, decisions, what you tried. The person reads these. Notes are append-only and shown oldest first (taskhold_get shows the latest 10). Returns a one-line confirmation; an unknown task_id fails with "Task not found".
| Name | Type | Req | Description |
|---|---|---|---|
| note | string | yes | The note |
| task_id | string | yes | The ID of the task to add a note to |
No output schema declared.
No examples provided.
taskhold_begin Begin a task ~394
Start work in one call: files a new task (or takes an existing one with task_id), plans its steps, marks it in progress and starts the first step. Use this whenever the person asks for something: it puts the request on their board with a checklist and a progress bar. Returns the task id, the numbered steps with ids, the step now running and a cursor for taskhold_updates. Every event of the call (created, planned, started) carries the agent label. On a task already under way it appends the steps. Fails without title or task_id, on an unknown task_id (get one from taskhold_list) or on a step (begin its parent, or taskhold_start the step).
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Who is working, shown to the person: "<client> in <repo folder>", e.g. "Claude Code in api-server". Outside a repo just "Claude Code". |
| description | string | – | Details (markdown), e.g. the person's request in full |
| labels | array | – | Labels for a new task, e.g. ["bug", "refactor"] |
| priority | string | – | Priority of a new task (default medium) |
| project | string | – | Project name, e.g. the repo folder ("api-server"). Matched case-insensitively; created on first use. Use this instead of project_id. |
| start_first_step | boolean | – | Also start the first step (default true) |
| steps | array | – | The plan, in order, e.g. ["Read the code", "Write the migration", "Add tests"]. Omit for a one-step job. |
| task_id | string | – | Begin an existing task instead of filing a new one (from taskhold_list). |
| title | string | – | Title of the new task (the person's request, short). Omit when passing task_id. |
No output schema declared.
No examples provided.
taskhold_block Block a task with a question ~371
Mark a task (or step) blocked when you can't continue without the person (a decision, missing info, access). Returns the question and the exact taskhold_updates call to wait with. Write the reason as one question they can answer from the board in a line, e.g. "Decide: drop the legacy column or keep it nullable?". When the answer is a choice, pass 2-4 short options (and recommended, the index of the one you'd pick, 0 = first): the person answers with one tap and the reply reads Reply to "<question>": chose "<option>". if_no_answer says what you'll do if nobody answers. The board shows it under Needs you and their reply arrives as a note. Then wait for it with taskhold_updates {task_id, since, wait: 50}; keep working on anything that doesn't depend on it meanwhile. If the reply doesn't settle it, block again with a narrower question; don't guess. Blocking an already-blocked task asks the new question instead, and the earlier question stays in the task's history; an unknown task_id fails with "Task not found".
| Name | Type | Req | Description |
|---|---|---|---|
| if_no_answer | string | – | What you will do if nobody answers, e.g. "I'll use SQLite and keep going in 30 min." |
| options | array | – | 2-4 short choices shown as buttons, e.g. ["Postgres", "SQLite", "Ask me later"]. Omit for an open question. |
| reason | string | yes | One answerable question, e.g. "Approve: deploy the migration to staging now?" |
| recommended | integer | – | Index into options of the one you recommend (0 = the first). Marked on the board. |
| task_id | string | yes | The ID of the task to block |
No output schema declared.
No examples provided.
taskhold_complete Complete a task ~423
Mark a task or step done, with a summary of what you did and, optionally, a structured outcome: files changed (with +/- line counts), checks run (pass/fail/skip), links (PR, commit, branch, deploy, doc), follow-up task ids, risks and how the person can verify it. The person sees it as a What changed card; a step's outcome rolls up to its task. When the person should look at the work, pass needs_review: true with outcome.verify (how you checked it): the task lands in their Ready for review queue. Completing a step tells you the next one; start_next: true also starts it, and finish_task: true on the last open step closes the task too (with the same summary) in one call. For a step it returns steps done, the task's bar and the next step's id (or, after the last step, a reminder to complete the task). Completing a task closes its open steps. Repeating it on a task that is already done changes nothing and keeps the first summary (add more with taskhold_add_note); an unknown task_id fails with "Task not found", an invalid outcome fails without changing anything.
| Name | Type | Req | Description |
|---|---|---|---|
| finish_task | boolean | – | When completing the last open step, also complete its task with this summary (default false) |
| needs_review | boolean | – | Ask the person to review the work: the task goes to their Ready for review queue (it still counts as done). Needs outcome.verify, a short "how I checked it" line. They approve it or request changes;… |
| outcome | object | – | What changed, shown to the person as a What changed card (20 KB max). Every field is optional. |
| start_next | boolean | – | When completing a step, start the next step too (default false) |
| summary | string | – | What was done (and how you checked it). Markdown. |
| task_id | string | yes | The ID of the task to complete |
No output schema declared.
No examples provided.
taskhold_create Create a task ~244
File work for later: a bug, a refactor, a follow-up you aren't doing now (it lands in To Do). To file and start work at once, use taskhold_begin. Pass parent_task_id to add one step to an existing task (taskhold_plan for several). Returns the new id, status (todo) and priority. Fails if parent_task_id isn't found or is itself a step (steps don't nest), if project_id doesn't exist (pass project by name instead), or at the account's task ceiling.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Details (markdown) |
| labels | array | – | Labels, e.g. ["bug", "refactor"] |
| parent_task_id | string | – | Make it a step (subtask) of this top-level task |
| priority | string | – | Priority (default medium) |
| project | string | – | Project name, e.g. the repo folder ("api-server"). Matched case-insensitively; created on first use. Use this instead of project_id. |
| project_id | string | – | Project id (project, a name, is easier) |
| title | string | yes | Task title |
No output schema declared.
No examples provided.
taskhold_create_from_todo Create a task from a TODO ~209
Create a task from a TODO comment in code, keeping the file path and line number (label todo-from-code plus any labels you pass; priority as in taskhold_create; use taskhold_create for anything else). Returns the new task with its id and code location. Fails at the account's task ceiling or on an invalid project name.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Extra context from the code |
| file_path | string | yes | Path of the file containing the TODO |
| labels | array | – | More labels besides todo-from-code, e.g. ["bug"] |
| line_number | integer | yes | Line number of the TODO |
| priority | string | – | Priority (default medium; low unless it's a real bug) |
| project | string | – | Project name, e.g. the repo folder ("api-server"). Matched case-insensitively; created on first use. Use this instead of project_id. |
| title | string | yes | Task title from the TODO |
No output schema declared.
No examples provided.
taskhold_create_project Create a project ~169
Create a project (a group of tasks, usually one per repo). Optional: any tool that takes project creates it on first use. Returns the existing project if one has this name (case-insensitive), without changing it: the reply says if your description or color wasn't applied (taskhold_update_project changes them). Says whether it was created, restored or already existed, plus its id. Fails on an invalid name or at the account's project ceiling (the error says what to do).
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | – | Hex color for the board, e.g. "#2f6fdb" (default: picked from the name) |
| description | string | – | One line about it |
| name | string | yes | Project name, e.g. the repo folder ("api-server") |
No output schema declared.
No examples provided.
taskhold_get Get a task ~130
Get one task with its full description, steps (subtasks), progress, labels and the latest notes. Returns status, priority, project, the numbered steps with ids (each with its description and, once done, its summary), up to 10 latest notes, the completion summary and what changed (files, checks, links, risks, how to verify) when it was reported. An unknown task_id fails with "Task not found"; get a valid id from taskhold_list (status "all") or taskhold_search.
| Name | Type | Req | Description |
|---|---|---|---|
| task_id | string | yes | The ID of the task to retrieve |
No output schema declared.
No examples provided.
taskhold_get_current Get current tasks ~147
Get the task in progress (in this project when you pass project), with its steps and the next one to do. Call this at the start of a session. Returns the most recently active in-progress task, its numbered steps with ids (with descriptions and the summaries of done steps), the next step's id and the latest 3 notes (taskhold_get shows 10); with nothing in progress (or an unknown project) it says so and names taskhold_begin and taskhold_list.
| Name | Type | Req | Description |
|---|---|---|---|
| project | string | – | Project name, e.g. the repo folder ("api-server"). Matched case-insensitively (or a project id). An unknown name matches nothing. |
No output schema declared.
No examples provided.
taskhold_get_summary Get a summary ~43
Task counts by status, priority and who added them (human or agent). Returns the total and one list per grouping; counts top-level tasks only, not steps.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
taskhold_list List tasks ~164
List top-level tasks, one line each, grouped by status. Pass project to see one repo's work. Each line has status, title, steps done, progress and id; steps aren't listed (taskhold_get shows them). An unknown project name returns no tasks and is not created.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max tasks to return (default 20) |
| priority | string | – | Filter by priority |
| project | string | – | Project name, e.g. the repo folder ("api-server"). Matched case-insensitively (or a project id). An unknown name matches nothing. |
| project_id | string | – | Filter by project id (project, a name, is easier) |
| status | string | – | Filter by status. Default: all. |
No output schema declared.
No examples provided.
taskhold_list_labels List labels ~36
List the account's labels, one name per line. Labels are created by passing them to taskhold_create or taskhold_begin.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
taskhold_list_projects List projects ~52
List projects with their open work, one line each. You rarely need this: every tool takes project as a name. Each line has the name, open counts (working, blocked, todo) and id.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
taskhold_plan Plan task steps ~183
Add ordered steps (subtasks) to a task so the person sees a checklist; the progress bar fills as steps finish. taskhold_begin already does this for new work. For an existing task: taskhold_start it, then taskhold_plan. Steps don't nest. Returns the task's whole step list with ids. Fails on an unknown task_id, on a step (plan its parent) or past 200 steps per task. Planning a done task adds todo steps but leaves it done; taskhold_start it to reopen.
| Name | Type | Req | Description |
|---|---|---|---|
| replace | boolean | – | Replace steps that haven't started yet (done and in-progress steps stay). Default false: append. |
| steps | array | yes | Steps in order, e.g. ["Write the migration", "Update the API", "Add tests"] |
| task_id | string | yes | The ID of the task to plan |
No output schema declared.
No examples provided.
taskhold_progress Report progress ~214
Move the person's progress bar during a long step or a task without steps: percent, or current and total (e.g. 12 of 40 files), plus a short message about what's happening now. On a task with steps, the steps drive the bar: numbers you send for the task go to its running step. Call at milestones, every few minutes at most. Returns the task's progress bar and, on a task with steps, which step your numbers went to. Fails without percent, total or message, on an unknown task_id, or past the per-minute limit (the error says when to retry).
| Name | Type | Req | Description |
|---|---|---|---|
| current | integer | – | Items done so far, with total |
| message | string | – | What is happening now, e.g. "Running the test suite" |
| percent | number | – | 0-100 |
| task_id | string | yes | The ID of the task you are reporting on (a step, or a task without steps) |
| total | integer | – | Total items |
No output schema declared.
No examples provided.
taskhold_search Search tasks ~135
Search tasks and steps by text in the title or description (case-insensitive, up to 100 tasks scanned). Returns matching lines grouped by status, with ids (a step names the task it belongs to), or a line saying nothing matched.
| Name | Type | Req | Description |
|---|---|---|---|
| project | string | – | Project name, e.g. the repo folder ("api-server"). Matched case-insensitively (or a project id). An unknown name matches nothing. |
| project_id | string | – | Filter by project id (project, a name, is easier) |
| query | string | yes | Search text |
| status | string | – | Filter by status |
No output schema declared.
No examples provided.
taskhold_set_priority Set priority ~61
Change a task's priority. Returns the task title and new priority; an unknown task_id fails with "Task not found".
| Name | Type | Req | Description |
|---|---|---|---|
| priority | string | yes | New priority |
| task_id | string | yes | The ID of the task to reprioritize |
No output schema declared.
No examples provided.
taskhold_start Start a task ~141
Mark a task or step in progress when you begin it. Starting a step also starts its task. For new work, taskhold_begin files, plans and starts in one call. Returns the id, status and the next step's id when it has steps. Safe to repeat; it also resumes a blocked or done task. An unknown task_id fails with "Task not found".
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Who is working, shown to the person: "<client> in <repo folder>", e.g. "Claude Code in api-server". Outside a repo just "Claude Code". |
| task_id | string | yes | The ID of the task to start |
No output schema declared.
No examples provided.
taskhold_unblock Unblock a task ~80
Move a blocked task back to todo once the blocker is resolved (taskhold_start resumes it directly). Returns the task with status todo. A task that isn't blocked is left as it is and the reply says its status; an unknown task_id fails with "Task not found".
| Name | Type | Req | Description |
|---|---|---|---|
| task_id | string | yes | The ID of the task to unblock |
No output schema declared.
No examples provided.
taskhold_update Edit a task ~171
Update a task's title, description, priority or project. Only fields you pass change; status goes through taskhold_start, taskhold_complete and taskhold_block. Returns the task as it is now. Fails on an unknown task_id, a project_id that doesn't exist (pass project by name instead) or an invalid project name.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | New description |
| priority | string | – | New priority |
| project | string | – | Project name, e.g. the repo folder ("api-server"). Move it to this project (matched case-insensitively, created on first use). |
| project_id | – | – | Move to project by id (null to remove) |
| task_id | string | yes | The ID of the task to update |
| title | string | – | New title |
No output schema declared.
No examples provided.
taskhold_update_project Edit a project ~132
Change a project's name, description or color. Only fields you pass change. Returns the project as it is now. Fails on an unknown project (it is never created here), on a name another project already has, or with nothing to change.
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | – | New hex color, e.g. "#2f6fdb" |
| description | string | – | New one-line description ("" clears it) |
| name | string | – | New name |
| project | string | yes | The project to change: its name (case-insensitive) or id, e.g. "api-server" |
No output schema declared.
No examples provided.
taskhold_updates Get the person's updates ~282
What the person changed since you last looked: replies (notes), new tasks, priority changes, unblocks. Call when you resume, between steps, and after blocking (with wait, to hold until the reply lands). Pass the cursor from the previous call (or from taskhold_begin / taskhold_block) as since. Your own changes are hidden unless include_agent is true. Returns one line per change, oldest first (time, who, task, what changed, task id), then the cursor for next time; with nothing new it says so and still gives a cursor. An unknown project returns no changes; an unknown task_id fails with "Task not found".
| Name | Type | Req | Description |
|---|---|---|---|
| include_agent | boolean | – | Also include changes made by agents, yours included (default: the person's changes only) |
| project | string | – | Project name, e.g. the repo folder ("api-server"). Matched case-insensitively (or a project id). An unknown name matches nothing. |
| since | integer | – | Cursor from the previous call. Omit the first time (you get the latest 20). |
| task_id | string | – | Only changes to this task and its steps (e.g. the one you blocked) |
| wait | integer | – | Seconds to wait for a change when there is none yet (0-50). Use after taskhold_block. |
No output schema declared.
No examples provided.
How do I install the Taskhold MCP server?
Taskhold is a hosted endpoint at https://taskhold.com/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · taskhold.com
claude mcp add --transport http com-taskhold-taskhold 'https://taskhold.com/api/mcp'
What is the Taskhold MCP server?
Taskhold is an MCP server listed in the public MCP registry as com.taskhold/taskhold. Shared task list for Claude Code, Cursor and Codex: live progress per step, questions you answer. This page covers its hosted endpoint (https://taskhold.com/api/mcp).
Is the Taskhold MCP server safe to use?
Taskhold scores 83 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Taskhold MCP server expose?
Taskhold exposes 22 tools: taskhold_begin, taskhold_list, taskhold_get, taskhold_get_current, taskhold_search, and 17 more. Their descriptions and schemas cost roughly 3,873 tokens of context every time the server is loaded.
Does the Taskhold MCP server require authentication?
Yes. Taskhold asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the Taskhold MCP server still maintained?
Taskhold is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.