Skip to content
KheAi
Go back

MCP Setup - GitHub, ClickUp & Lark Integration

Edit page

What This Part Covers

For how these tools fit into your actual daily workflow — morning standup to merged PR — see Part 24.


The Problem Without MCP

Your development environment is fragmented:

Terminal (code) ←──── context switch ────→ Browser (GitHub PRs)
                                          ↕ context switch
                                     Browser (ClickUp tickets)
                                          ↕ context switch
                                     Browser (Lark messages)

Every context switch costs focus. With MCP servers connected to Claude Code:

Terminal (claude session)
  ├── reads your code
  ├── checks GitHub PRs and CI status
  ├── updates ClickUp ticket status
  └── posts a Lark message to the team

One context. Everything from the terminal.


1. What MCP Is

MCP = Model Context Protocol. A standard interface that lets Claude connect to external tools and services. Each MCP server exposes a set of tools (functions) that Claude can call — just like Read, Edit, or Bash.

When you run claude, Claude Code reads .claude/mcp.json and connects to every server listed. Once connected, those tools are available in the session with no extra configuration.


2. GitHub MCP

2.1 Why Add It

Without GitHub MCP:

You: "Create a PR for this branch"
Claude: "Here's the gh command to run: gh pr create --title..."
You: (copy, paste, run, fill template manually)

With GitHub MCP:

You: "Create a PR for feat/product-module.
     Title: feat(product): add product CRUD module
     Fill the PR template. Link to ticket CU-1234."
Claude: (creates PR directly, fills template, returns PR URL)

Other things GitHub MCP enables from inside your Claude session:

2.2 Setup

Step 1: Create a GitHub Personal Access Token

github.com → Settings → Developer settings
→ Personal access tokens → Fine-grained tokens → Generate new token

Permissions needed:
- Contents: Read and Write
- Pull requests: Read and Write
- Issues: Read and Write
- Actions: Read (for CI status)

Step 2: Export to your shell profile

# ~/.zshrc
export GITHUB_TOKEN=ghp_your_token_here
source ~/.zshrc

Step 3: Add to .claude/mcp.json

{
  "mcpServers": {
    "gitnexus": {
      "command": "node",
      "args": [".gitnexus/run.cjs", "mcp"]
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
      }
    }
  }
}

Never hardcode the token in mcp.json. The ${GITHUB_TOKEN} syntax reads from your shell environment at runtime — the file itself contains no secret and is safe to commit.

Step 4: Verify

claude
/mcp
# → github: connected ✓

2.3 Daily GitHub Prompts

Check your PR queue:

"Show me all open PRs in this repo that need my review."

Check CI on a specific PR:

"Check the CI status on PR #42. Which checks are failing?"

Create a PR from the current branch:

"Open a PR for feat/product-module.
Title: feat(product): add product CRUD module
Body: fill the PR template from .github/PULL_REQUEST_TEMPLATE.md
Link to ticket CU-1234."

Read review comments and plan fixes:

"Show me all review comments on PR #42. Summarize what needs fixing."

Merge when approved:

"PR #42 is approved with all checks green. Squash merge and delete the branch."

Create an issue from a code review finding:

"Create a GitHub issue:
Title: Missing @Index on userId in TodoEntity
Body: Found during code review of PR #42. The userId FK column is missing @Index()
which will cause slow queries on getTodos at scale.
Labels: bug, performance"

3. ClickUp MCP — Primary Project Management

ClickUp is the primary tool for sprint planning, ticket tracking, and daily task management. Use it for every ticket lifecycle: unstarted → in progress → in review → done.

3.1 Setup

ClickUp MCP — built-in, not a local server: Unlike GitHub MCP (which runs a local server binary), ClickUp integration with Claude is handled through Claude’s built-in OAuth connection panel. In Claude Desktop or Claude Code web, go to Settings → Connections → ClickUp, authenticate with OAuth. Once connected, Claude can read and create ClickUp tasks without any mcp.json entry. There is no @modelcontextprotocol/server-clickup npm package — any such config will silently fail.

3.2 Daily ClickUp Prompts

Morning sprint check:

"Show me all ClickUp tasks assigned to me in the current sprint that aren't started."

Start a ticket:

"Mark CU-1234 as in progress."

Create a subtask:

