OpenTiny NEXT-SDKs is a front-end AI and browser automation toolkit. It implements WebMCP + WebSkills to build AI-native apps, and leverages webmcp-cli to enable LLM agents to remote-control any webpage without source code modifications. OpenTiny NEXT-SDKs 是一套前端 AI 与浏览器自动化工具包。它通过 WebMCP + WebSkills 协议构建 AI 原生应用,并利用 webmcp-cli 实现了无需修改源码即可让大模型代理自动控制任
Drift inferred · capture-to-capture
- HIGH code analysis flagged committed secret ×2 in opentiny/webmcp-sdk
- HIGH code analysis flagged committed secret ×2 in opentiny/webmcp-sdk
- HIGH code analysis flagged committed secret ×2 in opentiny/webmcp-sdk
- HIGH code analysis flagged committed secret ×2 in opentiny/webmcp-sdk
- HIGH code analysis flagged committed secret ×2 in opentiny/webmcp-sdk
- HIGH code analysis flagged committed secret ×2 in opentiny/webmcp-sdk
- HIGH code analysis flagged committed secret ×2 in opentiny/webmcp-sdk
- HIGH code analysis flagged committed secret ×2 in opentiny/webmcp-sdk
- HIGH code analysis flagged committed secret ×2 in opentiny/webmcp-sdk
- HIGH code analysis flagged committed secret ×2, dynamic code execution ×3 in opentiny/webmcp-sdk
- HIGH code analysis flagged committed secret ×2, dynamic code execution in opentiny/webmcp-sdk
- HIGH code analysis flagged committed secret ×2, dynamic code execution in opentiny/webmcp-sdk
- HIGH code analysis flagged committed secret ×2, dynamic code execution in opentiny/webmcp-sdk
- HIGH code analysis flagged committed secret ×2, dynamic code execution in opentiny/webmcp-sdk
- HIGH code analysis flagged committed secret ×2, dynamic code execution in opentiny/webmcp-sdk
- HIGH code analysis flagged committed secret ×2, dynamic code execution in opentiny/webmcp-sdk
- HIGH code analysis flagged committed secret ×2, dynamic code execution in opentiny/webmcp-sdk
transport — counts 1 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
button-control
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 8599cf4 · analyzer v33 · 3d ago
skills & prompt files 21
- agent-rules opentiny-webmcp-sdk-8599cf4/AGENTS.md
- skill opentiny-webmcp-sdk-8599cf4/packages/doc-ai-angular/remoter/src/skills/inventory/SKILL.md
- skill opentiny-webmcp-sdk-8599cf4/packages/doc-ai-angular/remoter/src/skills/orders/SKILL.md
- skill opentiny-webmcp-sdk-8599cf4/packages/doc-ai-angular/remoter/src/skills/price-protection/SKILL.md
- skill opentiny-webmcp-sdk-8599cf4/packages/doc-ai-angular/remoter/src/skills/product-guide/SKILL.md
- skill opentiny-webmcp-sdk-8599cf4/packages/doc-ai-angular/remoter/src/skills/sales/SKILL.md
- skill opentiny-webmcp-sdk-8599cf4/packages/doc-ai-react/remoter/src/skills/inventory/SKILL.md
- skill opentiny-webmcp-sdk-8599cf4/packages/doc-ai-react/remoter/src/skills/orders/SKILL.md
- skill opentiny-webmcp-sdk-8599cf4/packages/doc-ai-react/remoter/src/skills/price-protection/SKILL.md
- skill opentiny-webmcp-sdk-8599cf4/packages/doc-ai-react/remoter/src/skills/sales/SKILL.md
- skill opentiny-webmcp-sdk-8599cf4/packages/doc-ai/src/skills/inventory/SKILL.md
- skill opentiny-webmcp-sdk-8599cf4/packages/doc-ai/src/skills/orders/SKILL.md
- skill opentiny-webmcp-sdk-8599cf4/packages/doc-ai/src/skills/price-protection/SKILL.md
- skill opentiny-webmcp-sdk-8599cf4/packages/doc-ai/src/skills/sales/SKILL.md
- prompt-file opentiny-webmcp-sdk-8599cf4/packages/next-remoter/src/prompt/office-prompt.md
- prompt-file opentiny-webmcp-sdk-8599cf4/packages/next-remoter/src/prompt/shop-prompt.md
- agent-rules opentiny-webmcp-sdk-8599cf4/packages/next-sdk/AGENTS.md
- skill opentiny-webmcp-sdk-8599cf4/packages/next-sdk/skills/page-agent/SKILL.md
- skill opentiny-webmcp-sdk-8599cf4/packages/next-wxt/skills/drawer-expert/SKILL.md
- skill opentiny-webmcp-sdk-8599cf4/packages/next-wxt/skills/month-report-expert/SKILL.md
- skill opentiny-webmcp-sdk-8599cf4/packages/webmcp-cli-skill/SKILL.md
danger signals6
- dynamic code execution new Function() opentiny-webmcp-sdk-8599cf4/packages/next-sdk/page-tools/handlers/executeJavascript.ts :7
let result = await new Function(`return (async () => { ${args.script} })()`)() - dynamic code execution eval() opentiny-webmcp-sdk-8599cf4/packages/next-wxt/public/vendor/runtime.js :16
(script,signal){try{const asyncFunction=eval(` - dynamic code execution new Function() opentiny-webmcp-sdk-8599cf4/packages/next-wxt/public/vendor/user-mcp-exec.js :51
var runner = new Function(code) - dynamic code execution new Function() opentiny-webmcp-sdk-8599cf4/packages/next-wxt/user-mcp-scripts/pack.ts :90
const value = new Function(`"use strict"; return (${raw});`)() - committed secret committed .env opentiny-webmcp-sdk-8599cf4/packages/next-wxt/env/.env.inner :1
env file shipped with populated values - committed secret committed .env opentiny-webmcp-sdk-8599cf4/packages/next-wxt/env/.env.open :1
env file shipped with populated values
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 289
filesystem 17
- fs (weak) opentiny-webmcp-sdk-8599cf4/.github/scripts/lib/pr-gate-artifacts.mjs :5
import fs from 'node:fs' - fs (weak) opentiny-webmcp-sdk-8599cf4/.github/scripts/pr-gate.mjs :12
import fs from 'node:fs' - fs (weak) opentiny-webmcp-sdk-8599cf4/packages/next-remoter/vite.config.ts :3
import { readFileSync } from 'node:fs' - fs opentiny-webmcp-sdk-8599cf4/packages/next-sdk/script/utils.ts :1
import { readFileSync } from 'fs' - fs (weak) opentiny-webmcp-sdk-8599cf4/packages/next-sdk/test/dev-entry.test.ts :1
import { readFileSync } from 'node:fs' - fs (weak) opentiny-webmcp-sdk-8599cf4/packages/next-sdk/test/page-tools/pr-gate-auto-artifact.test.ts :2
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs' - fs opentiny-webmcp-sdk-8599cf4/packages/next-wxt/plugins/vite-plugin-manifest-options.ts :3
import * as fs from 'fs' - fs opentiny-webmcp-sdk-8599cf4/packages/next-wxt/plugins/vite-plugin-mcp-servers.ts :3
import * as fs from 'fs' - fs (weak) opentiny-webmcp-sdk-8599cf4/packages/next-wxt/scripts/fix-manifest-options.mjs :8
import * as fs from 'fs' - fs (weak) opentiny-webmcp-sdk-8599cf4/packages/webmcp-cli/scripts/build-inject.mjs :2
import { mkdirSync, readdirSync, statSync } from 'fs' - fs opentiny-webmcp-sdk-8599cf4/packages/webmcp-cli/src/bin.ts :2
import fs from 'fs' - fs opentiny-webmcp-sdk-8599cf4/packages/webmcp-cli/src/browser.ts :3
import fs from 'fs'
show 5 more
- fs opentiny-webmcp-sdk-8599cf4/packages/webmcp-cli/src/expand-file-refs.ts :1
import { readFileSync } from 'fs' - fs (weak) opentiny-webmcp-sdk-8599cf4/packages/webmcp-cli/test/browser.e2e.test.ts :6
import { existsSync, mkdtempSync, rmSync } from 'fs' - fs (weak) opentiny-webmcp-sdk-8599cf4/packages/webmcp-cli/test/expand-file-refs.test.ts :1
import { mkdirSync, readFileSync, writeFileSync } from 'fs' - fs (weak) opentiny-webmcp-sdk-8599cf4/packages/webmcp-cli/test/parse-run-args.test.ts :2
import { mkdirSync, writeFileSync } from 'fs' - fs (weak) opentiny-webmcp-sdk-8599cf4/scripts/skills-sync.mjs :8
import fs from 'node:fs'
shell / exec 8
- shell (weak) opentiny-webmcp-sdk-8599cf4/packages/next-sdk/test/page-tools/pr-gate-auto-artifact.test.ts :5
import { spawnSync } from 'node:child_process' - shell opentiny-webmcp-sdk-8599cf4/packages/next-wxt/entrypoints/background/inject-user-mcp-scripts.ts :8
* 能力令牌:先 bind(token) 再 exec(code, token);token 仅存于 background(及桥闭包)。 - shell opentiny-webmcp-sdk-8599cf4/packages/next-wxt/entrypoints/content.ts :92
* → background bind(token) → exec(code, token) - shell opentiny-webmcp-sdk-8599cf4/packages/next-wxt/public/vendor/user-mcp-exec.js :8
* 3. bind 用闭包保存 token,安装不可配置的 exec(code, capability);校验失败则拒绝 - shell (weak) opentiny-webmcp-sdk-8599cf4/packages/next-wxt/test/user-mcp-scripts/csp-bridge-repro.test.ts :61
it('injectUserMcpScriptsForTab:先 bind(token) 再经 MAIN world 调用 exec(code, token)', async () => { - shell opentiny-webmcp-sdk-8599cf4/packages/next-wxt/user-mcp-scripts/exec-bridge.ts :14
* 4. background:bind(token) → exec(code, token) - shell opentiny-webmcp-sdk-8599cf4/packages/webmcp-cli/src/browser.ts :7
import { spawn } from 'child_process' - shell (weak) opentiny-webmcp-sdk-8599cf4/packages/webmcp-cli/test/browser.e2e.test.ts :5
import { spawnSync } from 'child_process'
network 4
- net opentiny-webmcp-sdk-8599cf4/packages/next-remoter/src/composable/usePluginSession.ts :74
const response = await fetch(`${agentRoot.value}client?sessionId=${input.slice(1)}`) - net opentiny-webmcp-sdk-8599cf4/packages/next-sdk-playground/src/utils/versions.ts :21
const response = await fetch(`https://registry.npmmirror.com/${pkg}`) - net opentiny-webmcp-sdk-8599cf4/packages/webmcp-cli/src/browser.ts :6
import http from 'http' - net (weak) opentiny-webmcp-sdk-8599cf4/packages/webmcp-cli/test/browser.e2e.test.ts :7
import http from 'http'
secrets 1
- secrets (weak) opentiny-webmcp-sdk-8599cf4/packages/doc-ai/vite.config.ts :21
TINY_USER_TOKEN: process.env.TINY_USER_TOKEN
tool registrations 1
- button-control opentiny-webmcp-sdk-8599cf4/packages/next-sdk-playground/src/utils/default-files.ts :37
install hooks 3
- prepare opentiny-webmcp-sdk-8599cf4/package.json :8
node ./scripts/skills-sync.mjs - postinstall opentiny-webmcp-sdk-8599cf4/packages/next-wxt/package.json :19
wxt prepare - prepublishOnly opentiny-webmcp-sdk-8599cf4/packages/webmcp-cli/package.json :19
pnpm run build
declared dependencies 2
- @modelcontextprotocol/inspector@catalog:
- prettier@catalog:
clipboard 2
- navigator.clipboard opentiny-webmcp-sdk-8599cf4/packages/next-sdk/page-tools/handlers/clipboard.ts :7
await navigator.clipboard.writeText(args.text) - clipboard dependency opentiny-webmcp-sdk-8599cf4/packages/webmcp-cli/src/commands/clipboard.ts :1
import clipboard from 'clipboardy'