clickup mcp server

Local 2025-08-31 23:23:39 0

This server integrates AI assistants with ClickUp workspaces, enabling task, team, list, and board management through a secure OAuth2 authentication process.


smithery badge

A Model Context Protocol server implementation for ClickUp integration, enabling AI assistants to interact with ClickUp workspaces.

ClickUp Server MCP server

Quick Start

  1. Configure Claude for Desktop:
{
  "mcpServers": {
    "clickup": {
      "command": "npx",
      "args": ["@mcp/clickup-server"],
      "env": {
        "CLICKUP_CLIENT_ID": "your_client_id",
        "CLICKUP_CLIENT_SECRET": "your_client_secret",
        "CLICKUP_REDIRECT_URI": "http://localhost:3000/oauth/callback"
      }
    }
  }
}
  1. Restart Claude for Desktop

That's it! The server will be automatically downloaded and started when needed.

Installing via Smithery

To install ClickUp MCP Server for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install @Nazruden/clickup-mcp-server --client claude

Environment Variables

Required environment variables:

  • CLICKUP_CLIENT_ID: Your ClickUp OAuth client ID
  • CLICKUP_CLIENT_SECRET: Your ClickUp OAuth client secret
  • CLICKUP_REDIRECT_URI: OAuth redirect URI (default: http://localhost:3000/oauth/callback)

Optional environment variables:

  • PORT: Server port (default: 3000)
  • LOG_LEVEL: Logging level (default: info)

Available Tools

Task Management

  • clickup_create_task: Create a new task in a ClickUp list
  • clickup_update_task: Update an existing task's properties

Team & List Management

  • clickup_get_teams: Retrieve all accessible teams
  • clickup_get_lists: Get all lists in a specific folder

Board Management

  • clickup_create_board: Create a new board in a ClickUp space

Development

  1. Clone the repository
  2. Install dependencies:
npm install
  1. Start in development mode:
npm run dev
  1. Build for production:
npm run build
  1. Run tests:
npm test

Security

  • All tokens are encrypted at rest
  • OAuth2 flow for secure authentication
  • No sensitive data logged
  • Rate limiting to prevent API abuse

Troubleshooting

Common Issues

  1. Authentication Errors

  2. Verify your OAuth credentials in the environment variables

  3. Check token expiration
  4. Ensure proper redirect URI

  5. Rate Limiting

  6. The server implements automatic rate limit handling

  7. Check logs for rate limit warnings
  8. Consider implementing request batching

  9. Server Not Starting

  10. Check environment variables are properly set
  11. Verify port 3000 is available
  12. Check Claude for Desktop logs

Getting Logs

Claude for Desktop logs can be found at:

  • Windows: %USERPROFILE%AppDataLocalClaudeLogsmcp*.log
  • macOS: ~/Library/Logs/Claude/mcp*.log

License

MIT License - see LICENSE file for details

[
  {
    "description": "Create a new task in ClickUp workspace",
    "inputSchema": {
      "properties": {
        "assignees": {
          "description": "Array of assignee user IDs",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "description": {
          "description": "Task description in markdown format",
          "type": "string"
        },
        "due_date": {
          "description": "Due date in milliseconds timestamp",
          "type": "string"
        },
        "list_id": {
          "description": "The ID of the list to create the task in. The unique identifier for the resource in ClickUp.",
          "type": "string"
        },
        "name": {
          "description": "Task name",
          "type": "string"
        },
        "priority": {
          "description": "Task priority (1: Urgent, 2: High, 3: Normal, 4: Low)",
          "enum": [
            1,
            2,
            3,
            4
          ],
          "type": "number"
        },
        "status": {
          "description": "Task status",
          "type": "string"
        },
        "tags": {
          "description": "Array of tag names",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "time_estimate": {
          "description": "Time estimate in milliseconds",
          "type": "string"
        }
      },
      "required": [
        "list_id",
        "name"
      ],
      "type": "object"
    },
    "name": "clickup_create_task"
  },
  {
    "description": "Update an existing task in ClickUp",
    "inputSchema": {
      "properties": {
        "assignees": {
          "description": "Array of assignee user IDs",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "description": {
          "description": "Task description in markdown format",
          "type": "string"
        },
        "due_date": {
          "description": "Due date in milliseconds timestamp",
          "type": "string"
        },
        "name": {
          "description": "Task name",
          "type": "string"
        },
        "priority": {
          "description": "Task priority (1: Urgent, 2: High, 3: Normal, 4: Low)",
          "enum": [
            1,
            2,
            3,
            4
          ],
          "type": "number"
        },
        "status": {
          "description": "Task status",
          "type": "string"
        },
        "tags": {
          "description": "Array of tag names",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "task_id": {
          "description": "The ID of the task to update. The unique identifier for the resource in ClickUp.",
          "type": "string"
        },
        "time_estimate": {
          "description": "Time estimate in milliseconds",
          "type": "string"
        }
      },
      "required": [
        "task_id"
      ],
      "type": "object"
    },
    "name": "clickup_update_task"
  },
  {
    "description": "Get all teams accessible to the authenticated user",
    "inputSchema": {
      "properties": {},
      "type": "object"
    },
    "name": "clickup_get_teams"
  },
  {
    "description": "Get all lists in a specific folder",
    "inputSchema": {
      "properties": {
        "folder_id": {
          "description": "The ID of the folder to get lists from. The unique identifier for the resource in ClickUp.",
          "type": "string"
        }
      },
      "required": [
        "folder_id"
      ],
      "type": "object"
    },
    "name": "clickup_get_lists"
  },
  {
    "description": "Create a new board in a ClickUp space",
    "inputSchema": {
      "properties": {
        "content": {
          "description": "Board description or content",
          "type": "string"
        },
        "name": {
          "description": "Board name",
          "type": "string"
        },
        "space_id": {
          "description": "The ID of the space to create the board in. The unique identifier for the resource in ClickUp.",
          "type": "string"
        }
      },
      "required": [
        "space_id",
        "name"
      ],
      "type": "object"
    },
    "name": "clickup_create_board"
  }
]