tca-mcp-server 2.0.1 → 2.0.2

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.
@@ -4,9 +4,21 @@ import registerJob from './job.js';
4
4
  import registerIssueReport from './issue.js';
5
5
  import registerSetup from './setup.js';
6
6
  export function registerTools(server) {
7
+ // 支持两种配置方式:
8
+ // 1. TCA_TOKEN="用户名:Token" (OpenClaw 单输入框模式,推荐)
9
+ // 2. TCA_TOKEN="Token" + TCA_USER_NAME="用户名" (传统分离模式,向后兼容)
10
+ const rawToken = process.env.TCA_TOKEN || '';
11
+ let token = rawToken;
12
+ let userName = process.env.TCA_USER_NAME || '';
13
+ if (!userName && rawToken.includes(':')) {
14
+ // 从 "用户名:Token" 格式中拆分
15
+ const colonIndex = rawToken.indexOf(':');
16
+ userName = rawToken.substring(0, colonIndex);
17
+ token = rawToken.substring(colonIndex + 1);
18
+ }
7
19
  TcaClient.initTcaClient({
8
- token: process.env.TCA_TOKEN || '',
9
- userName: process.env.TCA_USER_NAME || '',
20
+ token,
21
+ userName,
10
22
  baseUrl: process.env.TCA_BASE_URL || 'https://tca.tencent.com/',
11
23
  env: process.env.TCA_ENV || 'saas',
12
24
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tca-mcp-server",
3
- "version": "2.0.1",
3
+ "version": "2.0.2",
4
4
  "description": "",
5
5
  "main": "./dist/stdio.js",
6
6
  "scripts": {
@@ -6,6 +6,7 @@ metadata:
6
6
  {
7
7
  'openclaw':
8
8
  {
9
+ 'requires': { 'env': ['TCA_TOKEN'] },
9
10
  'primaryEnv': 'TCA_TOKEN',
10
11
  'category': 'tencent',
11
12
  'tencentTokenMode': 'custom',
@@ -73,39 +74,88 @@ metadata:
73
74
 
74
75
  ## ⚙️ 快速配置
75
76
 
76
- OpenClaw 中使用时,需要先完成本地安装和注册。
77
+ ### 关于 TCA MCP Server
77
78
 
78
- ### 环境变量
79
+ TCA MCP Server 是一个发布在 npm 上的包(包名:`tca-mcp-server`),通过 stdio 协议提供 MCP 服务。
79
80
 
80
- 使用前需要配置以下环境变量:
81
+ - **npm 包名**:`tca-mcp-server`
82
+ - **启动命令**:`npx -y -p tca-mcp-server@latest tca-mcp-stdio`
83
+ - **传输协议**:stdio(标准输入输出)
84
+ - **运行时要求**:Node.js >= 22
85
+ - **⚠️ 无需全局安装**:不要使用 `npm install -g`,直接通过 `npx` 按需拉取即可
81
86
 
82
- | 变量名 | 说明 | 获取方式 |
83
- | --------------- | ------------------ | -------------------------------------------------------------------- |
84
- | `TCA_TOKEN` | TCA 平台个人 Token | 访问 [个人中心 → 个人Token](https://tca.tencent.com/user/token) 获取 |
85
- | `TCA_USER_NAME` | TCA 平台用户名 | 访问 [个人中心 → 个人Token](https://tca.tencent.com/user/token) 获取 |
87
+ ### 获取 Token
86
88
 
87
- > ⚠️ **如果 `TCA_TOKEN` 或 `TCA_USER_NAME` 为空或未配置**,请先访问 [https://tca.tencent.com/user/token](https://tca.tencent.com/user/token) 获取,否则所有工具调用将返回鉴权失败。
89
+ 使用前必须配置 `TCA_TOKEN` 环境变量,否则所有工具调用将返回鉴权失败:
88
90
 
89
- ### 安装步骤
91
+ 1. 访问 [TCA 个人Token页面](https://tca.tencent.com/user/token)
92
+ 2. 登录后复制页面上的 **用户名** 和 **个人 Token**
93
+ 3. 在 OpenClaw 中配置环境变量 `TCA_TOKEN`,格式为:`用户名:Token`
90
94
 
91
- 1. 运行 `setup.sh` 完成 MCP 服务注册:
95
+ > **📌 Token 格式**:`TCA_TOKEN` 的值为 `用户名:Token`(用英文冒号 `:` 分隔)
96
+ > 例如:用户名为 `zhangsan`,Token 为 `abc123def456`,则填入 `zhangsan:abc123def456`
97
+
98
+ | 变量名 | 说明 | 获取方式 |
99
+ | ----------- | ---------------------------------- | -------------------------------------------------------------------- |
100
+ | `TCA_TOKEN` | TCA 平台凭证,格式:`用户名:Token` | 访问 [个人中心 → 个人Token](https://tca.tencent.com/user/token) 获取 |
101
+
102
+ > ⚠️ **向后兼容**:如果你同时设置了 `TCA_TOKEN`(纯 Token)和 `TCA_USER_NAME`(用户名)两个环境变量,系统仍然可以正常工作。合并格式 `用户名:Token` 仅在 `TCA_USER_NAME` 未设置时生效。
103
+
104
+ ---
105
+
106
+ ### 方式一:mcporter 注册(OpenClaw 平台推荐)
107
+
108
+ [mcporter](https://mcporter.pages.oa.com/) 是 OpenClaw 平台提供的 MCP 服务管理 CLI 工具,可统一注册和管理多个 MCP 服务。
109
+
110
+ **自动注册**(运行 setup.sh):
92
111
 
93
112
  ```bash
94
113
  bash setup.sh
95
114
  ```
96
115
 
97
- > `setup.sh` 会自动将 TCA MCP Server 注册到 mcporter,并验证配置是否成功。
98
- > 如果未执行 setup,所有工具调用将无法找到 `tca` 服务。
116
+ > `setup.sh` 会自动检测并安装 mcporter(如未安装),然后将 TCA MCP Server 注册为 stdio 类型的 MCP 服务。
99
117
 
100
- 2. 验证安装是否成功:
118
+ **手动注册**(如果不想运行 setup.sh,可手动执行以下命令):
101
119
 
102
120
  ```bash
103
- mcporter list | grep tca
121
+ mcporter config add tca \
122
+ --command "npx" \
123
+ --arg "-y" \
124
+ --arg "-p" \
125
+ --arg "tca-mcp-server@latest" \
126
+ --arg "tca-mcp-stdio" \
127
+ --env "TCA_TOKEN=<用户名>:<Token>" \
128
+ --transport stdio \
129
+ --scope home
104
130
  ```
105
131
 
106
- ### MCP 客户端手动配置
132
+ > ⚠️ mcporter 的参数名是 `--arg`(单数,可重复),不是 `--args`。
133
+
134
+ **注册后验证**:
135
+
136
+ ```bash
137
+ # 查看已注册的服务
138
+ mcporter list tca
139
+
140
+ # 调用工具测试
141
+ mcporter call tca list_orgs
142
+ ```
107
143
 
108
- 如果不使用 OpenClaw/mcporter,也可以在 MCP 客户端(如 Cursor、VSCode CodeBuddy 等)的配置文件中直接添加:
144
+ **mcporter 常用命令**:
145
+
146
+ | 命令 | 说明 |
147
+ | ---------------------------- | --------------------------- |
148
+ | `mcporter list` | 列出所有已注册的 MCP 服务 |
149
+ | `mcporter list tca` | 查看 tca 服务详情和工具列表 |
150
+ | `mcporter call tca <工具名>` | 调用 tca 的指定工具 |
151
+ | `mcporter config get tca` | 查看 tca 的配置信息 |
152
+ | `mcporter config remove tca` | 移除 tca 服务注册 |
153
+
154
+ ---
155
+
156
+ ### 方式二:MCP 客户端手动配置
157
+
158
+ 在 MCP 客户端(如 Cursor、CodeBuddy、Claude Desktop、Windsurf 等)的配置文件中添加以下 JSON:
109
159
 
110
160
  ```json
111
161
  {
@@ -114,21 +164,31 @@ mcporter list | grep tca
114
164
  "command": "npx",
115
165
  "args": ["-y", "-p", "tca-mcp-server@latest", "tca-mcp-stdio"],
116
166
  "env": {
117
- "TCA_TOKEN": "<你的TCA_TOKEN>",
118
- "TCA_USER_NAME": "<你的TCA_USER_NAME>"
167
+ "TCA_TOKEN": "<用户名>:<Token>"
119
168
  }
120
169
  }
121
170
  }
122
171
  }
123
172
  ```
124
173
 
125
- ### 安装验证
174
+ > 💡 也支持分开配置 `"TCA_TOKEN": "<Token>"` + `"TCA_USER_NAME": "<用户名>"`
126
175
 
127
- 配置完成后,可以通过以下方式验证:
176
+ 各客户端配置文件路径:
177
+
178
+ | 客户端 | 配置文件路径 |
179
+ | -------------- | -------------------------------------------------------------------------- |
180
+ | Cursor | `~/.cursor/mcp.json` |
181
+ | CodeBuddy | VS Code 设置中搜索 MCP 或 `~/.codebuddy/mcp.json` |
182
+ | Claude Desktop | `~/Library/Application Support/Claude/claude_desktop_config.json`(macOS) |
183
+ | Windsurf | `~/.windsurf/mcp.json` |
184
+
185
+ ---
186
+
187
+ ### 安装验证
128
188
 
129
- - **OpenClaw**:运行 `mcporter list | grep tca` 确认服务已注册
130
- - **MCP 客户端**:在 AI 对话中输入 "列出我的TCA团队",如果返回团队列表则说明配置成功
131
- - 如果返回鉴权失败,请检查 `TCA_TOKEN` `TCA_USER_NAME` 是否正确
189
+ - **mcporter 模式**:运行 `mcporter list tca` 确认服务已注册,或运行 `mcporter call tca list_orgs` 测试调用
190
+ - **MCP 客户端模式**:在 AI 对话中输入"列出我的TCA团队",如果返回团队列表则说明配置成功
191
+ - 如果返回鉴权失败,请检查 `TCA_TOKEN` 格式是否为 `用户名:Token`
132
192
 
133
193
  ## 🔧 工具列表
134
194
 
@@ -235,7 +295,7 @@ mcporter list | grep tca
235
295
 
236
296
  | 错误信息 | 错误类型 | 解决方案 |
237
297
  | ----------------------------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
238
- | **401 Unauthorized** | Token 鉴权失败 | 🔑 检查 `TCA_TOKEN` `TCA_USER_NAME` 是否正确配置,可访问 [个人Token页面](https://tca.tencent.com/user/token) 重新获取 |
298
+ | **401 Unauthorized** | Token 鉴权失败 | 🔑 检查 `TCA_TOKEN` 格式是否为 `用户名:Token`,可访问 [个人Token页面](https://tca.tencent.com/user/token) 重新获取 |
239
299
  | **403 Forbidden** | 权限不足 | 🔒 确认用户是否有对应团队/项目组的访问权限 |
240
300
  | **404 Not Found** | 资源不存在 | 🔍 检查 `orgSid`、`teamName`、`repoId`、`projectId` 是否正确,可通过 `list_orgs` → `list_teams` → `list_repos` → `list_projects` 重新获取 |
241
301
  | **请提供 mcpConfigFile 或 orgSid 等参数** | 参数缺失 | 📝 `start_scan` 等工具需要传入配置文件路径或直接传入 4 个参数(orgSid、teamName、repoId、projectId) |
@@ -244,7 +304,7 @@ mcporter list | grep tca
244
304
 
245
305
  ### 问题排查步骤
246
306
 
247
- 1. **检查环境变量**:确认 `TCA_TOKEN` 和 `TCA_USER_NAME` 已正确配置
307
+ 1. **检查环境变量**:确认 `TCA_TOKEN` 已正确配置(格式:`用户名:Token`)
248
308
  2. **检查网络连接**:确认能访问 TCA 官网 https://tca.tencent.com
249
309
  3. **检查参数**:确认传入工具的参数值正确(如 `orgSid`、`repoId` 等)
250
310
  4. **查看工具列表**:确认所调用的工具名称正确
@@ -1,9 +1,11 @@
1
1
  #!/bin/bash
2
2
  # Setup script for 腾讯云代码分析(TCA)MCP Skill
3
+ # 使用 Custom Token 认证
4
+ # TCA_TOKEN 格式:用户名:Token(由 OpenClaw 平台注入)
3
5
 
4
6
  set -e
5
7
 
6
- echo "🚀 设置腾讯云代码分析(TCA)MCP Server..."
8
+ echo "🚀 设置腾讯云代码分析(TCA)MCP Skill..."
7
9
  echo ""
8
10
 
9
11
  # ───────────────────────────────────────
@@ -11,144 +13,81 @@ echo ""
11
13
  # ───────────────────────────────────────
12
14
  echo "🔧 检查环境变量配置..."
13
15
 
14
- HAS_ERROR=false
15
-
16
16
  if [ -z "$TCA_TOKEN" ]; then
17
17
  echo "⚠️ TCA_TOKEN 环境变量未设置"
18
- echo " 请访问 https://tca.tencent.com/user/token 获取 Token"
19
- echo " 然后设置环境变量:export TCA_TOKEN=\"你的Token值\""
18
+ echo " 请访问 https://tca.tencent.com/user/token 获取用户名和 Token"
19
+ echo " 然后在 OpenClaw 中配置环境变量 TCA_TOKEN,格式:用户名:Token"
20
20
  echo ""
21
- HAS_ERROR=true
22
- else
23
- echo "✅ TCA_TOKEN 已配置"
21
+ echo "❌ 请先配置 TCA_TOKEN 环境变量后重试"
22
+ exit 1
24
23
  fi
25
24
 
26
- if [ -z "$TCA_USER_NAME" ]; then
27
- echo "⚠️ TCA_USER_NAME 环境变量未设置"
28
- echo " 请访问 https://tca.tencent.com/user/token 获取用户名"
29
- echo " 然后设置环境变量:export TCA_USER_NAME=\"你的用户名\""
30
- echo ""
31
- HAS_ERROR=true
25
+ # 支持两种格式:
26
+ # 1. 合并格式:TCA_TOKEN="用户名:Token"(OpenClaw 推荐)
27
+ # 2. 分离格式:TCA_TOKEN="Token" + TCA_USER_NAME="用户名"(向后兼容)
28
+ if [ -z "$TCA_USER_NAME" ] && echo "$TCA_TOKEN" | grep -q ":"; then
29
+ # "用户名:Token" 格式中拆分
30
+ TCA_USER_NAME_PARSED=$(echo "$TCA_TOKEN" | cut -d: -f1)
31
+ TCA_TOKEN_PARSED=$(echo "$TCA_TOKEN" | cut -d: -f2-)
32
+ echo "✅ TCA_TOKEN 已配置(合并格式,用户名:$TCA_USER_NAME_PARSED)"
32
33
  else
33
- echo "TCA_USER_NAME 已配置"
34
- fi
35
-
36
- if [ "$HAS_ERROR" = true ]; then
37
- echo " 请先配置所有必需的环境变量后重试"
38
- exit 1
34
+ TCA_USER_NAME_PARSED="$TCA_USER_NAME"
35
+ TCA_TOKEN_PARSED="$TCA_TOKEN"
36
+ echo "✅ TCA_TOKEN 已配置"
37
+ if [ -n "$TCA_USER_NAME" ]; then
38
+ echo " TCA_USER_NAME 已配置"
39
+ else
40
+ echo "⚠️ TCA_USER_NAME 未设置,TCA_TOKEN 中也未包含用户名"
41
+ echo " TCA_TOKEN 格式应为:用户名:Token"
42
+ echo "❌ 请修正 TCA_TOKEN 格式后重试"
43
+ exit 1
44
+ fi
39
45
  fi
40
46
 
41
47
  # ───────────────────────────────────────
42
- # 2. 检查 Node.js 版本(mcporter 和 tca-mcp-server 均需要 >= 22)
48
+ # 2. 检查 mcporter
43
49
  # ───────────────────────────────────────
44
- if ! command -v node &> /dev/null; then
45
- echo "未找到 Node.js,请先安装 Node.js >= 22.0.0"
46
- echo " 推荐使用 nvm 安装:https://github.com/nvm-sh/nvm"
47
- exit 1
50
+ if ! command -v mcporter &> /dev/null; then
51
+ echo "⚠️ 未找到 mcporter,正在安装..."
52
+ npm install -g mcporter
53
+ echo "✅ mcporter 安装完成"
48
54
  fi
49
55
 
50
- NODE_VERSION=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
51
- if [ "$NODE_VERSION" -lt 22 ]; then
52
- echo "❌ Node.js 版本过低(当前:$(node -v)),mcporter 和 tca-mcp-server 均需要 >= 22.0.0"
53
- echo " 请升级:nvm install 22 && nvm use 22"
54
- exit 1
55
- fi
56
- echo "✅ Node.js 版本检查通过:$(node -v)"
57
-
58
56
  # ───────────────────────────────────────
59
- # 3. 检查 mcporter(OpenClaw 模式)
57
+ # 3. 添加 MCP 配置
60
58
  # ───────────────────────────────────────
61
- if command -v mcporter &> /dev/null; then
62
- echo ""
63
- echo "📦 检测到 mcporter,使用 OpenClaw 模式注册 MCP 服务..."
64
- echo ""
65
-
66
- # 注册 TCA MCP Server 到 mcporter(stdio 传输模式)
67
- mcporter config add tca \
68
- --command "npx" \
69
- --arg "-y" \
70
- --arg "-p" \
71
- --arg "tca-mcp-server@latest" \
72
- --arg "tca-mcp-stdio" \
73
- --env "TCA_TOKEN=$TCA_TOKEN" \
74
- --env "TCA_USER_NAME=$TCA_USER_NAME" \
75
- --transport stdio \
76
- --scope home
77
-
78
- echo ""
79
- echo "✅ mcporter 注册完成!"
80
- echo ""
59
+ echo "🔧 配置 mcporter..."
60
+
61
+ mcporter config add tca \
62
+ --command "npx" \
63
+ --arg "-y" \
64
+ --arg "-p" \
65
+ --arg "tca-mcp-server@latest" \
66
+ --arg "tca-mcp-stdio" \
67
+ --env "TCA_TOKEN=$TCA_USER_NAME_PARSED:$TCA_TOKEN_PARSED" \
68
+ --transport stdio \
69
+ --scope home
81
70
 
82
- # 验证配置
83
- echo "🧪 验证配置..."
84
- if mcporter list 2>&1 | grep -q "tca"; then
85
- echo "✅ 配置验证成功!"
86
- echo ""
87
- mcporter list | grep -A 1 "tca" || true
88
- else
89
- echo "⚠️ 配置验证失败,请检查环境变量是否正确"
90
- fi
91
-
92
- echo ""
93
- echo "─────────────────────────────────────"
94
- echo "🎉 设置完成!"
95
- echo ""
96
- echo "📖 使用方法:"
97
- echo " mcporter call tca list_orgs"
98
- echo ""
99
- echo "🏠 TCA 官网:https://tca.tencent.com"
100
- echo ""
101
- exit 0
102
- fi
103
-
104
- # ───────────────────────────────────────
105
- # 4. 非 mcporter 模式:输出 MCP 客户端配置
106
- # ───────────────────────────────────────
107
71
  echo ""
108
- echo "📦 mcporter 未安装,使用 MCP 客户端直接配置模式..."
72
+ echo " 配置完成!"
109
73
  echo ""
110
74
 
111
- # 检查 npx
112
- if ! command -v npx &> /dev/null; then
113
- echo "❌ 未找到 npx,请确保 npm 已正确安装"
114
- exit 1
115
- fi
116
- echo "✅ npx 可用"
117
-
118
- # 预下载 MCP Server 包(不启动进程)
119
- echo ""
120
- echo "🧪 预下载 TCA MCP Server..."
121
- if npm view tca-mcp-server version 2>/dev/null; then
122
- echo "✅ TCA MCP Server 包可用,客户端首次启动时会自动下载"
75
+ # ───────────────────────────────────────
76
+ # 4. 验证配置
77
+ # ───────────────────────────────────────
78
+ echo "🧪 验证配置..."
79
+ if mcporter list 2>&1 | grep -q "tca"; then
80
+ echo "✅ 配置验证成功!"
81
+ mcporter list | grep -A 1 "tca" || true
123
82
  else
124
- echo "ℹ️ 首次运行时 npx 会自动下载 tca-mcp-server,无需手动安装"
83
+ echo "⚠️ 配置验证失败,请检查网络或 Token 是否正确"
125
84
  fi
126
85
 
127
86
  echo ""
128
87
  echo "─────────────────────────────────────"
129
- echo "🎉 环境检查完成!"
130
- echo ""
131
- echo "📖 请将以下配置添加到你的 MCP 客户端配置文件中:"
132
- echo ""
133
- echo ' {'
134
- echo ' "mcpServers": {'
135
- echo ' "tca-mcp-server": {'
136
- echo ' "command": "npx",'
137
- echo ' "args": ["-y", "-p", "tca-mcp-server@latest", "tca-mcp-stdio"],'
138
- echo ' "env": {'
139
- echo " \"TCA_TOKEN\": \"$TCA_TOKEN\","
140
- echo " \"TCA_USER_NAME\": \"$TCA_USER_NAME\""
141
- echo ' }'
142
- echo ' }'
143
- echo ' }'
144
- echo ' }'
145
- echo ""
146
- echo "📁 各客户端配置文件路径:"
147
- echo " Cursor: ~/.cursor/mcp.json"
148
- echo " CodeBuddy: VS Code 设置中搜索 MCP 或 ~/.codebuddy/mcp.json"
149
- echo " Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)"
150
- echo " Windsurf: ~/.windsurf/mcp.json"
88
+ echo "🎉 设置完成!"
151
89
  echo ""
152
- echo "🏠 TCA 官网:https://tca.tencent.com"
153
- echo "📖 使用文档:https://tca.tencent.com/document/zh/guide/"
90
+ echo "📖 使用方法:"
91
+ echo " mcporter call tca list_orgs"
154
92
  echo ""
93
+ echo "📖 更多信息请查看 SKILL.md"
package/skill/tca.zip ADDED
Binary file
@@ -6,9 +6,23 @@ import registerIssueReport from './issue.js';
6
6
  import registerSetup from './setup.js';
7
7
 
8
8
  export function registerTools(server: McpServer) {
9
+ // 支持两种配置方式:
10
+ // 1. TCA_TOKEN="用户名:Token" (OpenClaw 单输入框模式,推荐)
11
+ // 2. TCA_TOKEN="Token" + TCA_USER_NAME="用户名" (传统分离模式,向后兼容)
12
+ const rawToken = process.env.TCA_TOKEN || '';
13
+ let token = rawToken;
14
+ let userName = process.env.TCA_USER_NAME || '';
15
+
16
+ if (!userName && rawToken.includes(':')) {
17
+ // 从 "用户名:Token" 格式中拆分
18
+ const colonIndex = rawToken.indexOf(':');
19
+ userName = rawToken.substring(0, colonIndex);
20
+ token = rawToken.substring(colonIndex + 1);
21
+ }
22
+
9
23
  TcaClient.initTcaClient({
10
- token: process.env.TCA_TOKEN || '',
11
- userName: process.env.TCA_USER_NAME || '',
24
+ token,
25
+ userName,
12
26
  baseUrl: process.env.TCA_BASE_URL || 'https://tca.tencent.com/',
13
27
  env: process.env.TCA_ENV || 'saas',
14
28
  });