{"_id":"@d4works/mcp-clickup","_rev":"10-4e3c9201b5a437ee65808cf184218baa","name":"@d4works/mcp-clickup","dist-tags":{"latest":"0.8.0"},"versions":{"0.1.0":{"name":"@d4works/mcp-clickup","version":"0.1.0","keywords":["mcp","clickup","claude","ai","task-management","model-context-protocol"],"license":"MIT","_id":"@d4works/mcp-clickup@0.1.0","maintainers":[{"name":"jirizikmund","email":"dev@d4works.cz"}],"bin":{"mcp-clickup":"dist/index.js"},"dist":{"shasum":"4e2c3ffa1b856769a5269f9386e1e0f900968e3e","tarball":"https://registry.npmjs.org/@d4works/mcp-clickup/-/mcp-clickup-0.1.0.tgz","fileCount":12,"integrity":"sha512-+A9Bvuv+lXVDbI5u0sI7yNy7yie2Xyp/nqvMrKY9+UbEKYYCIKw5aSHgf2X6mf0c6rTXt7Ym4or3yT+a0HCQWw==","signatures":[{"sig":"MEUCIGhJ7Ex6d+QUAW8MJgAMDMCngxYKuq0trIPUlvcRL1jjAiEA8JHqscnfkvLETtH1YfLkZ4zGVwrsuMu9oPHVRTXJRXI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35161},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"cd180ad73b6d0f1127c89d07f360fbb70b03d7d5","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"jirizikmund","email":"dev@d4works.cz"},"_npmVersion":"10.8.2","description":"MCP server for ClickUp task management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-clickup_0.1.0_1768754327909_0.41180006975464156","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@d4works/mcp-clickup","version":"0.1.1","keywords":["mcp","clickup","claude","ai","task-management","model-context-protocol"],"license":"MIT","_id":"@d4works/mcp-clickup@0.1.1","maintainers":[{"name":"jirizikmund","email":"dev@d4works.cz"}],"bin":{"mcp-clickup":"dist/index.js"},"dist":{"shasum":"fa8bfa822fcc9339b9d3b295217757244772d183","tarball":"https://registry.npmjs.org/@d4works/mcp-clickup/-/mcp-clickup-0.1.1.tgz","fileCount":12,"integrity":"sha512-T0HoI4yc4CtjQzri6rRVNLM3NDGtYcdW14qWSJkkSdjWXmDT6apTMf5rOFeFe4yRNaUcpXc9jMaqIfM7Nlr5ww==","signatures":[{"sig":"MEUCIQCPr9yHES34Fni/JKDxH3cUmFd+5/ax3eHLAyAvARAeawIgdkTUilHP/tVyGSoY82M0Sh0kfy7NeBfhtN7DVDvdIUo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35176},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"67280cc85ffa26edf144dce890dfa27d2b40ca5b","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"jirizikmund","email":"dev@d4works.cz"},"_npmVersion":"10.8.2","description":"MCP server for ClickUp task management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-clickup_0.1.1_1768755705280_0.573724353341198","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@d4works/mcp-clickup","version":"0.2.0","keywords":["mcp","clickup","claude","ai","task-management","model-context-protocol"],"license":"MIT","_id":"@d4works/mcp-clickup@0.2.0","maintainers":[{"name":"jirizikmund","email":"dev@d4works.cz"}],"bin":{"mcp-clickup":"dist/index.js"},"dist":{"shasum":"5b597434cce88959ab17494869500a8d7284eb97","tarball":"https://registry.npmjs.org/@d4works/mcp-clickup/-/mcp-clickup-0.2.0.tgz","fileCount":12,"integrity":"sha512-DWRssKWZ6VXb57utBbQ6fZqysT+cPw92ZdrN9MW+hE4ludItkKwS5AxSPJK/Q27svIjeWZdn07GpSde9fWK1Lw==","signatures":[{"sig":"MEYCIQDt9zsAg22QUfZCph0YTe5YN+bKQoLK042o8m68747H7wIhAMlnLUGO28CyMGxfhq22qa9wdmmaEGsGpYAW+fClzXL9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38016},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"8b7091d99e8750b5ff1da1f07e6ac50ec8d5d703","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"jirizikmund","email":"dev@d4works.cz"},"_npmVersion":"10.8.2","description":"MCP server for ClickUp task management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-clickup_0.2.0_1781952976628_0.17243749581518086","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@d4works/mcp-clickup","version":"0.3.0","keywords":["mcp","clickup","claude","ai","task-management","model-context-protocol"],"license":"MIT","_id":"@d4works/mcp-clickup@0.3.0","maintainers":[{"name":"jirizikmund","email":"dev@d4works.cz"}],"bin":{"mcp-clickup":"dist/index.js"},"dist":{"shasum":"c2c2b2bacf374774dfc83b064956708bbe146999","tarball":"https://registry.npmjs.org/@d4works/mcp-clickup/-/mcp-clickup-0.3.0.tgz","fileCount":12,"integrity":"sha512-FatqlG5TylKROcFdSwIrfyPwlQwDi9pWBq83e7WUelqa2JTA7wRHN7YAB/lROsoQz1SrLCxSvAj6dt/R7Dzcng==","signatures":[{"sig":"MEQCIFJa+BF7EHd1UJYiMch09nIxWYy8nLq1Xw2c5zOiFYtrAiA5wXf9UaIccwdTxSk+SFxM77DNB6Bo8236humxMGyubg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43654},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"93a994daab1f0c97cbd4e52b35dd031dc206c305","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"jirizikmund","email":"dev@d4works.cz"},"_npmVersion":"10.8.2","description":"MCP server for ClickUp task management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-clickup_0.3.0_1784026794367_0.258251654650381","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@d4works/mcp-clickup","version":"0.4.0","keywords":["mcp","clickup","claude","ai","task-management","model-context-protocol"],"license":"MIT","_id":"@d4works/mcp-clickup@0.4.0","maintainers":[{"name":"jirizikmund","email":"dev@d4works.cz"}],"bin":{"mcp-clickup":"dist/index.js"},"dist":{"shasum":"aa9bf7b40a0e08a39c5ac9867d711cdc758c2c59","tarball":"https://registry.npmjs.org/@d4works/mcp-clickup/-/mcp-clickup-0.4.0.tgz","fileCount":16,"integrity":"sha512-WHu8MvxDb41GaYVB2iSd8gE06Z0uDQ3gD4AX/XtirVbqjiixAD1eQxDHttfm2dLwYWaEXIAPiuE8snx3O8jeQw==","signatures":[{"sig":"MEUCIB2Kbc7lmfX72MAywkyfp7Is6A95WDAej6mNxEzDbcNwAiEAz0j1hvn9VIyMGOJ2Hc1nAQvniAyCrnNOjgVd/1yJEiI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66071},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"68b24ad9ba66a60f9c2b7b870c3e836c5646e96d","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"jirizikmund","email":"dev@d4works.cz"},"_npmVersion":"10.8.2","description":"MCP server for ClickUp task management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-clickup_0.4.0_1784810017675_0.136410003101324","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@d4works/mcp-clickup","version":"0.5.0","keywords":["mcp","clickup","claude","ai","task-management","model-context-protocol"],"license":"MIT","_id":"@d4works/mcp-clickup@0.5.0","maintainers":[{"name":"jirizikmund","email":"dev@d4works.cz"}],"bin":{"mcp-clickup":"dist/index.js"},"dist":{"shasum":"337d05103d8076351b7c37ad481a136a307b481a","tarball":"https://registry.npmjs.org/@d4works/mcp-clickup/-/mcp-clickup-0.5.0.tgz","fileCount":18,"integrity":"sha512-l1VegQebXzgYr+kZZQlY4YaPnkIpyFFDX0nHALCxIfgx9ksnfLgJylFXffYfHG6aNqSURokZ0n8a/cWuM7Eh+w==","signatures":[{"sig":"MEQCIH31y9iZJKggqGVipMSttPa67HrYgcCSDjdTlN0QoU1gAiB+VKSSPmSphXEnypNjZETRSBN3B0VaoV6A0AnxAN5kuQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89420},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"29c9945c8dd4e947984f8a0c5d8efaf3b0e59981","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"jirizikmund","email":"dev@d4works.cz"},"_npmVersion":"10.8.2","description":"MCP server for ClickUp task management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-clickup_0.5.0_1785304113550_0.6643991924508357","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@d4works/mcp-clickup","version":"0.5.1","keywords":["mcp","clickup","claude","ai","task-management","model-context-protocol"],"license":"MIT","_id":"@d4works/mcp-clickup@0.5.1","maintainers":[{"name":"jirizikmund","email":"dev@d4works.cz"}],"bin":{"mcp-clickup":"dist/index.js"},"dist":{"shasum":"e992b092b7955cd19027522606662c246bbc8cdb","tarball":"https://registry.npmjs.org/@d4works/mcp-clickup/-/mcp-clickup-0.5.1.tgz","fileCount":10,"integrity":"sha512-k2dz9bZ0iX647LVidRz6+pCdKw+Q/QKMemMGcICrS1dZF856dENLsMq85p6DmyT+arqiKiv3qZyQoWCJzVZTNw==","signatures":[{"sig":"MEUCIQDcGqTOyzWPb8yfjjTFdkdtOOVX4pgI9CpX67I4+CMX1gIgMLBnKO4QIGYbjh0Ce4i8mosCVPy8iRv9+RfqyHefXSY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81116},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"2a4114b245e9a2f1907d9ebec186a7a543d29261","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"jirizikmund","email":"dev@d4works.cz"},"_npmVersion":"10.8.2","description":"MCP server for ClickUp task management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-clickup_0.5.1_1785304754764_0.5254837313203262","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@d4works/mcp-clickup","version":"0.6.0","keywords":["mcp","clickup","claude","ai","task-management","model-context-protocol"],"license":"MIT","_id":"@d4works/mcp-clickup@0.6.0","maintainers":[{"name":"jirizikmund","email":"dev@d4works.cz"}],"bin":{"mcp-clickup":"dist/index.js"},"dist":{"shasum":"65f81be75b4ec96a3a320c7fd5a035e44195a4d6","tarball":"https://registry.npmjs.org/@d4works/mcp-clickup/-/mcp-clickup-0.6.0.tgz","fileCount":14,"integrity":"sha512-iYHkotNUmcmjtQ8ng7L2jNhTB3+xcDCB6nJ4fYcR9H8I7itbO8UBy/iM9ouPSw3uthgSCqMqOpUK6hO30HaFvA==","signatures":[{"sig":"MEYCIQCGSkSRdWvBgJ7uw0OGFGuYQ9T0htAUBMu6SxiOMI8fSQIhAJmseAG4UVrm77FMj/iCYJ1ANxVXSauvJxQyKsFNkkDk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126137},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"75a9685dbeb0749596da18c511e17e806dbddc68","scripts":{"dev":"tsc --watch","test":"tsc && node --test dist/*.test.js","build":"tsc","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"jirizikmund","email":"dev@d4works.cz"},"_npmVersion":"10.8.2","description":"MCP server for ClickUp task management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-clickup_0.6.0_1787079570575_0.4217572372592122","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@d4works/mcp-clickup","version":"0.7.0","keywords":["mcp","clickup","claude","ai","task-management","model-context-protocol"],"license":"MIT","_id":"@d4works/mcp-clickup@0.7.0","maintainers":[{"name":"jirizikmund","email":"dev@d4works.cz"}],"bin":{"mcp-clickup":"dist/index.js"},"dist":{"shasum":"6b4910891a63839fdd8c5dd682748acd080ba3f1","tarball":"https://registry.npmjs.org/@d4works/mcp-clickup/-/mcp-clickup-0.7.0.tgz","fileCount":14,"integrity":"sha512-aeBsukLRhOO4+fgoK/T0gG8RLyP9xPrf5ZClnLTKtuafXj6lwNQtueWax523GHV+SYdf0EdZCLEEi7xux4k+AA==","signatures":[{"sig":"MEQCIAQ9A0kWxCdXI3HhxD+AwobAln6lmCE4bT4USdZGGOnHAiAESyawKc+6eRHazalk6HxvxZ/xbhAUqVu2GfhKvtgguA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131075},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"791bb6204980f0c2d07cd51231fb3cff70617a7a","scripts":{"dev":"tsc --watch","test":"tsc && node --test dist/*.test.js","build":"tsc","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"jirizikmund","email":"dev@d4works.cz"},"_npmVersion":"10.8.2","description":"MCP server for ClickUp task management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-clickup_0.7.0_1789224387891_0.5670345145320617","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@d4works/mcp-clickup","version":"0.8.0","description":"MCP server for ClickUp task management","type":"module","main":"dist/index.js","bin":{"mcp-clickup":"dist/index.js"},"scripts":{"build":"tsc","start":"node dist/index.js","dev":"tsc --watch","test":"tsc && node --test dist/*.test.js","prepare":"npm run build"},"keywords":["mcp","clickup","claude","ai","task-management","model-context-protocol"],"license":"MIT","engines":{"node":">=18.0.0"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","dotenv":"^17.2.3"},"devDependencies":{"@types/node":"^20.0.0","typescript":"^5.0.0"},"_id":"@d4works/mcp-clickup@0.8.0","gitHead":"ca15a60b58cd5680619790745894a9e60d265b11","types":"./dist/index.d.ts","_nodeVersion":"20.19.5","_npmVersion":"10.8.2","dist":{"integrity":"sha512-ksCQ88rQZP3dn4hlsK0XxZmB114RqhM5mhDzEyCIGzZiEafNTrCQw7+jWjI5GIbeaFpK5IwniafrnlxjqkYV3Q==","shasum":"aa5935038303eabee40ea42e876d85afcb5d6511","tarball":"https://registry.npmjs.org/@d4works/mcp-clickup/-/mcp-clickup-0.8.0.tgz","fileCount":16,"unpackedSize":138456,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDF5ABZSxrYsd1BRRLxZwu6xCAKmYduIDR4JMhV5/gk2wIgLe12ATn89K1/B9yHT9e+yp3HetdX24pHxYX90rFSFw8="}]},"_npmUser":{"name":"jirizikmund","email":"dev@d4works.cz"},"directories":{},"maintainers":[{"name":"jirizikmund","email":"dev@d4works.cz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-clickup_0.8.0_1789226087603_0.30296587879535"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-18T16:38:47.805Z","modified":"2026-09-12T15:14:47.885Z","0.1.0":"2026-01-18T16:38:48.052Z","0.1.1":"2026-01-18T17:01:45.434Z","0.2.0":"2026-06-20T10:56:16.757Z","0.3.0":"2026-07-14T10:59:54.535Z","0.4.0":"2026-07-23T12:33:37.808Z","0.5.0":"2026-07-29T05:48:33.693Z","0.5.1":"2026-07-29T05:59:14.900Z","0.6.0":"2026-08-18T18:59:30.746Z","0.7.0":"2026-09-12T14:46:28.025Z","0.8.0":"2026-09-12T15:14:47.737Z"},"license":"MIT","keywords":["mcp","clickup","claude","ai","task-management","model-context-protocol"],"description":"MCP server for ClickUp task management","maintainers":[{"name":"jirizikmund","email":"dev@d4works.cz"}],"readme":"# @d4works/mcp-clickup\n\nMCP (Model Context Protocol) server for ClickUp task management. Allows Claude to read task details from ClickUp and help with implementation.\n\n## Features\n\n- Fetch task details (description, comments, attachments, custom fields, etc.)\n- Create tasks and subtasks, with the target list derived from an existing task\n- Support for multiple task ID formats (URL, custom ID, number)\n- Instructions for Claude to analyze tasks before implementation\n\n## Configuration\n\n### 1. Environment Variables\n\n| Variable              | Required | Description                                                             |\n| --------------------- | -------- | ----------------------------------------------------------------------- |\n| `CLICKUP_API_TOKEN`   | Yes      | Your ClickUp API token                                                  |\n| `CLICKUP_TEAM_ID`     | Yes      | Your ClickUp team/workspace ID                                          |\n| `CLICKUP_TASK_PREFIX` | No       | Task prefix for number-only input (e.g., \"PROJ\")                        |\n| `CLICKUP_SPACE_ID`    | No       | Numeric space ID — skips the space lookup done by `assign-release`      |\n| `CLICKUP_DEFAULT_LIST_ID` | No   | List ID `create-task` falls back to when the call names no target list  |\n| `CLICKUP_READONLY`    | No       | `1` or `true` — register only read tools and refuse every write to ClickUp (see [Read-only mode](#5-read-only-mode)) |\n| `CLICKUP_ALLOWED_TOOLS` | No     | Comma-separated allowlist of tool names to register; combined with `CLICKUP_READONLY` as an intersection |\n\n### 2. Get Your API Token\n\n1. Open ClickUp → Click your avatar → **Settings**\n2. Go to **Apps** section\n3. Generate or copy your **API Token**\n\n### 3. Find Your Team ID\n\n1. Open ClickUp → Go to any workspace\n2. Look at the URL: `https://app.clickup.com/{TEAM_ID}/...`\n3. The number in the URL is your Team ID\n\n### 4. Create MCP Configuration\n\nCreate `.mcp.json` in your project root.\n\nFirst, store your API token in a local file that's gitignored:\n\n```bash\necho \"export CLICKUP_API_TOKEN=pk_your_token_here\" >> .claude/.env.local\n```\n\nThen configure `.mcp.json` to source this file before running the server:\n\n```json\n{\n  \"mcpServers\": {\n    \"clickup\": {\n      \"command\": \"bash\",\n      \"args\": [\n        \"-c\",\n        \"export $(cat .claude/.env.local | xargs) && npx -y @d4works/mcp-clickup\"\n      ],\n      \"env\": {\n        \"CLICKUP_TEAM_ID\": \"your_team_id\",\n        \"CLICKUP_TASK_PREFIX\": \"PROJ\"\n      }\n    }\n  }\n}\n```\n\n> **Note:** If you have `CLICKUP_API_TOKEN` exported in your global `~/.zshrc` or `~/.bashrc`, you can simplify the command to just `npx -y @d4works/mcp-clickup`.\n\n### 5. Read-only mode\n\nFor an agent that may look things up in ClickUp but must never change anything, start the\nserver with `CLICKUP_READONLY=1`:\n\n```json\n{\n  \"mcpServers\": {\n    \"clickup\": {\n      \"command\": \"bash\",\n      \"args\": [\n        \"-c\",\n        \"export $(cat .claude/.env.local | xargs) && npx -y @d4works/mcp-clickup\"\n      ],\n      \"env\": {\n        \"CLICKUP_TEAM_ID\": \"your_team_id\",\n        \"CLICKUP_TASK_PREFIX\": \"PROJ\",\n        \"CLICKUP_READONLY\": \"1\"\n      }\n    }\n  }\n}\n```\n\nIn read-only mode:\n\n- Only the read tools are registered: `test-connection`, `get-task`, `get-task-statuses`,\n  `get-release-options`, `find-list`. The write tools (`create-task`, `set-task-status`,\n  `set-task-release`, `rename-task`, `append-task-description`, `add-task-comment`,\n  `assign-release`, `remove-release`) are not listed at all, so the client never sees them.\n  A call to one of them by name is answered with an error.\n- As a second line of defence, the HTTP client refuses every request to the ClickUp API\n  other than `GET` with a `read-only mode` error, so nothing can be written even if a tool\n  were mis-classified.\n- On start the server logs the mode and the active tools to stderr (never the token).\n\n`CLICKUP_ALLOWED_TOOLS` narrows the set further, e.g. `CLICKUP_ALLOWED_TOOLS=get-task,find-list`.\nWhen both variables are set the result is the intersection — the allowlist can never\nre-enable a write tool in read-only mode. Names that match no tool are reported as a\nwarning on stderr and ignored.\n\n## Usage\n\nAsk Claude to work on a task using any of these formats:\n\n```\n> Work on task ABC-123\n> Work on task 123\n> Work on task https://app.clickup.com/t/12345/ABC-123\n```\n\nClaude will:\n\n1. Fetch task details from ClickUp\n2. Analyze the task (description, comments, attachments)\n3. Propose an implementation plan\n4. Wait for your approval before writing code\n\n## Available Tools\n\n### `test-connection`\n\nTest connection to ClickUp API.\n\n### `get-task`\n\nGet task details from ClickUp (description, status, comments, attachments, custom fields, checklists, etc.).\n\n**Parameters:**\n\n- `taskId` (string, required): Task URL, custom ID (ABC-123), or number\n\n### `create-task`\n\nCreate a new task (or subtask) in ClickUp. Only used with explicit user confirmation.\n\n**The fastest way to use it is `likeTaskId`:** point at any existing task in the right list — the task currently being worked on, for instance — and the new task is filed next to it. No list ID, no extra configuration, nothing to look up.\n\n**Parameters:**\n\n- `name` (string, required): Task title\n- `description` (string, optional): Task body, written as markdown\n- `listId` (string, optional): Target list ID (look one up with `find-list`)\n- `likeTaskId` (string, optional): Existing task whose list becomes the target — URL, custom ID (ABC-123), or number\n- `parentTaskId` (string, optional): Existing task to hang the new one under as a subtask — URL, custom ID (ABC-123), or number\n- `status` (string, optional): Initial status; must match one of the target list's statuses\n- `assignees` (string[], optional): E-mail addresses or numeric user IDs\n- `tags` (string[], optional): Tag names — ClickUp only attaches tags that already exist in the space\n- `priority` (number, optional): 1 = urgent, 2 = high, 3 = normal, 4 = low\n\n**Target list** is taken from the first source that is given, in this order:\n\n1. `parentTaskId` — a subtask always lives in its parent's list, so an additional `listId` is ignored and reported\n2. `listId`\n3. `likeTaskId`\n4. `CLICKUP_DEFAULT_LIST_ID` from the environment\n\nWhen none of them is available, nothing is created and the error names all four.\n\n**Behavior:**\n\n- The answer always carries the **custom ID** (ABC-123), the internal ID and the URL — the custom ID is what branch names, commit prefixes and time entries key off. When the space does not generate one, the answer says so outright instead of leaving it blank\n- Everything checkable is checked before the task exists: an invalid status fails with the list's valid statuses, an unknown assignee e-mail fails with the workspace members, and neither creates anything\n- The description is sent as `markdown_content`, so headings, lists and links survive. A workspace that rejects the field falls back to the plain-text `description` and the answer says the formatting was lost\n- A custom ID passed as `parentTaskId` is translated to the internal ID the API requires\n- A rate-limited call (HTTP 429) is retried once, honoring `Retry-After`\n\n### `find-list`\n\nList the team's spaces, folders and lists with their IDs, so a `listId` can be found without opening ClickUp in a browser. Only needed when no existing task can serve as `likeTaskId` — a brand new project with no tasks yet, typically.\n\n**Parameters:**\n\n- `spaceId` (string, optional): Restrict the walk to a single space\n- `query` (string, optional): Case-insensitive substring matched against space, folder and list names. A hit on a space or folder name keeps all the lists below it\n\nA space that cannot be read is reported in place, so restricted access to one space does not hide the rest of the workspace.\n\n### `get-task-statuses`\n\nGet available statuses for a task. Use this before updating status to see valid options.\n\n**Parameters:**\n\n- `taskId` (string, required): Task URL, custom ID (ABC-123), or number\n\n### `set-task-status`\n\nSet the status of a ClickUp task. Only used with explicit user confirmation.\n\n**Parameters:**\n\n- `taskId` (string, required): Task URL, custom ID (ABC-123), or number\n- `status` (string, required): New status name (must match one of the available statuses)\n\n### `get-release-options`\n\nGet available Release dropdown options for a task. Use this to see valid values before setting Release.\n\n**Parameters:**\n\n- `taskId` (string, required): Task URL, custom ID (ABC-123), or number\n- `fieldName` (string, optional): Name of the dropdown field (default: \"Release\")\n\n### `set-task-release`\n\nSet the Release dropdown value on a ClickUp task. Only used with explicit user confirmation.\n\n**Parameters:**\n\n- `taskId` (string, required): Task URL, custom ID (ABC-123), or number\n- `release` (string, required): Release value to set (must match one of the available options)\n- `fieldName` (string, optional): Name of the dropdown field (default: \"Release\")\n\n### `rename-task`\n\nRename an existing ClickUp task. Changes the title only — the description, status, tags and custom fields stay untouched. The new name is written verbatim, so include any reference prefix (e.g. `[ABC-123] `) yourself. The response shows the old and the new name. Only used with explicit user confirmation.\n\n**Parameters:**\n\n- `taskId` (string, required): Task URL, custom ID (ABC-123), or number\n- `name` (string, required): New task name (non-empty)\n\n### `append-task-description`\n\nAppend markdown content below the existing description of a ClickUp task. The existing description is always kept — there is no replace mode. Only used with explicit user confirmation.\n\n**Parameters:**\n\n- `taskId` (string, required): Task URL, custom ID (ABC-123), or number\n- `content` (string, required): Markdown content to append below the current description\n\n### `add-task-comment`\n\nAdd a comment to a ClickUp task. Only used with explicit user confirmation.\n\n**Parameters:**\n\n- `taskId` (string, required): Task URL, custom ID (ABC-123), or number\n- `comment` (string, required): The comment text to add to the task\n- `notifyAll` (boolean, optional): Notify all task members about the comment (default: false)\n\n### `assign-release`\n\nTag one or more tasks with a release version and optionally move them to a status. Only used with explicit user confirmation.\n\nThe version is stored as a **space tag**, not as a dropdown custom field — the public ClickUp API cannot add options to a dropdown, but it can create tags. The tag is created on the space the first time a version is used, then attached to each task.\n\n**Parameters:**\n\n- `version` (string, required): Release version used verbatim as the tag name — case and spaces matter (e.g. `\"v1.17.4 (100)\"`)\n- `taskIds` (string[], required, min 1): Task URLs, custom IDs (ABC-123), or numbers\n- `status` (string, optional): Status to set on every task (must match one of the available statuses)\n- `tagColor` (object, optional): `{ bg, fg }` as 6-digit hex including `#`. Applied only when the tag is created for the first time (defaults: `#4A78FF` / `#FFFFFF`)\n\n**Behavior:**\n\n- Idempotent — re-running the same call neither duplicates the space tag nor the tag on a task\n- Errors are collected per task, so one bad identifier does not abort the rest of the release; the call is only reported as failed when every task fails\n- The space is resolved from the first task that can be read, unless `CLICKUP_SPACE_ID` is set. All tasks in one call are expected to live in the same space — a task from another space is reported as failed, because its space does not have the tag\n\n### `remove-release`\n\nThe counterpart to `assign-release`: it detaches a release version tag from tasks instead of attaching it. Use it when a version was tagged by mistake — a failed build that never shipped, a typo in the version, or a re-tag that left both the old and the new version on the task. Only used with explicit user confirmation.\n\n`assign-release` deliberately never replaces older version tags. Deleting them as a side effect of a write would mean a mis-derived commit range could destroy correct tags, so removal is this separate, explicit tool.\n\n**Parameters:**\n\n- `version` (string, required): Release version matched verbatim against the tag name — case and spaces matter (e.g. `\"v1.17.4 (101)\"`)\n- `taskIds` (string[], required, min 1): Task URLs, custom IDs (ABC-123), or numbers\n- `deleteTagIfUnused` (boolean, optional, default `false`): After removing the tag from the listed tasks, also delete it from the space — but only when no task uses it any more\n\n**Behavior:**\n\n- By default the tag is only detached from the listed tasks and stays available in the space\n- Idempotent — re-running the same call changes nothing and reports every task as `removed: false` with a reason\n- A tag that is not on a task is not an error: that task reports `removed: false` with `reason: \"tag not present on task\"` and the rest of the batch continues\n- A tag that does not exist in the space is not an error either — nothing is changed and the result says so\n- Errors are collected per task, so one bad identifier does not abort the rest; the call is only reported as failed when every task fails\n\n**Deleting the tag from the space** is a separate, off-by-default step because it is irreversible and strips the tag from every task in the space at once. It only happens when all of the following hold, and the result explains which one blocked it otherwise:\n\n- Every task in the call succeeded — an unreadable task might still carry the tag\n- A search across the space (including closed and archived tasks) finds no other task using it, after subtracting the tasks this call just untagged\n\n## License\n\nMIT\n","readmeFilename":"README.md"}