tca-mcp-server 2.0.0 → 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.
package/dist/stdio.js CHANGED
@@ -13,4 +13,5 @@ process.env.TCA_ENV = env;
13
13
  registerTools(server);
14
14
  const transport = new StdioServerTransport();
15
15
  await server.connect(transport);
16
- console.log('Server started');
16
+ // 注意:stdio 模式下必须使用 stderr 输出日志,stdout 专用于 MCP 协议通信
17
+ console.error('TCA MCP Server started');
@@ -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.0",
3
+ "version": "2.0.2",
4
4
  "description": "",
5
5
  "main": "./dist/stdio.js",
6
6
  "scripts": {
@@ -0,0 +1,55 @@
1
+ #!/bin/bash
2
+ # install.sh — 将 tca 技能目录软链到各 AI 客户端的 skills 目录
3
+ set -e
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
6
+ SKILL_DIR="$SCRIPT_DIR/tca"
7
+
8
+ if [ ! -d "$SKILL_DIR" ]; then
9
+ echo "❌ 未找到技能目录: $SKILL_DIR"
10
+ exit 1
11
+ fi
12
+
13
+ # 定义各客户端 skills 目录
14
+ CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
15
+ TARGETS=(
16
+ "$CODEX_HOME/skills"
17
+ "$HOME/.claude/skills"
18
+ "$HOME/.cursor/skills"
19
+ "$HOME/.codebuddy/skills"
20
+ )
21
+
22
+ INSTALLED=0
23
+
24
+ for SKILLS_DIR in "${TARGETS[@]}"; do
25
+ TARGET="$SKILLS_DIR/tca"
26
+
27
+ # 如果 skills 父目录不存在(客户端未安装),跳过
28
+ PARENT_DIR="$(dirname "$SKILLS_DIR")"
29
+ if [ ! -d "$PARENT_DIR" ]; then
30
+ echo "⏭ 跳过 $SKILLS_DIR(客户端目录不存在)"
31
+ continue
32
+ fi
33
+
34
+ # 创建 skills 目录(如果不存在)
35
+ mkdir -p "$SKILLS_DIR"
36
+
37
+ # 如果目标已存在且不是软链,跳过
38
+ if [ -e "$TARGET" ] && [ ! -L "$TARGET" ]; then
39
+ echo "⏭ 跳过 $TARGET(已存在且非软链)"
40
+ continue
41
+ fi
42
+
43
+ # 创建或更新软链
44
+ ln -sfn "$SKILL_DIR" "$TARGET"
45
+ echo "✅ 已链接 $TARGET → $SKILL_DIR"
46
+ INSTALLED=$((INSTALLED + 1))
47
+ done
48
+
49
+ echo ""
50
+ if [ $INSTALLED -gt 0 ]; then
51
+ echo "🎉 安装完成!已链接到 $INSTALLED 个客户端。"
52
+ echo " 如果客户端正在运行,请重启以加载技能。"
53
+ else
54
+ echo "⚠️ 未安装到任何客户端。请确认至少安装了一个支持的 AI 客户端。"
55
+ fi
package/skill/pack.sh ADDED
@@ -0,0 +1,32 @@
1
+ #!/bin/bash
2
+ # pack.sh — 打包 tca 技能目录为 zip 文件
3
+ set -e
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
6
+ SKILL_DIR="$SCRIPT_DIR/tca"
7
+ OUTPUT="${1:-$SCRIPT_DIR/releases/tca.zip}"
8
+
9
+ if [ ! -d "$SKILL_DIR" ]; then
10
+ echo "❌ 未找到技能目录: $SKILL_DIR"
11
+ exit 1
12
+ fi
13
+
14
+ # 确保输出目录存在
15
+ OUTPUT_DIR="$(dirname "$OUTPUT")"
16
+ mkdir -p "$OUTPUT_DIR"
17
+
18
+ # 删除旧的输出文件
19
+ rm -f "$OUTPUT"
20
+
21
+ # 打包(排除 .gitignore 中的常见条目和 .DS_Store)
22
+ cd "$SCRIPT_DIR"
23
+ zip -r "$OUTPUT" tca/ \
24
+ -x "*.DS_Store" \
25
+ -x "*__MACOSX*" \
26
+ -x "*.git*" \
27
+ -x "*node_modules*" \
28
+ -x "*.env*"
29
+
30
+ echo ""
31
+ echo "✅ 打包完成: $OUTPUT"
32
+ echo " 大小: $(du -h "$OUTPUT" | cut -f1)"
@@ -0,0 +1,70 @@
1
+ # tca-skill
2
+
3
+ 供 AI 助手(Cursor、Claude、CodeBuddy、Codex)使用的腾讯云代码分析(TCA)技能包。安装后,Agent 可按照技能说明调用 TCA MCP Server 进行代码质量扫描、问题排查与修复等场景。
4
+
5
+ ## 技能内容概览
6
+
7
+ - **调用方式**:MCP 协议,通过 `npx -y -p tca-mcp-server@latest tca-mcp-stdio` 启动
8
+ - **凭证**:需配置 `TCA_TOKEN` 和 `TCA_USER_NAME`,访问 [个人 Token 页面](https://tca.tencent.com/user/token) 获取
9
+ - **核心能力**:项目配置管理(17 个工具)、全量/增量代码扫描、问题分级查看与自动修复、任务监控与报告
10
+ - 详见 `tca/SKILL.md`
11
+
12
+ ## CodeBuddy 中使用
13
+
14
+ 从 Knot 下载技能的 zip 包,在 CodeBuddy 中安装即可使用。
15
+
16
+ ## 手动安装(可以给其他智能体使用)
17
+
18
+ 克隆或下载本项目后,在项目根目录执行:
19
+
20
+ ```bash
21
+ ./install.sh
22
+ ```
23
+
24
+ 脚本会在以下目录创建指向 `tca` 的软链(若目录存在且目标非软链则跳过):
25
+
26
+ | 客户端 | 技能目录 |
27
+ | --------- | ---------------------------------------------- |
28
+ | Codex | `$CODEX_HOME/skills`(默认 `~/.codex/skills`) |
29
+ | Claude | `~/.claude/skills` |
30
+ | Cursor | `~/.cursor/skills` |
31
+ | CodeBuddy | `~/.codebuddy/skills` |
32
+
33
+ 安装后若客户端已运行,可重启以加载技能。
34
+
35
+ ## 打包
36
+
37
+ 生成仅含 `tca` 目录的 zip(排除 `.gitignore` 中的条目):
38
+
39
+ ```bash
40
+ ./pack.sh
41
+ # 输出默认: releases/tca.zip
42
+
43
+ ./pack.sh releases/tca-1.0.zip # 指定输出路径
44
+ ```
45
+
46
+ ## 项目结构
47
+
48
+ ```
49
+ .
50
+ ├── README.md # 本文件
51
+ ├── install.sh # 安装脚本(软链到各客户端 skills)
52
+ ├── pack.sh # 打包脚本
53
+ ├── tca/ # 技能目录
54
+ │ ├── SKILL.md # 技能主文档(名称、描述、调用规则、凭证、工作流)
55
+ │ ├── setup.sh # 环境检查与配置验证脚本
56
+ │ └── references/ # 参考文档
57
+ │ ├── api_references.md # 全部 17 个工具的完整 API 文档
58
+ │ ├── tca-setup.md # 场景:项目初始化配置
59
+ │ ├── tca-code-scan.md # 场景:代码扫描分析
60
+ │ ├── tca-issue-fix.md # 场景:问题排查与修复
61
+ │ └── tca-job-monitor.md # 场景:任务状态监控
62
+ └── releases/ # 打包输出(已在 .gitignore)
63
+ ```
64
+
65
+ ## 相关链接
66
+
67
+ - 🏠 **TCA 官网**:https://tca.tencent.com
68
+ - 📖 **使用文档**:https://tca.tencent.com/document/zh/guide/
69
+ - 🔑 **获取 Token**:https://tca.tencent.com/user/token
70
+ - 📦 **npm 包**:https://www.npmjs.com/package/tca-mcp-server
@@ -1,8 +1,19 @@
1
1
  ---
2
- name: tca-mcp-server
2
+ name: tca
3
3
  description: 腾讯云代码分析(TCA),提供完整的代码分析操作能力。当用户需要进行代码质量检查、安全扫描、代码规范检查时使用此skill,包括:(1) 配置和管理TCA分析项目 (2) 启动全量/增量代码扫描 (3) 查看和修复代码问题 (4) 监控扫描任务状态 (5) 获取分析报告。
4
4
  homepage: https://tca.tencent.com
5
- metadata: { 'openclaw': { 'primaryEnv': 'TCA_TOKEN', 'category': 'tencent', 'emoji': '🔍' } }
5
+ metadata:
6
+ {
7
+ 'openclaw':
8
+ {
9
+ 'requires': { 'env': ['TCA_TOKEN'] },
10
+ 'primaryEnv': 'TCA_TOKEN',
11
+ 'category': 'tencent',
12
+ 'tencentTokenMode': 'custom',
13
+ 'tokenUrl': 'https://tca.tencent.com/user/token',
14
+ 'emoji': '🔍',
15
+ },
16
+ }
6
17
  ---
7
18
 
8
19
  # 腾讯云代码分析(TCA)MCP 使用指南
@@ -48,22 +59,103 @@ metadata: { 'openclaw': { 'primaryEnv': 'TCA_TOKEN', 'category': 'tencent', 'emo
48
59
 
49
60
  ## API详细参考文档
50
61
 
51
- 阅读文件 `references/api_references.md` 查看所有工具的完整 API 说明,该文件包含所有工具的参数说明、返回值说明及枚举值说明。
62
+ 首先需要阅读文件 `references/api_references.md` 查看所有工具的完整 API 说明,该文件包含所有工具的参数说明、返回值说明及枚举值说明。
63
+
64
+ ### 🎯 场景化文档指引
65
+
66
+ 根据您的具体任务场景,选择相应的参考文档进行查阅:
67
+
68
+ | 任务场景 | 推荐参考文档 | 主要用途 |
69
+ | ------------------------------------------------------ | ---------------------------------------- | ---------------------------------- |
70
+ | **首次配置** - 初始化 TCA 项目、接入仓库、创建分析项目 | 阅读文件 `references/tca-setup.md` | 交互式引导完成项目配置的完整工作流 |
71
+ | **代码扫描** - 启动全量/增量扫描、获取扫描结果 | 阅读文件 `references/tca-code-scan.md` | 从启动扫描到获取分析报告的完整流程 |
72
+ | **问题修复** - 查看代码问题、分析根因、修复代码 | 阅读文件 `references/tca-issue-fix.md` | 问题排查、根因分析与自动修复工作流 |
73
+ | **任务监控** - 查看任务状态、历史记录、分析报告 | 阅读文件 `references/tca-job-monitor.md` | 任务状态监控与历史记录查询工作流 |
52
74
 
53
75
  ## ⚙️ 快速配置
54
76
 
55
- ### 环境变量
77
+ ### 关于 TCA MCP Server
78
+
79
+ TCA MCP Server 是一个发布在 npm 上的包(包名:`tca-mcp-server`),通过 stdio 协议提供 MCP 服务。
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` 按需拉取即可
86
+
87
+ ### 获取 Token
88
+
89
+ 使用前必须配置 `TCA_TOKEN` 环境变量,否则所有工具调用将返回鉴权失败:
90
+
91
+ 1. 访问 [TCA 个人Token页面](https://tca.tencent.com/user/token)
92
+ 2. 登录后复制页面上的 **用户名** 和 **个人 Token**
93
+ 3. 在 OpenClaw 中配置环境变量 `TCA_TOKEN`,格式为:`用户名:Token`
94
+
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):
111
+
112
+ ```bash
113
+ bash setup.sh
114
+ ```
115
+
116
+ > `setup.sh` 会自动检测并安装 mcporter(如未安装),然后将 TCA MCP Server 注册为 stdio 类型的 MCP 服务。
117
+
118
+ **手动注册**(如果不想运行 setup.sh,可手动执行以下命令):
119
+
120
+ ```bash
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
130
+ ```
131
+
132
+ > ⚠️ mcporter 的参数名是 `--arg`(单数,可重复),不是 `--args`。
133
+
134
+ **注册后验证**:
135
+
136
+ ```bash
137
+ # 查看已注册的服务
138
+ mcporter list tca
139
+
140
+ # 调用工具测试
141
+ mcporter call tca list_orgs
142
+ ```
143
+
144
+ **mcporter 常用命令**:
56
145
 
57
- 使用前需要配置以下环境变量:
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 服务注册 |
58
153
 
59
- | 变量名 | 说明 | 获取方式 |
60
- | --------------- | ------------------ | -------------------------------------------------------------------- |
61
- | `TCA_TOKEN` | TCA 平台个人 Token | 访问 [个人中心 → 个人Token](https://tca.tencent.com/user/token) 获取 |
62
- | `TCA_USER_NAME` | TCA 平台用户名 | 访问 [个人中心 → 个人Token](https://tca.tencent.com/user/token) 获取 |
154
+ ---
63
155
 
64
- ### MCP 客户端配置
156
+ ### 方式二:MCP 客户端手动配置
65
157
 
66
- 在 MCP 客户端(如 Cursor、VSCode CodeBuddy 等)的配置文件中添加:
158
+ 在 MCP 客户端(如 Cursor、CodeBuddy、Claude Desktop、Windsurf 等)的配置文件中添加以下 JSON:
67
159
 
68
160
  ```json
69
161
  {
@@ -72,20 +164,31 @@ metadata: { 'openclaw': { 'primaryEnv': 'TCA_TOKEN', 'category': 'tencent', 'emo
72
164
  "command": "npx",
73
165
  "args": ["-y", "-p", "tca-mcp-server@latest", "tca-mcp-stdio"],
74
166
  "env": {
75
- "TCA_TOKEN": "<你的TCA_TOKEN>",
76
- "TCA_USER_NAME": "<你的TCA_USER_NAME>"
167
+ "TCA_TOKEN": "<用户名>:<Token>"
77
168
  }
78
169
  }
79
170
  }
80
171
  }
81
172
  ```
82
173
 
83
- ### 安装验证
174
+ > 💡 也支持分开配置 `"TCA_TOKEN": "<Token>"` + `"TCA_USER_NAME": "<用户名>"`
175
+
176
+ 各客户端配置文件路径:
84
177
 
85
- 配置完成后,MCP 客户端会自动启动 TCA MCP Server。可以通过以下方式验证:
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
+ ### 安装验证
86
188
 
87
- - AI 对话中输入 "列出我的TCA团队",如果返回团队列表则说明配置成功
88
- - 如果返回鉴权失败,请检查 `TCA_TOKEN` `TCA_USER_NAME` 是否正确
189
+ - **mcporter 模式**:运行 `mcporter list tca` 确认服务已注册,或运行 `mcporter call tca list_orgs` 测试调用
190
+ - **MCP 客户端模式**:在 AI 对话中输入"列出我的TCA团队",如果返回团队列表则说明配置成功
191
+ - 如果返回鉴权失败,请检查 `TCA_TOKEN` 格式是否为 `用户名:Token`
89
192
 
90
193
  ## 🔧 工具列表
91
194
 
@@ -192,7 +295,7 @@ metadata: { 'openclaw': { 'primaryEnv': 'TCA_TOKEN', 'category': 'tencent', 'emo
192
295
 
193
296
  | 错误信息 | 错误类型 | 解决方案 |
194
297
  | ----------------------------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
195
- | **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) 重新获取 |
196
299
  | **403 Forbidden** | 权限不足 | 🔒 确认用户是否有对应团队/项目组的访问权限 |
197
300
  | **404 Not Found** | 资源不存在 | 🔍 检查 `orgSid`、`teamName`、`repoId`、`projectId` 是否正确,可通过 `list_orgs` → `list_teams` → `list_repos` → `list_projects` 重新获取 |
198
301
  | **请提供 mcpConfigFile 或 orgSid 等参数** | 参数缺失 | 📝 `start_scan` 等工具需要传入配置文件路径或直接传入 4 个参数(orgSid、teamName、repoId、projectId) |
@@ -201,7 +304,7 @@ metadata: { 'openclaw': { 'primaryEnv': 'TCA_TOKEN', 'category': 'tencent', 'emo
201
304
 
202
305
  ### 问题排查步骤
203
306
 
204
- 1. **检查环境变量**:确认 `TCA_TOKEN` 和 `TCA_USER_NAME` 已正确配置
307
+ 1. **检查环境变量**:确认 `TCA_TOKEN` 已正确配置(格式:`用户名:Token`)
205
308
  2. **检查网络连接**:确认能访问 TCA 官网 https://tca.tencent.com
206
309
  3. **检查参数**:确认传入工具的参数值正确(如 `orgSid`、`repoId` 等)
207
310
  4. **查看工具列表**:确认所调用的工具名称正确
@@ -1,90 +1,93 @@
1
1
  #!/bin/bash
2
- # Setup script for 腾讯云代码分析(TCA)MCP Server
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
- # 检查 Node.js 环境
10
- if ! command -v node &> /dev/null; then
11
- echo "❌ 未找到 Node.js,请先安装 Node.js >= 22.0.0"
12
- echo " 推荐使用 nvm 安装:https://github.com/nvm-sh/nvm"
13
- exit 1
14
- fi
15
-
16
- NODE_VERSION=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
17
- if [ "$NODE_VERSION" -lt 22 ]; then
18
- echo "⚠️ Node.js 版本过低(当前:$(node -v)),需要 >= 22.0.0"
19
- echo " 请升级 Node.js 版本"
20
- exit 1
21
- fi
22
- echo "✅ Node.js 版本检查通过:$(node -v)"
23
-
24
- # 检查 npx
25
- if ! command -v npx &> /dev/null; then
26
- echo "❌ 未找到 npx,请确保 npm 已正确安装"
27
- exit 1
28
- fi
29
- echo "✅ npx 可用"
30
-
31
- # 检查环境变量
32
- echo ""
11
+ # ───────────────────────────────────────
12
+ # 1. 检查环境变量
13
+ # ───────────────────────────────────────
33
14
  echo "🔧 检查环境变量配置..."
34
15
 
35
16
  if [ -z "$TCA_TOKEN" ]; then
36
17
  echo "⚠️ TCA_TOKEN 环境变量未设置"
37
- echo " 请访问 https://tca.tencent.com/user/token 获取 Token"
38
- echo " 然后设置环境变量:export TCA_TOKEN=\"你的Token值\""
18
+ echo " 请访问 https://tca.tencent.com/user/token 获取用户名和 Token"
19
+ echo " 然后在 OpenClaw 中配置环境变量 TCA_TOKEN,格式:用户名:Token"
39
20
  echo ""
40
- HAS_ERROR=true
41
- else
42
- echo "✅ TCA_TOKEN 已配置"
21
+ echo "❌ 请先配置 TCA_TOKEN 环境变量后重试"
22
+ exit 1
43
23
  fi
44
24
 
45
- if [ -z "$TCA_USER_NAME" ]; then
46
- echo "⚠️ TCA_USER_NAME 环境变量未设置"
47
- echo " 请访问 https://tca.tencent.com/user/token 获取用户名"
48
- echo " 然后设置环境变量:export TCA_USER_NAME=\"你的用户名\""
49
- echo ""
50
- 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)"
51
33
  else
52
- echo "TCA_USER_NAME 已配置"
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
53
45
  fi
54
46
 
55
- if [ "$HAS_ERROR" = true ]; then
56
- echo "❌ 请先配置所有必需的环境变量后重试"
57
- exit 1
47
+ # ───────────────────────────────────────
48
+ # 2. 检查 mcporter
49
+ # ───────────────────────────────────────
50
+ if ! command -v mcporter &> /dev/null; then
51
+ echo "⚠️ 未找到 mcporter,正在安装..."
52
+ npm install -g mcporter
53
+ echo "✅ mcporter 安装完成"
58
54
  fi
59
55
 
60
- # 验证 MCP Server 是否可以正常启动
56
+ # ───────────────────────────────────────
57
+ # 3. 添加 MCP 配置
58
+ # ───────────────────────────────────────
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
70
+
71
+ echo ""
72
+ echo "✅ 配置完成!"
61
73
  echo ""
62
- echo "🧪 验证 TCA MCP Server..."
63
- if npx -y -p tca-mcp-server@latest tca-mcp-stdio --version 2>/dev/null; then
64
- echo "✅ TCA MCP Server 安装验证成功"
74
+
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
65
82
  else
66
- echo "ℹ️ 首次运行时 npx 会自动下载 tca-mcp-server,无需手动安装"
83
+ echo "⚠️ 配置验证失败,请检查网络或 Token 是否正确"
67
84
  fi
68
85
 
69
86
  echo ""
70
87
  echo "─────────────────────────────────────"
71
88
  echo "🎉 设置完成!"
72
89
  echo ""
73
- echo "📖 MCP 客户端配置示例(添加到 MCP 配置文件中):"
74
- echo ""
75
- echo ' {'
76
- echo ' "mcpServers": {'
77
- echo ' "tca-mcp-server": {'
78
- echo ' "command": "npx",'
79
- echo ' "args": ["-y", "-p", "tca-mcp-server@latest", "tca-mcp-stdio"],'
80
- echo ' "env": {'
81
- echo " \"TCA_TOKEN\": \"$TCA_TOKEN\","
82
- echo " \"TCA_USER_NAME\": \"$TCA_USER_NAME\""
83
- echo ' }'
84
- echo ' }'
85
- echo ' }'
86
- echo ' }'
87
- echo ""
88
- echo "🏠 TCA 官网:https://tca.tencent.com"
89
- echo "📖 使用文档:https://tca.tencent.com/document/zh/guide/"
90
+ echo "📖 使用方法:"
91
+ echo " mcporter call tca list_orgs"
90
92
  echo ""
93
+ echo "📖 更多信息请查看 SKILL.md"
package/skill/tca.zip ADDED
Binary file
package/src/stdio.ts CHANGED
@@ -17,4 +17,5 @@ process.env.TCA_ENV = env;
17
17
  registerTools(server);
18
18
  const transport = new StdioServerTransport();
19
19
  await server.connect(transport);
20
- console.log('Server started');
20
+ // 注意:stdio 模式下必须使用 stderr 输出日志,stdout 专用于 MCP 协议通信
21
+ console.error('TCA MCP Server started');
@@ -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
  });