douyin-ide-control
This server is a local MCP bridge for safely controlling Douyin (TikTok China) developer tools from Codex or other MCP hosts, with strict workspace/path boundaries and explicit confirmation for risky actions.
Environment & identity checks:
douyin_check_environmentverifies CLI, IDE, login, CDP targets, and project metadata;douyin_project_identityidentifies project type, AppID, and permission status;douyin_tmg_checkchecks the minigame CLI.Open/create projects:
douyin_open_projectanddouyin_tmg_openopen projects via official CLI protocols (tma/tmg) with optional AppID/type validation;douyin_create_minigame_projectcreates minigame projects through the IDE startup page.Build & preview:
douyin_build_npmruns npm builds;douyin_previewgenerates preview QR codes into the workspace;douyin_compile_refreshtriggers IDE compile/refresh via DOM or shortcut.Capture & diagnostics:
douyin_capturescreenshots the IDE window or simulator;douyin_read_console_errorsreads DevTools console errors best-effort.Project info queries:
douyin_project_size,douyin_audit_hosts, anddouyin_project_versionprovide package size, audit hosts, and latest published version.High-risk actions with confirmation:
douyin_upload,douyin_audit, anddouyin_set_app_configrequire explicitconfirm=true(or token input) and never auto-retry.IDE-native upload/preview:
douyin_ide_uploadanddouyin_ide_previewbypass CLI login by driving the already-logged-in IDE workbench DOM, with strict project binding, trust-dialog handling, form fill/readback, and three-state result verification.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@douyin-ide-controlOpen the minigame project and capture a screenshot of the preview."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
douyin-ide-control
本地 stdio MCP,用于在 Codex 或其他 MCP 宿主中安全调用抖音开发者工具。调用优先级为:官方 tt-ide-cli → IDE 本地 CDP/DevTools → Windows 原生窗口能力。
安全与路径边界
工作区由环境变量
DOUYIN_WORKSPACE_ROOT指定。未配置时工具会明确拒绝并返回WORKSPACE_NOT_CONFIGURED,不会静默把插件安装目录当成工作区。所有项目和输出路径都必须位于工作区内,避免误操作其他目录。
本仓库不包含 AppID、Token、Cookie、密码、API key、登录配置或本机截图。
上传、提审、设置 AppID Token 等高风险动作必须显式确认。
工具不会回显 Cookie 内容或 Cookie 文件路径;日志对 token/cookie/password/authorization 等字段做脱敏。
Related MCP server: harmonyos-dev-mcp
工作区配置(必读)
工作区必须由宿主显式传入。没有环境变量时唯一安全的行为是拒绝执行:MCP 服务器由宿主拉起,process.cwd() 通常是插件安装目录,若默认采用它,真实项目会被白名单错误拒绝,而错误信息还会误导排查方向。
配置方式(任选其一,按宿主能力):
# ~/.codex/config.toml —— 全局注册 MCP 服务器时指定 env
[mcp_servers.douyin-ide-control]
command = 'node'
args = ['<插件目录>/src/server.mjs']
[mcp_servers.douyin-ide-control.env]
DOUYIN_WORKSPACE_ROOT = '<你的项目根目录>'# 或通过 CLI 注册
codex mcp add douyin-ide-control --env DOUYIN_WORKSPACE_ROOT=<你的项目根目录> -- node <插件目录>/src/server.mjs未配置时的表现:
需要工作区的工具(打开/编译/预览/上传等)顶层失败,错误码
WORKSPACE_NOT_CONFIGURED,并在hint里给出配置方法。douyin_check_environment不抛错,而是返回workspaceConfigured:false与workspaceError,便于直接排障。
环境变量
变量 | 用途 | 是否必需 |
| 工作区根目录;未设置时工具拒绝执行 | 必需 |
| 显式指定本机 | 可选 |
| npm 全局安装根目录,用于推导 | 可选 |
| 显式指定 | 可选 |
| 覆盖 IDE workbench CDP 端口(新版 IDE 端口动态,通常无需设置) | 可选 |
|
| 可选 |
|
| 可选 |
CLI 位置解析顺序:显式环境变量 → PATH 上的 tma shim → npm 全局根目录。任何一步都不写死盘符或用户目录,换机器无需改代码。
小程序 / 小游戏路由
expectedProjectType=minigame使用tmg(microgame 协议)。expectedProjectType=miniapp使用tma(microapp 协议)。未指定类型时,先根据工程结构做路由提示,再用 IDE 权威信号复核。
IDE 同时打开多个工程时,按
projectPath绑定目标,避免其他工程的错误污染判断。
已提供的 MCP 工具
douyin_check_environment:检查tt-ide-cli、登录状态、IDE 主窗口、本地 CDP 目标和项目目录元数据,不读取源码内容。douyin_open_project:按类型路由打开工程,轮询等待 IDE 窗口/CDP 就绪;支持expectedAppid/expectedProjectType做身份校验,不符时不误报成功。douyin_project_identity:从 IDE 实际状态/已登录元数据识别项目类型、实际 AppID 与权限状态;文件结构仅辅助。结构化错误:APP_PERMISSION_DENIED/PROJECT_TYPE_MISMATCH/APPID_MISMATCH/PROJECT_TYPE_UNKNOWN。douyin_create_minigame_project:仅创建minigame类型工程;通过 IDE 启动页真实“小游戏”入口(CDP DOM 语义控件);非空目录默认拒绝;启动页不可控时返回CREATE_PROJECT_UI_UNSUPPORTED。douyin_preview:按工程类型路由生成预览二维码,输出路径必须在工作区内。douyin_build_npm:按工程类型路由执行 npm 构建。douyin_compile_refresh:优先点击 IDE workbench 的“编译/刷新”DOM 控件,可显式使用快捷键兜底。douyin_capture:ide_window保存 IDE 全窗 PNG;simulator保存本地MiniApp WebviewPNG。douyin_read_console_errors:尽力读取 IDE 内嵌 DevTools 控制台文本,拿不到时返回明确的不支持原因。douyin_project_size/douyin_audit_hosts/douyin_project_version:包体积、提审 Host、最新已发布版本查询。douyin_upload/douyin_audit/douyin_set_app_config:官方高风险动作,必须显式传入confirm=true,否则返回CONFIRMATION_REQUIRED。douyin_ide_preview:绕过 CLI 登录——直接点击已登录 IDE workbench 的「预览」按钮,从 DOM 提取二维码 PNG 保存到工作区。douyin_ide_upload:绕过 CLI 登录——直接操控已登录 IDE 完成「上传→填版本/日志→确定→核验结果」。
通过 IDE 上传的流程与安全约束
douyin_ide_upload 的 projectPath、appVersion、appChangelog 均为必填,confirm 必须为 true。
执行顺序是正确性的一部分(顺序错了会导致点击落在被遮挡的界面上、静默失效):
输入校验:缺少版本号返回
UPLOAD_VERSION_REQUIRED,缺少更新日志返回UPLOAD_CHANGELOG_REQUIRED。工具不会猜测版本号,也没有默认值。身份核对:上传前调用身份识别核对目标工程与类型(可传
expectedAppid/expectedProjectType)。严格绑定工程:见下方「严格工程绑定」。命中不到、缺失
projectPath或命中多个都拒绝执行(IDE_PROJECT_NOT_BOUND),绝不退回"第一个 workbench",也不按工程名模糊匹配。先处理信任弹窗:IDE 若正在显示项目信任提示(
.tila-modal内含「信任并运行」),默认不自动点击,返回顶层错误IDE_PROJECT_TRUST_REQUIRED。信任意味着允许在模拟器中运行该工程代码,属于用户决定,因此与上传授权相互独立:只有显式传入confirmTrust=true才会自动点击「信任并运行」,并等待弹窗真正消失。再点击上传入口:信任处理完毕后才点击 workbench 页面内的工具栏「上传」。这一步必须在第 4 步之后——信任弹窗会遮挡工具栏,先点上传不会生效。IDE 顶部的「工具/上传」是原生 Electron 菜单(
Menu.setApplicationMenu),CDP 无法点击,因此不作为路径。放行上传流程中间弹窗:点击上传之后才处理「继续上传」这类版本重复确认,上限 4 轮;超过上限停止并返回
UPLOAD_INTERMEDIATE_DIALOG_LIMIT。同一个弹窗(相同文本)不会被重复点击。填写并回读:版本号与更新日志只在上传表单弹窗内定位;写入后立即回读校验,写不进去就中止。
提交一次:「确定」只在上传表单弹窗内查找(作用域
form),找不到即失败,不会退化成整页搜索第一个同名元素。按钮作用域严格三分:form(表单弹窗)/dialog(任意可见弹窗,用于中间确认)/toolbar(工作台工具栏,用于「上传」入口)。结果核验:提交前先做提示基线快照,提交后只承认新增或变化的提示文本,返回三态:
success:IDE 明确提示成功failed:IDE 明确提示失败(以顶层错误码IDE_UPLOAD_REPORTED_FAILURE返回)unverified:已确认点击提交但没有取得最终证据
禁止自动重试:结果不明确时返回
autoRetry:false/retryRecommended:false,绝不自动重试,避免重复上传。
严格工程绑定
只读探测允许宽松匹配(标题含工程名即可),但任何可能产生副作用的操作(上传、IDE 预览、点击 workbench 工具栏)必须使用严格绑定:
target 必须是 workbench 页面(路径以
workbench/index.html结尾的page);URL 必须存在
projectPath参数;归一化后必须与传入路径完全相等;
缺失 / 零匹配 / 多匹配全部拒绝,不做标题或工程名模糊匹配。
因此"标题里带着目标工程名、但 URL 没有 projectPath"的 target 也会被拒绝,避免误操作到别的工程实例。
附属 target 的关联(模拟器、控制台)不使用工程名猜测,而是走真机实测的 parentId 继承关系:
workbench(page, id=X) ← 唯一带 projectPath
├─ webview "MiniApp Webview" (parentId=X) ← 模拟器
└─ webview "<工程名> - 抖音开发者工具" (parentId=X)
└─ iframe "byted/index.html" (parentId=该 webview) ← DevTools 控制台交叉验证:MiniApp Webview 的 sessionId 与 DevTools 控制台的 project 参数是同一个值。两个工程同时打开时,各自的模拟器/控制台因挂在不同 workbench 子树下而天然区分;目标子树内出现 0 个或多个候选时返回 NOT_BOUND / AMBIGUOUS,不会退回到别的工程。
"没能真正提交"的情况一律返回顶层错误,不会返回 ok:true:
情况 | 错误码 |
工作区未配置 |
|
未取得目标工程的 workbench(缺失/不匹配/多匹配) |
|
IDE 正在显示信任弹窗且未授权 |
|
已授权但信任失败/弹窗未消失 |
|
上传表单弹窗未出现 |
|
中间弹窗超过 4 轮 |
|
版本号/更新日志写入失败 |
|
表单内没有「确定」按钮 |
|
IDE 明确报告失败 |
|
unverified 只用于"已点击提交、但没有拿到成功或失败证据"这一种情况。submitted:true 只代表"已点击确定",最终结论一律看 status。
结果核验的提示来源限于上传弹窗内文本与受限的全局浮层(tila-message / tila-notification / [role=alert] 等),不读取整页正文,也不读取任何输入框内容(避免把版本号、日志或凭据当作证据)。返回的 evidence 是脱敏后的真实提示文本,不是正则字面量。
运行与验证
npm install
npm run check # 语法检查
npm test # 单元测试(上传流程用真实 DOM 实现执行源码表达式,非手写替身语义)
npm run smoke # 冒烟:需设置 DOUYIN_SMOKE_PROJECT,否则只做只读探测
node src/server.mjs插件清单位于 .codex-plugin/plugin.json,MCP 配置位于插件根的 .mcp.json,采用官方支持的直接 server map:
{
"douyin-ide-control": {
"command": "node",
"args": ["./src/server.mjs"],
"startup_timeout_sec": 30
}
}.mcp.json 不携带任何机器相关环境变量;工作区通过宿主的全局 MCP 注册或用户环境变量传入(例如 DOUYIN_WORKSPACE_ROOT)。
args 按插件根解析;宿主运行时会以已安装插件根作为 cwd。
官方依赖与 Skill
npm install -g tt-ide-cli
npx skills add $(tma get-skill-path)官方文档参考:小程序命令行工具、douyin-ide-cli Skill 使用指南。
IDE 实测边界
以下事实来自真机 CDP 实测(打开一个占位小游戏工程后抓取 target 清单与 DOM),不是从代码推断。改动选择器前请先复核。
工程打开后的 CDP target 清单(实测)
type | target | 带 projectPath |
|
| ✗ |
|
| ✗ |
|
| ✗ |
|
| ✓ |
| front-page | ✗ |
结论:
只有 workbench page 带
projectPath,因此它是工程绑定的唯一权威依据。多开 IDE 时按它精确匹配;命中 0 个或多个都拒绝(IDE_PROJECT_NOT_BOUND),绝不退回第一个。没有独立的 simulator-page CDP target。上传工具栏、上传弹窗、表单与结果提示都在同一个 workbench page 内,因此上传流程全程只操作一个 target。
workbench URL 的路径形态是
applications/<类型>/workbench/index.html(不是/workbench/index.html)。判定用"路径以workbench/index.html结尾",并排除 VS Code 的workbench.html(那是工程窗口 webview)。
workbench 内 DOM(实测)
工具栏:
DIV.tila-toolbar-container>DIV.tila-toolbar-item-container(内含button.tila-button.tila-button-secondary[aria-label="上传"]与DIV.tila-toolbar-item-title文本「上传」)。同级还有 模拟器 / 调试器 / 编辑器 / 刷新 / 清除缓存 / 编译 / 预览 / 真机调试 / 性能测试 / Wasm 分包 / AI助手。顶部菜单是原生 Electron 菜单(
Menu.buildFromTemplate+Menu.setApplicationMenu,上传项douyinide.upload)。CDP 无法点击原生菜单,因此上传入口走工具栏按钮。信任弹窗:首次打开未信任工程会先弹
.tila-modal.tila-modal-medium,按钮「信任并运行」/「稍后运行」。它是上传前的必经中间步骤,工具会放行「信任并运行」。弹窗容器:
tila-modal(含tila-modal-body/tila-modal-footer/tila-modal-mask)。注意tila-upload-*是通用"上传文件"组件,与发布弹窗无关,不可混用。表单未打开时页面内
input/textarea数量为 0。上传表单文案:版本号 placeholder「请输入本次上传版本号,版本号填写示例: 1.0.0」;另有「上传版本」「线上版本」「前序版本」。
结果文案:成功「上传成功」「上传成功,」「上传成功(代码已深度防护)」;失败「上传失败,请检查网络连接」「上传失败,未接入必接能力」。
中间确认弹窗:「继续上传」(key
...upload-inspection-button.upload),正文为工程分析建议。
其他边界:
IDE 主进程 CDP 端口随实例动态变化,可读取前置管理页、workbench、MiniApp Webview、权限弹窗的 DOM;workbench 调试端口可由
DOUYIN_IDE_CDP_PORT覆盖。不使用截图识别或坐标猜测。系统
UIAutomationClient对 IDE 窗口只暴露Chrome Legacy Window,未暴露 webview 控件,因此 webview 不可用时返回明确不支持,或使用用户显式选择的快捷键。IDE 全窗截图使用 Windows
CopyFromScreen,要求窗口可见;它不是遮挡安全的 Windows.Graphics.Capture。模拟器截图使用 MiniApp Webview 的 CDPPage.captureScreenshot。控制台读取是 DevTools DOM 的 best-effort,拿不到时不会伪造错误内容。
权限/类型识别:IDE 权限弹窗(如“获取域名白名单失败”)优先识别为
APP_PERMISSION_DENIED;IDE 按小程序编译器查找app.json(报“can't find app.json”)是miniapp的权威类型证据;文件结构仅作辅助线索,不单独判定类型。
安全边界
插件不会读取、打印或写入密码、AppID token、Cookie 或 API key,也不回显 Cookie 文件路径。除项目构建产生的正常输出外,不修改被操作工程的源码;上传和提审不在默认烟测中执行。
版本
0.3.0(当前):同步实际运行插件的演进实现。
douyin_ide_upload全面收紧:projectPath/appVersion/appChangelog必填(不再提供默认版本号),上传前严格绑定目标工程并核对身份,信任弹窗独立授权(confirmTrust),提交按钮只在表单弹窗内查找,结果三态success/failed/unverified,结果不明不自动重试;工作区未配置时返回WORKSPACE_NOT_CONFIGURED(不再回退process.cwd());douyin_ide_preview支持expectedAppid预核对;CLI 与 tmg 包路径不再写死盘符。上传逻辑独立为src/ide-upload.mjs,新增tests/ide-upload.test.mjs与tests/cwd.test.mjs,MCP 协议层直接验证douyin_ide_upload的确认门。0.2.0:初版 IDE 内预览/上传工具(
douyin_ide_preview/douyin_ide_upload)。
目录结构
src/ 运行时代码(server / cli / cdp / ide-upload / identity / tmg / proc / native / path-policy)
tests/ 单元测试(上传流程用真实 DOM 实现执行源码表达式,非手写替身语义)
scripts/ 冒烟脚本
skills/ 供宿主加载的 Skill 提示词
scratch/ 本机历史上传实验脚本归档(不入库,见 .gitignore)Available Tools
17 toolsdouyin_audit提审抖音项目(危险)C
官方 tma audit 的安全封装。默认拒绝,只有 confirm=true 才会触发远程提审。
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | ||
| appid | Yes | ||
| channel | No | ||
| confirm | No | ||
| timeoutMs | No | ||
| autoPublish | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does disclose the most important safety behavior: default-deny and the confirm=true trigger. Still, it does not describe side effects, persistence of the submission, auth requirements, or what happens once the remote review is triggered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the tool's origin, and then states the key trigger condition without filler. It is compact and readable, though a dangerous tool could reasonably carry a bit more operational detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, no annotations, and six parameters, the description is too thin to fully support correct invocation. It explains the confirm gate but omits expected return behavior, side-effect risks, and any setup or preconditions, so an agent is left guessing on several important points.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for six undocumented parameters. It adds real meaning for confirm by explaining the trigger condition, but host, channel, timeoutMs, autoPublish, and even appid are left unexplained beyond their names and schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it is a safe wrapper around the official tma audit and explicitly says confirm=true triggers remote submission, which matches the title '提审抖音项目'. It is clear about the core action, though it does not explicitly differentiate this tool from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a critical usage condition: the tool defaults to denial and only acts when confirm=true. However, it gives no guidance on when to choose this tool over sibling tools like douyin_open_project or douyin_tmg_open, and no exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
douyin_audit_hosts查询提审 Host 列表A
调用官方 tma hosts 查询指定 AppID 可用的审核 Host 列表(douyin_audit 的 host 参数取值参考)。
| Name | Required | Description | Default |
|---|---|---|---|
| appid | Yes | ||
| timeoutMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. The word '查询' implies a read-only operation and the phrase '调用官方 tma hosts' gives provenance, but there is no disclosure of return shape, rate limits, timeout behavior, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the primary action and scope, followed by a compact parenthetical that ties the result to douyin_audit. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-param query tool, the description clearly states what it queries, for which AppID, and why an agent would call it. It does not give an explicit return format, but 'host列表' sufficiently implies a list, so the remaining gaps are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only adds meaning to 'appid' by indicating it selects the available hosts. The optional 'timeoutMs' is not mentioned, so the description only partially compensates for the schema's lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb '查询' (query) and a specific resource: the list of available audit hosts for a given AppID. It also states the result is the reference for the 'host' parameter of douyin_audit, which distinguishes it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says the output is the reference for choosing the host parameter when calling douyin_audit, telling an agent when the tool is useful. It does not mention alternatives or exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
douyin_build_npm构建抖音项目 NPMA
按工程类型路由:小游戏走 tmg build-npm,其余走 tma build-npm,不执行上传或提审。
| Name | Required | Description | Default |
|---|---|---|---|
| timeoutMs | No | ||
| projectPath | No | ||
| expectedProjectType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It does disclose the routing behavior and the non-upload/audit boundary, but it does not disclose side effects such as project file mutations, build output generation, success/failure behavior, or whether a local environment must be prepared.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that immediately fronts the routing rule and the exclusion boundary. There is no redundant filler or repetition of the tool name/title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core purpose and routing are clear, but the tool has no annotations, no output schema, and three parameter descriptions at 0% coverage. The description does not explain return values, command execution behavior, or the meaning of timeoutMs and projectPath, so an agent still has to infer important invocation details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needs to explain the parameters. It only indirectly clarifies expectedProjectType through the minigame/others routing. timeoutMs and projectPath are left entirely unexplained, including their purpose, defaults, and whether they are optional at runtime.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action (build NPM) and a routing rule based on project type (minigame vs. others). It also explicitly excludes upload and audit, which distinguishes it from sibling tools like douyin_upload and douyin_audit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing guidance: minigame projects should use tmg build-npm, others should use tma build-npm. It also states what the tool does not do (upload or audit), helping an agent choose a sibling tool when those actions are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
douyin_capture截取 IDE 或模拟器画面A
IDE 全窗使用 Windows 原生窗口拷贝;模拟器使用本地 MiniApp Webview 的 CDP 截图。传 projectPath 可在多开 IDE 时绑定到目标工程实例。
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ||
| timeoutMs | No | ||
| outputPath | No | ||
| projectPath | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
无任何 annotations,描述承担全部行为披露责任。它确实补充了有价值的机制信息:IDE 走 Windows 原生拷贝(隐含平台限制)、模拟器走 CDP 截图、projectPath 用于多实例绑定。但未说明输出行为(返回值是什么、是否通过 outputPath 落盘、timeoutMs 的作用)以及失败情形(IDE 未打开、CDP 连接失败时怎么办),透明性只做了一半。
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
两句话完成全部信息传递:第一句按目标任务分派机制,第二句补充多开场景的参数技巧。机制差异前置、绑定细节后置,信息密度高且无任何冗余,每一句都有独立价值。
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
工具中等复杂(4 参数、两种截图路径),而上下文信号很弱(无 annotations、无输出 schema、参数覆盖 0%、无必填参数)。描述却遗漏了调用契约的核心:调用后返回什么、不传 outputPath 时截图如何获取、空参数调用会得到什么结果。代理能正确选择该工具,但无法预测其输出,这是一个关键缺口。
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema 描述覆盖率为 0%,描述必须补偿参数语义。它实际做到了对两个参数的补充:target 的两个枚举值对应两种截图机制,projectPath 解释了多 IDE 绑定行为。但 timeoutMs 和 outputPath 在描述中完全没有语义说明,outputPath 的作用只能靠参数名猜测,属于部分补偿而非充分补偿。
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
描述明确说明这是截图工具,且细分为两种目标:IDE 全窗和模拟器画面,并分别给出具体机制(Windows 原生窗口拷贝 vs. MiniApp Webview CDP 截图)。动词+资源+机制齐全,能与全部 16 个兄弟工具(如 douyin_preview、douyin_read_console_errors)清晰区分,没有任何职责重叠。
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
描述给出了明确的使用场景:需要截取 IDE 窗口或模拟器画面时使用,并说明了多开 IDE 时传 projectPath 的绑定用法。但没有命名任何替代工具或排除条件,也没有说明与 douyin_preview 等在预览/截图职责上的边界,when-not-to-use 完全缺失。
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
douyin_check_environment检查抖音 IDE 环境B
检查官方 tt-ide-cli、抖音开发者工具、当前项目和本地调试接口状态,不读取源码内容。
| Name | Required | Description | Default |
|---|---|---|---|
| timeoutMs | No | ||
| projectPath | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It adds a useful non-goal ('不读取源码内容' – does not read source code), implying a read-only intent, but it does not explicitly state whether the tool has side effects, network calls, or what happens on failure. A 3 reflects partial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured sentence that front-loads the primary purpose and ends with a clarifying boundary. There is no redundant text, and every clause contributes information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description leaves meaningful gaps: it does not explain expected output or return behavior, does not describe optional parameters, and does not state when this check should be run relative to sibling tools. The core function is clear, but the operational context is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain timeoutMs or projectPath. The phrase '当前项目' weakly suggests projectPath, and timeoutMs is inferable from its name alone, but the description adds essentially no parameter meaning beyond the schema's bare names and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('检查' / check) and a specific resource scope: official tt-ide-cli, Douyin developer tools, current project, and local debug interface status. It distinguishes itself from sibling actions like open/build/preview/upload by being an environment diagnostics tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells what is checked but not when to use this tool versus alternatives, nor does it provide conditions or prerequisites. The usage context is only implied as a preflight diagnostic step, with no explicit exclusions or routing to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
douyin_compile_refresh触发 IDE 编译或刷新B
优先通过 IDE 4.5.5 本地 workbench 调试页面点击编译/刷新;可显式选择可靠快捷键兜底。传 projectPath 可在多开 IDE 时绑定到目标工程实例。
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| shortcut | No | ||
| timeoutMs | No | ||
| projectPath | No | ||
| useShortcut | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the schema: the action is performed via IDE workbench interaction rather than a simple command, the shortcut path is a fallback, and projectPath binds the operation to a specific IDE instance. However, with no annotations provided, the description still leaves key behaviors unexplained such as side effects of compile/refresh or what response/error conditions to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. It front-loads the preferred method, provides a fallback strategy, and includes a key parameter hint about multi-IDE binding. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with ive parameters, no annotations, and no output schema, the description is incomplete. It omits mode semantics, timeout behavior, prerequisites such as project opening or IDE running state, and what result or error the agent should expect after triggering compile/refresh.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only clarifies projectPath and indirectly hints at shortcut usage. mode, shortcut values, timeoutMs, and useShortcut are left undocumented, leaving the agent to guess their semantics from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action as triggering IDE compile/refresh and specifies the mechanism (workbench debug page click or shortcut). It does not explicitly differentiate among sibling tools such as douyin_build_npm or douyin_preview, but the verb and resource are concrete enough for an agent to understand the core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an internal preference order: prefer clicking compile/refresh in the IDE workbench, and use a reliable shortcut as a fallback. It also explains when projectPath is useful (multiple IDE instances), but it does not state when this tool should be selected over sibling tools or when it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
douyin_create_minigame_project创建抖音小游戏工程(仅小游戏)A
通过 IDE 启动页真实"小游戏"入口创建工程(CDP DOM 语义控件,禁截图坐标点击)。强制 JavaScript + 空白模板 + 小游戏类型;目标目录非空默认拒绝;创建后调用身份识别复核类型。启动页 UI 不可控时返回 CREATE_PROJECT_UI_UNSUPPORTED 与唯一人工操作。
| Name | Required | Description | Default |
|---|---|---|---|
| appid | Yes | ||
| language | No | ||
| template | No | ||
| timeoutMs | No | ||
| projectName | No | ||
| projectPath | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it is unusually detailed. It discloses the CDP DOM-based UI automation approach, prohibits screenshot coordinate clicks, states forced project options, describes non-empty directory rejection, and documents the CREATE_PROJECT_UI_UNSUPPORTED error plus a unique manual operation. This exceeds the typical level of behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and information-rich; every clause contributes a real constraint or behavior. It could be slightly better organized with separate sentences or bullets, but it is concise relative to the amount of behavioral detail it conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, no output schema, and no annotations, important invocation details are missing: there is no description of the success return value, the role of appid, projectName, or timeoutMs, or how the forced language/template values interact with the schema enums. The error code and post-creation identity verification are helpful, but they do not make the tool fully actionable without guesswork.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for six parameters. It gives useful semantics for projectPath via the non-empty directory rejection and effectively constrains language and template to javascript/empty, but it does not explain the required appid, projectName, or timeoutMs. It also leaves unclear whether passing typescript or rich triggers rejection or silent coercion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: creating a Douyin minigame project through the IDE startup page's real "minigame" entry. The scope "仅小游戏" and the creation focus clearly distinguish it from sibling tools like douyin_open_project or douyin_tmg_open.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by stating this tool is for creating minigame projects and by specifying constraints such as '强制 JavaScript + 空白模板 + 小游戏类型' and '目标目录非空默认拒绝'. However, it does not explicitly name alternatives or say when to prefer this tool over siblings, so usage guidance is present but mainly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
douyin_open_project打开抖音项目A
按期望类型打开白名单内项目:expectedProjectType=minigame 时使用官方小游戏 CLI tmg(microgame 协议)唤起 IDE,其余使用 tma(microapp 协议);轮询等待 IDE 窗口/CDP 就绪后执行身份检查(可选 expectedAppid/expectedProjectType)。CLI 成功但 IDE 未就绪时返回 IDE_STARTUP_TIMEOUT;权限/类型/AppID 不符时返回对应结构化顶层错误(ok:false/isError:true),不误报成功。
| Name | Required | Description | Default |
|---|---|---|---|
| timeoutMs | No | ||
| projectPath | No | ||
| expectedAppid | No | ||
| expectedProjectType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior itself. It discloses the polling/readiness wait, the identity check, and failure semantics: IDE_STARTUP_TIMEOUT, structured ok:false/isEror:true errors for permission/type/AppID mismatches, and no false success reporting. This is unusually transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main point is front-loaded with '按期望类型打开白名单内项目', and the rest is packed into one information-dense clause with semicolons; every phrase carries protocol, readiness, identity, or error semantics. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is quite complete for a complex tool with no annotations or output schema: it covers protocol selection, readiness polling, identity checks, and structured errors. It still leaves the success return shape and the precise role of timeoutMs implicit, but the essentials for correct invocation and expectation-setting are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only types/enums with no descriptive text, so the description must add meaning. It maps expectedProjectType to the minigame/tmg vs microapp/tma choice and clarifies expectedAppid/expectedProjectType as identity-check inputs, while timeoutMs and projectPath are left to their self-explanatory names. This is solid but not full compensation for all parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: open a whitelisted project according to expectedProjectType, and names the underlying CLI/protocol branches (tgm for minigame, tma otherwise). It does not explicitly contrast this against siblings such as douyin_tmg_open, so it misses clear sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: opening a whitelisted project with an optional expected type and appid, and it defines when the tmg vs tma branch applies. However, it does not say when to prefer this tool over a sibling like douyin_tmg_open, so alternatives are only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
douyin_preview生成抖音预览二维码A
按工程类型路由:小游戏走 tmg preview(--output),其余走 tma preview(--qrcode-output)。输出二维码只能写入工作区内。可传 small/copy/query/scene/launchFrom 透传官方选项。
| Name | Required | Description | Default |
|---|---|---|---|
| copy | No | ||
| query | No | ||
| scene | No | ||
| small | No | ||
| timeoutMs | No | ||
| launchFrom | No | ||
| projectPath | No | ||
| qrcodeOutput | No | ||
| expectedProjectType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it does disclose the routing behavior, the workspace-only output constraint, and the passthrough options. However, it does not describe side effects, prerequisite environment state, failure modes, or what happens after the preview command succeeds.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense sentences with no filler. Each sentence contributes a distinct operational fact: the routing rule, the workspace constraint, and the pass-through options.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core routing and output constraint are present, which is sufficient for a basic call. But given 9 parameters, no output schema, and no annotations, the description would be stronger if it explained the expected relationship between projectPath and expectedProjecType, the purpose of timeoutMs, and how to locate the generated QR code.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning by naming small/copy/query/scene/launchFrom as pass-through official options and by linking --output and --qrcode-output to the routing behavior. But with 0% schema description coverage, it still leaves timeoutMs, qrcodeOutput format, and expectedProjecType/projectPath semantics largely implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action—generating a Douyin preview QR code—and immediately gives the routing rule: minigames use tmg preview, other project types use tma preview. This clearly differentiates the tool from siblings like douyin_upload, douyin_audit, or douyin_compile_refresh.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit statement about when to use this tool versus its siblings, and no alternatives or exclusions are named. The routing note is internal command selection, not MCP tool selection, so the usage context is only implied by the title.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
douyin_project_identity识别抖音项目身份A
从 IDE 实际状态/已登录应用元数据判断项目类型、实际 AppID 与权限状态;文件结构仅作辅助证据。结构化错误:APP_PERMISSION_DENIED(无权限)/ PROJECT_TYPE_MISMATCH(类型不符)/ APPID_MISMATCH(AppID 不同)/ PROJECT_TYPE_UNKNOWN(无可靠类型证据)。
| Name | Required | Description | Default |
|---|---|---|---|
| timeoutMs | No | ||
| projectPath | No | ||
| expectedAppid | No | ||
| expectedProjectType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. It discloses the source of truth (IDE state and logged-in app metadata) and gives a concrete structured error taxonomy with conditions for each failure mode. It does not explicitly state side effects, but the diagnostic verb '判断/识别' and evidence-based wording imply a read-only check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core purpose appears first, the evidentiary caveat second, and the error codes are appended as a concise list. Every sentence contributes and there is no redundant prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description is the sole contract. It covers the tool's inputs sources and failure modes, but it never specifies the shape of a successful result and leaves timeoutMs and projectPath unexplained. This is adequate for a simple identity check but has clear completeness gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It indirectly informs expectedAppid and expectedProjectType through the APPID_MISMATCH and PROJECT_TYPE_MISMATCH errors, but timeoutMs and projectPath are completely undocumented anywhere, leaving two of four parameters without usable semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact object ('项目身份') and the specific attributes it determines: project type, actual AppID, and permission status. It also states the evidence source (IDE actual state / logged-in app metadata) and clarifies that file structure is only auxiliary, which distinguishes this tool from the related Douyin checking and opening tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to verify the real on-device project identity and permission state, and that file-structure evidence alone is not reliable. However, it does not explicitly name alternative tools or state when this tool should be preferred over siblings such as douyin_check_environment or douyin_open_project.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
douyin_project_size查看抖音项目包体积A
调用官方 tma project-size 输出包体积信息;--json 输出结构化结果。上传/提审前核对包体积用。
| Name | Required | Description | Default |
|---|---|---|---|
| json | No | ||
| timeoutMs | No | ||
| projectPath | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of explaining behavior. It states the tool invokes an official command and that '--json 输出结构化结果' (--json outputs structured results), which reveals output behavior. However, it does not mention side effects, failure modes, prerequisites, or whether the operation is read-only, leaving some ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that front-loads the main behavior, then adds the useful --json detail and the intended use case. Every clause earns its place with no repetition of the title or verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with three optional parameters and no output schema, the description gives the core action and a use case. However, it leaves gaps around how projectPath behaves, what the default (non-JSON) output looks like, and whether prior environment checks or project opening are required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only adds meaning for the 'json' parameter via '--json 输出结构化结果'. The 'projectPath' and 'timeoutMs' parameters are left unexplained, so the description only partially compensates for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: '调用官方 tma project-size 输出包体积信息' (call the official tma project-size to output package size info). This clearly identifies the tool's function and distinguishes it from siblings like douyin_check_environment and douyin_open_project by referencing the actual command.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete use context: '上传/提审前核对包体积用' (for checking package size before upload/submission). It does not explicitly contrast with alternative tools, but the timing and purpose are clear enough for an agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
douyin_project_version查询小游戏最新已发布版本A
调用官方 tmg version 查询最新已发布版本号(上传/提审前核对用)。小程序端 tma 无 version 命令,返回 supported:false。
| Name | Required | Description | Default |
|---|---|---|---|
| timeoutMs | No | ||
| projectPath | No | ||
| expectedProjectType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It reveals the underlying command (official tmg version) and the important supported:false behavior for miniapp, but it does not discuss side effects, authentication needs, or successful response details. The query intent is clear, though not all edge behavior is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core purpose appears in the first clause, and the tma limitation follows immediately. Every sentence adds unique information with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple and all parameters are optional, but there is no output schema and no parameter documentation. The description explains why and when to use the tool and mentions the miniapp unsupported behavior, but leaves out expected return format for successful calls and how parameters affect invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it does not mention timeoutMs or projectPath. It does partially help with expectedProjectType by distinguishing '小游戏' from '小程序端 tma', but it never explicitly maps these concepts to the enum values minigame/miniapp.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action and resource: '调用官方 tmg version 查询最新已发布版本号'. It also distinguishes minigame from miniapp by noting that tma has no version command, which helps separate this tool from siblings like douyin_tmg_check and douyin_upload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: '上传/提审前核对用', meaning it should be used to verify the latest version before upload or review submission. It also clearly states the miniapp exclusion: '小程序端 tma 无 version 命令', so an agent knows not to use it for miniapp projects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
douyin_read_console_errors读取 IDE 控制台错误A
尽最大可能从 IDE 内嵌 DevTools DOM 读取错误;接口不存在时返回明确的不支持原因。传 projectPath 可在多开 IDE 时绑定到目标工程实例。
| Name | Required | Description | Default |
|---|---|---|---|
| timeoutMs | No | ||
| projectPath | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden of behavioral disclosure. It uses a read-only verb, communicates best-effort behavior with '尽最大可能', and discloses the unsupported-interface result ('接口不存在时返回明确的不支持原因'). These are meaningful behavioral traits, though timeout behavior and side effects are not covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The core purpose and fallback behavior are front-loaded, and the projectPath guidance is cleanly separated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple optional-parameter read tool, this is reasonably complete: it covers what is read, where it is read from, best-effort behavior, unsupported cases, and the projectPath use case. The main gaps are timeoutMs semantics and successful return shape, but these are largely inferable for this operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameter descriptions, so the description must add meaning. It does add value for projectPath by explaining its role in multi-open IDE binding, but timeoutMs is left entirely to naming inference. This is partial compensation, not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('read errors') and the resource ('IDE 内嵌 DevTools DOM'), and even describes the fallback behavior when the interface is unavailable. No sibling tool targets console-error reading, so it is easy to distinguish.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use case is implied rather than explicitly stated: an agent would use this when IDE/DevTools console errors need to be read. It gives one concrete conditional guideline: pass projectPath when multiple IDE instances are open, but it does not explain when to prefer this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
douyin_set_app_config为 AppID 设置访问 Token(CI 登录)A
调用官方 tma set-app-config 为指定 AppID 设置 token(CI 无交互登录用)。token 仅写入本机 tma 配置,不会回显。属于本地配置写入,请谨慎使用。
| Name | Required | Description | Default |
|---|---|---|---|
| appid | Yes | ||
| token | Yes | ||
| timeoutMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It explicitly states the token goes only into the local tma config ('仅写入本机 tma 配置'), will not be echoed ('不会回显'), and is a local config write to be used carefully ('属于本地配置写入,请谨慎使用'). These are significant behavioral traits beyond just saying 'set token'. It does not mention overwrite behavior or return values, but for a simple local write tool this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long and front-loaded with the core purpose (official call, target, token). The second sentence adds important behavioral warnings. It is concise with no filler, though it could have ordered the caution before the detailed effect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters, no output schema, and no annotations, the description covers purpose, main side effects, and a caution. However, it omits what constitutes success/failure, whether an existing token is overwritten, and any environmental prerequisites (e.g., tma installed or environment checked). This leaves some gaps for an agent deciding how to handle the result and error recovery.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does explain the purpose of two key parameters: 'AppID' and 'token' (for CI login), but the optional timeoutMs parameter is not mentioned anywhere in the description or schema. The description adds useful semantic context for the required params, but incomplete coverage of all three parameters keeps it at a mid score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: '为指定 AppID 设置 token' (set token for the specified AppID) via '官方 tma set-app-config'. It also clearly scopes the context to CI non-interactive login and identifies the local config write nature, making it easy to distinguish from all sibling tools, none of which touch configuration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context for when to use this tool: 'CI 无交互登录用' (for CI non-interactive login). It does not explicitly mention when not to use it or name alternatives, but no sibling tool appears to be a direct alternative for token configuration, so the context alone is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
douyin_tmg_check检查小游戏 CLI(tmg)A
检查官方小游戏专用 CLI tt-minigame-ide-cli(tmg 2.x)是否安装、版本与登录状态。tmg 使用小游戏协议唤起 IDE(区别于 tma 的小程序协议)。
| Name | Required | Description | Default |
|---|---|---|---|
| timeoutMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that this is a status/read operation and explains the underlying protocol behavior (tmg invoking IDE via mini-game protocol). However, it does not explicitly state side-effect-free behavior, return format, or behavior when the CLI is missing/logged out, which would add useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no wasted words. The primary action and scope are front-loaded, and the protocol distinction is added as a compact clarifier.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple check tool, the description covers the main purpose and protocol context. But with no annotations, no output schema, and an undocumented optional parameter, the agent is left without information on return values, possible states, or how to interpret the check results. It is minimally adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter timeoutMs has no schema description (0% schema description coverage), and the description never mentions it. Since coverage is very low, the description must explain parameter semantics, but it remains silent. Thus no meaning is added beyond the bare parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('检查' / check), a specific resource ('tt-minigame-ide-cli(tmg 2.x)'), and the exact scope of the check (installation, version, login status). It also distinguishes tmg from tma by protocol, which helps differentiate it from sibling tools without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: checking the dedicated mini-game CLI. The note that tmg uses the mini-game protocol versus tma's mini-program protocol provides a decision criterion, though it does not explicitly name alternative sibling tools or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
douyin_tmg_open用小游戏协议打开抖音小游戏工程A
通过官方小游戏 CLI tmg open 以完整模式打开白名单内工程(IDE 按小游戏类型处理,区别于 tma 的小程序协议)。返回 CLI 输出与 IDE 窗口状态。
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| timeoutMs | No | ||
| projectPath | No | ||
| expectedAppid | No | ||
| expectedProjectType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it discloses the whitelist requirement, the protocol difference from `tma`, the full-mode behavior, and the returned CLI output and IDE window status. It does not cover side effects or prerequisites such as login/auth, but the core behavioral traits are transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the core operation and then adds the differentiating protocol detail and return value. Every clause adds value, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description captures the operation, output, and an important constraint, but it lacks parameter semantics and explicit usage routing. Given that all 5 parameters are optional and there is no output schema, an agent would benefit from more detail about what each parameter means and when to supply it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are 5 parameters with 0% schema description coverage, so the description must compensate, but it does not. It only hints at the `mode` parameter by mentioning 'full mode' and does not explain `projectPath`, `timeoutMs`, `expectedAppid`, or `expectedProjectType`. Parameter names are somewhat self-explanatory, but the agent is left without concrete guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it invokes the official minigame CLI `tmg open` to open whitelisted projects in full mode. It also explicitly differentiates this from the `tma` miniapp protocol, making the tool's purpose and scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: the IDE should handle the project as a minigame rather than a miniapp, which implies the intended use case. It does not explicitly list when not to use it or name sibling tools like douyin_open_project as alternatives, but the protocol distinction provides meaningful guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
douyin_upload上传抖音项目(危险)A
按工程类型路由(小游戏走 tmg upload,其余走 tma upload)。默认拒绝,必须 confirm=true 才会触发远程上传。小游戏上传前先查 tmg version 的最新已发布版本,随结果返回 versionCheck 供核对版本递增(信息性,不阻断)。
| Name | Required | Description | Default |
|---|---|---|---|
| copy | No | ||
| small | No | ||
| channel | No | ||
| confirm | No | ||
| timeoutMs | No | ||
| appVersion | No | ||
| projectPath | No | ||
| appChangelog | Yes | ||
| expectedProjectType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden of disclosing behavior. It explicitly warns of remote side effects ('远程上传'), states the safety gate ('默认拒绝,必须 confirm=true 才会触发'), and clarifies that the version check is informational and non-blocking ('信息性,不阻断'). This goes well beyond what the schema or annotations reveal, though it could still mention rollback or failure-mode consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense sentences with no filler. The routing behavior is front-loaded, followed by the safety gating and the version-check nuance. Every clause contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 9 parameters, no output schema, and no annotations, yet the description explains only the confirm gate and a small portion of the routing logic. It does not describe the expected return format, the meaning of projectPath/appChangelog/channel, or what 'versionCheck' contains. For a dangerous remote-upload operation, this is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the 9 parameters. It clarifies confirm and the minigame/regular routing, but it leaves required parameters like appChangelog and important ones like projectPath, channel, appVersion, copy, timeoutMs, and expectedProjectType undefined. This is a significant gap for a complex, dangerously action tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: '上传抖音项目' (upload Douyin project). It further distinguishes internal behavior by routing '小游戏走 tmg upload,其余走 tma upload', which removes ambiguity about what the tool actually does. No sibling tool appears to overlap with uploading, so the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: by default uploads are rejected, and only confirm=true triggers the remote upload. It also explains project-type routing, helping the agent understand when the minigame path versus the general path applies. It does not explicitly name an alternative tool for 'not uploading', but no sibling tool competes with this action, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
17 tool updates
v0.1.0- First observed
douyin_audit - First observed
douyin_audit_hosts - First observed
douyin_build_npm - First observed
douyin_capture - First observed
douyin_check_environment - First observed
douyin_compile_refresh - First observed
douyin_create_minigame_project - First observed
douyin_open_project - First observed
douyin_preview - First observed
douyin_project_identity - First observed
douyin_project_size - First observed
douyin_project_version - First observed
douyin_read_console_errors - First observed
douyin_set_app_config - First observed
douyin_tmg_check - First observed
douyin_tmg_open - First observed
douyin_upload
TDQS
Scored across 17 tools
Most tools map to distinct operations (build, preview, upload, audit, capture, etc.), but douyin_open_project and douyin_tmg_open both open projects via the minigame CLI, and douyin_check_environment/douyin_tmg_check are adjacent environment checks. Detailed descriptions reduce confusion enough that only a couple of choices are genuinely ambiguous.
All tools share the douyin_ prefix and snake_case, and most use verb_noun forms like open_project, build_npm, or set_app_config. Some noun-style names (douyin_project_identity, douyin_project_version, douyin_project_size) and object-verb names (douyin_tmg_check, douyin_tmg_open) break the pattern, so consistency is good but not perfect.
17 tools is at the heavy end for an MCP server and feels somewhat inflated because open_project and tmg_open overlap. The broader IDE/CLI workflow is complex enough to justify many tools, but a few could be consolidated.
The set covers the full cycle for Douyin mini-program/game development: environment checks, project open/create, build, preview, compile, debug, upload, and audit. Minor gaps like explicit project close or CLI installation/update tools are absent but are not obvious dead ends for the stated control purpose.
Maintenance
Related MCP Connectors
Remote MCP for Android CLI agent build gate, structured receipts, audit logs, and reviewer-ready evi
A paid remote MCP for AI agent browser DevTools MCP, built to return verdicts, receipts, usage logs,
Community preview of HuaweiCloud DevKit MCP server (official: io.github.huaweicloud)
MCP tools for TON Sites, TON DNS and TON Storage.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceAutomates video and image-text publishing on Douyin's creator platform using Chrome DevTools Protocol, exposed as MCP tools.84AGPL 3.0
- FlicenseDqualityBmaintenanceEnables HarmonyOS device discovery, app build and deployment, UI automation, E2E inspection, and log validation through MCP tools.1812-
- AlicenseAqualityAmaintenanceWraps the WeChat DevTools CLI as an MCP service, enabling AI in editors to call WeChat CLI commands for mini-program development, testing, debugging, and automation.7144MIT
- AlicenseBqualityBmaintenanceEnables AI assistants to control WeChat mini-programs running in WeChat Developer Tools through MCP tools. Provides automation capabilities for launching, navigating, querying, and interacting with pages and elements.6118 npm1MIT