GitHub and ClickUp setup#
Contents#
- Choose the integration layer
- Enable native activity links
- Optional ClickUp automations
- Use the workflow tools
- Use host MCPs directly
- Ownership and continuous operation
- Verify and troubleshoot
Choose the integration layer#
| Layer | What it does | Setup |
|---|---|---|
This repository's CLI / clickup_work MCP |
Creates a GitHub target before each subtask, records backlinks, mirrors progress, reconciles discussion snapshots, gates completion | Install cu-work, gh, and the selected ClickUp runtime; bind the project |
| Host ClickUp + GitHub MCPs | Agents perform the same workflow with available service tools | Authenticate both MCPs; load the shared skills |
| Native ClickUp GitHub connection | Associates GitHub activity with tasks outside an agent session | Workspace/repository administrator setup below |
| Native GitHub Automations | Runs selected task/issue actions on configured events | Optional ClickUp plan feature below |
Connecting an MCP authenticates an agent. It does not prove the native GitHub connection or an automation rule is enabled. Our remote URL markers are portable crosslinks; they are not an API for installing native integrations.
Enable native activity links#
The native GitHub integration is available on every ClickUp plan. Repository admins add repositories; ClickUp owners/admins configure Workspace connections and Space mappings. Guests and limited members cannot use it.
- In ClickUp, open Workspace avatar → Apps → GitHub → Workspace → Connect. Authorize the intended GitHub account and select/save repositories.
- In GitHub's App Center page, open Settings → Add repo; select the working repo.
- Select that repo → + Add Space; choose the Space containing the bound tasks.
- Teammates needing personal commands connect their own account under Apps → GitHub → Connect.
- Include
CU-TASK_IDin branch names, commits, or PR descriptions. Our PR managed block includes it. Check the task's GitHub panel/activity feed.
Use an actual native ID, for example CU-86native; Closes #86native is not a
ClickUp reference. A pasted URL alone does not replace the repository/Space
mapping. See ClickUp's integration instructions for screenshots
and account-specific authorization details.
Optional ClickUp automations#
GitHub Automation integrations require Business or above, the Automation ClickApp enabled by a Workspace owner/admin, and repository admin permission. Existing-task actions require an already linked commit, branch, or PR.
From the target List/Folder/Space: robot icon → Create Automation → GitHub. Connect the account, choose the exact repository, configure trigger/conditions/ action, and create the rule. Branch and label conditions are case-sensitive.
Suggested team rules:
| Trigger | Condition | Action policy |
|---|---|---|
| Pull Request Linked | Base equals the binding's base | Add a review reminder; agent decides readiness |
| Pull Request Review Created/Updated | Intended repository/branches | Notify the task owner |
| CI/CD Status Changed | Intended repository/branches | Record a check reminder; preserve failed/pending state |
| Pull Request Merged | Intended base | Request acceptance verification; agent runs the completion gate |
| Task created | Explicit intake scope | Optional Create Issue action, only if agents are not also creating that issue |
Choose one issue-creation owner to prevent duplicates. Avoid automatic Done on merge: merge alone does not verify task acceptance. See ClickUp's automation instructions for available triggers/actions and conditions.
Use the workflow tools#
Run commands from a bound worktree with each teammate's own authentication.
The helper executes GitHub operations through gh, even when called through
our MCP. Host GitHub MCP calls are a separate agent-driven path.
# Default: create/reuse an issue, then a child with the issue URL already present.
cu-work --project-dir /absolute/project subtask --task 86native \
--title 'Validate response' --description-file /tmp/acceptance.md \
--key '86native:validate:v1'
# Reuse an existing issue or PR; no additional issue is created.
cu-work --project-dir /absolute/project subtask --task 86native \
--title 'Test edge cases' --description-file /tmp/acceptance.md \
--github-target https://github.com/OWNER/REPO/issues/42 --key '86native:edges:v1'
# Associate an existing task, or use --target new-issue --title '...' to create one.
cu-work --project-dir /absolute/project link-github --task 86child \
--target https://github.com/OWNER/REPO/issues/42 --key '86child:issue42:v1'
# Link every implementation PR, preserving its existing description.
cu-work --project-dir /absolute/project link-pr --task 86child --pr 43 --key '86child:pr43:v1'
# Linked progress is posted on ClickUp and associated issue/PR discussions.
cu-work --project-dir /absolute/project progress --task 86child \
--message-file /tmp/progress.md --key '86child:tests:v1'
# Import human discussion snapshots from either side; repeat safely.
cu-work --project-dir /absolute/project sync-comments --task 86child
# Or: --direction to-clickup / --direction to-github
Use an explicit repository URL as --github-target for repository-level
planning that needs no issue. Such tasks have no GitHub discussion thread;
progress contains the repository URL, and comment sync requires an issue/PR.
| CLI | Workflow MCP tool |
|---|---|
subtask |
create_bound_subtask (github_target optional) |
link-github |
link_github_target (target, optional new-issue title/description) |
link-pr |
link_pull_request |
progress |
record_progress |
sync-comments |
sync_task_comments (direction optional) |
phase |
set_task_phase |
Supply the absolute project_dir and native task ID to MCP tools. Every new
subtask gets a verified target. If no target exists, the default creates an
issue in the bound repository first. If creating the child/backlink fails,
preserve the successful issue and resume with identical arguments/key. Read
pending receipts and remote markers before any uncertain retry.
A nonexistent issue/PR URL is an error, not permission to invent that number.
Use new-issue to allocate an issue. Create a PR through gh/GitHub MCP only
after a branch with meaningful changes exists, then link it. Missing repository
creation requires explicit owner/name/visibility and a new binding; never
silently create or redirect work to a different repository.
Use host MCPs directly#
Without the local executables, load clickup-github and clickup-work-task.
Discover current tool schemas, then:
- Verify task identity, workspace, home list, ancestry, repository, and base.
Some official compact task responses omit
team_id; verify the explicit Workspace via hierarchy and the task's Space/List rather than assuming it from the URL. Request descriptions/subtasks/status definitions when needed. Readtext_contentfor plain markers when returned Markdown escapes brackets or wraps URLs; the live official-MCP pilot exhibited that formatting. - Search/read the complete relevant issue/child/comment sets. Create or reuse
the GitHub target before creating the ClickUp subtask. Include
[cu-work-github:TARGET_URL]in its description. - Preserve the issue/PR body and add a task-specific block containing the
ClickUp URL,
CU-TASK_ID, and objective. Record the GitHub URL on ClickUp. - Include source URLs/IDs and stable provenance markers in mirrored comments; skip generated mirrors. Reconcile each service separately after failures.
- Enforce the same merged-PR/latest-head-CI/acceptance gate before Done.
The official ClickUp tool inventory exposes task/comment operations. It does not currently document tools for installing native GitHub connections or automation rules. Its task-link tools relate ClickUp tasks to each other. Use the setup steps above for native integration and automation configuration.
Ownership and continuous operation#
| Data | Authority / conflict rule |
|---|---|
| Task objective and acceptance criteria | ClickUp; do not replace it with an issue description |
| Code, reviews, CI, merge state | GitHub; link original evidence |
| Task-to-artifact identity | Remote managed markers plus verified canonical URLs |
| Issue/PR human body text | Preserve; change only our task-specific block |
| Discussion | Source comment remains authoritative; copies carry provenance |
| Completion | Explicit agent verification; a closed issue alone is insufficient |
sync-comments runs when invoked. It imports GitHub issue comments, PR
conversation comments, submitted reviews, and inline review comments; it
exports ClickUp top-level comments. Mirrored comments are snapshots with
source links/IDs. An edited source produces a new content revision, while
deletions are not propagated. It does not synchronize arbitrary task fields,
assignees, labels, or status in both directions.
Host agents should use the shared provenance format so helper reconciliation can recognize their existing copies after handoff.
The reviewed local ClickUp backends expose a single comment page. The helper stops at 25 comments instead of assuming a complete history. Use a host MCP with explicit pagination and fetch threaded replies there when needed. GitHub discussion reads paginate completely. Replies to pending/unsubmitted GitHub reviews are not available until the service exposes them.
Run reconciliation at session start and handoff. Native integration continues activity links while agents are offline; configured native automations handle their selected events. Neither installing these skills nor authenticating MCPs starts an always-on, bidirectional comment synchronizer. Teams needing that must deploy a separate authenticated event worker or scheduler, with durable receipts, one writer per task, echo suppression, and the same scope/evidence rules. No such worker or webhook is installed by this package.
Verify and troubleshoot#
- Test one child with an issue; verify the target exists before the child, both URLs are recorded, and original issue/PR text remains intact.
- Repeat the same operation key, then repeat comment reconciliation. Confirm no duplicates. Test a partial failure without replaying the successful side.
- Add a
CU-TASK_IDbranch/PR reference; verify native activity separately. If absent, check repository/Space mapping, account permissions, and ID format. - If an expected tool is absent, reload/select that plugin in the actual agent session. Another editor's sign-in does not authenticate this environment.
- If GitHub reads succeed but writes return
403 Resource not accessible by integration, check the app installation for the repository owner account or organization, not only the signed-in user's personal installation. The wbpip pilot was fixed by installing the app onPIP-Technical-Team. Select the intended repositories and review requested permissions/organization approval. User-level repository admin permission does not establish app access. See GitHub's installation settings guide. - Keep failed CI, draft/open/unmerged PRs, and unverified acceptance out of Done.
- Sharing comments also shares their content with the bound repository's audience. Bind the intended project and use directional sync where appropriate.
Verified source pages: 2026-10-19. UI and plan details can change; consult the linked primary instructions when setting up a Workspace.