Fast ClickUp task and time tracking via FGP daemon. Use when user needs to manage tasks, track time, update status, or work with ClickUp lists. Triggers on "clickup task", "create clickup", "clickup list", "time tracking", "clickup status".
Resources
1Install
npx skillscat add fast-gateway-protocol/fgp-skills/clickup-daemon Install via the SkillsCat registry.
FGP ClickUp Daemon
Fast ClickUp task management using a persistent daemon architecture. Eliminates cold-start latency from spawning API clients on every request.
Why FGP?
FGP daemons maintain persistent connections and avoid cold-start overhead. Instead of spawning a new API client for each request, the daemon stays warm and ready.
Benefits:
- No cold-start latency
- Connection pooling
- Persistent authentication
Installation
# Via Homebrew (recommended)
brew tap fast-gateway-protocol/fgp
brew install fgp-clickup
# Via npx
npx add-skill fgp-clickupQuick Start
# Set your ClickUp API token
export CLICKUP_API_TOKEN="pk_..."
# Start the daemon
fgp start clickup
# List tasks in a list
fgp call clickup.list_tasks --list_id "12345"
# Create a task
fgp call clickup.create_task --list_id "12345" --name "Review code" --priority 2Authentication
Get your API token from ClickUp:
- Go to Settings > Apps
- Click "Generate" under API Token
- Copy the token (starts with
pk_) - Set
CLICKUP_API_TOKENenvironment variable
For OAuth2 apps, configure CLICKUP_CLIENT_ID and CLICKUP_CLIENT_SECRET.
Methods
Tasks
clickup.get_task- Retrieve a task by IDtask_id(string, required): The task IDinclude_subtasks(boolean, optional): Include subtasks
clickup.create_task- Create a new tasklist_id(string, required): List ID to create task inname(string, required): Task namedescription(string, optional): Task description (markdown supported)assignees(array, optional): User IDs to assignpriority(number, optional): 1=urgent, 2=high, 3=normal, 4=lowdue_date(number, optional): Unix timestamp in millisecondsstatus(string, optional): Status nametags(array, optional): Tag names to add
clickup.update_task- Update task fieldstask_id(string, required): The task IDname(string, optional): New namedescription(string, optional): New descriptionstatus(string, optional): New statuspriority(number, optional): New priorityassignees(object, optional):{add: [...], rem: [...]}
clickup.delete_task- Delete a tasktask_id(string, required): The task ID
clickup.list_tasks- List tasks in a listlist_id(string, required): The list IDarchived(boolean, optional): Include archived taskspage(number, optional): Page numberstatuses(array, optional): Filter by status namesassignees(array, optional): Filter by assignee IDs
Subtasks
clickup.create_subtask- Create a subtaskparent_id(string, required): Parent task IDname(string, required): Subtask nameassignees(array, optional): User IDs
clickup.get_subtasks- Get subtasks of a tasktask_id(string, required): Parent task ID
Comments
clickup.add_comment- Add a comment to a tasktask_id(string, required): The task IDcomment_text(string, required): Comment contentassignee(number, optional): Assign comment to usernotify_all(boolean, optional): Notify all assignees
clickup.get_comments- Get task commentstask_id(string, required): The task ID
Time Tracking
clickup.start_timer- Start time tracking on a tasktask_id(string, required): The task ID
clickup.stop_timer- Stop the running timer- No parameters required
clickup.add_time_entry- Add manual time entrytask_id(string, required): The task IDduration(number, required): Duration in millisecondsstart(number, optional): Start time (Unix ms)description(string, optional): Time entry description
clickup.get_time_entries- Get time entries for a tasktask_id(string, required): The task ID
Workspaces & Lists
clickup.list_workspaces- List all accessible workspaces- No parameters required
clickup.list_spaces- List spaces in a workspaceteam_id(string, required): Workspace/team ID
clickup.list_folders- List folders in a spacespace_id(string, required): Space ID
clickup.list_lists- List lists in a folder or spacefolder_id(string, optional): Folder IDspace_id(string, optional): Space ID (for folderless lists)
Custom Fields
clickup.set_custom_field- Set a custom field valuetask_id(string, required): The task IDfield_id(string, required): Custom field IDvalue(any, required): Field value
Examples
Create a task with full details
fgp call clickup.create_task \
--list_id "12345" \
--name "Implement OAuth login" \
--description "Add Google and GitHub OAuth providers\n\n## Acceptance Criteria\n- Users can sign in with Google\n- Users can sign in with GitHub" \
--priority 2 \
--assignees '[123456]' \
--due_date 1737417600000 \
--tags '["backend", "auth"]'Track time on a task
# Start working
fgp call clickup.start_timer --task_id "abc123"
# ... do work ...
# Stop timer
fgp call clickup.stop_timer
# Or add manual entry
fgp call clickup.add_time_entry \
--task_id "abc123" \
--duration 3600000 \
--description "Code review and testing"Move task through workflow
# Update status to "In Progress"
fgp call clickup.update_task --task_id "abc123" --status "in progress"
# Add a comment
fgp call clickup.add_comment --task_id "abc123" --comment_text "Started implementation"
# Mark complete
fgp call clickup.update_task --task_id "abc123" --status "complete"Get all tasks assigned to me
# First get your user ID from workspace members
TEAMS=$(fgp call clickup.list_workspaces)
# Then filter tasks
fgp call clickup.list_tasks \
--list_id "12345" \
--assignees '[YOUR_USER_ID]' \
--statuses '["open", "in progress"]'Error Handling
The daemon returns structured errors:
{
"ok": false,
"error": {
"code": "ITEM_013",
"message": "Task not found"
}
}Common error codes:
OAUTH_017- Invalid or expired tokenITEM_013- Task/list not foundTEAM_025- Insufficient permissionsRATE_LIMIT- Too many requests (daemon handles backoff)