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 +2 -1
- package/dist/tools/index.js +14 -2
- package/package.json +1 -1
- package/skill/install.sh +55 -0
- package/skill/pack.sh +32 -0
- package/skill/tca/README.md +70 -0
- package/skill/tca/{skill.md → SKILL.md} +122 -19
- package/skill/tca/setup.sh +66 -63
- package/skill/tca.zip +0 -0
- package/src/stdio.ts +2 -1
- package/src/tools/index.ts +16 -2
- /package/skill/{tca-code-scan/skill.md → tca/references/tca-code-scan.md} +0 -0
- /package/skill/{tca-issue-fix/skill.md → tca/references/tca-issue-fix.md} +0 -0
- /package/skill/{tca-job-monitor/skill.md → tca/references/tca-job-monitor.md} +0 -0
- /package/skill/{tca-setup/skill.md → tca/references/tca-setup.md} +0 -0
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
|
-
|
|
16
|
+
// 注意:stdio 模式下必须使用 stderr 输出日志,stdout 专用于 MCP 协议通信
|
|
17
|
+
console.error('TCA MCP Server started');
|
package/dist/tools/index.js
CHANGED
|
@@ -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
|
|
9
|
-
userName
|
|
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
package/skill/install.sh
ADDED
|
@@ -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
|
|
2
|
+
name: tca
|
|
3
3
|
description: 腾讯云代码分析(TCA),提供完整的代码分析操作能力。当用户需要进行代码质量检查、安全扫描、代码规范检查时使用此skill,包括:(1) 配置和管理TCA分析项目 (2) 启动全量/增量代码扫描 (3) 查看和修复代码问题 (4) 监控扫描任务状态 (5) 获取分析报告。
|
|
4
4
|
homepage: https://tca.tencent.com
|
|
5
|
-
metadata:
|
|
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
|
-
|
|
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、
|
|
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": "
|
|
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
|
-
|
|
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
|
-
-
|
|
88
|
-
-
|
|
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`
|
|
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`
|
|
307
|
+
1. **检查环境变量**:确认 `TCA_TOKEN` 已正确配置(格式:`用户名:Token`)
|
|
205
308
|
2. **检查网络连接**:确认能访问 TCA 官网 https://tca.tencent.com
|
|
206
309
|
3. **检查参数**:确认传入工具的参数值正确(如 `orgSid`、`repoId` 等)
|
|
207
310
|
4. **查看工具列表**:确认所调用的工具名称正确
|
package/skill/tca/setup.sh
CHANGED
|
@@ -1,90 +1,93 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# Setup script for 腾讯云代码分析(TCA)MCP
|
|
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
|
|
8
|
+
echo "🚀 设置腾讯云代码分析(TCA)MCP Skill..."
|
|
7
9
|
echo ""
|
|
8
10
|
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
|
|
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
|
|
38
|
-
echo "
|
|
18
|
+
echo " 请访问 https://tca.tencent.com/user/token 获取用户名和 Token"
|
|
19
|
+
echo " 然后在 OpenClaw 中配置环境变量 TCA_TOKEN,格式:用户名:Token"
|
|
39
20
|
echo ""
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
echo "✅ TCA_TOKEN 已配置"
|
|
21
|
+
echo "❌ 请先配置 TCA_TOKEN 环境变量后重试"
|
|
22
|
+
exit 1
|
|
43
23
|
fi
|
|
44
24
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
#
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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 "
|
|
83
|
+
echo "⚠️ 配置验证失败,请检查网络或 Token 是否正确"
|
|
67
84
|
fi
|
|
68
85
|
|
|
69
86
|
echo ""
|
|
70
87
|
echo "─────────────────────────────────────"
|
|
71
88
|
echo "🎉 设置完成!"
|
|
72
89
|
echo ""
|
|
73
|
-
echo "📖
|
|
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
|
-
|
|
20
|
+
// 注意:stdio 模式下必须使用 stderr 输出日志,stdout 专用于 MCP 协议通信
|
|
21
|
+
console.error('TCA MCP Server started');
|
package/src/tools/index.ts
CHANGED
|
@@ -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
|
|
11
|
-
userName
|
|
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
|
});
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|