配置项 | 说明 |
资源名称 | 自定义名称,64个字符以内,支持中文、大小写字母、数字。 |
目的资源类型 | 选择资源归属的类型: 网关侧资源 - MCP:适用于已完成业务接入的 MCP,支持 MCP / 工具鉴权,支持多种安全检测与流量控制规则。选择后需配置: 网关实例:从已有网关实例中选择。 MCP:从已完成业务接入的 MCP 中选择,可多选;若现有 MCP 不满足需求,可单击新建 MCP。 网关侧资源 - API:适用于在 业务接入 / API 中发布的 API,支持接口级鉴权,支持多种安全检测与流量控制规则。选择后需配置: 网关实例:从已有网关实例中选择。 API:从已完成业务接入的 API 中选择,可多选;若现有 API 不满足需求,可单击新建 API。 云产品资源:适用于腾讯云产品资源,如 COS,支持资源级授权与凭据换取。选择后需在云产品下拉框中选择云产品。 其他资源(自定义资源):适用于非在网关发布的资源,如因合规要求不能对外发布的 API,支持资源级授权与凭据换取。 |
配置项 | 说明 |
认证源 | 选资源认证所用的认证源。若不选择,由用户在登录页自行选择认证方式;若现有认证源不满足需求,可单击新建认证源。 |
资源权限 | 选择资源的可见范围: 私有:默认拒绝所有访问,需在访问权限中添加允许对象。 公开:默认允许所有认证对象访问,可在访问权限中添加禁止对象。 |
资源名称_Skill_xxxxxxxxx.zip。如选择了多个资源(例如选择 2 个 MCP),则会生成对应数量的资源接入包。集成方式 | 适用场景 | 特点 |
业务 Skill 带脚本目录(Python / Node.js / Shell) | 凭据仅在内存中流转,不写入环境变量 | |
业务 Skill 为纯自然语言描述,无脚本目录 | 将认证鉴权流程封装为独立 Skill,通过前置要求引用 |
Skill.md 开头。# 前置要求,初始化工具 asdkcli 安装根据当前操作系统自动选择 asdkcli 的安装脚本执行。Unix 执行如下:( command -v asdkcli >/dev/null 2>&1 || { mkdir -p "$HOME/.local/bin" && OS_TAG=$(uname -s | tr '[:upper:]' '[:lower:]') && case "$(uname -m)" in x86_64|amd64) ARCH_TAG=amd64;; arm64|aarch64) ARCH_TAG=arm64;; *) echo "unsupported ARCH"; exit 1;; esac && curl -fsSL -o "$HOME/.local/bin/asdkcli" "https://agent-identity-1302490086.cos.ap-guangzhou.myqcloud.com/cli/new/asdkcli_${OS_TAG}_${ARCH_TAG}" && chmod +x "$HOME/.local/bin/asdkcli" && export PATH="$HOME/.local/bin:$PATH" && RC_FILE="${ZSH_VERSION:+$HOME/.zshrc}" && RC_FILE="${RC_FILE:-${BASH_VERSION:+$HOME/.bashrc}}" && RC_FILE="${RC_FILE:-$HOME/.profile}" && touch "$RC_FILE" && { grep -q '# asdkcli PATH' "$RC_FILE" || printf '\\n# asdkcli PATH\\nexport PATH="$HOME/.local/bin:$PATH"\\n' >> "$RC_FILE"; }; } )Windows 执行如下(PowerShell 模式执行):if (-not (Get-Command asdkcli.exe -ErrorAction SilentlyContinue)) { $d="$env:USERPROFILE\\.local\\bin"; if (-not (Test-Path $d)) { New-Item -ItemType Directory -Path $d -Force | Out-Null }; Invoke-WebRequest -Uri "https://agent-identity-1302490086.cos.ap-guangzhou.myqcloud.com/cli/new/asdkcli_windows_amd64.exe" -OutFile "$d\\asdkcli.exe" -UseBasicParsing; if ($env:Path -notlike "*$d*") { $env:Path="$env:Path;$d" }; $u=[Environment]::GetEnvironmentVariable("Path","User"); if ($u -notlike "*$d*") { [Environment]::SetEnvironmentVariable("Path","$u;$d","User") } }
import osimport shutilimport subprocessimport platformimport sysimport jsonfrom typing import Optionaldef get_asdkcli_result(extra_arg: Optional[str] = None) -> dict:IS_WINDOWS = platform.system().lower().startswith("win")os.environ["TAG"] = 'res-xxxxxxxx'arg = extra_arg if extra_arg else None# Step 1: 检测 asdkcli 是否已安装cli_name = "asdkcli.exe" if IS_WINDOWS else "asdkcli"if shutil.which(cli_name) is None:print(f"[asdkcli] '{cli_name}' not found in PATH.\\n""请先安装 asdkcli 后再运行本脚本,参考 Skill.md 中的安装说明。",file=sys.stderr,)sys.exit(1)# Step 2: 组装 envchild_env = os.environ.copy()# Step 3: 执行 asdkclitry:cmd = [cli_name]if arg:cmd.append(arg)run_proc = subprocess.run(cmd,env=child_env,capture_output=True,text=True,encoding="utf-8",)except OSError as e:print(f"[asdkcli] spawn error: {e}", file=sys.stderr)sys.exit(1)if run_proc.stderr:sys.stderr.write(run_proc.stderr)# Step 4: 解析 stdoutraw = (run_proc.stdout or "").strip()if not raw:print("[asdkcli] empty output", file=sys.stderr)sys.exit(1)try:obj = json.loads(raw)except json.JSONDecodeError:print("[asdkcli] output is not valid JSON:", file=sys.stderr)sys.stdout.write(raw + "\\n")sys.exit(1)if not isinstance(obj, dict):print("[asdkcli] output JSON is not an object", file=sys.stderr)sys.exit(1)return objcli_json = get_asdkcli_result(sys.argv[1] if len(sys.argv) > 1 else None)code = cli_json.get("Code") if isinstance(cli_json, dict) else Noneif code != 0:print(cli_json.get("Message", "") if isinstance(cli_json, dict) else "")sys.exit(1)
const os = require('os');const path = require('path');const fs = require('fs');const { spawnSync } = require('child_process');function getAsdkcliResult(extraArg) {const IS_WINDOWS = os.platform() === 'win32';process.env.TAG = 'res-xxxxxxxx';const arg = extraArg || null;// Step 1: 检测 asdkcli 是否已安装const cliName = IS_WINDOWS ? 'asdkcli.exe' : 'asdkcli';if (!which(cliName)) {console.error(`[asdkcli] '${cliName}' not found in PATH.\\n` +'请先安装 asdkcli 后再运行本脚本,参考 Skill.md 中的安装说明。');process.exit(1);}// Step 2: 组装 envconst childEnv = { ...process.env };// Step 3: 执行 asdkcliconst cmdArgs = arg ? [arg] : [];const run = spawnSync(cliName, cmdArgs, {env: childEnv,encoding: 'utf-8',});if (run.error) {console.error(`[asdkcli] spawn error: ${run.error.message}`);process.exit(1);}if (run.stderr) {process.stderr.write(run.stderr);}// Step 4: 解析 stdoutconst raw = (run.stdout || '').trim();if (!raw) {console.error('[asdkcli] empty output');process.exit(1);}let obj;try {obj = JSON.parse(raw);} catch (_) {console.error('[asdkcli] output is not valid JSON:');process.stdout.write(raw + '\\n');process.exit(1);}if (obj === null || typeof obj !== 'object' || Array.isArray(obj)) {console.error('[asdkcli] output JSON is not an object');process.exit(1);}return obj;}function which(cmd) {const isWin = os.platform() === 'win32';const pathEnv = process.env.PATH || process.env.Path || '';const sep = isWin ? ';' : ':';const exts = isWin ? (process.env.PATHEXT || '.EXE;.CMD;.BAT').split(';') : [''];for (const dir of pathEnv.split(sep)) {if (!dir) continue;for (const ext of exts) {const full = path.join(dir, cmd + (isWin && !cmd.toLowerCase().endsWith(ext.toLowerCase()) ? ext : ''));try {if (fs.existsSync(full)) return full;} catch (_) {}}}return null;}const cliJson = getAsdkcliResult(process.argv[2] || null);const code = cliJson && typeof cliJson === 'object' ? cliJson.Code : null;if (code !== 0) {console.log(cliJson && cliJson.Message ? String(cliJson.Message) : '');process.exit(1);}
#!/usr/bin/env bashset -u -o pipefail_stdout_file=$(mktemp)_stderr_file=$(mktemp)trap 'rm -f "$_stdout_file" "$_stderr_file"' EXITget_asdkcli_result() {local extra_arg="$1"export TAG='res-xxxxxxxx'local cli_name="asdkcli"# Step 1: 检测 asdkcli 是否已安装if ! command -v "$cli_name" >/dev/null 2>&1; thenprintf "[asdkcli] '%s' not found in PATH.\\n请先安装 asdkcli 后再运行本脚本,参考 Skill.md 中的安装说明。\\n" "$cli_name" >&2exit 1fi# Step 2 & 3: 执行 asdkcliif [ -n "$extra_arg" ]; then"$cli_name" "$extra_arg" >"$_stdout_file" 2>"$_stderr_file" || trueelse"$cli_name" >"$_stdout_file" 2>"$_stderr_file" || truefiif [ -s "$_stderr_file" ]; thencat "$_stderr_file" >&2fi# Step 4: 解析 stdoutlocal rawraw=$(sed -e 's/^[[:space:]]*//; s/[[:space:]]*$//' "$_stdout_file")if [ -z "$raw" ]; thenecho "[asdkcli] empty output" >&2exit 1fiif ! command -v jq >/dev/null 2>&1; thenecho "[asdkcli] 'jq' is required to parse output, please install jq" >&2exit 1fiif ! echo "$raw" | jq -e . >/dev/null 2>&1; thenecho "[asdkcli] output is not valid JSON:" >&2echo "$raw"exit 1filocal kindkind=$(echo "$raw" | jq -r 'type')if [ "$kind" != "object" ]; thenecho "[asdkcli] output JSON is not an object" >&2exit 1fiprintf "%s" "$raw"}cli_json=$(get_asdkcli_result "${1:-}")code=$(echo "$cli_json" | jq -r '.Code // empty')if [ "$code" != "0" ]; thenecho "$cli_json" | jq -r '.Message // ""'exit 1fi
# 前置要求1. 执行前请先调用 auth_permission 进行认证鉴权,当前 TAG 为 'res-xxxxxxxx'(即步骤一创建资源的资源 ID);2. auth_permission 鉴权通过后返回 success,会自动将获取到的凭据注入到环境变量中,按需读取;3. 如果 auth_permission 在认证通过后返回非 success,则表明当前用户无权限操作,应给予阻断,并原样输出 auth_permission 的返回内容;
资源名称_Skill_xxxxxxxxx.zip。字段 | 说明 |
资源 ID / 名称 | 资源的唯一标识与名称。 |
上报智能体数 | 已注册上报的智能体数量。 说明: 1. 确认资源接入包是否已下载并完成集成。如需重新获取,可在操作区重新生成资源接入包,并下载后分发给开发人员。 2. 集成后是否实际发起过调用。 3. 调用认证是否通过,可在访问日志中查看调用记录。 |
资源类型 | 资源的归属类型(网关侧资源 - MCP / API、云产品资源、自定义资源)。 |
关联目的资源 | 资源关联的目的资源。 |
认证源 | 资源关联的认证源。 |
资源权限 | 资源的可见范围(私有 / 公开)。 |
调用量 | 资源的被调用次数。 |
最近更新时间 | 资源信息最近一次更新的时间。 |
操作 | 接入指引:重新查看该资源的 SDK 代码片段或鉴权 Skill 接入包。 编辑:修改资源名称、目的资源类型、认证源、资源权限等。 删除:移除该资源。删除前请确认没有智能体正在使用它,以免影响正常访问。 |
文档反馈