douyin-upload-mcp-skill@0.1.8
CAUTION· static onlyPublisher claims: "抖音自动投放与登录守卫。用于抖音创作者平台自动发布视频/图文、检测登录失效、生成二维码、处理短信/机器人/安全验证、同步数据生成分析、根据数据生成下一条视频方案、自动回复评论/私信、数字人形象定制/训练、一键成片、截图并通过飞书提醒客户。遇到抖音发布、投放、二维码登录、客户扫码、登录过期、发布前检查、字段化短视频..." Observed in sandbox: static analysis only — behavior not yet observed.
Coverage
Static only; nothing was run yet.The label rests on the code, the instruction files and the publisher. The honeypot run replaces this verdict when it completes.
Is [email protected] safe to install?
KillerSkills analysed it statically (a sandbox run is pending) on 2026-11-14 and scored it 51/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Access to sensitive file paths; Access to sensitive file paths; Privileged sudo command. Summary: static analysis only — behavior not yet observed.
Behavior trace
Queued for honeypot run · static analysis onlyThis version has not been detonated yet. The score above counts behavior as unknown (50/100), so it cannot read Verified until the honeypot run completes and replaces this verdict.
Static findings
join(vendorXiaoiceToolDir, '.env.example'),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.'Install Chrome/Edge/Chromium manually, or set BROWSER_PATH in .env.local.',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.echo "sudo is required to install a browser automatically. Run sudo -v first, or install Chrome/Edge/Chromium manually." >&2Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.'./.env.local',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const XIAOICE_ENV_PATH = process.env.XIAOICE_VIDEO_ENV_PATH || join(HOME, '自动营销', 'xiaoice-video-tool', '.env');Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const SKILL_ENV_PATH = new URL('../.env', import.meta.url).pathname;Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env: { ...process.env, ...env },Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const xiaoiceEnvPath = resolveHomePath(process.env.XIAOICE_VIDEO_ENV_PATH || join(xiaoiceToolDir, '.env'));Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.'./.env',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const SKILL_LOCAL_ENV_PATH = new URL('../.env.local', import.meta.url).pathname;Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.elif command -v sudo >/dev/null 2>&1 && sudo -n true >/dev/null 2>&1; thenFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.const envLocalPath = join(tempRoot, '.env.local');Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.envKeys: Object.keys(server?.env || {}).sort(),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…w/skills`。 4. 安装后运行 `npm install`/`npm ci`、`cp references/skill-local-config.md .env.local 2>/dev/null || cp .env.example .env.local`、`node scripts/bootstrap-opencl…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.join(xiaoiceToolDir, '.env.example'),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…查:`已收到截图请求,我会先截当前页面再处理。` 统一迁移顺序: 0. 从源机器导出迁移包。默认安全包:`npm run export:skill`,不含 `.env/.env.local`。受信任私有机器需要带密钥时:`node scripts/export-skill-package.js /path/to/out --…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Default excludes .env/.env.local. Use --include-env only for trusted private transfer.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.hints: ['Set VIDEO_CALLBACK_PUBLIC_BASE_URL in .env, or set VIDEO_USE_NGROK=true'],Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.// ── 手动加载 .env 文件(不依赖 dotenv) ──Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.loadEnvFileIntoProcess(join(ROOT, '.env.local'));Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.'Verify VIDEO_SERVICE_ADMIN_TOKEN in .env',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.loadEnvFileIntoProcess(join(ROOT, '.env.development'));Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const XIAOICE_ENV_PATH = process.env.XIAOICE_VIDEO_ENV_PATH || join(XIAOICE_TOOL_DIR, '.env');Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- If the user asks to rotate the XiaoIce API key, ask for the new provider key or point them to the service `.env` / runtime config, not the plugin config.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.`Run npm run dev:ngrok first, or set VIDEO_CALLBACK_PUBLIC_BASE_URL in .env when VIDEO_USE_NGROK=false`,Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- admin token source: `VIDEO_SERVICE_ADMIN_TOKEN` in `/home/yirongbest/xiaoice-video-tool/.env`Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.* 2. .env.local(本机真实测试/密钥配置,git-ignored)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const xiaoiceEnvPath = resolveHomePath(process.env.XIAOICE_VIDEO_ENV_PATH || join(xiaoiceToolDir, '.env'));Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- service env file: `/home/yirongbest/xiaoice-video-tool/.env`Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.hints: ['Set VIDEO_SERVICE_ADMIN_TOKEN in .env'],Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- persistent update (survives service restart): edit `/home/yirongbest/xiaoice-video-tool/.env`Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.'Check NGROK_API_URL and VIDEO_TASK_SERVICE_PORT in .env',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.'If Feishu credentials or receive chat id are missing, fill .env.local or OpenClaw Feishu account config.',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.* 4. .env(基础配置,可提交到 git)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.`Verify NGROK_BIN in .env (current: ${context.ngrok.bin})`,Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const XIAOICE_ENV_PATH = process.env.XIAOICE_VIDEO_ENV_PATH || join(process.env.HOME || '.', '自动营销', 'xiaoice-video-tool', '.env');Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.* 3. .env.development(开发环境,git-ignored)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.'Verify .env tokens and provider settings',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.function loadDotEnv({ envPath = path.join(REPO_ROOT, '.env') } = {}) {Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.'Fill XiaoIce video provider keys and service tokens in the XiaoIce .env file.',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.* 解析 .env 文件内容为 key-value 对象Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.loadEnvFileIntoProcess(join(ROOT, '.env'));Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.'Create XiaoIce .env from references/xiaoice-service-config.md or vendor/xiaoice-video-tool/.env.example and fill provider keys.',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.export XIAOICE_VIDEO_ENV_PATH="${XIAOICE_VIDEO_ENV_PATH:-${XIAOICE_DIR}/.env}"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.hints: ['Set VIDEO_SERVICE_CALLBACK_TOKEN in .env'],Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.? '飞书应用缺少多维表权限。请打开 authUrl 授权 bitable:app 或 base:app:create;如果使用已有多维表,还需把 FEISHU_BITABLE_APP_TOKEN 配到 .env。'Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.'Set VIDEO_SERVICE_ADMIN_TOKEN in .env',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.node scripts/prepare-upstream-publish-task.js --input upstream.json [--output templates/publish-task.from-upstream.json] [--cache-dir /path]Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.const callbackPublicBaseUrl = 'https://demo.ngrok.app';Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.console.log(`[ops] 验证码填入结果: value="${inputState.value}", verifyEnabled=${inputState.verifyEnabled}`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(JSON.stringify({ ok: false, error: 'send_button_disabled', target: first, prepare, targetPrepare, opened, fill }, null, 2));Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(JSON.stringify({ ok: false, error: 'dm_send_button_disabled', fill }, null, 2));Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.public_url: 'https://correct-port.ngrok.app',Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.`Verify NGROK_API_URL in .env (current: ${context.ngrok.apiUrl})`,Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.public_url: 'https://wrong-port.ngrok.app',Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.const kill = killBrowserPortProcesses();Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.node scripts/prepare-upstream-publish-task.js --input upstream.json --output publish-task.jsonFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(`[ops] 文件已通过隐藏 input 直接塞入 (${paths.length} 个),等待处理...`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(`[browser] 从 Daemon 获取到 wsEndpoint,正在建立 CDP 直连...`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.'Set VIDEO_CALLBACK_PUBLIC_BASE_URL in .env, or run npm run dev:ngrok first',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."public_url": "http://target-http-only.ngrok-free.app",Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.`Set ${name} in .env`,Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.assert.equal(selected.publicUrl, 'https://correct-port.ngrok.app');Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.console.log(JSON.stringify(output, null, 2));Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.assert.equal(selectedUrl, 'https://exact-first.ngrok-free.app');Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls."public_url": "https://current-public.ngrok-free.app",Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.console.log(JSON.stringify(output, null, 2));Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."public_url": "https://exact-first.ngrok-free.app",Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls."public_url": "https://exact-second.ngrok-free.app",Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.console.log(JSON.stringify(output, null, 2));Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.'Verify VIDEO_SERVICE_INTERNAL_TOKEN / VIDEO_SERVICE_ADMIN_TOKEN / VIDEO_SERVICE_CALLBACK_TOKEN in .env',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.body: { data: { callbackPublicBaseUrl: 'https://exact-first.ngrok-free.app' } },Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.spawnSync('bash', ['-lc', "pgrep -f 'src/daemon/server.js' | xargs -r kill -KILL"], {Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."public_url": "https://wrong-port.ngrok-free.app",Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.env: { ...process.env, ...env },Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.spawnSync('bash', ['-lc', "pgrep -f 'src/daemon/server.js' | xargs -r kill -TERM"], {Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.public_url: 'http://correct-port-http.ngrok.app',Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.console.log(JSON.stringify(output, null, 2));Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(JSON.stringify(output, null, 2));Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(`[ops] 获取验证码点击结果: ${JSON.stringify(sendCodeResult)}`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.callbackPublicBaseUrl: 'https://exact-first.ngrok-free.app',Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.callbackPublicBaseUrl: 'https://exact-first.ngrok-free.app',Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.callbackPublicBaseUrl: 'https://exact-first.ngrok-free.app',Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
29 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim mrchenyh: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- File type combined with upload action≈ +2 on the totalRemove the call, or declare the host in frontmatter and explain in the README what is sent and why.
- Tunneling service URL≈ +2 on the totalReplace encoded or assembled strings with plain literals and remove undeclared network calls.
- Process kill command≈ +2 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.