Task & list operation completion: update_list.content, milestone/markdown/archived flags, delete_task, dependencies, search_docs v3 fix#6
Conversation
The update_list tool only exposed 'name'. ClickUp's PUT /list/{id} endpoint
supports both 'name' and 'content' (the list description). This adds the
'content' parameter to the tool schema and forwards it to the REST client.
Use case: setting the 'Mode : Standard|Agile|Produit|OPS' marker on the
first line of a list description, plus structured charter / roadmap
content. Markdown is not rendered in list descriptions (plain text only)
— this is a ClickUp-side limitation, documented but not changed here.
…ption, archived ClickUp's task endpoints accept three additional fields that were not exposed by the MCP tools: - custom_item_id (number): task type. Set to 1 to mark a task as a milestone (diamond on Gantt views). Crucial for project/product workflows where milestones drive the schedule. - markdown_description (string): rich-formatted description rendered in ClickUp UI. Without this, descriptions had to be plain text only. - archived (boolean, update_task only): archive/unarchive a task without deleting it. These bridge the most common gaps reported when using the MCP for project/product list management.
Three previously missing operations are now exposed as MCP tools:
- delete_task: permanently delete a task (the existing client method
was already there, just not registered as a tool)
- add_task_dependency: create waiting-on / blocking relationship between
two tasks. Essential for milestone chains (e.g. release V1.1 waits on
V1.0) that drive Gantt arrows.
- remove_task_dependency: symmetric inverse.
Both dependency tools accept either depends_on or dependency_of
(exactly one) to disambiguate direction, mirroring the REST endpoint.
Also extended ClickUpClient.delete to accept optional query params,
which the DELETE /task/{id}/dependency endpoint requires.
v2 endpoint /team/{ws}/docs/search returns 404 — it does not exist.
v3 docs API has no dedicated search endpoint either, so we page through
GET /api/v3/workspaces/{ws}/docs and filter client-side on doc.name
(case-insensitive substring). The legacy `space:<spaceId>` query syntax
is preserved and now matches by parent.id.
Suboptimal for very large workspaces (linear scan, capped at 40 pages)
but it is the only reliable path until ClickUp ships a real search.
|
Warning Rate limit exceeded
To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (6)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Review rate limit: 0/1 reviews remaining, refill in 58 minutes and 51 seconds.Comment |
Summary
This PR fills four small but visible gaps in task/list coverage so callers no longer need to drop down to raw REST for common operations:
update_listacceptscontent— needed to set/update a list's description (e.g. tagging a list with a project mode marker on its first line). The schema previously accepted onlyname.create_task/update_taskexposecustom_item_id,markdown_description,archived— needed to mark a task as a milestone (diamond on Gantt;custom_item_id: 1), to write rich-formatted descriptions that ClickUp actually renders, and to archive/unarchive tasks.delete_task,add_task_dependency,remove_task_dependency—TasksClientalready haddeleteTask, just no tool wrapper. The two dependency tools accept exactly one ofdepends_on/dependency_ofand the underlying client'sdelete()was extended to forward query params (needed by the dependency removal endpoint).search_docsrewritten on top of v3 docs listing — the existing v2 endpointGET /team/{ws}/docs/searchreturns 404 (the v2 search endpoint doesn't exist), and v3 has no dedicated search endpoint. This switches to paginated listing ofGET /workspaces/{ws}/docs+ client-side case-insensitive substring filter onname. Thespace:<spaceId>query syntax is preserved (matched againstparent.id). Pagination is capped at 40 × 50 docs to avoid runaway loops on huge workspaces.Test plan
npm run buildcleanupdate_listcontent roundtrip — set + read back viaget_listcreate_task custom_item_id: 1produces a milestone (verified diamond icon in UI)markdown_descriptiononcreate_taskrenders markdown in the UIupdate_task archived: truearchives,archived: falseunarchivesdelete_taskremoves a taskadd_task_dependency+remove_task_dependencyboth shapes (depends_onanddependency_of)search_docsreturns matches by substring;space:<id>filters by parent space; empty query returns all docs in workspace