mcp-vroid
mcp-vroid
一个 驱动 VRoid Studio GUI 的 MCP 服务器。它为任何 MCP 客户端(Claude Code,或任何支持该协议的其他工具)提供一组工具:启动应用、查看应用、在画面中查找控件并点击和输入、设置参数,以及导出 .vrm —— 运行在 Arch + Hyprland (Wayland) 上,VRoid Studio 通过 Steam/Proton 运行。
VRoid Studio 没有脚本 API,所以只能用现在唯一可行的方式:对窗口截图,用 OCR 和颜色匹配定位目标,并注入真实的指针和键盘事件。
grim ──► PNG ──► tesseract / cv2 ──► (x, y) ──► virtual pointer / XTEST
▲ │
└──────────────────── screenshot again ◄───────────────┘服务器底层的引擎来自 arrakis 项目中的 tools/vroid-driver spike,这里以 mcp_vroid.driver 的名义随包带进来 —— 代码相同,只是重新打包,让 MCP 客户端能够安装并启动它。
环境要求
组件 | 用途 |
Hyprland(>= 0.55,Lua dispatch API) | 窗口发现、聚焦、工作区 |
VRoid Studio(通过 Steam/Proton,appid | 被驱动的应用 |
| 截屏 |
| OCR |
| 构建指针辅助工具 |
Xwayland( | 键盘和滚轮讲通过 X11 XTEST 注入 |
Python 3.11+、 | 服务器本体 |
Python 依赖(由 uv sync 安装):mcp、pillow、numpy、opencv-python-headless、pytesseract、python-xlib。
Related MCP server: Persona Motion Studio
安装
git clone https://github.com/nhodges/mcp-vroid
cd mcp-vroid
uv sync # virtualenv + dependencies
bash native/build.sh # builds native/vpointer <-- REQUIRED, not optionalnative/build.sh 编译出一个约 150 行的 C 客户端,用于 zwlr_virtual_pointer_unstable_v1(协议 XML 已随附在 native/protocols/ 下)。没有它,所有指针工具都会报 native/vpointer missing。vroid_status 会报告它是否存在。
为什么C 用一个C helper:ydotool 没有安装在参考机器上,且 /dev/uinput 是 0600 root:root,所以 evdev 注入需要 sudo 或 udev 规则。Wayland 虚拟指针协议不需要这两者,它移动的是合成器真实指针,并且能在任何窗口下工作。
向某个客户端注册
Claude Code:
claude mcp add vroid -- uv run --directory /path/to/mcp-vroid mcp-vroid通用 mcpServersJSON:
G4
通用 mcpServers JSON:
{
"mcpServers": {
"vroid": {
"command": "uv",
"args": ["run", "--directory", "/path/to/mcp-vroid", "mcp-vroid"]
}
}
}客户端通常会在一个净化过的环境中启动服务器。这台服务器会在启动时从运行时目录恢复 XDG_RUNTIME_DIR、WAYLAND_DISPLAY、HYPRLAND_INSTANCE_SIGNATURE 与 DISPLAY(src/mcp_vroid/session_env.py),所以 hyprctl/grim/XTEST 仍然能用;vroid_status 会显示它补了哪些。环境里已有的变量优先。
可选环境变量:
变量 | 默认值 | 含义 |
|
| 写入截图的位置 |
|
| 导出/保存的默认目录 |
|
| 指针辅助程序路径 |
|
| 发送给客户端的图片(单边最大长度,0=不缩放) |
工具
生命周期
tool | what it does |
| 需要时通过 Steam 启动 VRoid,把它停到 Hyprland workspace 9 上,记住你所在的工作区,再聚焦并全屏它。 |
| 窗口是否存在/聚焦/标题/几何、当前工作区、截图目录,以及 |
| 切回用户原来所在的工作区。VRoid(设在 ws 9)继续运行。 |
查看
tool | what it does | |
| 捕获窗口(或整个输出,对 Wine 的保存窗口按作用),保存到 captures 目录,并作为 MCP 图像内容返回,容纳客户端模型查看。报告原生图像尺寸以及传输时应用的降采样 factor。 | |
| 新截图 + tesseract;返回匹配单词的框与中心点,单位为图像 px。请传 | |
`vroid_find_button(color='primary' | 'disabled', label?, region?)` | 根据颜色找到 VRoid 的:由 solid 单色 |
|
|
执行(原始输入)
tool | what it does |
| 把指针分几步滑过去(其次能触发 hover 状态),再点击。 |
| 按下 → 24 步滑动 → 松开。右键拖动旋转相机,中键拖动平移。 |
| 滚轮( X11 buttons 4/5,6/7 为横向)。先把指针放在要滚的那块面板上。 |
| 通过 XTEST 向聚焦的控件键入内容。 |
| 如 |
执行(流程)
tool | what it does |
| 起始屏 → Create New → 基体 → 编辑器。 |
| Face / Hairstyle / Body / Outfit / Accessories / Look。 |
| 将 Parameters 面板滚动到对应行,然后在参数框输入精确值。 |
| 同上,针对 |
| 完整的 Export-as-VRM 流程,包括 VRM Settings 元数据模态框和 Wine 保存对话框。 |
| 带名字的用 Ctrl+Shift+S 存到显式 |
每个 acting 工具都会先在那之前聚焦 VRoid,若当前聚焦窗口不是 VRoid Studio 时拒绝被执行。
如何使用
大多数是:截图 → 查看 → 定位 → 点击/输入 → 再截图。
vroid_launch()vroid_screenshot(),并等待图片vroid_find_text("Export")(或vroid_find_button())获取坐标vroid_click(x, y)—— 始终从新的截图里获取坐标vroid_screenshot()确认实际发生
从最初的 spike 得来的重要规则:
读整个画面,而不是局部裁剪。 一个“Close Hairstyle Editor”的确认型弹窗正戳在屏幕中央,却导致六次点击失败,因为当时只对顶部 60 px 做了 OCR 检查。
不要通过 3D 视图判断变化。 VRoid 每帧都会做抖动(dithering),因此即使无事发生,全窗口 diff 也是 0.98 左右。要看一段 UI 条。
优先选择数值框,而不是拖敲滑块。
vroid_set_slider会输入精确值,拖拽留给我们没有数值框的控件。主导按钮是按颜色而不是文字查找。 如果你预期是蓝色胶囊却看到灰色胶囊,那是应用在告诉你某必填字段为空。
一个完整 2560×1440 帧先用 OCR 大约需要 10 秒。合并起来传
region。
坐标空间
实行有三个空间,参数各不相同:
空间 | 参考机型上的尺寸 | 由谁使用 |
Hyprland layout(逻辑层) | 2048 × 1152 |
|
截图的 image pixels | 2560 × 1440 | tesseract、cv2、你见到的所有内容 |
X11 像素(Xwayland) | 2560 × 1440 | XTEST |
工具默认接收并返回 image px(space="image"),并在内部自动换算坐标,所以你可以把 vroid_find_text 直接输出给 vroid_click。如果 MCP_VROID_MAX_IMAGE_PX 降采样了你看到的图片,请将你读到的坐标乘以给出的 downscale 因子的倒数——或者直接调用 vroid_find_text,它始终返回原生 px。
UI 地图(VRoid Studio 2.14.0,英文版)
坐标都是2560×1440 全屏窗口截图的 image px。把它们当作提示即可,工具会优先用 OCR 定位。
开始屏幕 — Create New + 卡片位于约 (118, 218),说明文字位于 (118, 328);右上角 New / Open 位于 (2439, 99) / (2495, 100);下方为 Sample Models 网格。点击 Create New 会打开一个模态框,文字为 "Select a base to start with",其中 Fem (1199, 862) 与 Masc (1359, 862) 是说明标签——应点击说明文字上方约 100 像素处的缩略图。
编辑器 — 标签栏位于 y ≈ 23:Face 97 · Hairstyle 198 · Body 302 ·
Outfit 392 · Accessories 509 · Look 622。汉堡菜单 ☰ 位于 (29, 23) →
Save (Ctrl+S)、Save As… (Ctrl+Shift+S)、导入/批量导出、撤销/重做、返回
模型选择界面——Escape 不会关闭此菜单,需点击其他位置。右上角工具栏:相机 (2415, 23),分享/导出 (2464, 23),竖向菜单 ⋮
(2512, 23)。左侧图标条(x ≈ 24,第一个图标 y ≈ 77,之后每个间隔约 48 像素)=
当前标签页的子分类。左侧面板 = 预设网格,Presets/Custom 位于 y ≈ 120。右侧面板 = Customize,然后是 Parameters。
右侧面板控件
控件 | 驱动方式 |
滑块 | 使用 x ≈ 2505 处的数字输入框(对应 |
颜色 | 使用 x ≈ 2450 处的 |
复选框 / 单选按钮 | 直接点击小方块/圆圈 |
折叠面板 (accordion) | 点击标题(例如 |
下拉框 | 仅在原生 Wine 对话框中出现;先点击,再用方向键操作 |
Body 参数从 Model's Height : 161.2 cm 开始,然后是 Fem Height、
Masc Height、Body Size、Head Size、Head Width、Head Tip (Y)、
Neck Length/Thickness/Width、Soften Collarbone,……Face 参数包括:
Eye 大小 X/Y,Eye Position (X/Y)、Rotate Eye Socket、Inner/Outer Eye Slant、Iris Size X/Y、Gaze (Y),……(共约 40行;工具会为你自动滚动。)
发型编辑 — Hairstyle 标签页 → 左侧图标栏的发型图标 → Custom 子标签页 →
+ Create New → 右侧出现 Edit Hairstyle。其中有:Add Freehand Hair Guides / Add Procedural Hair Guides、Hair Groups 列表,以及位于上方的
(330 / 365 / 398 / 432, 83) 的工具面板,撤销/重做在 (76, 23) / (133, 23)。退出前会提示:点击 ✕(23, 23)会弹出 Close Hairstyle Editor
对话框,其中有 Save as new item / Overwrite / Close without saving 三个选项。
导出为 VRM — 点击分享图标 (2462, 23) → 选择 Export as VRM → 进入全屏导出页面,可见蓝色 Export 胶囊按钮(约 (2412, 197)),然后再打开VRM Settings** 模态框(居中、可滚动,约 x 1000–1560 范围):其中包含 Export Format 的单选项 VRM 0.0/VRM 0.0,Avatar Name 字段为必填项,Version,以及 Creators 必填,版权/联系方式/参考资料,以及使用方式勾选框;Export 胶囊按钮在必填项填好前都会是灰色不可点击状态。接下来是 Wine 保存对话框(独立窗口,标题为 Export):其 File name: 输入框会自动获得焦点且文本已全选,所以直接输入 Windows 路径并回车触发默认按钮即可。Proton 前缀会把 Z:\ 映射为 /,因此 /home/nuri/x 对应 Z:\home\nuri\x。**不要把 OCR 识别到的 Save 当作唯一线索**:Save in: 标签也会匹配同一个关键词。
脆弱之处
整个定位都完全依赖 OCR。 字号较小、字距较大或浅底深字的标签容易被拆开或漏识别(例如
Export→E+xport)。图标完全无文字——这些 anchor 是按窗口尺寸硬编码的位置比例,pixiv 重新调整 UI 后就可能移动。固定锚点是按 2560×1440 分辨率、125% 缩放标定的。 如果换了别的显示器,可能需要重新量一次。
模态框可能出现在你搜索区域之外,并会悄悄吞掉点击。
时序问题。 选定基座后约 5 秒 3D 视口才出现;导出需要 5–30 秒(模型越重越久)。
Wine 对话框是一个独立的窗口,有完整的填充和几何设置,请对
vroid_screenshot(whole_screen=true)下手。语言。 这些前提都假设 UI 是英文。如果 VRoid 显示为日文,向上角骨、通过
⋮→ Settings → Language 改成英文。闲置屏保 可能在运行中随时抢占会话。保护逻辑拒绝在屏保窗口呼吸输入,并且在动手前只会关闭那一个窗口(只关那一个)。
安全注意
这个服务端会向真实桌面会话注入真实鼠标/键盘事件,并截取整个桌面的截图。 这就是它的核心目标,同时也正是风险所在:
截图可能包含屏幕上的任意可见内容——
whole_screen=true会全屏捕获,而且截图会明文(不加密)写到磁盘。按键会发往当前有焦点的窗口。驱动会跳过 VRoid Studio 以外的任何窗口,但即使被攻破或依赖提示不善,仍然可能点到 VRoid 内部任何位置。
vroid_launch(restart=true)会杀掉 VRoid Studio,未保存的工作会丢失。此处没有任何沙箱,也没有确认确认步骤。
请在有人的陪同下运行,在该会话中一直监视,不要让无人看管的 agent 长时间驱动它。完成后调用 vroid_release() 把桌面交还给你。
开发
uv run python scripts/smoke_test.py # start the server, list tools, call vroid_status
uv run python scripts/smoke_test.py --screenshot # + one passive capture if VRoid is open
uv run vroid-driver shot # the original driver CLI, still herevroid-driver(mcp_vroid.driver.cli)是原型阶段的命令行界面——其中包含 launch、shot、find、click、tab、slider、export、cam、apply-params 等命令,非常适合在没有 MCP 客户端参与的情况下做调试。
致谢与许可证
驱动代码(src/mcp_vroid/driver/、native/)起初是来自我自己的 arrakis 项目,后来打成 tools/vroid-driver 的独立 spike,在这里与 MCP server 包装后一并提供。
MIT —— 见 LICENSE。
Available Tools
18 toolsvroid_clickA
Click a point in the VRoid window with the real compositor cursor.
Refuses unless VRoid Studio is the focused window; it focuses the window itself first (workspace 9, fullscreen) and raises rather than clicking into somebody else's app.
The pointer glides to the target in a few steps so hover states fire, then clicks and settles ~0.35 s. Coordinates must come from a CURRENT capture - take a fresh vroid_screenshot or vroid_find_text right before clicking, because panels reflow and modals move.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate in `space`. | |
| y | Yes | Y coordinate in `space`. | |
| space | No | 'image' = pixels of a window capture (what vroid_screenshot / vroid_find_* report - the default, and almost always what you want); 'window' = Hyprland layout units relative to the window's top-left; 'layout' = absolute Hyprland layout units of the whole output. | image |
| button | No | Mouse button. right/middle also orbit/pan the 3D viewport when dragged. | left |
| double | No | Send two clicks (selects a word in a text box). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without any annotations, the description carries the full burden and does so richly: it discloses the focus/raise behavior, refusal condition, pointer glide timing (~0.35 s), and the requirement for fresh captures. This goes well beyond what the schema conveys and gives the agent a clear model of 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?
Three paragraphs, with the core action stated first, followed by essential behavioral caveats. It is reasonably tight—each sentence contributes (focus behavior, pointer glide, coordinate freshness). No redundant fluff, though it could be compressed slightly. The structure is logical and front-loaded.
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 the output schema exists and parameter schema covers everything, the description supplies needed behavioral context: when it refuses, how it moves the cursor, and the freshness requirement. It does not mention return values, but the output schema handles that. It is complete enough for an agent to invoke correctly, leaving no major 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 input schema already describes all 5 parameters with 100% coverage. The description adds only context about coordinate freshness (stale coordinates cause misses), but does not elaborate on 'space', 'button', or 'double'. Since the schema is exhaustive, the description adds little extra but is not deficient.
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?
States precisely that it clicks a point in the VRoid window using the real compositor cursor, distinguishing it from drag, scroll, and other sibling actions. The verb, resource, and mechanism are explicit, so an agent can clearly understand the tool's role.
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?
Provides explicit guidance that coordinates must come from a current capture, and that it will focus/raise the VRoid window itself, refusing to click into other apps. This conveys when to use it (for interacting with VRoid) and warns against stale coordinates. However, it does not explicitly contrast with sibling click-like tools (though drag/scroll are self-evident).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_current_screenA
Identify which VRoid screen is on top: start, editor, export_vrm, hair_editor, or unknown.
Cheap-ish (OCRs only the top strip, ~2 s) and worth calling whenever a flow tool fails - most failures are "you are not on the screen this tool expects". 'unknown' usually means a modal is up; screenshot the whole window and look.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool is 'cheap-ish' (only OCRs the top strip, ~2 s) and that 'unknown' indicates a modal, which are useful behavioral traits. However, it does not explicitly state that the tool is read-only or has no side effects. For a diagnostic tool, this is a minor omission, so a 4 is appropriate.
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 well-structured: the first sentence states the primary purpose, and the second provides usage guidance and troubleshooting. Every sentence contributes meaningful information without redundancy. The 'unknown' tip is an efficient way to add depth.
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 zero-parameter diagnostic tool, the description is complete. It covers purpose, possible outputs, cost, common failure interpretation, and a recommended next step. The output schema likely provides the exact return type, but the description already gives enough to the agent. No significant gaps remain.
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 tool has zero parameters, so the baseline is 4. The description adds value by enumerating the possible output values (the five screen states), which helps the agent interpret the result. No parameter details are needed, so this dimension is well-served.
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 tool's purpose: to identify which VRoid screen is on top, listing the possible outputs (start, editor, export_vrm, hair_editor, unknown). The verb 'identify' and the resource 'screen state' are specific, and the explicit list of possible values distinguishes it from sibling tools that perform actions rather than diagnostics.
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 explicitly says when to use it: 'worth calling whenever a flow tool fails' and explains the common failure mode. It also provides guidance on interpreting the 'unknown' result (modal is up) and suggests a follow-up action (take a full-window screenshot). This gives clear decision-making context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_dragA
Press, glide and release - slider handles, the 3D camera, hair guides.
For Parameters sliders prefer vroid_set_slider, which types an exact value into the row's numeric box; dragging is only for controls that have no numeric box. The glide is 24 interpolated steps, which is what the app needs to register a drag rather than a click.
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | Press point X in `space`. | |
| x2 | Yes | Release point X in `space`. | |
| y1 | Yes | Press point Y in `space`. | |
| y2 | Yes | Release point Y in `space`. | |
| space | No | 'image' = pixels of a window capture (what vroid_screenshot / vroid_find_* report - the default, and almost always what you want); 'window' = Hyprland layout units relative to the window's top-left; 'layout' = absolute Hyprland layout units of the whole output. | image |
| button | No | left = slider handles and drawing; right = orbit the camera (~400 image px is 90 deg of yaw); middle = pan the model. | left |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It adds key details: the glide is 24 interpolated steps to register a drag rather than a click, and the kinds of operations it performs (slider, camera orbit, pan). While it doesn't discuss failure modes or side effects, it covers the essential behavioral traits an agent would need to know before calling.
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 paragraphs: the first delivers the primary purpose in a compact phrase, and the second adds usage guidance and a behavioral detail. Every sentence earns its place, and the key scoping information is front-loaded.
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 gives enough context for correct invocation: it names target resources, the condition for using it, and the interpolation detail. An output schema exists, so return values are covered. It stops short of describing error handling or coordinate system conversion, but for a drag tool that's acceptable given the schema richness.
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 input schema already provides 100% coverage with detailed descriptions for x1, y1, x2, y2, space, and button, including enums and defaults. The description does not add parameter-specific explanation beyond what the schema offers, so a baseline of 3 is appropriate because the schema does the heavy lifting.
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 verb (press, glide, release) and the specific resources it acts on (slider handles, 3D camera, hair guides), and it distinguishes itself from sibling vroid_set_slider by noting dragging is only for controls without a numeric box. This leaves no ambiguity about what the tool does.
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?
Explicitly states when to use this tool versus vroid_set_slider, with a concrete rule: 'prefer vroid_set_slider for parameters sliders' and 'dragging is only for controls that have no numeric box.' It also mentions camera and hair guides, giving clear contexts for alternative use. No inference is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_export_vrmA
Walk the entire Export-as-VRM flow and write a .vrm file.
Editor toolbar share icon -> 'Export as VRM' -> the blue Export pill -> the VRM Settings modal (fills Avatar Name and Creators, picks the export format, scrolls to the bottom and clicks Export) -> Wine's save dialog (types a Z:\ path and presses Return) -> waits for the file size to stop growing.
Must be started from the EDITOR screen with a model loaded. Takes 30 s to a few minutes depending on the model. Returns the written path and its size; raises with the path of a diagnostic screenshot if any step fails - read that screenshot before retrying, since a half-finished flow usually leaves a modal open that the next attempt will trip over.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Where to write the .vrm, as a normal Linux path. Translated to the Proton prefix's Z:\ mapping for the Wine save dialog. | |
| creator | Yes | VRM metadata 'Creators' - also REQUIRED. | |
| timeout | No | Seconds to wait for the file to finish being written. | |
| version | No | VRM spec version to export: '1.0' (VRoid's default) or '0.0' for the legacy VRM0.0 format. | 1.0 |
| avatar_name | Yes | VRM metadata 'Avatar Name' - REQUIRED by VRoid; the Export button stays grey until it is filled. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it excels. It discloses the side effects (opens modals, uses Wine save dialog), the time cost (30s to minutes), the failure behavior (raises with a diagnostic screenshot path), and the recommended retry strategy (read the screenshot, beware of leftover modals). This is unusually rich and actionable, covering the obvious 'what happens to the system' and 'what to expect' questions an agent would have.
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 longer than average, but it front-loads the core action ('Walk the entire Export-as-VRM flow and write a .vrm file') and structures the rest as a concise step chain, a prerequisite, a timing note, and a failure/retry note. Each sentence earns its place; there is no filler. It could arguably be trimmed slightly (e.g., the detailed UI path), but the richness contributes to transparency, so a 4 is fair.
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?
Despite having an output schema, the description explicitly states what it returns (the written path and its size) and how it signals failure (a diagnostic screenshot path), which complements the schema. It also covers prerequisites, duration, and the retry hazard. For a complex multi-step GUI automation tool, this is fully complete; an agent has everything needed to invoke it correctly and handle outcomes.
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 description coverage is 100%, so all five parameters already have explanations (e.g., path is a Linux path translated to Z:\, avatar_name is required for the Export button to activate). The tool description does not add any parameter-specific semantics beyond what the schema provides. Per the rubric, with full schema coverage, the baseline is 3, and the description adds no extra value here.
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 tool walks the entire 'Export as VRM' flow and writes a .vrm file, with a verb (walk/export), a specific resource (VRM file), and an explicit step sequence. It distinguishes itself from low-level siblings like vroid_click or vroid_type by being a composite workflow, and from vroid_save_project (which saves a project, not exports a VRM). The first sentence alone conveys the exact 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 gives a clear prerequisite: 'Must be started from the EDITOR screen with a model loaded.' It also implies when to use it (when you need a .vrm export) and orients the user by narrating the UI steps. It does not explicitly name an alternative tool or describe when NOT to use it, but given the sibling set (most are atomic actions), the usage context is sufficient. A minor gap is the lack of explicit 'use this instead of manual steps' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_find_buttonA
Find VRoid's primary action buttons by their colour, not their text.
VRoid's confirm buttons ('Export', 'OK', 'Create') are solid #0096FA pills whose white labels tesseract regularly loses, so this matches the button chrome. Blobs come back biggest-first, in image px, ready for vroid_click.
A grey pill (color='disabled') where you expected a blue one means the
action is disabled - on the VRM Settings modal that means Avatar Name or
Creators is still empty.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | 'primary' finds the enabled blue #0096FA pill; 'disabled' finds the grey pill, which is the app telling you a required field is still empty. | primary |
| label | No | Optional label to disambiguate when several pills are visible; the button interior is OCR'd at high upscale to check it. | |
| limit | No | Max blobs to return. | |
| region | No | Restrict the search to this rectangle (image px). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden of behavioral disclosure. It reveals the matching mechanism (button chrome), the output ordering (biggest-first, image px), and the semantic meaning of a disabled grey pill, including the specific validation context on the VRM Settings modal. This goes well beyond the schema and gives agents critical operational knowledge.
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 compact three sentences, each earning its place: purpose and differentiation (sentence 1), technical rationale and output format (sentence 2), and practical interpretation of a key signal (sentence 3). It is front-loaded with the core purpose and contains no filler, making it highly efficient for agent parsing.
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 moderately complex with 4 parameters and an output schema, but the description covers the essential context: why this tool exists (OCR failure), how results are returned (blobs, ordered), and what a specific result indicates (disabled state). Combined with the exhaustive schema descriptions, nothing critical for correct invocation is missing.
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 100%, so the baseline is 3. The description adds little beyond what the schema already explains (e.g., the color enum semantics are already in the schema). It does reinforce the color meanings but does not add new parameter-level detail for label, limit, or region. The description therefore does not elevate above the baseline.
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 tool's purpose: finding VRoid buttons by color rather than text. It specifies the resource (primary action buttons), the method (color matching), and explicitly differentiates from text-based approaches. The mention of 'ready for vroid_click' also clarifies the intended downstream use, making the tool's role unambiguous relative to siblings like vroid_find_text.
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 strong usage context by explaining why color-based matching is necessary (tesseract loses white labels), implicitly steering agents away from text-based tools. It also gives guidance on interpreting results (grey pill means disabled) and notes the typical next step (click). However, it does not explicitly name alternative tools or enumerate when NOT to use this tool, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_find_textA
OCR the current VRoid window and return where query appears.
Takes its own fresh screenshot, so coordinates are current. Results are image px, ordered by OCR confidence, ready to pass straight to vroid_click (which defaults to space='image').
Known OCR weaknesses in this UI: small, letter-spaced or light-on-dark labels get split or dropped ('Export' -> 'E' + 'xport'), and white text on VRoid's blue primary buttons often disappears entirely - use vroid_find_button for those. Icons (toolbar, left rail) have no text at all; the README's UI map has their fractional positions.
If nothing is found, that is information: the screen may not be the one you think it is, or a modal is covering it. Take a screenshot and look.
| Name | Required | Description | Default |
|---|---|---|---|
| exact | No | Require the whole word to match, not a substring. Use for captions that share a prefix with a heading (e.g. 'Name' vs 'Avatar Name'). | |
| limit | No | Max matches to return. | |
| query | Yes | Label to look for, e.g. 'Export', 'Hairstyle', 'Avatar Name'. Matching is case- and punctuation-insensitive substring by default. | |
| region | No | Restrict OCR to this rectangle (image px). Strongly recommended: OCR of a full 2560x1440 frame takes ~10 s, a panel-sized region under 2 s. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavior: it takes a fresh screenshot, returns coordinates in image pixels ordered by OCR confidence, and is designed for direct use with vroid_click. It candidly lists known OCR weaknesses ('Export' splits to 'E'+'xport', white text on blue buttons disappears) and performance implications (~10s full frame vs ~2s region). This is exceptionally transparent for a tool with zero annotation coverage.
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 front-loaded with the core purpose in the first sentence, then flows logically through currentness, output format, limitations, alternatives, and failure handling. Every sentence carries substantive information—no filler. It is long but appropriately dense for a tool with this many behavioral caveats and integration points.
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 covers everything an agent needs to invoke this tool correctly: what it does, output format and ordering, how to feed results into vroid_click, known failure modes (OCR splitting, missing white-on-blue text), performance guidance via region, alternative tool for buttons, and what a null result implies. Since an output schema exists, return details are not required in the description. For a computer-vision OCR tool with multiple integration touchpoints, this is complete.
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 coverage is 100% and each parameter (query, exact, limit, region) already has detailed descriptions including defaults and examples. The tool description adds little beyond schema—it only mentions that results are ready for vroid_click, which is about output usage rather than parameter meaning. Baseline 3 is appropriate because the schema fully documents parameters and the description does not enhance it.
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 opens with a precise action and resource: 'OCR the current VRoid window and return where `query` appears.' It immediately distinguishes itself from the sibling vroid_find_button by noting it handles text labels, and even mentions specific limitations for button text. This makes the tool's purpose unmistakable relative to 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 explicitly says when to use this tool versus alternatives: use vroid_find_button for blue primary buttons, and it notes that icons have no text so users should consult the UI map. It also advises when no result is found (screen may be wrong or modal covering) and recommends taking a screenshot. This is clear conditional guidance with exclusions and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_keyA
Press a key combination in the focused VRoid widget.
Useful ones: Return confirms a value box or a Wine dialog's default button; ctrl+s saves the project; ctrl+shift+s is Save As; ctrl+z/ctrl+y undo/redo in the editor.
Note Escape does NOT close VRoid's hamburger menu - click elsewhere to dismiss it.
| Name | Required | Description | Default |
|---|---|---|---|
| combo | Yes | A key, optionally with modifiers, e.g. 'Return', 'Escape', 'Tab', 'BackSpace', 'ctrl+s', 'ctrl+shift+s', 'ctrl+z'. Names follow X keysyms; 'enter', 'esc', 'space', arrows are aliased. | |
| times | No | Repeat count. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses a notable behavioral nuance: Escape does not close the hamburger menu, and that key presses go to the focused widget. This is sufficient for a key-press tool, though it doesn't describe potential side effects or focus requirements beyond what's implied.
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 concise and well-structured: the primary objective is stated first, followed by a list of useful combos and a caveat. Every sentence contributes value, and there is no fluff. The layout is easy to scan.
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 key-press tool, the description covers what keys to press, gives practical examples, and highlights a relevant gotcha. It doesn't mention return values, but the output schema likely indicates success/failure, and for this tool it's not critical. It is sufficiently complete for an agent to call correctly.
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 already describes both parameters (combo and times) with examples and aliases, so the baseline is 3. The description adds value by providing concrete, useful key combinations (e.g., 'Return confirms a value box', 'ctrl+s saves'), which goes beyond the schema's generic format explanation and clarifies likely inputs.
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 tool's function: 'Press a key combination in the focused VRoid widget.' It uses a specific verb and resource, and distinguishes itself from siblings like vroid_click and vroid_type by focusing on key combinations. The context of 'focused widget' adds clarity.
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 provides practical guidance by listing useful key combinations (Return, ctrl+s, ctrl+z, etc.) and their effects, which helps an agent decide when to use this tool. It also gives a specific caution about Escape not closing the hamburger menu. However, it does not explicitly mention alternatives or when not to use it, though the examples imply its use for shortcuts and confirmations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_launchA
Start VRoid Studio (Steam appid 1486350, Proton) and take control of it.
Idempotent: if the window already exists it is reused, not relaunched. Then the window is parked on Hyprland workspace 9, the workspace the user was on is remembered (vroid_release puts them back), and the window is focused and fullscreened so its geometry - and therefore every coordinate you will read off a screenshot - is stable.
Cold start over Proton takes 30-90 s; the call blocks until the window is up. It does NOT wait for the start screen to finish drawing, so take a vroid_screenshot and look before clicking anything.
| Name | Required | Description | Default |
|---|---|---|---|
| restart | No | Kill a running VRoid Studio first (UNSAVED WORK IS LOST) and start a clean instance. | |
| timeout | No | Seconds to wait for the window to appear. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries behavioral disclosure. It details idempotency, window parking on workspace 9, focusing and fullscreening, blocking behavior, cold start timing, and the caveat that the start screen may not be ready. This is comprehensive for a launch tool.
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 concise and logically sequenced: purpose first, then idempotency, workspace details, and timing caveat. Each sentence adds necessary information without fluff. Slightly longer than minimal but justified by the behavioral details.
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 no annotations and an output schema present, the description covers essential launch behavior, blocking, and post-launch guidance. It does not explicitly state return values, but the output schema likely handles that. It also does not mention error handling, but that is not critical for a launcher.
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 coverage is 100% and both parameters have descriptive schema entries (restart warns about unsaved work, timeout defines wait). The description adds context around restart via idempotency but does not materially extend parameter meaning beyond the schema. Baseline 3 is appropriate.
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 opens with a specific verb and resource: 'Start VRoid Studio (Steam appid 1486350, Proton) and take control of it.' It distinguishes itself from siblings by describing idempotent behavior and workspace parking, making it clear this is the launcher, not any other action.
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 context: it can be reused if window exists, blocks for 30-90s on cold start, and instructs to take a screenshot before clicking. It names vroid_release as complementary, implying when not to use (though it does not explicitly exclude other tools). The guidance is clear and actionable, though slightly implicit about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_new_characterA
From the start screen: Create New -> pick a base -> land in the editor.
Locates the 'Create New' tile by text (so it survives the Recently Edited grid growing), clicks the card above its caption, picks the base thumbnail, then waits up to a minute for the editor - the 3D viewport takes several seconds to appear after a base is chosen.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | Which base model the 'Select a base to start with' modal offers. | Fem |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that it locates the 'Create New' tile by text (robust to the Recently Edited grid growing), clicks the card, picks the base thumbnail, and waits up to a minute for the editor to appear, acknowledging the 3D viewport delays. This goes beyond the short intent, but it does not mention potential failure modes or side effects (e.g., what happens if the editor doesn't load). Still, it is substantially transparent for a creation tool.
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 compact block of text that clearly front-loads the purpose and then details the steps. Each sentence earns its place: the text-locating technique, the click sequence, and the wait time are all useful for execution. It could be slightly shorter, but it avoids redundancy and remains focused on actionable 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?
Given the tool's complexity (multi-step navigation with timing considerations) and the presence of an output schema (so return values need not be described), the description covers the essential context: the start screen prerequisite, the steps, and the wait behavior. It does not specify what happens if the start screen is not present or if the base selection fails, but these are edge cases that are not typically required for standard usage. Overall, it is complete for an agent to call the tool correctly under normal conditions.
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 parameter 'base' is fully described in the schema with an enum and a clear description ('Which base model the 'Select a base to start with' modal offers'). The tool description does not add any additional meaning beyond the schema, which is already explicit. Since schema coverage is 100%, a baseline score of 3 is appropriate; the description does not compensate with extra 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 clearly states the tool's purpose: navigating from the start screen to create a new character by clicking 'Create New', selecting a base, and landing in the editor. It specifies the exact workflow and distinguishes itself from sibling tools like vroid_launch (which likely starts the app) or vroid_open_tab (which opens tabs). The verb-resource pair is specific and 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 sets clear context by starting with 'From the start screen', implying the app must already be launched and on that screen. It does not explicitly mention alternatives or when not to use, but the procedural nature and the prerequisite are evident. It lacks explicit exclusions, but the context is clear enough for an agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_open_tabA
Switch the editor to a top-level tab, located by OCR of the tab strip.
Only works on the editor screen (not the start screen, the export screen or the hair editor). Waits ~2 s for the panels to redraw and returns the path of a verification screenshot - take a vroid_screenshot if you want to see the result.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | One of Face, Hairstyle, Body, Outfit, Accessories, Look (the editor's top tab strip). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the ~2 second wait for redraw, the return of a verification screenshot path, and the suggestion to take a screenshot to view results. It does not specify failure modes (e.g., what happens if OCR cannot find the tab), but the disclosed timing and return behavior are useful. No contradictions with annotations (since none exist).
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 very concise, with the core purpose in the first sentence and supporting details in a short second paragraph. It front-loads the function and then adds necessary constraints and behavior without any redundant or irrelevant content. Every sentence adds value.
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 the availability of an output schema (though not shown) and high parameter schema coverage, the description provides sufficient context for an agent to call the tool correctly. It covers the environment limitation, the wait time, and the return value. Missing details include error handling when OCR fails, but for a tool that is part of a larger suite with similar patterns, this is a minor gap.
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 description covers 100% of the single parameter 'name' with clear allowed values (Face, Hairstyle, Body, Outfit, Accessories, Look). The description does not add additional meaning about the parameter beyond what the schema already provides, which is acceptable given the high schema coverage. The baseline of 3 is appropriate.
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 ('Switch'), a clear resource ('top-level tab'), and the method ('located by OCR of the tab strip'). It clearly distinguishes this from sibling tools like vroid_click (which clicks generic elements) or vroid_find_text (which locates text), since it is specialized for tab switching. The screen restriction further refines its 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 explicitly states the tool only works on the editor screen, excluding start, export, and hair editor screens, which tells the agent when not to use it. However, it does not directly mention alternatives or contrast with sibling tools like vroid_click when a tab is already visible. The guidance is clear on the environment constraint but lacks explicit 'use this instead of X' phrasing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_releaseA
Hand the desktop back: switch to the workspace the user was on before.
Leaves VRoid running on workspace 9. Call this when you are done with a session, or before handing control back to the human.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the workspace switch and that VRoid remains running, which is the primary behavior. It does not mention potential side effects like saving state or closing dialogs, but these are likely irrelevant for a simple release action. Slightly more detail would earn a 5.
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 sentences, front-loaded with the core action and usage context. Every word earns its place, with no filler or 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?
For a zero-parameter tool with an output schema present, the description covers the purpose, the behavioral outcome, and the appropriate invocation time. Nothing an agent needs to call it correctly is missing.
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 tool has zero parameters, so the baseline is 4. No parameter descriptions are needed, and the description adds sufficient context for how the tool behaves regardless of inputs.
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 precise action: 'switch to the workspace the user was on before' and clarifies that VRoid remains running on workspace 9. This clearly distinguishes it from siblings like vroid_launch or vroid_open_tab, and leaves no ambiguity about the tool's core function.
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?
Explicitly says when to call: 'Call this when you are done with a session, or before handing control back to the human.' This gives clear situational context and implies it should not be used mid-task, providing strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_save_projectA
Save the .vroid project - plain Save, or Save As to an explicit path.
With name: presses Ctrl+Shift+S and drives Wine's save dialog the same
way the VRM export does, then waits for the file. Without name: opens
the hamburger menu and clicks Save, which overwrites the project's
existing file and opens the Wine dialog only if the project has never
been saved (in that case call this again WITH a name).
Worth doing before any risky experiment: nothing else in this server persists your work, and vroid_launch(restart=true) discards it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Save As target: a bare name (written into the server's out dir as <name>.vroid) or an absolute Linux path. Omit to do a plain Save, which silently overwrites the project's existing file. | |
| timeout | No | Seconds to wait for the file to be written. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It discloses that plain Save silently overwrites the existing file, that Save As opens Wine's save dialog, and that without a name the dialog only appears if never saved. It also mentions it waits for the file and explains the persistence context. This is transparent and goes beyond mere operation to side effects and prerequisites.
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: it states the core purpose first, then explains the two modes, then the critical warning. Each sentence earns its place, with no redundant phrasing or filler. The structure makes it easy for an agent to parse and act on.
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 two modes and edge cases (unsaved project), the description covers everything needed: mode selection, what happens with and without a name, the dialog behavior, and the importance relative to other tools. It also addresses persistence and the destructive nature of vroid_launch(restart=true). No critical information is missing.
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 input schema already covers both parameters fully (100% coverage) with descriptions. The tool description adds value by explaining the behavioral difference between supplying `name` (Save As) vs omitting it (plain Save), and clarifies that omitting it opens the dialog only if never saved. This adds operational meaning beyond the schema's straightforward parameter descriptions, so it exceeds the baseline of 3.
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?
Description starts with 'Save the .vroid project - plain Save, or Save As to an explicit path' which clearly states the tool's specific action and distinguishes the two modes. It is distinct from siblings (no other save tool) and gives a concrete resource (the .vroid project).
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?
Explicitly provides usage context: 'Worth doing before any risky experiment...' and explains that nothing else persists work and vroid_launch(restart=true) discards it. It also details when to use name (Save As) vs plain Save, including the caveat about the dialog appearing only when never saved and the instruction to retry with a name. This is clear, actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_screenshotA
Screenshot VRoid and return the image, plus the path it was saved to.
LOOK at the returned image before you decide anything - this is the only way to see the app. Every capture is also written to the captures dir so it can be re-read later.
Coordinate space: the reported image_size is the native capture size
(2560x1440 on the reference machine) and that is the space every other
tool means by space="image". The transported image may be downscaled
(downscale in the text block says by how much); if you read a coordinate
off the picture by eye, divide it by that factor before clicking. Better:
get coordinates from vroid_find_text / vroid_find_button, which always
report native image px.
Gotchas carried over from the driver: capture the WHOLE window, not a crop, when checking "did that work" - modals appear in the middle of the screen and a top-strip-only check will miss them. And do not judge change by the 3D viewport, which dithers every frame; watch a UI strip instead.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Short label used in the saved filename. | |
| region | No | Optional crop in image px of the window capture. Omit for the whole window. | |
| whole_screen | No | Capture the whole output instead of just the VRoid window - needed for the Wine save/export dialog, which is a separate window. | |
| full_resolution | No | Return the image at native resolution instead of downscaling it for transport. Large. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and does so thoroughly. It discloses that every capture is saved to a captures directory, returned images may be downscaled, coordinates use native image pixel space, and there are driver quirks around modals and viewport dithering. 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 description is long but every section earns its place: purpose, return behavior, coordinate system, and practical gotchas. It is front-loaded with the core action and then layers important operational details so an agent can use the tool correctly without skimming irrelevant 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?
For a screenshot tool with no output schema and no annotations, this is complete: the agent learns what is returned, where it is written, how coordinates should be scaled, what mode to use for verification, and what UI regions are reliable to observe. I see no important calling context missing.
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 already describes all four parameters, so the baseline is 3; the description adds meaningful coordinate-space and downscale context that directly affects how region and full_resolution should be interpreted. It does not separately expand on tag or whole_screen, but the schema handles those sufficiently.
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 opens with a specific verb and resource: 'Screenshot VRoid and return the image, plus the path it was saved to.' This clearly states the tool's purpose and main outputs, and the later coordinate-space discussion differentiates it from related perception tools like vroid_find_text and vroid_find_button.
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 usage context: look at the returned image before deciding anything, capture the whole window when verifying changes, avoid relying on the dithered 3D viewport, and prefer vroid_find_text / vroid_find_button for coordinates. This goes far beyond a generic description and routes the agent to the right behavior and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_scrollA
Wheel-scroll a panel or zoom the 3D viewport.
Sent as X11 button 4/5 (6/7 horizontally): VRoid is an XWayland client and ignores Wayland virtual-pointer axis events, so this is the only wheel that works on it.
Long Parameters lists need this - a label that vroid_find_text cannot see is usually just below the fold. vroid_set_slider scrolls to its own row automatically, so you rarely need to do it by hand.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Park the pointer here first - the wheel goes to whatever is under the cursor, so this decides WHICH panel scrolls. ~(0.93w, 0.60h) is the right-hand Parameters panel, the centre is the 3D viewport. | |
| y | No | See `x`. | |
| dx | No | Horizontal wheel notches, positive = right. Rarely useful; VRoid's panels scroll vertically only. | |
| dy | No | Vertical wheel notches. POSITIVE scrolls DOWN (further into a panel); over the 3D viewport, positive zooms OUT. | |
| space | No | 'image' = pixels of a window capture (what vroid_screenshot / vroid_find_* report - the default, and almost always what you want); 'window' = Hyprland layout units relative to the window's top-left; 'layout' = absolute Hyprland layout units of the whole output. | image |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explains that the wheel is sent as X11 button 4/5 (6/7 horizontally) because VRoid is an XWayland client that ignores Wayland virtual-pointer axis events. It also reveals the direction semantics: 'POSITIVE scrolls DOWN' and 'over the 3D viewport, positive zooms OUT.' This is rich, honest behavioral context beyond a simple 'scroll' statement, with no contradiction to any annotations (none exist).
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 three sentences with zero waste. It front-loads the purpose, then explains the platform-specific mechanism, then gives a concrete use case with a reference to alternatives. 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?
Given the tool's moderate complexity, the rich input schema (with parameter descriptions), and an output schema, the description is fully sufficient. It explains why the tool exists (XWayland limitation), when to use it (scrolling long panels), and how it contrasts with siblings. Nothing an agent needs to call it correctly is missing.
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 100%, so per the rubric the baseline is 3. The description does not add parameter-specific meaning beyond the schema; it focuses on when to use the tool and the underlying mechanism. The schema already contains detailed descriptions for each parameter (e.g., x: 'Park the pointer here first...'), so the description's lack of direct parameter elaboration is acceptable.
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 opens with a specific verb+resource combination: 'Wheel-scroll a panel or zoom the 3D viewport.' It immediately differentiates from siblings by noting that vroid_set_slider scrolls automatically and vroid_find_text cannot see labels below the fold. This clearly tells an agent what the tool does and how it differs from related 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 provides explicit when-to-use context: 'Long Parameters lists need this - a label that vroid_find_text cannot see is usually just below the fold.' It also explicitly states when not to use it: 'vroid_set_slider scrolls to its own row automatically, so you rarely need to do it by hand.' This gives clear guidance on selecting this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_set_colorA
Set a colour swatch by typing a hex code into its #RRGGBB box.
Scrolls the right-hand panel to the labelled row, clicks the hex field just below the label, replaces its contents and presses Return. Same caveat as sliders: the row must belong to the currently open tab and sub-category (left icon rail).
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Colour as '#RRGGBB' or 'RRGGBB'. | |
| label | Yes | The colour row's label, e.g. 'Main Color', 'Highlight Color', 'Base Color'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full responsibility of behavioral disclosure. It transparently describes the step-by-step mechanism: scrolling the right-hand panel, clicking the hex field, replacing contents, and pressing Return. It also discloses the limiting condition about the currently open tab. This is a solid level of transparency for a UI automation tool, though it does not mention potential failure modes (e.g., label not found) or side effects beyond the described actions.
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 exceptionally concise—two sentences—and front-loads the purpose in the first sentence. The second sentence packs in the operational steps and the caveat with no wasted words. Every element contributes to understanding, and nothing is redundant with the schema.
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 covers the essential aspects of the tool: its purpose, the detailed interaction sequence, and a critical precondition (correct tab and sub-category). It does not explain error handling or what happens if the label is missing, but given that an output schema exists (though not shown) and the tool is relatively simple, the description is sufficiently complete for an agent to use it effectively.
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?
Both parameters have schema descriptions with examples, so the baseline is 3. The description adds extra meaning by explaining how each parameter is used in the operation: 'label' identifies the row to scroll to, and 'hex' is the value typed into the field. This contextualizes the parameters beyond their simple data type definitions, making the tool easier to invoke correctly.
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 clear, specific action: 'Set a colour swatch by typing a hex code into its #RRGGBB box.' It identifies the resource (colour swatch) and the method (typing hex code), and the focus on color differentiates it from sibling tools like vroid_set_slider. The purpose is unambiguous and actionable.
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 caveat ('Same caveat as sliders: the row must belong to the currently open tab and sub-category') which gives some usage context, but it does not explicitly state when to use this tool versus alternatives like vroid_set_slider or vroid_click. There is no direct 'use this when...' or 'do not use when...' guidance, leaving the agent to infer the appropriate scenario from the tool's purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_set_sliderA
Set a Parameters slider exactly, by typing into its numeric box.
Scrolls the right-hand panel from the top until the labelled row is visible (so it works for parameters below the fold), clicks the numeric box at the end of that row, clears it, types the value and presses Return.
This is far more reliable than dragging the handle - use vroid_drag only for controls with no numeric box. Open the right tab first (vroid_open_tab): each tab has its own parameter list.
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | The parameter's label as printed in the right-hand panel, e.g. 'Fem Height', 'Head Size', 'Eye Size X'. | |
| value | Yes | Value to type into the row's numeric box. Most VRoid parameters run -1.0..1.0 with 0 centred; the app clamps out-of-range values. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the exact sequence of actions (scrolls, clicks, clears, types, presses Return) and notes that it works for parameters below the fold. It does not cover failure behavior, but the described mechanics are transparent and complete for normal usage.
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 tight paragraphs. The first sentence states the purpose directly. The second details the method without fluff. The third gives usage distinction and prerequisite. Every sentence earns its place; 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?
For a UI automation tool with two parameters and an output schema, the description covers the core usage: what it does, how it works, when to use it, and the prerequisite tab. It omits error handling and return-value details, but those are not critical for a correct first call. Minor gap, but overall sufficient.
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 coverage is 100%—both parameters have descriptive comments. The description does not add extra meaning beyond what the schema already provides (e.g., 'Value to type into the row's numeric box' matches). Baseline of 3 is appropriate; no further compensation needed.
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?
States a specific verb ('Set') and resource ('Parameters slider') with the method ('typing into its numeric box'). It explicitly distinguishes from sibling vroid_drag by saying 'use vroid_drag only for controls with no numeric box', making it clear which tool to select.
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?
Provides clear when-to-use ('This is far more reliable than dragging the handle'), when-not-to-use (use vroid_drag for controls without numeric box), and a prerequisite ('Open the right tab first (vroid_open_tab)'). No ambiguity about context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_statusA
Report whether VRoid Studio is running, focused, and where it sits.
Cheap and side-effect free (no OCR, no input) - use it before anything
else, and after anything that might have lost focus. focused false means
every acting tool will refuse until vroid_launch (or any acting tool's own
focus step) takes the window back.
Also reports whether the external helpers this server needs are present: the vpointer binary (built by native/build.sh), grim, tesseract, hyprctl.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states that the tool is 'Cheap and side-effect free (no OCR, no input)' and describes the side effects of the `focused` flag on other tools, as well as the external helper dependencies it reports. This is transparent and thorough, even anticipating edge cases.
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 well-structured into three clear parts: primary purpose, usage guidance, and helper reporting. It front-loads the most critical information (status report) and continues with actionable context. Every sentence adds value—'Cheap and side-effect free' justifies frequent use, and the helper list tells the agent what to expect. No fluff or 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?
For a zero-parameter tool with an output schema (which covers return format), this description provides all necessary context: what it reports, when to use it, side effects on other tools, and external dependencies. It even explains how `focused` false affects subsequent acting tools and how to recover. The tool is simple, and the description fully covers its use.
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 tool has zero parameters, so the baseline for this dimension is 4. The description appropriately focuses on behavior and usage rather than parameter details. No parameter explanations are needed, and the description does not introduce any parameter ambiguity.
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 exactly what the tool does: 'Report whether VRoid Studio is running, focused, and where it sits.' The verb 'Report' is specific, the resource (VRoid Studio) is clear, and the scope is distinct from the acting sibling tools (vroid_launch, vroid_click, etc.), which perform actions rather than status checks.
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 guidance on when to use the tool: 'use it before anything else, and after anything that might have lost focus.' It also explains the consequence of `focused` false and names the alternative (vroid_launch) that can restore focus. This is clear, actionable usage guidance that distinguishes it from other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vroid_typeA
Type into whatever widget currently has keyboard focus.
Click the field first (vroid_click) - this tool has no idea where the caret is. Keystrokes go through X11 XTEST because the Wayland virtual keyboard is mis-read by this Proton client (a whole string arrives as a single character).
Always screenshot afterwards to confirm the text landed in the field you meant: VRoid's forms have several boxes with near-identical captions, and typing into the wrong one leaves the primary button greyed out with no other symptom.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Literal text to type. '\n' presses Return. | |
| clear_first | No | Select-all + backspace before typing, so the field is replaced rather than appended to. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the XTEST mechanism and the Proton mis-read issue, directly warns about caret independence, and explains the symptom of wrong-field typing. It also notes the effect of clear_first semantically. This is exemplary transparency for an input tool.
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 but well-organized: purpose statement, usage direction, and verification step. It front-loads the critical warning about clicking first. Slightly verbose but every sentence adds operational value, so it earns a high score rather than a 3.
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 the tool's complexity (keyboard input on a misbehaving client), the description covers prerequisites, mechanism, verification, and failure modes. Output schema exists, so return value details aren't needed. All information an agent needs to call it correctly and detect errors is 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?
Schema coverage is 100% and both parameters have descriptions. The text parameter's escape sequence ('\n' for Return) is already in the schema. The description adds context about literal text and the clear_first behavior, which is beyond the schema's simple description. A high score because the description reinforces the meaning and clarifies usage in context.
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?
States a specific verb (type), resource (keyboard focus), and clearly distinguishes from siblings (vroid_click, vroid_key). The purpose is unmistakable: type text into the currently focused widget. The caveat about having no idea where the caret is clarifies its scope versus click.
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?
Explicitly instructs to click the field first (naming vroid_click as prerequisite), warns about XTEST versus Wayland issue, and mandates a screenshot afterwards to verify. It also identifies a specific failure mode (grayed-out primary button) and provides the verification step. This is complete when-to-use guidance with clear sequencing.
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.
18 tool updates
v0.1.0- First observed
vroid_click - First observed
vroid_current_screen - First observed
vroid_drag - First observed
vroid_export_vrm - First observed
vroid_find_button - First observed
vroid_find_text - First observed
vroid_key - First observed
vroid_launch - First observed
vroid_new_character - First observed
vroid_open_tab - First observed
vroid_release - First observed
vroid_save_project - First observed
vroid_screenshot - First observed
vroid_scroll - First observed
vroid_set_color - First observed
vroid_set_slider - First observed
vroid_status - First observed
vroid_type
TDQS
Scored across 18 tools
Each tool addresses a distinct capability: launching, screen identification, OCR, clicking, typing, saving, exporting, etc. Even the 'seeing' tools (screenshot, find_text, find_button) have clearly separated purposes: one captures, one finds text, one finds buttons. The interaction primitives (click, drag, scroll, type, key) are mutually exclusive and well-defined. No two tools could be confused for the same action.
All tools share the 'vroid_' prefix and mostly follow a verb_noun pattern (open_tab, export_vrm, set_slider), but a few are single verbs or nouns (status, release, screenshot, click, type). The naming is predictable and readable, with only minor deviations like 'status' and 'release' being not strictly verb_noun. Overall consistent enough for an agent to infer actions.
18 tools is on the higher side but justified for a GUI automation server that needs primitives for every interaction type plus higher-level workflows like export and save. The count feels well-scoped for the domain—each tool earns its place since there's no redundant functionality. Slightly heavy but still reasonable.
The surface covers the full lifecycle: launch, status, screen detection, navigation (open_tab, scroll), interaction (click, drag, type, key, sliders, colors), inspection (screenshot, OCR), persistence (save_project), export (export_vrm), and creation (new_character). No obvious gaps—even edge cases like disabled buttons and modal detection are addressed. The server appears fully equipped for its stated purpose of automating VRoid Studio.
Maintenance
Related MCP Connectors
Build editable 3D scenes, direct characters and cameras, and export AI video references with MCP.
Generate, edit, and deploy immersive 3D/WebGL web projects from any MCP assistant.
Generate game-ready 3D models, textures, and audio from natural language, over MCP.
Remote MCP for RunComfy: ComfyUI deployments, hosted models, LoRA training. 31 tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to control the Blockout previs desktop app for AI filmmaking, allowing staging of 3D worlds, character animation, camera framing, timeline control, and viewport screenshotting through MCP tools.6Apache 2.0
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to show, animate, and control a VRM character on the desktop, including posing and motion installation via MCP tools.1-
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to control a desktop virtual character (VRM) by playing animations, showing/hiding the character, and checking runtime status through the MCP protocol.562,949 npm2MIT
- AlicenseNot gradedqualityBmaintenanceEnables Windows MCP clients to author MikuMikuDance scenes by controlling characters, cameras, lighting, physics, timeline editing, MME effect assignments, and AVI video output through natural language or scripted tool calls.30MIT No Attribution