@alanse/clickup-multi-mcp-server 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -4
- package/build/config.js +0 -1
- package/build/utils/sponsor-service.js +14 -31
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/images/clickup-social.png" alt="ClickUp Multi-Workspace MCP Server" width="100%">
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
[](https://www.npmjs.com/package/@alanse/clickup-multi-mcp-server)
|
|
5
|
+
<h1 align="center">ClickUp Multi-Workspace MCP Server</h1>
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://github.com/da-okazaki/clickup-multi-mcp-server/stargazers">
|
|
9
|
+
<img src="https://img.shields.io/github/stars/da-okazaki/clickup-multi-mcp-server?style=flat&logo=github" alt="GitHub Stars">
|
|
10
|
+
</a>
|
|
11
|
+
<a href="https://www.npmjs.com/package/@alanse/clickup-multi-mcp-server">
|
|
12
|
+
<img src="https://img.shields.io/npm/v/@alanse/clickup-multi-mcp-server.svg?style=flat&logo=npm" alt="NPM Version">
|
|
13
|
+
</a>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center">
|
|
17
|
+
A Model Context Protocol (MCP) server for integrating <strong>multiple ClickUp workspaces</strong> with AI applications. This server allows AI agents to interact with tasks, spaces, lists, and folders across different ClickUp workspaces through a standardized protocol.
|
|
18
|
+
</p>
|
|
7
19
|
|
|
8
20
|
## 🎯 Key Feature: Multi-Workspace Support
|
|
9
21
|
|
|
@@ -22,6 +34,27 @@ Based on the excellent [clickup-mcp-server](https://github.com/taazkareem/clicku
|
|
|
22
34
|
|
|
23
35
|
## Quick Start
|
|
24
36
|
|
|
37
|
+
### Claude Code CLI Setup
|
|
38
|
+
|
|
39
|
+
The easiest way to add this MCP server to Claude Code:
|
|
40
|
+
|
|
41
|
+
**Single Workspace:**
|
|
42
|
+
```bash
|
|
43
|
+
claude mcp add clickup \
|
|
44
|
+
-e CLICKUP_API_KEY=your_api_key_here \
|
|
45
|
+
-e CLICKUP_TEAM_ID=your_team_id_here \
|
|
46
|
+
-- npx -y @alanse/clickup-multi-mcp-server@latest
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Multiple Workspaces:**
|
|
50
|
+
```bash
|
|
51
|
+
claude mcp add clickup \
|
|
52
|
+
-e CLICKUP_WORKSPACES='{"default":"work","workspaces":{"work":{"token":"pk_xxx_work","teamId":"123456"},"personal":{"token":"pk_xxx_personal","teamId":"789012"}}}' \
|
|
53
|
+
-- npx -y @alanse/clickup-multi-mcp-server@latest
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Manual Configuration
|
|
57
|
+
|
|
25
58
|
### Single Workspace (Backwards Compatible)
|
|
26
59
|
|
|
27
60
|
The traditional single workspace setup still works exactly as before:
|
package/build/config.js
CHANGED
|
@@ -125,7 +125,6 @@ const configuration = {
|
|
|
125
125
|
clickupApiKey: envArgs.clickupApiKey || process.env.CLICKUP_API_KEY || '',
|
|
126
126
|
clickupTeamId: envArgs.clickupTeamId || process.env.CLICKUP_TEAM_ID || '',
|
|
127
127
|
clickupWorkspaces: parseWorkspaces(),
|
|
128
|
-
enableSponsorMessage: process.env.ENABLE_SPONSOR_MESSAGE !== 'false',
|
|
129
128
|
documentSupport: envArgs.documentSupport || process.env.DOCUMENT_SUPPORT || process.env.DOCUMENT_MODULE || process.env.DOCUMENT_MODEL || 'false',
|
|
130
129
|
logLevel: parseLogLevel(envArgs.logLevel || process.env.LOG_LEVEL),
|
|
131
130
|
disabledTools: ((envArgs.disabledTools || process.env.DISABLED_TOOLS || process.env.DISABLED_COMMANDS)?.split(',').map(cmd => cmd.trim()).filter(cmd => cmd !== '') || []),
|
|
@@ -1,37 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SPDX-FileCopyrightText: © 2025 Talib Kareem <taazkareem@icloud.com>
|
|
3
|
+
* SPDX-FileCopyrightText: © 2025 Daichi Okazaki (Alanse)
|
|
3
4
|
* SPDX-License-Identifier: MIT
|
|
4
5
|
*
|
|
5
|
-
*
|
|
6
|
+
* Response Service Module
|
|
6
7
|
*
|
|
7
|
-
* Provides
|
|
8
|
+
* Provides utilities for creating standardized MCP responses
|
|
8
9
|
*/
|
|
9
10
|
import { Logger } from '../logger.js';
|
|
10
|
-
import config from '../config.js';
|
|
11
11
|
// Create logger instance for this module
|
|
12
|
-
const logger = new Logger('
|
|
12
|
+
const logger = new Logger('ResponseService');
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* ResponseService - Provides standardized response formatting
|
|
15
15
|
*/
|
|
16
|
-
export class
|
|
16
|
+
export class ResponseService {
|
|
17
17
|
constructor() {
|
|
18
|
-
|
|
19
|
-
this.isEnabled = config.enableSponsorMessage;
|
|
20
|
-
logger.info('SponsorService initialized', { enabled: this.isEnabled });
|
|
18
|
+
logger.info('ResponseService initialized');
|
|
21
19
|
}
|
|
22
20
|
/**
|
|
23
|
-
*
|
|
21
|
+
* Creates a standardized response
|
|
24
22
|
*/
|
|
25
|
-
|
|
26
|
-
return {
|
|
27
|
-
isEnabled: this.isEnabled,
|
|
28
|
-
url: this.sponsorUrl
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Creates a response with optional sponsorship message
|
|
33
|
-
*/
|
|
34
|
-
createResponse(data, includeSponsorMessage = false) {
|
|
23
|
+
createResponse(data, _includeSponsorMessage = false) {
|
|
35
24
|
const content = [];
|
|
36
25
|
// Special handling for workspace hierarchy which contains a preformatted tree
|
|
37
26
|
if (data && typeof data === 'object' && 'hierarchy' in data && typeof data.hierarchy === 'string') {
|
|
@@ -55,13 +44,6 @@ export class SponsorService {
|
|
|
55
44
|
text: JSON.stringify(data, null, 2)
|
|
56
45
|
});
|
|
57
46
|
}
|
|
58
|
-
// Then add sponsorship message if enabled
|
|
59
|
-
if (this.isEnabled && includeSponsorMessage) {
|
|
60
|
-
content.push({
|
|
61
|
-
type: "text",
|
|
62
|
-
text: `\n♥ Support this project by sponsoring the developer at ${this.sponsorUrl}`
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
47
|
return { content };
|
|
66
48
|
}
|
|
67
49
|
/**
|
|
@@ -74,7 +56,7 @@ export class SponsorService {
|
|
|
74
56
|
});
|
|
75
57
|
}
|
|
76
58
|
/**
|
|
77
|
-
* Creates a bulk operation response
|
|
59
|
+
* Creates a bulk operation response
|
|
78
60
|
*/
|
|
79
61
|
createBulkResponse(result) {
|
|
80
62
|
return this.createResponse({
|
|
@@ -86,8 +68,9 @@ export class SponsorService {
|
|
|
86
68
|
id: failure.item?.id || failure.item,
|
|
87
69
|
error: failure.error.message
|
|
88
70
|
}))
|
|
89
|
-
}
|
|
71
|
+
});
|
|
90
72
|
}
|
|
91
73
|
}
|
|
92
|
-
// Export a singleton instance
|
|
93
|
-
|
|
74
|
+
// Export a singleton instance for backwards compatibility
|
|
75
|
+
// (keeping the name 'sponsorService' to avoid changing all imports)
|
|
76
|
+
export const sponsorService = new ResponseService();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alanse/clickup-multi-mcp-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "ClickUp MCP Server with Multi-Workspace Support - Integrate multiple ClickUp workspaces with AI through Model Context Protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "build/index.js",
|