A Model Context Protocol (MCP) server that seamlessly integrates Claude Code's TodoWrite with ClickUp, providing automatic task synchronization, commit tracking, time management, and comprehensive project tracking.
This MCP server REQUIRES:
- โ Claude Code (Desktop App) - Download here
- โ Node.js 18+
- โ ClickUp account with API access
- โ pnpm package manager
Will NOT work with:
- โ Standard Claude (web interface)
- โ Claude API
- โ Other AI assistants
- ๐ Automatic TodoWrite Sync - Tasks created in Claude automatically sync to ClickUp
- ๐จโ๐ฉโ๐งโ๐ฆ Parent-Child Task Relationships - Subtasks with automatic parent status management
- โฑ๏ธ Time Tracking - Automatic time tracking when tasks complete
- ๐ Commit Linking - Links completed tasks to their commits
- ๐ Attachment Support - Upload screenshots, demos, and files to tasks
- ๐ค Auto-Assignment - Tasks automatically assigned to configured user
- ๐ Status Lifecycle - Tracks tasks through custom ClickUp statuses
- ๐ฏ Goal Management - Track project goals and progress
- ๐ Report Generation - Daily and weekly development reports
- Smart Time Tracking - Automatically tracks time from task start to completion
- Task-Commit Relationships - Links tasks to the commits that complete them
- Attachment Uploads - Add screenshots and demos to showcase functionality
- Parent Task Auto-Completion - Parent tasks auto-complete when all subtasks finish
- ClickUp Account with API access
- Claude Code with MCP support
- Node.js 18+ and pnpm
- ClickUp API Key - Get from ClickUp Settings โ Apps โ API Token
# Clone the repository
git clone https://github.com/yourusername/clickmongrel.git
cd clickmongrel
# Install dependencies
pnpm install
# Build the project
pnpm run build
# Test connection
CLICKUP_API_KEY="your_api_key" node dist/cli.js testnpm install -g @clickmongrel/mcp-serverWhen using Claude with ClickMongrel, just say:
- "setup clickmongrel with [Your Workspace Name]"
- "setup clickmongrel in [workspace] in [space name]"
# Basic setup - uses default "Agentic Development" space
node dist/quick-setup.js --workspace "Your Workspace Name"
# Setup with specific space
node dist/quick-setup.js --workspace "Your Workspace" --space-name "Custom Space"
# Setup with space ID (faster)
node dist/quick-setup.js --workspace "Your Workspace" --space-id "90139256288"# Add the MCP server (NEVER put API key in config files!)
claude mcp add clickmongrel \
--env CLICKUP_API_KEY="your_api_key_here" \
-- node /absolute/path/to/clickmongrel/dist/index.js
# Verify it's connected
claude mcp list
# In Claude Code, check status
/mcp| Tool | Description | Example Usage |
|---|---|---|
sync_todos |
Sync TodoWrite items to ClickUp | Automatic when using TodoWrite |
add_attachment |
Upload files to tasks | "Add screenshot to this task" |
create_goal |
Create project goals | "Create goal for authentication feature" |
link_commit |
Link commits to tasks | Automatic on commit |
generate_report |
Create status reports | "Generate weekly report" |
validate_statuses |
Check ClickUp configuration | "Validate clickup statuses" |
your-project/
โโโ .claude/
โโโ clickup/
โโโ config.json # Workspace & list IDs (NO API KEYS!)
โโโ STATUS_SETUP_GUIDE.md # Instructions for ClickUp setup
โโโ templates/ # Commit message templates
โโโ reports/ # Generated reports
โโโ cache/ # Temporary cache
The system will NOT work until you configure custom statuses in ClickUp!
- Go to ClickUp โ Your Space โ Tasks list
- Click โฎ menu โ "Edit statuses"
- Choose "Custom statuses"
- Add these EXACT statuses:
to dofuturein progressfixingcompleted
- Go to ClickUp โ Your Space โ Commits list
- Click โฎ menu โ "Edit statuses"
- Add these EXACT statuses:
comitteddevelopingprototypingrejectedproduction/testingproduction/final
// Claude TodoWrite automatically syncs
TodoWrite([
{ id: "task-1", content: "Setup database", status: "pending" },
{ id: "task-2", content: "Create API", status: "in_progress" }
])// Create tasks with subtasks
TodoWrite([
{ id: "feature", content: "User Authentication", status: "pending" },
{ id: "sub-1", content: "Login form", status: "pending", parent_id: "feature" },
{ id: "sub-2", content: "JWT tokens", status: "pending", parent_id: "feature" }
])
// Parent auto-updates to "in_progress" when subtask starts
// Parent auto-completes when all subtasks complete// Time tracking (automatic)
// When task goes from in_progress โ completed, time is tracked
// Add attachments
mcp.add_attachment({
task_id: "task-1",
file_path: "/path/to/screenshot.png",
file_name: "Dashboard Screenshot"
})
// Tasks automatically link to commits that complete themCLICKUP_API_KEY=pk_xxx # Your ClickUp API key (REQUIRED)
CLICKUP_WORKSPACE_ID=xxx # Optional: Default workspace
CLICKUP_SPACE_ID=xxx # Optional: Default space
LOG_LEVEL=info # Logging level (debug|info|warn|error)- Config files (
.json,.env) - Git repositories
- Project directories
โ ALWAYS pass API keys via:
--envflag when adding MCP- Environment variables at runtime
- Claude Code's secure storage
- Automatically starts when task status โ
in_progress - Stops and records time when status โ
completed - Updates ClickUp with actual time spent
- Each commit creates a task in Commits list
- Completed tasks link to their final commit
- Full development traceability
- Upload screenshots, documents, or any file
- Claude can prompt: "Would you like to add a screenshot?"
- Files attached directly to ClickUp tasks
- Parent tasks auto-update based on subtasks
- Status flows:
pendingโin_progressโcompleted - Automatic completion when all subtasks done
- Configure custom statuses in ClickUp (see Status Configuration above)
- Run
clickmongrel check-statusesto verify
- Run setup again:
node dist/quick-setup.js --workspace "Your Workspace"
- Check API key is correct
- Ensure it's passed via
--envflag, not in config files
- Check statuses are configured
- Verify API key is set
- Ensure workspace/space are correct
- Check logs:
LOG_LEVEL=debug node dist/index.js
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
MIT License - See LICENSE file for details
- Let Claude handle setup: Just tell Claude your workspace name
- Use natural language: "Create a goal for this feature"
- TodoWrite integration: Automatic - just use TodoWrite normally
- Ask for attachments: Claude can prompt for screenshots
- Check progress: "Show sync status" or "Validate statuses"
- This is a PUBLIC project - never reference specific workspaces in code
- API keys must NEVER be stored in project files
- Always use environment variables for sensitive data
- Configure ClickUp statuses before first use
Built for developers using Claude Code with ClickUp integration needs