"Create a subtask under CU-1234: 'Write unit tests for ProductService',
assign to me, due this Friday."

Log progress during development:

"Add a comment to CU-1234:
'Migration created and tested locally. PR up for review at #PR-URL.'"

Find what’s blocking review:

"Show all ClickUp tasks with status 'in review' in the Backend space."

Close a ticket after merge:

"Mark CU-1234 as complete."

Technical debt tracking:

"Create a ClickUp task in the Backend space:
Title: Add @Index to userId on ProductEntity
Type: chore
Description: Missing index identified during PR #45 review. getTodos will full-scan
when tenants exceed ~10k products.
Priority: medium"

4. Lark MCP — Team Communications

Use Lark MCP in two scenarios:

Scenario A — Your team uses Lark as the primary communication tool (not Slack/Teams). Lark replaces ClickUp here as the team coordination layer. You’d use it for tasks, docs, and messages in one place.

Scenario B — Your team uses ClickUp for tickets but Lark for chat and announcements. Use both MCPs: ClickUp for ticket lifecycle, Lark for team-facing notifications (PR ready for review, deploy complete, incident updates).

4.1 Setup

Lark MCP is available as a built-in Claude integration. In a Claude session, click “Add integration” in the MCP panel and complete the OAuth flow in your browser. No manual mcp.json entry required.

4.2 Daily Lark Prompts

Notify the team a PR is ready:

"Post a message to the #backend-team channel:
'Product module PR ready for review: <PR URL>. Needs 1 approval.'"

Announce a deploy:

"Post to #deployments:
'v1.4.2 deployed to production at 3:45pm. Product module is live.
Migration completed cleanly. Monitoring for 10 minutes.'"

Create a technical doc:

"Create a Lark doc titled 'Product Module Architecture Decision'
with this content: <paste>"

Find a previous message:

"Find the message in #deployments from today about the staging deploy."

Schedule a meeting:

"Schedule a Lark meeting with @alex for tomorrow at 3pm:
'Sprint review — 30 minutes.'"

4.3 ClickUp vs Lark — Decision Table

ClickUpLark
Best forSprint tracking, ticket lifecycle, time loggingTeam messaging, docs, announcements
Use when…Your PM lives in ClickUpYour team communicates in Lark
Ticket managementPrimary — full sprint/task supportSecondary — basic tasks only
Team commsMinimalPrimary
Common togetherTrack work in ClickUpNotify the team in Lark

For most teams using this stack: ClickUp for tickets, Lark for notifications. They complement rather than compete.


PriorityMCPReason
Day 1gitnexusImpact analysis — required before editing any symbol
Day 1githubPR creation and CI checks without a browser
Week 1clickupTicket updates and sprint tracking from the terminal
Week 2larkTeam notifications, docs, and comms if your team uses Lark

What NOT to add:


Troubleshooting MCP Setup

GitHub MCP: Server not found / ENOENT
The npx command is not in $PATH for the subprocess. Provide the absolute path: use which npx in your terminal to find it, then replace "npx" in mcp.json with the full path (e.g. /Users/yourname/.nvm/versions/node/v20.x.x/bin/npx).

Changes to mcp.json not taking effect
Claude Code reads mcp.json at startup only. After any change, quit Claude Code completely and restart — a hot-reload is not triggered.

GitHub token 403 on PR creation
The classic token scope issue. Go to GitHub → Settings → Developer Settings → Personal Access Tokens → find your token → Edit → ensure repo scope is checked (not just public_repo).

MCP server crashes silently
Check Claude Code’s MCP logs: open a terminal, run claude --debug and reproduce the action that fails. The debug output includes each MCP server’s stderr.


Summary

ToolSetup timeDaily value
GitHub MCP10 minHigh — PRs, CI checks, issues from the terminal
ClickUp MCP5 minHigh — start ticket, log progress, close ticket without a browser
Lark MCP5 minMedium — team notifications and docs if your team uses Lark
gitnexusBuilt into projectCritical — impact analysis before every symbol edit

The compound effect: code, PR, ticket update, team message — all from one terminal session. Zero browser tabs. Part 24 shows exactly how this plays out across a full day, with a real-world case study of building a module from ticket to production.


Edit page
Share this post:

Next Post
Memory, Knowledge Graphs & Code Intelligence
Previous Post
Claude Code & the AI Development Layer