Changelog
All notable changes to this project are documented here.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
[0.14.0] - 2026-06-24
Added
@filevalue support for every free-form text flag (#70):task create/update--description,comment create/update/reply--text,doc add-page/edit-page--content,list create/update--content,chat message-send/message-update/reply-send--text,goal update --description, andtime create/update/start--description. A value of@pathreads the argument from a file,@-reads from stdin, and@@textescapes a literal leading@(so@@everyoneis sent verbatim). Resolution is wired uniformly as a clapvalue_parser, so coverage is consistent across flags rather than per-command. This works around shells — notably Windows PowerShell — that split an unquoted multiline value into separate argv tokens at the process boundary, which previously causederror: unexpected argument '<word>' found. A single trailing newline is trimmed from file/stdin content; interior newlines are preserved. MCP tools are unaffected (they receive structured JSON, not shell args).--markdownflag ontask getand aninclude_markdown_descriptionparameter on theclickup_task_getMCP tool (#65). The flatteneddescription/text_contentfields reduce a markdown link to its label text, dropping the URL. With the flag set, the CLI passesinclude_markdown_description=trueto ClickUp’s Get Task endpoint and surfaces the rawmarkdown_description(e.g.[Desktop](https://www.figma.com/design/…)), so agents and scripts can recover inline link URLs without bypassing the CLI. The field is appended to the displayed columns for table/csv/json-compact output — even alongside an explicit--fieldslist — and is present verbatim in--output json; the MCP tool addsmarkdown_descriptionto its compact response.parentparameter on theclickup_task_createandclickup_task_updateMCP tools, and a matching--parentflag on thetask updateCLI command (#72).task createalready accepted--parent; the gap was that the MCP surface andtask updatecould not set it. You can now create a task directly as a subtask (parenton create) and re-parent an existing task — converting a top-level task into a subtask, or moving a subtask between parents — from both the CLI and MCP. (ClickUp has no way to detach a subtask back to top-level via this field.)doc embed-imageCLI command andclickup_doc_embed_imageMCP tool (144 tools): upload a local image and embed it inline in a ClickUp doc page. The ClickUp API has no doc-level upload endpoint (the v3 attachment endpoint rejectsdocs/pagesentity types), so the image is stored as an attachment on a host task (--via-task, auto-detected from the git branch like other task-scoped commands), and the returned public CDN URL is appended/prepended to the page asmarkdown, which ClickUp converts into a native inline image block.
Changed
- Behavior change (#70): a value passed to any free-form text flag (
--description/--text/--content) that begins with a literal@is now interpreted as a file reference. To send text that genuinely starts with@(e.g. an@mentionlike@everyone), escape it as@@everyone. Previously such values were sent verbatim. If the referenced file does not exist the command fails with a message that names the@@escape form, so the case is self-correcting.
Fixed
- npm install was broken on every platform (#74). The package’s
binentries (bin/clickup-cli,bin/clkup) were placeholder shell stubs, and thepostinstalldownloader either mistook the stub for an already-installed binary and skipped the download (so the CLI permanently printedRun: npm rebuild clickup-cli), or — on Windows — could never wire up the downloadedclickup-cli.exeat all, because npm’s staticbinmap points at an extension-less path that Windows can’t execute. Thebinentries are now small Node launchers (bin/clickup-cli,bin/clkup→bin/launch.js) that npm bin-links uniformly on every platform (anode <launcher>shim on Windows, a symlink on Unix);postinstalldownloads the platform binary intobin/vendor/and the launcher re-execs it, forwarding args, stdio, and exit code. This fixes installation on macOS, Linux, and Windows. The native binaries are excluded from the published package (.npmignore) and fetched at install time; the GitHub release archives are unchanged, so Homebrew/AUR/direct-download installs are unaffected.
Dependencies
- Bumped
reqwest0.13.3 → 0.13.4,serde_json→ 1.0.150,chrono→ 0.4.45, andregex→ 1.12.4 (minor/patch, #73), and CIactions/checkout6 → 7 (#76) andcodecov/codecov-action6 → 7 (#68).
[0.13.0] - 2026-05-22
Changed
.clickup.tomlresolution now walks up from the current directory to filesystem root and uses the nearest config file, mirroring how git locates.git(#64). Previously the CLI only checked the current directory, so running from any subdirectory of a project silently fell back to the global~/.config/clickup-cli/config.toml, which commonly surfaced as a401 Team not authorizedwhen the global token belonged to a different workspace.setupandagent-config initstill write to the current directory — only the read path changed.
0.12.1 - 2026-05-20
Fixed
- npm publish pipeline migrated to OIDC-based Trusted Publishing (#63). v0.12.0’s npm/Homebrew/AUR/GitHub Packages publish chain failed because npm rotated all granular access tokens with write access that bypassed 2FA following the “Mini Shai-Hulud” supply-chain attacks — the
NPM_TOKENrepo secret was invalidated mid-release. v0.12.1 has the same code as v0.12.0 but re-publishes via the new TP flow so all distribution surfaces reach 0.12.x. NoNPM_TOKENsecret is involved any more; the workflow exchanges GitHub’s per-run OIDC token for a short-lived publish credential at publish time.
0.12.0 - 2026-05-20
Added
- MCP pagination support across the 15 tools whose underlying ClickUp endpoint is paginated (#14, #48, #49, #51). Page-based (v2):
clickup_task_list,clickup_task_search,clickup_view_tasks,clickup_template_listaccept optionalpage/limit/all. Cursor-based (v3):clickup_doc_list,clickup_chat_channel_list,clickup_chat_message_list,clickup_chat_reply_list,clickup_chat_channel_followers,clickup_chat_channel_members,clickup_chat_reaction_list,clickup_chat_tagged_usersaccept optionalcursor/limit/all. Start-id-based (v2 comments):clickup_comment_list,clickup_comment_repliesaccept optionalstart/start_id/limit/all. Body-based (v3 audit log):clickup_audit_log_queryaccepts the existingpage_rows/page_timestamp/page_directionplus newlimit/all. The contract is opt-in and non-breaking: when no pagination arg is passed, the response is unchanged — a bare compact array, same shape existing MCP clients see today. When ANY pagination arg is passed, the response becomes{"items": [...], "pagination": {style, page|next_cursor|next_start+next_start_id|next_page_timestamp, has_more, returned, last_page, all}}. Withall=truethe helper walks pages until the natural termination signal (ClickUp’slast_page=truefor page-based,next_cursor=nullfor cursor-based, page shorter than 25 items for start-id-based, empty response for body-based) orlimitis reached (hard-capped at 100 pages to prevent runaway loops). Introducescrate::mcp::paginationwithPageArgs,CursorArgs,StartIdArgs,BodyPaginationArgs,page_dispatch,cursor_dispatch,start_id_dispatch, andbody_pagination_dispatchhelpers backed by wiremock-driven tests.
Changed
clickup_chat_channel_followers,clickup_chat_channel_members,clickup_chat_reaction_list,clickup_chat_tagged_usersMCP tools now return compact response objects (matching every other chat list tool). Previously these four returned the raw API response object verbatim with all per-item fields (initials, profilePicture, color, etc.); now they return only the documented compact field set per item: members/followers/tagged_users →id, name, username, email; reactions →reaction, user, date. Callers that depended oninitials,profilePicture, orcolorwill see those fields absent. The shape narrowing is unconditional — applies whether or not pagination args are passed.
Fixed
- CLI commands that call paginated ClickUp endpoints now honour the global
--all/--page/--limitflags consistently (#50). Previously onlytask listandtask searchactually paginated; every other paginated list command silently returned just the first page or applied--limitas a client-side cap on the first page only — misleading users into thinking they had all results. 13 CLI commands fixed:view tasks,template list(page-based v2);doc list,chat channel-list,chat channel-followers,chat channel-members,chat message-list,chat reaction-list,chat reply-list,chat tagged-users(cursor-based v3);comment list,comment replies(start-id-based v2);audit-log query(body-based v3). New global flags--cursor(cursor pagination continuation),--start+--start-id(start-id pagination continuation pair) accompany the existing--page. The CLI now uses a sharedcrate::commands::paginationmodule that mirrors the MCP-side helpers from #14/#48/#49/#51; the shared module handles loop termination, MAX_PAGES guard (100), and the cli-flag → walker plumbing.--limitis now correctly enforced AFTER walking (so--all --limit 500returns up to 500 items across N pages, not “first page truncated to 500”). Breaking change for two subcommands:clickup-cli view tasksandclickup-cli template listno longer accept their command-local--pagearg (the global one supersedes); callers passing--page 0continue to work unchanged.
0.11.0 - 2026-05-19
Changed
- BREAKING — binary rename (#39): the shipped binary is no longer named
clickup. The previous name collided with the official ClickUp desktop app on Linux, which installs aclickupbinary onPATH. From 0.11.0 onwards two binaries ship from the same code:clickup-cli— the canonical name. Matches the crate name (cargo install clickup-cli) and the AUR package (clickup-cli-bin). All documentation and help text reference this name.clkup— a short alias for daily ergonomics (5 chars, no hyphen, no collision with the desktop app). Identical behaviour toclickup-cli.- The previous
clickupbinary is removed, not aliased. Existing users must migrate.
Migration:
- MCP configs (Claude Desktop, Cursor, Codex, etc.): replace
"command": "clickup"with"command": "clickup-cli"(or"clkup") inclaude_desktop_config.json/.mcp.json/ equivalent. - Shell aliases & scripts: replace
clickupinvocations withclickup-cli(orclkup). A one-shot rewrite:sed -i 's/\bclickup /clickup-cli /g' your-script.sh(review the diff — don’t blindly replace if you reference the ClickUp brand name in prose). - Shell completions: regenerate via
clickup-cli completions <shell> > /path/to/completion. Old completion files keyed off theclickupbinary name still source-load but won’t fire on the new binaries until regenerated. - Injected agent-config blocks (
clickup agent-config inject): re-runclickup-cli agent-config injectto refresh the CLI reference baked into your CLAUDE.md / .cursorrules / equivalent. The injection markers (<!-- clickup-cli:begin -->/<!-- clickup-cli:end -->) are unchanged, so the re-inject is a clean in-place update.
Why a hard break: keeping
clickupalongsideclickup-cliwould defeat the rename — the collision with the desktop app would persist. Pre-1.0 semver allows the break. - BREAKING:
audit-log query(CLI andclickup_audit_log_queryMCP tool) request body reshaped to match ClickUp’s v3 OpenAPI spec. Previous implementation invented{type, user_id, date_filter:{start_date,end_date}}, none of which the endpoint recognises. Correct shape is{applicability, filter?:{...}, pagination?:{...}}where the inner filter fields areeventType,eventStatus,userId(array),userEmail(array),startTime,endTime. CLI flags renamed:--typeis gone, replaced by--applicability(required) plus optional--event-type.--user-idis now repeatable. New flags:--event-status,--user-email,--start-time,--end-time,--page-rows,--page-timestamp,--page-direction. No working caller exists because the previous body shape produced no useful response. - BREAKING:
acl update(CLI andclickup_acl_updateMCP tool) body reshaped to match the v3 spec. Previous implementation invented{access_type, grant, revoke}arrays; the endpoint accepts{private?:bool, entries?:[{kind, id, permission_level?}]}. CLI flags now:--private true|false,--grant-user USER_ID[:LEVEL](repeatable),--grant-group GROUP_ID[:LEVEL](repeatable),--revoke-user USER_ID(repeatable),--revoke-group GROUP_ID(repeatable). Permission level acceptsread|comment|edit|create(mapped to spec’s1|3|4|5integers).--bodyraw JSON escape hatch retained. MCP gains anentriesarray parameter (objects of{kind, id, permission_level?}with kind enumuser|group) so MCP callers can grant/revoke access — previously onlyprivatewas exposed on the MCP side. Same justification as audit-log.
Fixed
chat channel-list,chat message-list, andchat reply-listCLI commands now read the v3dataenvelope first and fall back to the olderchannels/messages/replieskeys for compatibility (#39). Before this fix the commands consistently returned empty results because the v3 endpoints return their list underdata— the matching MCP tools were already fixed in 0.10.0 but the CLI parity was missed.
0.10.0 - 2026-05-18
Changed
- BREAKING:
task replace-estimates(CLI andclickup_task_replace_estimatesMCP tool) reworked to match ClickUp’s spec and remove a data-loss footgun. The old shape{time_estimates: [{user_id, time_estimate}]}was wrong on three fronts: the body should be a bare array (no wrapper), the field names areassigneeandtime(notuser_id/time_estimate), and accepting only one assignee meant the “replace” operation silently erased every other user’s estimate. CLI:--assignee/--timeremoved, replaced by repeatable--estimate ASSIGNEE:MS(ASSIGNEE accepts a numeric user id or the literalunassigned); new--bodyraw JSON escape hatch. MCP:user_id/time_estimatescalars replaced by anestimatesarray of{assignee, time}objects. - BREAKING:
time rename-tag(CLI andclickup_time_rename_tagMCP tool) now sends the requiredtag_bgandtag_fghex-colour fields per ClickUp’s spec. The endpoint marks them required even when the caller only wants to rename; previously omitting them likely 400’d or silently failed. CLI gains required--tag-bgand--tag-fgflags; MCP gains requiredtag_bgandtag_fgschema parameters. Callers who want to keep the existing colours should pass the current hex values. - CLI help and MCP tool descriptions corrected after an audit against ClickUp’s official OpenAPI spec. No behaviour change; documentation only.
comment create,comment update,comment reply(and the correspondingclickup_comment_*MCP tools) no longer claim markdown support. ClickUp’s v2 comment API only accepts plaincomment_textand renders neither markdown nor rich text; markdown syntax is stored verbatim. @mentions are still rendered.clickup_doc_createMCPparent.typecheat sheet corrected: the enum is 4=space, 5=folder, 6=list, 7=everything, 12=workspace. The previous text said 7=task, which is wrong.clickup_webhook_deleteMCP description: the alternative-to-delete suggestion now points atstatus='inactive'. The previous text said'suspended', which is not a value the API accepts.clickup_audit_log_queryMCPtypeparameter description: corrected example enum values to ClickUp’s actual categories (AUTH, HIERARCHY, USER, CUSTOM_FIELDS, AGENT, OTHER). The previous text inventedtask_created,user_added,permission_changed.clickup_chat_channel_updateMCPdescriptionfield no longer claims markdown support; ClickUp’s chat-channel description field is plain text.
Fixed
- MCP task-scoped tools now auto-detect custom task IDs (e.g.
PROJ-42) and inject the required?custom_task_ids=true&team_id=<ws>query string. Affectsclickup_task_get,clickup_task_update,clickup_task_delete,clickup_task_add_tag,clickup_task_remove_tag,clickup_task_add_dep,clickup_task_remove_dep,clickup_task_link,clickup_task_unlink,clickup_field_set,clickup_field_unset,clickup_task_time_in_status,clickup_attachment_list,clickup_attachment_upload,clickup_comment_list,clickup_comment_create,clickup_checklist_create. Previously the CLI commands handled custom IDs but the MCP equivalents always treated the value as an internal ClickUp ID and 404’d for custom-format IDs. TheCU-prefix is also now transparently stripped on the MCP side, matching CLI behaviour. Schema parameter names are unchanged; detection is automatic based on ID format. - Chat v3 fixes after auditing against ClickUp’s OpenAPI spec:
clickup_chat_message_sendMCP tool now sends the requiredtypefield (default"message", configurable via a new optionaltypeschema arg). ClickUp’s v3 endpoint rejects message-send requests that omittype. The CLI was already sending it.clickup_chat_dmMCP tool reworked: previously sent{user_id, content}, which is not in the spec at all. The endpoint creates a DM channel (no message body) and takesuser_ids: [...]per spec. New schema takes auser_idsarray and returns the channel object; callers should follow withclickup_chat_message_sendto post a message. CLI was already correct.clickup_chat_message_list,clickup_chat_channel_list, andclickup_chat_reply_listMCP tools now read the v3dataenvelope first and fall back to the oldermessages/channels/replieskeys for compatibility. Before this fix the MCP tools consistently returned empty arrays because the v3 endpoints return their list underdata.chat reaction-removeCLI andclickup_chat_reaction_removeMCP tool now percent-encode the emoji segment in the request path. Sending a raw multi-byte emoji like👍previously produced a malformed URL.
goal create(CLI andclickup_goal_createMCP tool) now sends the requiredmultiple_ownersboolean field that ClickUp’s spec requires on goal create. CLI sends false (only single--owneris supported via the flag). MCP derives the value from the size of theowner_idsarray. Without this fix the goal-create endpoint rejected requests withmultiple_owners is required.group createCLI wire-level: body field ismembers(ClickUp’s spec), the CLI was sendingmember_ids. Values must be integers, the CLI was sending strings. Parses--membervalues into integers and now bails clearly when a value is not numeric.group listCLI: ClickUp’sGET /v2/groupendpoint requiresteam_idas a query parameter. The CLI omitted it and the request 400’d. Now passes the resolved workspace id automatically.group updateCLI: add/remove member arrays in the body are integers per spec, not strings. Now parsed and validated; non-numeric IDs produce a clear error before the request goes out.clickup_doc_edit_pageMCP tool now supports themodeparameter (replace/append/prepend) and forwards it to ClickUp ascontent_edit_mode. The CLI’sdoc edit-page --modeflag was already wired; the MCP equivalent silently dropped any mode value and always replaced. Invalid values now error out before the request.view create(CLI andclickup_view_createMCP tool) now sends the seven required complex body fields (grouping,divide,sorting,filters,columns,team_sidebar,settings) populated with ClickUp’s documented neutral defaults. The previous body sent only{name, type}which ClickUp’s spec rejects (all seven are required). The resulting view can be customised in the ClickUp UI afterwards.task create --descriptionandtask update --description(and theclickup_task_create/clickup_task_updateMCP tools) now render markdown in the ClickUp UI (#22). The CLI was sending the plain-textdescriptionAPI field, which doesn’t interpret markdown; switched tomarkdown_content, ClickUp’s documented markdown-rendering field. Plain-text descriptions still display identically. User-facing flag and MCP schema parameter name (description) are unchanged.list create --contentandlist update --content(and theclickup_list_create/clickup_list_updateMCP tools) now render markdown in the ClickUp UI. Same root cause as the task-description bug above: the CLI was sending the plain-textcontentfield, but ClickUp’s docs explicitly say to usemarkdown_contentto format a list description. CLI flag and MCP arg name (content) are unchanged.clickup_chat_reaction_addMCP tool andchat reaction-addCLI: the request body field wasemoji, ClickUp’s OpenAPI spec names itreaction. The CLI/MCP input arg name remainsemoji, only the wire field changed. Without this fix the endpoint returnedReaction required.clickup_tag_updateMCP tool senttag_fg/tag_bgon the tag-update endpoint. ClickUp’s update endpoint usesfg_color/bg_color(an inconsistency with the create endpoint, which still usestag_fg/tag_bg). The CLI was already correct; the MCP tool now matches. Caller-facing arg names unchanged.task time-in-statusbulk mode comma-joined every task ID into a singletask_ids=query parameter, which ClickUp treats as one unknown ID. Switched to repeatedtask_ids=A&task_ids=B&...query params per the OpenAPI spec.doc create --parent-typesent the type as a string ("SPACE"etc.). ClickUp’s spec requires an integer enum (4=space, 5=folder, 6=list, 7=everything, 12=workspace). CLI now accepts the string names case-insensitively (plus the raw integers) and translates to the integer enum. Help text expanded to list the new values (EVERYTHING, WORKSPACE).doc list --creatorsentcreator_id=as the query param, ClickUp’s docs name itcreator. Filter was silently ignored before; now applies as documented.
0.9.1 - 2026-04-23
Fixed
msrvCI job had been failing on every push since it was introduced (5f21db6) becauseCargo.lockis format v4 (default for cargo 1.78+) but the declared MSRV was1.75. Bumpedrust-versionto1.88— the actual minimum enforced by transitive dependencies today (toml_writerneeds edition 2024 → 1.85;icu_*@2.2.0→ 1.86;comfy-table 7.2.2uses let-chains → 1.88). No runtime behaviour change.- AUR publish workflow had never fired for any release. Root cause: our releases are created by
softprops/action-gh-release@v2usingGITHUB_TOKEN, and GitHub deliberately does not fire downstream workflow triggers for release events produced byGITHUB_TOKEN(anti-loop safeguard). Switched the AUR workflow’s trigger fromrelease: [released]toworkflow_runafter “Build and Release” completes successfully. Also addedworkflow_dispatchwith ataginput so past releases can be rerun manually. - Bumped
KSXGitHub/github-actions-deploy-aurfromv4.1.1→v4.1.3. v4.1.1 is broken upstream (runuserrewrites-cas--command, which bash rejects); fixed in v4.1.2, hardened in v4.1.3.
0.9.0 - 2026-04-23
Added
- Task ID auto-detection from git branch names (#8). Task-scoped CLI commands (
task get,task update,task add-dep,comment create,attachment upload,checklist create,field set,member list,time list/create/start, and more) now resolve the task ID from the current git branch when no explicit ID is given. Matches ClickUp default IDs likeCU-abc123and customPREFIX-NUMBERIDs; standard workflow prefixes (feat/,fix/,hotfix/,bugfix/,release/,chore/,docs/,refactor/,test/,ci/,perf/,build/,style/) are stripped before matching. Explicit CLI args always win; destructive or ambiguous commands (task delete,task link,task unlink,guest share-task,guest unshare-task) never auto-detect. Resolution chain: explicit arg →CLICKUP_TASK_IDenv → git branch. A one-line breadcrumb"resolved task X from branch Y"is printed to stderr on table output; suppressed by-qor--output json. - Explicit
CU-prefix on task IDs is now transparently stripped (clickup task get CU-abc123→GET /v2/task/abc123). - Custom-format explicit IDs (
PROJ-42) auto-injectcustom_task_ids=true&team_id=<ws>on all task-scoped commands, not justtask get --custom-task-id. - New config section
[git] enabled = true / verbose = truein~/.config/clickup-cli/config.tomland.clickup.toml. Turn detection off entirely with[git] enabled = falseor per-invocation withCLICKUP_GIT_DETECT=0. CLICKUP_TASK_IDenvironment variable as an alternative source (overrides branch, overridden by explicit CLI arg).CLICKUP_API_URLenvironment variable to point the CLI at a mock server (integration-test infrastructure; not for end users).- MCP server is explicitly out of scope for branch-detect because the host editor pins the MCP server’s
cwdat spawn time — branch-detect from MCP would reliably resolve the wrong branch.
Fixed
clickup attachment listand theclickup_attachment_listMCP tool returned HTTP 400 for every task (#9). The CLI was callingGET /v3/workspaces/{ws}/task/{id}/attachments, which does not exist on ClickUp’s side. Fixed to callGET /v2/task/{id}and extract the inlineattachmentsarray — per ClickUp’s API docs, there is no dedicated list-attachments endpoint; attachments come back with the task itself.
Changed
task add-tagandtask remove-tagnow accept either<task_id> <tag_name>(two positionals, explicit) or<tag_name>alone (one positional, task auto-detected from branch). Fully backward compatible with the existing two-arg form.- The
[ID]positional ontask get,task update,task add-dep,task remove-dep,task move,task set-estimate,task replace-estimates, andtask deleteis now optional in--helpoutput. Non-branch-detect behaviour oftask deleteis unchanged — it still refuses without an explicit ID.
0.8.2 - 2026-04-23
Added
- Statically-linked Linux musl release binary (
clickup-linux-x86_64-musl.tar.gz) for Alpine, distroless, and minimal-container use cases (#3). Runs on any Linux distro; no libc or TLS runtime dependencies. - Alpine install section in
docs/install.mdwith a Dockerfile snippet, and a Linux Homebrew entry pointing at the existing tap. - Changelog now mirrored at https://clickup-cli.com/changelog/ via an auto-sync workflow that rebuilds
docs/changelog.mdon every push that touchesCHANGELOG.md.
0.8.1 - 2026-04-23
Fixed
- Release workflow: run
cargo publishon a clean tree before downloading build artifacts, and drop--allow-dirty. The v0.8.0 release hit crates.io’s 10 MB upload cap because the prior order packaged the downloaded platform binaries into the crate tarball. As a result, v0.8.0 made it to the GitHub Release page but never reached crates.io, npm, GitHub Packages, or Homebrew — v0.8.1 is the first fully-published build of the MCP tool filtering feature.
0.8.0 - 2026-04-23
Added
clickup mcp servenow accepts filtering flags so the MCP server can expose a subset of its 143 tools at startup:--profile <all|read|safe>(defaultall):readexposes only read-class tools;safeexcludes destructive tools.--read-onlyshortcut for--profile read.--groups/--exclude-groupsto include or drop resource groups (e.g.task,comment,time).--tools/--exclude-toolsto include or drop individual tools by exact name.- Matching environment variables:
CLICKUP_MCP_PROFILE,CLICKUP_MCP_READ_ONLY,CLICKUP_MCP_GROUPS,CLICKUP_MCP_EXCLUDE_GROUPS,CLICKUP_MCP_TOOLS,CLICKUP_MCP_EXCLUDE_TOOLS.
- Filters apply to both
tools/list(shrinks the LLM’s context) andtools/call(rejects filtered tools with JSON-RPC-32601), so filtering is an access-control guarantee, not just a context optimization. - Startup log line on stderr summarizing the active filter, e.g.
MCP: profile=read, exposing 52/143 tools. - Internal tool classifier mapping every MCP tool to a
(class, group)pair with a CI self-check that fails if a tool can’t be classified.
Fixed
- Release workflow (
.github/workflows/build.yml):cargo publishnow runs with--allow-dirty(build artifacts in the workspace were making the tree “dirty”) and all three publish steps (crates.io, npm, GitHub Packages) now check whether the version already exists before publishing and fail hard on any other error. The previous|| echo "skipped"pattern silently swallowed the crates.io failure during the v0.7.0 release.
0.7.0 - 2026-04-17
Changed
- Rewrote MCP tool definitions for 134 of 143 tools to raise Glama Tool Definition Quality Score (TDQS). Pass 1 covered the 23 tools scoring ≤2.5; pass 2 covered the ~111 tools scoring 2.6–3.4. Only the 9 A-tier tools (≥3.5) were left untouched. Every rewritten tool now includes purpose context, usage guidance (with irreversibility warnings and pointers to safer alternatives for destructive ops), behavioural transparency (return value, cascading effects), and richer parameter semantics (how to obtain each ID, valid enum values, omission behaviour, constraints). Average
descriptionlength went from ~30 chars to ~241 chars; target server grade uplift from C (2.8) to A under Glama’s 60%-mean + 40%-min formula. Tool count, names, parameter names/types, and required/optional splits were preserved. - Bumped
reqwestfrom 0.12 to 0.13 (feature flagrustls-tlsrenamed torustls; no code changes required). - Bumped
tomlfrom 0.8 to 1.0. - Relaxed
comfy-tablepin from=7.1.1to"7"(picks up 7.2.2). - Relaxed
wiremockpin from=0.6.0to"0.6"(picks up 0.6.5). cargo updateacross all transitive deps (tokio 1.50→1.52, clap 4.6.0→4.6.1, rustls 0.23.37→0.23.38, plus ~40 others).- Synced
npm/package.jsonversion to 0.6.7.
Added
- Jekyll SEO plumbing for clickup-cli.com:
jekyll-seo-tag+jekyll-sitemapplugins,Gemfile,robots.txt,docs/assets/og-image.{svg,png}(1200×630 social card). - Per-page
descriptionand explicitpermalinkonindex.html,install.md,commands.md,mcp.md. theme-colormeta tag in the layout.- “Made by D3 Vitamin” footer attribution.
Fixed
- Home page
<title>no longer renders as “Home — clickup-cli”; now uses a keyword-rich title generated byjekyll-seo-tag. - Nav links now target trailing-slash permalinks (avoids GitHub Pages redirect hops).
Prior versions
Release notes for 0.6.7 and earlier are auto-generated from commit history on the GitHub Releases page.