{"id":51031348,"url":"https://github.com/juliandickie/clickup-plugin","last_synced_at":"2026-06-22T01:00:51.648Z","repository":{"id":358474378,"uuid":"1241445291","full_name":"juliandickie/clickup-plugin","owner":"juliandickie","description":"Talk to ClickUp from Claude Code - token-disciplined task access and first-class, audited bulk operations.","archived":false,"fork":false,"pushed_at":"2026-06-02T06:23:14.000Z","size":1435,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T08:18:24.602Z","etag":null,"topics":["claude-code","clickup","mcp","model-context-protocol","productivity","project-management","task-management"],"latest_commit_sha":null,"homepage":"https://promarketing.co","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/juliandickie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-17T11:58:17.000Z","updated_at":"2026-06-02T06:23:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/juliandickie/clickup-plugin","commit_stats":null,"previous_names":["juliandickie/clickup-plugin"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/juliandickie/clickup-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliandickie%2Fclickup-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliandickie%2Fclickup-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliandickie%2Fclickup-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliandickie%2Fclickup-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/juliandickie","download_url":"https://codeload.github.com/juliandickie/clickup-plugin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliandickie%2Fclickup-plugin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34630753,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude-code","clickup","mcp","model-context-protocol","productivity","project-management","task-management"],"created_at":"2026-06-22T01:00:50.597Z","updated_at":"2026-06-22T01:00:51.643Z","avatar_url":"https://github.com/juliandickie.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/hero.png\" alt=\"ClickUp for Claude Code\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Claude%20Code-plugin-8A2BE2\" alt=\"Claude Code plugin\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/ClickUp%20API-v2-7B68EE\" alt=\"ClickUp API v2\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/node-%3E%3D18-3C873A\" alt=\"Node 18 or newer\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-MIT-success\" alt=\"MIT license\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eTalk to ClickUp from Claude Code with token-disciplined task access and first-class, audited bulk operations.\u003c/b\u003e\n\u003c/p\u003e\n\n# ClickUp for Claude Code\n\nYou run real work in ClickUp, and you drive Claude Code from the terminal. The two should talk to each other. The stock ClickUp connector makes that expensive and nerve-wracking on a real workspace, in two specific ways.\n\nFirst, it is wasteful. It inlines the full custom-field option schema (`type_config`) on every single task it returns. On a list with dozens of options across hundreds of tasks, that is tens of thousands of redundant tokens on a single pull, before you have asked a single question.\n\nSecond, it is not safe to scale. There is no real bulk surface, so a mass change is either a hundred careful single calls or a leap of faith. And the moment a tool can touch a hundred tasks at once, the fear is rational. One bad call could reassign a sprint or delete a quarter of a board, and you would have no record of what happened.\n\nA tool you are afraid to run at scale is not really a tool. This plugin was built for exactly that tension. It strips the schema bloat by default, and it puts a hard, explicit confirmation in front of every write, with a capped bulk path, a dry-run kill switch, and a local audit log of every mutation. You get ClickUp control from Claude Code that is fast, cheap, and auditable enough to actually trust.\n\nThe plan is three steps - add the marketplace, install the plugin, paste your own ClickUp token. Then ask Claude to list a workspace and you are working.\n\nWorks with any ClickUp workspace. You supply your own personal token, and every person who uses the plugin supplies their own.\n\n## Install\n\nStandalone, just this plugin.\n\n```\n/plugin marketplace add juliandickie/clickup-plugin\n/plugin install clickup@clickup\n```\n\nOr, if you use the aggregate outfit catalog, the plugin is also listed there and installs the same way with `clickup@outfit`.\n\n## Authentication\n\nYou need a ClickUp personal API token. Create one in ClickUp at Settings - Apps - Generate API Token. It starts with `pk_`. The plugin uses it read-write against your own account, so it can do anything you can do in the ClickUp UI.\n\nSupply the token in any one of these ways. The plugin resolves them in this order.\n\n1. The plugin config prompt - on install Claude Code asks for your ClickUp API token and stores it as a sensitive plugin setting.\n\n2. The `CLICKUP_API_TOKEN` environment variable - set it to the `pk_` token directly, or to a 1Password secret reference like `op://Vault/ClickUp/credential` (requires the `op` CLI installed and signed in).\n\n3. A machine-global file at `~/.config/clickup-plugin/config.toml` containing:\n\n```toml\napi_token = \"pk_your_token_here\"\n```\n\nThe token is never written to any repository, never logged, and never sent anywhere except `api.clickup.com`.\n\n## Token discipline - the core difference\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/token-discipline.png\" alt=\"Token discipline - schemas stripped by default, fetched once on demand\" width=\"100%\"\u003e\n\u003c/p\u003e\n\nClickUp returns every custom field's full option list (`type_config`) on every task. On a list with dozens of options across hundreds of tasks that is tens of thousands of redundant tokens per pull. `list_tasks` and `get_task` strip `type_config` by default. When you genuinely need the option catalogue, call `list_custom_fields` once for the list, or pass `include_field_schema: true` on a specific call. This is the single biggest reason to use this plugin over the stock connector.\n\n## Safety model\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/safety-gates.png\" alt=\"Every write passes through a confirmation gate before it reaches ClickUp\" width=\"100%\"\u003e\n\u003c/p\u003e\n\nEvery write is gated. The write tools refuse to run unless invoked through a `/clickup-*` command that has shown you a confirmation summary and received an explicit yes. There is no path to a silent write.\n\n- Bulk operations via the MCP tool are recommended for up to 10 tasks. Sets larger than 10 use the bundled clickup-batch runner. The MCP tool still hard-refuses more than 100 as a safety backstop.\n\n- A bulk delete needs a second explicit confirmation in addition to the normal one. A 100-task delete cannot happen by accident.\n\n- Set `CLICKUP_DRY_RUN=1` to block all writes globally. In dry-run, write tools return a clearly labelled synthetic response and never touch ClickUp. Reads still work.\n\n- Every mutating call is appended to a local audit log at `~/.local/share/clickup-plugin/audit.log` with a timestamp, the operator, the operation, your confirmation summary, and the affected ids. The audit write is best-effort and never aborts your operation.\n\n## What you get\n\nSkills (these activate on their own when relevant).\n\n- `clickup-task-search` - find and summarise tasks in a list or space.\n\n- `clickup-list-audit` - a canonical snapshot of a list - counts by status, custom-field coverage, relationship density.\n\n- `clickup-bulk-plan` - plan a bulk change and preview it. This skill only ever plans. It never writes.\n\nCommands (explicit, confirmed writes).\n\n- `/clickup-task` - create or update a single task, after showing you a confirmation summary and waiting for your yes.\n\n- `/clickup-bulk-apply` - apply a previously previewed bulk change to up to 10 tasks, after explicit confirmation. Larger sets use the bundled clickup-batch runner. Bulk deletes require a second, separate confirmation.\n\nMCP tools (Claude calls these as needed, with the safety rules above).\n\n- Navigation - `list_workspaces`, `list_spaces`, `list_folders`, `list_lists`, `get_list`.\n\n- Read - `list_tasks` (auto-paginated, schema-stripped by default), `get_task`, `list_custom_fields`.\n\n- Single writes (gated) - `create_task`, `update_task`, `delete_task`, `set_custom_field`, `add_comment`, `set_task_relationship`.\n\n- Bulk (gated, capped) - `bulk_update_tasks`.\n\n## Bulk and large jobs\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/bulk-routing.png\" alt=\"Bulk routing - 10 or fewer through the command, more through the runner, hard cap at 100\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n`bulk_update_tasks` is recommended for sets of up to 10 tasks. For larger sets, or any job you want to run idempotently with a dry-run preview and a written report, use the `clickup-batch` runner. It ships with this plugin (installed as `clickup-batch` on PATH). It is dry-run by default, replaces a marker block in place so re-runs do not duplicate, and paces writes under ClickUp's rate limit. The MCP bulk tool hard-refuses more than 100 tasks as a safety backstop, but the recommended path for more than 10 tasks is the runner.\n\n## The audit log\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/audit-log.png\" alt=\"Every mutation appends one line to a local, never-uploaded audit log\" width=\"100%\"\u003e\n\u003c/p\u003e\n\nEvery mutating call appends one line to `~/.local/share/clickup-plugin/audit.log` - timestamp, operator, operation, your confirmation summary, and the affected task ids. It is local only and never uploaded. The audit write is best-effort. If it fails (a read-only disk, for example) it logs to stderr and your operation still completes. The log is the answer to \"what did this actually change\", and it is yours alone.\n\n## Requirements\n\n- Node 18 or newer (the bundled MCP server runs on it).\n\n- A ClickUp personal token (`pk_`).\n\n## Optional configuration\n\n- `CLICKUP_BASE_URL` - override the API base (defaults to `https://api.clickup.com/api/v2`). An unresolved `${...}` value is ignored and the default is used.\n\n- `CLICKUP_DRY_RUN` - set to `1` to block all writes.\n\n## Notes\n\nThis repository is generated. It is the lean, installable payload built and published from a separate development monorepo. Do not send pull requests here - see CONTRIBUTING.md. Day-to-day usage, examples, and troubleshooting are in USAGE.md.\n\n## License\n\nMIT.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliandickie%2Fclickup-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuliandickie%2Fclickup-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliandickie%2Fclickup-plugin/lists"}