protoflow
This server is the ProtoFlow MCP backend, letting AI agents create and manage interactive prototype projects, annotate elements, generate PRD/release docs, and track which annotations/docs need updates after changes.
Projects: list, inspect, create, and import self-contained protoflow projects.
Pages & artboards: create/rename pages, add/update artboards, reorder artboards, and delete pages/artboards.
Artboard source: write JSX source via full content or text patches, with Babel validation and broken-reference auditing.
Annotations: read/write markdown annotations plus interaction refs, with element-id validation and source-hash tracking.
Previews & canvas: render live interactive canvas/preview URLs (http://127.0.0.1) that reflect source, annotations, and structure in real time.
Chain status: detect broken refs, unvalidated source, stale annotations, outdated PRDs, and lagging channel docs with suggested actions.
Documentation: create docs from templates, get writing guidance, draft/finalize versioned docs with snapshots, checks, and modification logs.
Screenshot pipeline: render capture previews, take automated headless-browser screenshots, and seal assets into docs.
Publishing: record channel publish events, with error-level checks that can block release or be acknowledged.
Export: export whole canvas or current doc as ZIP, self-contained HTML, or Markdown (with inlined images); export canvas also supports project ZIP.
Guides: fetch strategy guide documents by topic.
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., "@protoflow画一个购物车结账流程原型,生成带截图的 PRD"
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.
描述需求,画出原型,交付 PRD。
配合 Claude Code、Cursor、Codex 等 AI 助手,用对话制作可交互原型、添加元素标注和生成需求文档。原型改了,还能检查哪些标注和文档需要更新。

快速开始
安装
需要 Node.js ≥ 22.12.0 和 Git。
git clone https://github.com/CharlesYe8848/protoflow.git
cd protoflow
npm ci想先看效果?运行 npm run demo,打开终端输出的原型、PRD 和上线公告链接,无需连接 AI。
安装场景技能
将仓库中的 skills/protoflow 文件夹安装到助手的技能目录。
这是 ProtoFlow 唯一的主 Skill,覆盖创建和修改原型、元素标注、交付文档、预览与导出等场景,
让助手能在“做可点击原型”“根据原型整理评审文档”等请求中主动选择 ProtoFlow。
主 Skill 负责场景选择,下面的 MCP 或 CLI 提供实际工具;两者都需要可用。
Codex 用户可在本仓库根目录执行以下命令(自定义 CODEX_HOME 时使用对应目录):
mkdir -p "${CODEX_HOME:-$HOME/.codex}/skills"
if [ ! -e "${CODEX_HOME:-$HOME/.codex}/skills/protoflow" ]; then
cp -R skills/protoflow "${CODEX_HOME:-$HOME/.codex}/skills/protoflow"
else
echo "ProtoFlow 技能已存在,请先比较内容,再决定是否替换。"
fi其他助手通过其技能安装入口添加同一个文件夹。安装后重新打开会话,确认技能目录中出现
protoflow。技能不含运行时,也不会自动安装依赖或修改 MCP 配置。
连接工具
通过 MCP(让 AI 调用外部工具的接口)接入。选择你使用的助手,将 /path/to/protoflow 替换为 ProtoFlow 文件夹的绝对路径:
在终端执行:
claude mcp add protoflow -- node /path/to/protoflow/mcp/server.js在 ~/.cursor/mcp.json 中添加以下配置;如果已有其他工具,保留它们,把 protoflow 加入现有的 mcpServers:
{
"mcpServers": {
"protoflow": {
"command": "node",
"args": ["/path/to/protoflow/mcp/server.js"]
}
}
}在 ~/.codex/config.toml 中添加:
[mcp_servers.protoflow]
command = "node"
args = ["/path/to/protoflow/mcp/server.js"]配置后重新打开助手会话,确认 ProtoFlow 技能和工具均已加载。 连接诊断与 CLI 备用方式见使用说明。
Related MCP server: MCP Figma
试着这样说
创建原型
做一个可点击演示的购物车结账原型:购物车页展示商品、数量和合计,支付页支持微信、支付宝和银行卡。做好后给我预览链接。
修改并整理文档
购物车为空时禁用「去支付」。给页面补上交互规则和异常状态标注,再生成一份带截图的 PRD。
检查后续变更
把商品单价改成 139 元,检查哪些标注和文档需要更新。
打开链接就能试用原型;修改后刷新即可查看。检查会提示需要更新的内容,你可以继续让 AI 核对标注、更新截图并保存新的文档版本。
为什么用 ProtoFlow
原型改了以后,知道哪些标注、文档和已发布内容需要跟着改。
ProtoFlow 把原型、元素标注、截图和文档关联起来,让一次交付成为可以持续维护的工作流。
日常工作 | ProtoFlow 怎么帮你 |
交互规则散在对话和文档里 | 标注绑定页面元素,点击说明即可定位 |
原型修改后,靠记忆核对文档 | 发起检查,发现待核对的标注、过期文档和待更新的已发布内容 |
多轮修改后,难以确认交付版本 | 保存 PRD、上线公告的版本、修改记录和发布记录 |
换一个 AI 或新会话继续做 | 项目保存在本地文件夹,保留原型、标注和文档供继续编辑 |
适合需要持续修改原型、交付研发并同步业务团队的项目。发布到钉钉等平台需配合相应的 AI 助手工具,详见使用说明。
从原型到交付文档
同一个结账示例,可以整理成面向研发的 PRD,也可以从 PRD 生成面向业务用户的上线公告。
PRD:页面截图、交互规则、验收标准与修改记录。

上线公告:功能价值、操作说明与常见问题。

分享成果
点击画布或文档右上角的「分享」,或直接告诉 AI:
把原型导出成一个可直接打开的 HTML 文件,再把 PRD 导出为 Markdown。
画布支持项目 ZIP 和单页 HTML;文档支持 Word、单页 HTML 和带图片的 Markdown 压缩包。 把导出的文件发给同事即可;本地预览链接仅在你的电脑上有效。
更多
MIT · v0.1.0 预览版
Available Tools
22 toolsbuild_docA
构建文档版本,两阶段。snapshot:读 docs//.build/captures.json(这个文档要截哪些画板的哪些状态),冻结引用到的画板进 .build/snapshot/,供 build_publish_pack 截图(只有用画布截图当上下文的类型才需要,如 PRD/上线公告)。finalize:doc.md 已手写好、(用截图流水线的话)截图已 seal——校验 引用是否都落地、算指纹、冻结成 versions//、按 note 自动重生成修改记录表重渲染 docs//preview.html(文档阅读页是冻结版本内容的产物,仍然落盘)、跑该类型的 checks。note 必填(一句话说清这次改了什么,进修改记录表;不写版本号)。纯 prose 改动可直接 finalize,复用已有 .build/ 产物。返回的 url(http://127.0.0.1)是打开方式,findings 里 error 级会在 record_publish 拦截发布
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| mode | Yes | ||
| note | No | ||
| docId | Yes | ||
| label | No | ||
| author | No | ||
| projectId | Yes | 项目 id(同时也是项目文件夹名) |
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 delivers: it details side effects (freezing artboards to .build/snapshot/, creating versions/<n>/, re-rendering preview.html), prerequisites (doc.md written, screenshots sealed), the constraint that note is required and must not include a version number, and that error-level findings block publication at record_publish. This exceeds what the schema or annotations convey.
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 every sentence carries operational value — mode semantics, prerequisites, side effects, output semantics. It is front-loaded with the core purpose ('构建文档版本,两阶段'), though the single-paragraph wall of text would benefit from bullet separation for the two modes.
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 7-parameter mutation tool with no output schema, the description covers inputs, workflow, prerequisites, side effects, return url, and downstream gating by record_publish. It does not fully specify what 'checks' run or what label/author mean, but overall the agent has enough context to invoke both modes 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?
Schema description coverage is only 29% (dir and projectId documented). The description compensates substantially for mode, explaining both enum values in detail, and for note, adding the requiredness, single-sentence rule, and purpose in the modification table. docId's meaning is implied through file paths. However, label and author receive no explanation in either schema or description, so it does not fully compensate.
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 opens with '构建文档版本,两阶段' (build document version, two stages) — a specific verb+resource+process. It names the two modes, snapshot and finalize, and references the sibling tools build_publish_pack and record_publish, situating build_doc in the workflow. This lets an agent distinguish it from create_doc or export_doc.
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 on when each mode applies: snapshot only for doc types needing canvas screenshots, finalize after doc.md is hand-written and screenshots sealed, and pure prose changes can finalize directly reusing .build/ artifacts. It does not explicitly list alternative tools to choose instead, but the mode-level workflow is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_publish_packA
截图流水线三阶段(PRD/上线公告等用画布截图当上下文的类型的 sidecar)。previews:校验 docs//.build/captures.json 并渲染 .build/previews/.html,每个 capture 返回的 url(http://127.0.0.1)给浏览器工具打开、按 actions 操作后截图;capture:可选的自动化截图——无头浏览器(本机 Chrome,找不到才下载,不弹窗)按 actions 操作后按内容真实高度截图,写 .build/exported-images/.png;actions 表达不了的复杂交互可跳过这步手动截图放同一位置。seal:核对图片清单,把截图落进 docs//assets/.png + 写 .build/captures-manifest.json(doc.md 用
引用)
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| mode | Yes | ||
| docId | Yes | ||
| projectId | Yes | 项目 id(同时也是项目文件夹名) |
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 several behaviors: it uses headless Chrome, downloads Chrome only if not found (no popup), operates on specific file paths, writes output files, and may skip steps for complex interactions. It doesn't disclose failure modes or side effects (e.g., what happens if captures.json is missing), but the provided detail is substantial and goes beyond what the schema offers. Not a 5 because it omits some 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 a single dense paragraph, front-loaded with the overall purpose, but it lacks structure. It uses semicolons and colons to separate modes, but the flow is hard to scan quickly. Each sentence carries technical detail, but it could be broken into bullet points for clarity. It's not verbose, but the density hurts readability and quick parsing for an agent.
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?
This is a complex multi-mode tool with no output schema, but the description covers the main steps: file inputs, rendering, browser interaction, and output files. It doesn't specify return values or success criteria, but the absence of an output schema and the focus on side effects (writing files) means the agent can infer the result from file existence. The main gap is lack of error handling and prerequisites, but given the complexity, the description is largely 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?
The schema covers projectId and dir with descriptions, but docId is undocumented. The description adds meaning by explaining the file paths and the modes, which clarifies the parameters' roles. For instance, it explains that docId is used in paths like docs/<docId>/.build. It compensates for the 50% coverage by providing enough context to infer docId's purpose. Slight deduction because there is no explicit mapping of each parameter to its use, but the paths imply 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 clearly states what the tool does: it is a three-stage pipeline for taking canvas screenshots and publishing them as assets. It names the specific modes (previews, capture, seal) and the resources involved (docs/<docId>/.build, assets). This clearly distinguishes it from siblings like render_preview or export_canvas, which are likely single-stage operations. The action is specific and the scope is well-defined.
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 explains the three modes: previews for validation, capture for automated screenshots, and seal for finalizing. It mentions that capture is optional for complex interactions and that manual screenshots can be used instead. However, it does not explicitly state when to use this tool versus alternatives like render_preview or export_canvas, and it lacks explicit exclusions or conditions for when NOT to use it. The context is clear but the decision boundary is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chain_statusA
计算整条链的过期清单,按严重度排序:broken(元素/引用丢失)> unvalidated(源码外部修改未校验)> review(标注待核对)> drifted(PRD 版本落后)> lagging(渠道文档落后)。每项含 reason 与 suggestedAction
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| projectId | Yes | 项目 id(同时也是项目文件夹名) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it delivers a solid contract: the output is a per-item list with reason and suggestedAction, sorted by a defined severity hierarchy, and the verb 计算 strongly implies a non-mutating report. It does not explicitly state read-only or no-side-effect guarantees, but for a status tool the behavioral profile is largely 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 entire description is a single dense sentence that front-loads the purpose, then enumerates the severity taxonomy and output fields with no filler. The nested parenthetical severity definitions are packed to the point of being slightly hard to skim, which prevents a perfect 5.
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 2-parameter diagnostic tool with 100% schema coverage, the description covers the essentials: what is computed, the sort order, the meaning of each severity tier, and the shape of each result item. With no output schema and no annotations, it would be stronger still if it defined what the '链' is and explicitly confirmed no side effects, but nothing critical 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%: projectId is documented as the project id/folder name, and dir is documented with its default resolution (PROTOFLOW_HOME or startup cwd). The tool description itself adds no parameter-level semantics, so the baseline of 3 applies.
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 highly specific verb+resource — 计算整条链的过期清单 — and then enumerates five severity tiers with definitions (broken > unvalidated > review > drifted > lagging) plus the output contract (每项含 reason 与 suggestedAction). This specificity makes it unmistakable against 20 siblings, none of which perform chain-health diagnosis.
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?
No explicit when-to-use or alternative-routing guidance is provided. The severity ordering implies a diagnostic / pre-flight role before building or publishing, but an agent must infer that context rather than being told which sibling to prefer in which situation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_docA
在 docs/ 下新建一个文档:docs//(doc.md 工作草稿 + doc.json)。kind 是文档类型(doc-kinds// 目录,如 prd、release-note;未知类型报错并列出可用的)。docId(= 目录名)默认 = kind 名(docs/prd/、docs/release-note/),一个项目一种类型一篇是常态;同类型要多篇时才显式传 docId(可含中文)。title 是这篇文档的主题一句话——不带项目名、不带「PRD」之类类型字样、不带版本号(项目上下文由所在项目给,类型和版本号画布菜单单独展示);传了会直接填进 doc.md 的一级标题和 doc.json.title,省得建完再手改,不影响目录名。from 记来源(如 from:"prd" 基于 prd 文档 head 版本、from:"prd@3" 指定版本),写进 doc.json.origin,之后上游出新版本 chain_status 会提示。doc.md 按该类型的 template.md 起草——起草完写正文,再 build_doc(mode:"finalize", note:"…") 定第一个版本
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| from | No | ||
| kind | Yes | ||
| docId | No | ||
| title | No | ||
| projectId | Yes | 项目 id(同时也是项目文件夹名) |
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 error behavior for unknown kinds, default naming behavior, side effects of title on doc.md and doc.json, and from being recorded in doc.json.origin affecting chain_status. It does not state overwrite behavior when docId already exists, which is a minor gap.
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 purpose is front-loaded and every clause adds necessary operational detail without filler. It is a single dense run-on paragraph and would benefit from bullet structure, but it remains efficient for the amount of behavior it needs to convey.
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 all parameters, default behavior, error behavior, file layout, and the next workflow step (build_doc finalize). There is no output schema, but the deterministic file structure and side effects make the result predictable. It lacks explicit mention of the return value or overwrite behavior, but overall it is complete enough for correct 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 only 33%, but the description compensates fully by explaining kind (directory, defaults, errors), docId (default and when to override), title (content constraints and side effects), and from (examples, version semantics, origin field). dir and projectId are already described in the schema, so all parameters are effectively covered.
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 concrete action: creating a new document under docs/ with docs/<docId>/ containing doc.md and doc.json. It clearly identifies the tool's scope and differentiates it from siblings like build_doc by describing creation versus finalization, while detailing kind/docId/title/from semantics.
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 usage conditions: docId defaults to the kind name, explicit docId is only needed for multiple docs of the same type, unknown kinds error out and list available kinds, and the description ends by routing the agent to build_doc(mode:'finalize') for the first version. It lacks explicit 'do not use this tool when...' exclusions but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectA
创建新项目:在工作目录下建一个以项目名 slug 命名的自包含文件夹(同名冲突自动加序号),并写入 AGENTS.md/CLAUDE.md 供任何 agent 冷启动接手。返回项目 id(即文件夹名)
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| name | Yes | 项目名称 |
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 transparently discloses key behaviors: creating a folder in the working directory, automatic numbering on name conflicts, writing two agent-handoff files, and returning the folder name as the project id. It does not mention error handling or permission requirements, but the core side effects are clearly stated.
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 purpose and follows with the conflict-resolution rule, file creation, and return value. No filler words; every clause adds necessary 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?
With no output schema and no annotations, the description compensates by explicitly stating the return value and folder behavior. It covers conflict handling and file creation, which are the key edge cases for a creation tool. Minor gaps like what happens on invalid paths or directory creation failures do not undermine the essential completeness for an agent to use it 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?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful parameter semantics beyond the schema: it reveals that 'name' is slugified to produce the folder name, and implicitly explains the default directory behavior mentioned in the dir parameter. This extra insight raises the score to 4.
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: '创建新项目' (create new project), and details what it does: create a self-contained folder named after a slug of the project name, write AGENTS.md/CLAUDE.md, and return the project id. This clearly differentiates it from siblings like import_project or list_projects.
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 usage for starting a new project and mentions cold-start handoff for any agent, but it does not explicitly state when to use this tool versus alternatives (e.g., import_project) or provide any exclusions. The usage context is inferable, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteA
按 id 删除页面(pg_ 前缀,级联删画板)或画板(ab_ 前缀)。若目标被某文档版本的截图引用,返回中带 warning。刷新已打开的画布标签即可看到移除结果
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| targetId | Yes | ||
| projectId | Yes | 项目 id(同时也是项目文件夹名) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It discloses the destructive mutation, the cascade from page to artboards, the warning when a document-version screenshot references the target, and the need to refresh open canvas tabs. It does not mention reversibility or auth requirements, but the delete semantics are explicit.
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 action and id rules come first, followed by the warning edge case and the post-action refresh step. Every sentence carries useful information and none is redundant.
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 target types, id prefixes, cascading deletion, the reference warning, and the observable result after deletion. Since there is no output schema, it does not specify the success response shape, but for a destructive delete call this is a minor gap given the clear behavioral 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?
The schema describes projectId and dir but leaves targetId undocumented; the description compensates by specifying pg_/ab_ prefixes and the page-vs-artboard distinction. This adds real meaning beyond the schema, though it adds nothing for dir beyond the schema's own coverage.
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 ('删除'/'delete') and identifies the exact resources: pages with pg_ prefix and artboards with ab_ prefix, including the cascading behavior for pages. This clearly distinguishes it from sibling upsert tools such as upsert_page and upsert_artboard, which create or update rather than delete.
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 makes it clear when to use the tool: to delete a page or artboard by id, with the prefix rule telling the agent which id form maps to which target kind. It does not explicitly name alternatives or when-not-to-use conditions, but no sibling deletion tool exists, so the usage context is effectively implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_canvasA
把整张画布导出成一个文件,写到 outDir 下(文件名自动取项目名)。format="zip"(默认)导出目录树(index.html + lib/ + pages/.../preview.html,标注定位/高亮在纯 file:// 下会静默失效,其它都正常);format="html" 导出单个自包含 .html(所有画板、库都内联,双击即看,无跨源限制,但画板越多文件越大)。渲染逻辑跟实时预览(render_canvas)完全一样——只是渲一次落盘/拼字符串,不是另一套。跟画布页面右上角「导出」按钮菜单走的是同一份逻辑,区别是按钮触发浏览器下载、这个工具直接写到你指定的目录
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| format | No | 导出格式,默认 zip(目录树);html 是单文件 | |
| outDir | Yes | 文件要写到的目录(绝对路径,或相对 dir 参数解析);目录不存在会自动创建 | |
| projectId | Yes | 项目 id(同时也是项目文件夹名) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses where files are written, that annotation positioning/highlighting silently fails under file://, and that html inlines all artboards and libraries. However, it does not mention overwrite behavior or what the tool returns/confirms after writing, which would be useful for a file-export operation.
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 purpose is front-loaded and nearly every clause contributes decision-relevant information. The text is dense and slightly run-on, mixing format tradeoffs and behavioral caveats in one paragraph, but it avoids fluff and is much more useful than a short generic sentence.
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 two-format file-export tool with no output schema, the description covers the essential choices, output structure, known failure mode, and similarity to render_canvas. The main gaps are overwrite semantics and any success/failure return value, which an agent might need to confirm the operation's result.
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%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains the zip vs html format consequences in depth, the file:// caveat, and the automatic project-name-based file naming. It adds little for projectId or dir, but those are already well-described in the schema.
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 concrete action and resource: '把整张画布导出成一个文件,写到 outDir 下', then enumerates the two formats. It also differentiates from render_canvas by stating the same rendering logic is reused but persisted once, so export and preview cannot be confused.
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 format-selection guidance: zip is the default directory-tree export, while html is the self-contained, double-clickable option with tradeoffs explained. It contrasts with render_canvas and the browser export button, but it does not crisply state when to use export_doc or other siblings instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_docA
把一篇文档的当前(head)版本导出成一个文件,写到 outDir 下(文件名自动取文档标题)。format="zip"(默认)导出目录树(preview.html + lib/ + assets/,不带历史版本、不带版本切换);format="html" 导出单个自包含 .html(marked/mermaid、图片全内联,双击即看);format="markdown" 导出单个 .md(图片内联成 data URI,不依赖 assets/ 目录,可直接粘贴/导入钉钉文档等其它工具)。不需要 protoflow 的预览服务。跟文档阅读页右上角「导出」按钮菜单同一份逻辑,区别是按钮触发浏览器下载、这个工具直接写到你指定的目录
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| docId | Yes | ||
| format | No | 导出格式,默认 zip(目录树);html 是单文件;markdown 是纯 .md 文件 | |
| outDir | Yes | 文件要写到的目录(绝对路径,或相对 dir 参数解析);目录不存在会自动创建 | |
| projectId | Yes | 项目 id(同时也是项目文件夹名) |
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. It discloses the side effect of writing files to outDir, describes how each format behaves (zip directory tree, self-contained html, markdown with inlined images), and states that it exports only the current head version (no history or version switching). It does note that files are written directly, though it omits explicit statements about overwriting behavior; still, it is transparent about core behaviors.
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 block but is efficiently packed: it starts with the core action, then enumerates the three format behaviors, and closes with the comparison to the browser download button. Every sentence adds value (format details, service independence, and comparison), and there is no filler. It is slightly dense but appropriately structured for the needed 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 (multiple output formats, 5 parameters) and the absence of an output schema and annotations, the description is remarkably complete. It covers all format behaviors, file naming, directory handling, the non-requirement of the preview service, and its relationship to the UI export button. It does not mention the return value (e.g., written file path), which is a minor gap, but overall it equips an agent to invoke the tool 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?
Schema description coverage is 80%, and the description compensates by elaborating each format enum with concrete output details (e.g., zip exports preview.html + lib/ + assets/ without history; html is self-contained with inlined images; markdown uses data URIs and is importable elsewhere). It also explains outDir resolution relative to dir and the default directory logic from the 'dir' parameter. The only parameter without a schema description, docId, is contextualized in the description as the document identifier, bridging the gap.
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 verb+resource statement: '把一篇文档的当前(head)版本导出成一个文件' (export a document's current head version to a file). It specifies the output destination (outDir) and file naming rule (auto from title). It also distinguishes itself from the related 'export_canvas' sibling by noting it shares logic with the document page's export button, making its 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 for use: it writes to a specified directory rather than triggering a browser download ('直接写到你指定的目录'), and clarifies it does not require the preview service ('不需要 protoflow 的预览服务'). It implicitly directs users to this tool when programmatic file export is needed, but it does not explicitly name an alternative or state when *not* to use it, so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_annotationsA
返回这块画板的标注:md(annotations.md 全文,一篇 markdown)、refs(annotations.refs.json,{ 元素id: { interactionPath:[...] } })、elementIds(当前源码里的元素 id 清单,md 里 名 引用的 id 要从这里选)、elementHints({ 元素id: 一句它在界面上大概是什么 },从源码静态提取,用来给 chip 起人话显示名——只是线索、可能不准、别原样当显示名粘进去;取不到线索的 id 不在这个表里)、sourceHash、validatedHash(md 上次核对于哪版源码)、brokenRefs(md 里引用但源码已没有的元素 id)
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| projectId | Yes | 项目 id(同时也是项目文件夹名) | |
| artboardId | 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 of behavioral disclosure. It does this exceptionally well: it documents what every returned field means, notes that elementHints are statically extracted from source and may be inaccurate, and defines brokenRefs. This is far more transparent than a typical one-line description and gives the agent accurate expectations.
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 with semicolon-separated fields, and every segment adds distinct information. The critical warning about elementHints is embedded without bloat. It is longer than ideal, but the structure is clear and there is no waste, so it earns a high score.
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?
There is no output schema, so the description must explain return values — and it does so comprehensively. It covers all seven return fields, their meanings, provenance, and reliability caveats. For a read tool with this complexity, nothing essential is missing, and the agent can correctly interpret the result.
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 dir and projectId, covering 67% of parameters. The description adds little direct parameter meaning beyond referring to '这块画板' (this artboard), which implicitly maps to artboardId. Since the description does not compensate for the undocumented artboardId, the score stays at the baseline for moderate schema coverage.
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 '返回这块画板的标注' (Returns annotations for this artboard), a specific verb and resource, then enumerates the exact return fields (md, refs, elementIds, elementHints, sourceHash, validatedHash, brokenRefs). This makes the tool's purpose unmistakable and naturally distinguishes it from write_annotations and other 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?
The description offers practical usage notes, such as warning that elementHints are only guesses and should not be directly used as display names, and it explains dir resolution behavior. However, it never explicitly states when to choose this tool over alternatives like write_annotations or get_guide; the context is implied rather than clearly routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_doc_kindA
返回某文档类型的起始模板(template.md)+ 撰写规范(writing.md)+ 元数据(label、contextSource)。写这类文档前先调一次。未知类型时错误信息里列出全部可用类型
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| kind | Yes | ||
| projectId | Yes | 项目 id(同时也是项目文件夹名) |
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 useful behavior: the exact return contents, the instruction to call before writing, and the error behavior for unknown types. It does not explicitly state there are no side effects, but the read-only nature is strongly implied by '返回'.
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 pack the return contents, usage timing, and error behavior with no filler. The most decision-relevant 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?
For a simple retrieval tool with no output schema, the description gives enough to call it correctly and interpret the result: what is returned, when to call it, and how unknown input is handled. A fuller return structure would be nice but is not essential.
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 describes projectId and dir; kind is undocumented. The description partially compensates by clarifying that kind is the document type and that unknown values produce an error listing valid types, but it adds nothing about projectId or dir beyond the schema.
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 a specific resource: the starting template, writing guidelines, and metadata for a document type. It is clearly distinct from sibling tools like create_doc or build_doc, though it does not explicitly name an alternative.
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?
'写这类文档前先调一次' gives a clear, actionable precondition for use. It does not mention when not to use it or name alternatives, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_guideA
按主题返回策略文档全文。topic 即 guides/ 下文件名(不含 .md),未知主题时错误信息中列出全部可用主题。文档类型专属的模板/规范用 get_doc_kind,不在这里
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It discloses the unknown-topic behavior (error lists all available topics) and clarifies that the topic maps to a filename without extension. It doesn't mention output formatting or side effects, but for a simple read-only retrieval this is sufficient.
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 with no wasted words: purpose is front-loaded, the parameter format is stated compactly, and the sibling distinction is included. 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?
For a one-parameter read tool with no output schema, the description covers purpose, parameter semantics, failure behavior, and the relevant alternative. Nothing needed 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 0%, so the description must compensate. It fully defines the single parameter: topic is the filename under guides/ without .md, and notes that unknown topics produce an error listing all valid topics. This is complete semantic coverage.
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 ('返回') and resource ('策略文档全文'), and defines the input as a topic corresponding to a filename under guides/. It also explicitly differentiates itself from get_doc_kind, making the tool's purpose 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?
It gives an explicit routing rule: use get_doc_kind for document-type-specific templates/specifications, and not this tool ('不在这里'). This is a clear when-not and alternative, leaving no ambiguity about which sibling to choose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectB
返回项目树(页面/画板层级、画板 sourcePath 绝对路径,可用文件工具直接读)与链路健康摘要(各严重级别发现项计数)
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| projectId | Yes | 项目 id(同时也是项目文件夹名) |
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 does add useful context beyond the schema: sourcePath values are absolute and directly readable by file tools, and the health summary contains counts by severity. However, it does not explicitly state that the operation is read-only, what happens for missing projects, or any error/authorization behavior.
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 leads with the action and return type, then packs meaningful specifics into parentheticals. Every element adds value and there is 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?
There is no output schema, so the description must explain return values, and it does: project tree hierarchy, sourcePath semantics, and health summary counts. It could enumerate the exact severity levels or response shape, but it provides enough detail for an agent to know what this tool returns and when to call 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?
Schema description coverage is 100%, with detailed explanations for both dir and projectId, including dir's fallback resolution behavior. The tool description itself adds no parameter-level meaning, so 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 clearly states a specific verb and resource: it returns a project tree with page/artboard hierarchy and a pipeline health summary. It conveys concrete contents (sourcePath absolute paths, severity counts) that distinguish it from simpler sibling tools like list_projects, though it never names an alternative.
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?
No when-to-use guidance, exclusions, or alternatives are provided. The reader must infer that this tool is for inspecting a project's structure and health; it does not say when list_projects or other sibling tools would be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_projectA
从外部已有的 protoflow 项目目录(project.json + pages/ 布局)导入到工作目录。只读源目录,补登指纹基线、补写 AGENTS.md/CLAUDE.md;目标目录已有同 id 项目时报错
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| sourceDir | Yes | 源项目目录绝对路径 |
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 the source directory is read-only, that it writes a fingerprint baseline and AGENTS.md/CLAUDE.md files, and that it errors when the target already contains a project with the same id. This is strong behavioral disclosure, though '补写' could be more explicit about whether existing files are overwritten or appended.
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?
A single dense sentence conveys purpose, source format, safety behavior, side effects, and an error condition without wasted words. All clauses earn their place and the core purpose 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?
Given moderate complexity, no output schema, and no annotations, the description covers the essential aspects: input format, read-only source behavior, target side effects, and duplicate-id failure. Minor gaps remain around the exact meaning of 'fingerprint baseline' and the return value, but nothing critical is missing for invoking the tool 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?
Schema description coverage is 100%, so the schema already documents both parameters well. The description adds contextual meaning about sourceDir being an external existing project and dir being the working directory, but it does not add significant param-level detail 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 states a specific verb and resource: importing an external existing protoflow project directory (project.json + pages/ layout) into the working directory. It also distinguishes itself from siblings like create_project by emphasizing the source is an existing external project and by mentioning the duplicate-id error condition.
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 context for when to use the tool: importing an already-existing external protoflow project. It does not explicitly name alternatives or say 'do not use for blank projects', but the 'external existing project' framing and duplicate-id error imply that create_project is for new projects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsB
列出工作目录中所有项目(id 与名称);id 即项目文件夹名
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It clarifies that id is the folder name and that dir overrides the default, but it doesn't disclose return format, potential errors, or side effects. This is adequate but not rich.
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 front-loads the main purpose, with the parameter clarification in parentheses. Every sentence earns its place, though it could be more structured.
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 listing tool with 1 optional parameter and no output schema, the description is mostly complete. It could mention return format or whether it includes hidden projects, but the essentials are covered.
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%, so the schema fully documents the dir parameter. The description adds context on default resolution and relative path handling, but mostly repeats what the schema already states; 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 clearly states the tool lists all projects in the working directory with id and name, and that id is the folder name. It distinguishes from siblings like get_project and create_project, though it doesn't explicitly name alternatives.
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 usage for listing projects, and the dir parameter provides context on overriding the default directory. However, it does not explicitly state when to use this versus siblings or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_publishA
登记一次渠道发布到当前文档 head 版本(channel/channelDocId/url),同渠道重复发布追加历史。文档未 finalize 时报错。发布前会跑该类型的 checks——任何 error 级 finding(如未闭环的开放问题标记)默认拦截并列出清单;确需带着发布传 acknowledgeFindings:true 跳过
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| url | No | ||
| docId | Yes | ||
| channel | Yes | ||
| projectId | Yes | 项目 id(同时也是项目文件夹名) | |
| channelDocId | Yes | ||
| acknowledgeFindings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses append-history semantics, finalization requirement, execution of type-specific checks, default blocking with a listed checklist, and the acknowledgeFindings bypass. This is substantial behavioral context beyond the tool name and schema.
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 fully front-loaded: the action appears first, followed by duplicate behavior, a failure condition, and the check gating. Every clause earns its place with 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?
Given no output schema and no annotations, the description supplies the key preconditions, side effects, and error paths an agent needs. The main missing piece is what a successful call returns or how success is confirmed, but this is a minor gap for a registration-style tool.
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 only 29%, so the description must compensate. It does clarify channel/channelDocId/url as the published record and acknowledgeFindings as the check bypass, but it leaves docId's role implicit and provides no detail for dir beyond the schema entry.
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 and resource: '登记一次渠道发布到当前文档 head 版本' (register a channel publication to the current document head revision). It also clarifies duplicate-publish behavior, making it clearly distinct from sibling build/export 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?
Provides clear preconditions and routing context: the document must be finalized or the call errors, and error-level findings block by default unless acknowledgeFindings is passed. It does not explicitly name sibling alternatives, 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.
render_canvasA
打开整站画布:确保本地预览服务在跑,返回它的 http://127.0.0.1 url(浏览器工具打不开 file://,别拿路径自己拼)。画布把项目所有页面和画板汇进一份自包含文档——左侧侧边栏切页面(文档内显隐、无跳转),每页独立的可缩放可平移画布(滚轮平移,Ctrl/Cmd+滚轮或触控板捏合缩放,拖拽平移,一键适应窗口),画板按各自 canvasWidth 真实像素宽度显示、高度随内容自撑。画布是项目 source.jsx / annotations / 结构的实时投影:加删/改名页面画板、改源码、改标注、git 撤回后,刷新已打开的画布标签即最新,不写盘、不需要重复调用本工具
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| projectId | Yes | 项目 id(同时也是项目文件夹名) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses several important behaviors: it requires the local preview service to be running, it returns a URL (not a file path), the canvas is self-contained, navigation is in-document (no page jumps), zoom/pan interactions are specified, artboards display at real pixel width, and it is a live projection that does not write to disk. Since no annotations are provided, the description carries the full burden, and it does so thoroughly. It could add a bit more about failure modes (e.g., what happens if the preview service isn't running), but the disclosed behaviors are rich and useful.
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 paragraph that front-loads the core purpose (open canvas, return URL) and then provides necessary behavioral details. It is long but every sentence adds useful information about how the canvas behaves and when to use it. The structure could be improved with separation of concerns (purpose vs. behavior vs. usage), but it is not bloated or repetitive.
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 2 parameters, no output schema, and no annotations, the description covers the essential context: what it does, how the returned URL should be used, how the canvas behaves, and how it stays in sync with project changes. It does not describe the exact response format (e.g., JSON shape of the returned URL), but since there is no output schema, a bit more detail on the return value could help. However, the description is largely complete for an agent to invoke it 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?
Schema description coverage is 100%, so the schema already documents both parameters (dir and projectId). The description adds context about dir's default resolution (PROTOFLOW_HOME or cwd) and projectId being the folder name, but this is largely restating the schema. The description does not add much beyond the schema, so 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 clearly states the tool's purpose: open the whole-site canvas and return its http://127.0.0.1 URL. It specifies the resource (整站画布), the action (打开/返回 URL), and distinguishes it from browser tools that cannot open file:// URLs. The description also explains what the canvas contains (all pages and artboards in a self-contained document) and how it behaves, making it distinct from sibling tools like render_preview or export_canvas.
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 when to use this tool: when you need the whole-site canvas, and it warns against using browser tools with file:// paths. It also explains that the canvas is a live projection of the project's source/annotations/structure, so after changes you just refresh the opened tab rather than re-calling the tool. This gives clear usage context and implicitly distinguishes it from render_preview (which likely renders a single preview) and export_canvas (which exports rather than opens an interactive canvas).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_previewA
确认某画板可以在整站画布里观察:校验它已有源码,确保本地预览服务在跑,返回整站画布的 http://127.0.0.1 url(不是画板单独地址——画布能看到项目全部内容,悬浮这块画板点右上角新标签图标即可单独打开它)。画布/画板 preview 是 source.jsx + annotations.md + 项目结构的实时投影:改了源文件(含通用 agent 直接改、编辑器 Undo、git checkout)刷新浏览器即最新,不写盘、不需要重复调用。曾用于生成落盘 preview.html——现在不再落盘
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| projectId | Yes | 项目 id(同时也是项目文件夹名) | |
| artboardId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it discloses no disk writes ('不写盘'), no need to re-call ('不需要重复调用'), live projection of source/annotations/structure, refresh-to-update behavior, and the historical change away from writing preview.html.
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?
Four dense but purposeful sentences, front-loaded with the main action and URL, followed by behavioral details and a historical caveat. Every sentence adds information needed to call the tool correctly or avoid an outdated workflow.
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 no-output-schema, no-annotation tool, it covers return value, side effects, update semantics, and how to access the alternate view. It does not describe failure behavior if source is missing or the preview service cannot be started, but these are minor gaps given the otherwise rich description.
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 covers projectId and dir; the description adds context that artboardId refers to a board within the project and clarifies the relationship between artboard and project. However, artboardId itself has no schema description and the description does not define its format or provenance, leaving one required parameter only implicitly specified.
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 ('确认某画板可以在整站画布里观察'), a concrete resource (artboard in whole-site canvas), and a concrete return (http://127.0.0.1 URL). It explicitly distinguishes itself from an artboard-only address, which separates it from sibling preview/render 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 gives clear context: use this to verify an artboard is visible in the whole-site canvas and to get the whole-site URL. It explains how to get the artboard-only view (hover and open new tab) and states when repeated calls are unnecessary, though it does not explicitly name an alternative sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorder_artboardsA
调整一个页面下画板在画布里的显示顺序(新建画板默认追加到末尾,用这个工具调整)。artboardIds 必须是该页面现有画板 id 的完整顺序(一个全排列,不能少画板也不能带别的页面的画板 id)——先用 loadProjectTree/get_project 之类的读操作看一眼现有顺序,再整体给出目标顺序。刷新已打开的画布标签即可看到新顺序
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| pageId | Yes | ||
| projectId | Yes | 项目 id(同时也是项目文件夹名) | |
| artboardIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It discloses that artboardIds must be a complete permutation limited to the target page, warns against omitting or including foreign IDs, and explains that the open canvas tab must be refreshed to see the new order. It does not mention persistence, reversibility, or error behavior, but the core behavior is clearly conveyed.
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?
Every sentence earns its place: purpose and default behavior, the exact input constraint with a read-before guidance, and how to verify the result. There is no filler or repetition, and the most important call prerequisites are 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?
For a mutation tool with no annotations and no output schema, the description covers the required call flow: which read operation to precede with, the exact contract for artboardIds, and how to confirm the result. The only notable gap is no statement about return values or failure behavior on an invalid permutation, but the description is still sufficient for correct 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 coverage is only 50%, so the description must compensate. It adds crucial semantics for artboardIds, which has no schema-level description: it must be an ordered full permutation of existing artboards on that page, and the current order should be read first. pageId remains implicit, but the overall parameter intent is substantially clarified.
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 adjusts the display order of artboards on a page's canvas. It also explains the default behavior (new artboards append to the end) and clearly frames this tool as the one for reordering, distinguishing it from the read-only siblings it references.
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 usage context: use this tool when artboards need reordering, and first call a read operation like loadProjectTree/get_project to see the current order. It does not name an alternative reorder tool or explicitly state when not to use it, so it stops just short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_artboard_sourceA
写画板 JSX 源码。source(全量)与 edits(补丁 [{oldText,newText}],oldText 须唯一匹配)二选一。Babel 编译校验失败不落盘。成功返回 sourceHash 与 idAudit(消失的元素 id 及 annotations.md 里对它们的断链引用)。画板 preview 和整站画布都是 source.jsx 的实时投影:刷新已打开的画布标签即最新,无需重新调用 render_preview / render_canvas
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| edits | No | ||
| source | No | ||
| projectId | Yes | 项目 id(同时也是项目文件夹名) | |
| artboardId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and covers it thoroughly: Babel validation failures do not persist, successful calls return sourceHash and idAudit, and saved source is a live projection visible after refreshing tabs. It also discloses the uniqueness requirement for oldText, which is an important failure mode.
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?
Four short, dense sentences each carry a distinct fact: mode choice, validation/no-persist, return payload, and live-render implication. No filler or repetition; the core action 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?
Given no output schema and no annotations, the description covers outputs, failure behavior, mode semantics, and downstream rendering effects. This is sufficient for an agent to invoke save_artboard_source with the required parameters and understand the consequences.
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 low (40%), and the description compensates for the two complex parameters: source is full content, edits are patches with unique-match oldText, and the two modes are mutually exclusive. It does not add artboardId semantics, but the tool name and parent context make that parameter self-evident.
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 opens with a specific verb and resource ('写画板 JSX 源码' / write artboard JSX source) and distinguishes the tool from rendering siblings by stating that refreshed canvas tabs already reflect the latest source and render_preview / render_canvas need not be called again.
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 concrete mode-selection guidance ('source 全量 与 edits 补丁 二选一') and an explicit when-not (no need to call render_preview / render_canvas). It does not mention selection against other write siblings like upsert_artboard, but the mode and persistence semantics make the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_artboardA
无 id 在页面下创建画板,有 id 更新名称/描述。可选 canvasWidth(画布中该画板的真实像素宽度,即 Figma 式 Frame 宽度,默认 1440;移动端画板可传 375/414 等)。返回画板 id。画布实时投影项目结构——刷新已打开的画布标签即可看到新/改名画板,无需重新调用 render_canvas
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| name | Yes | ||
| pageId | Yes | ||
| projectId | Yes | 项目 id(同时也是项目文件夹名) | |
| canvasWidth | No | ||
| description | No |
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 upsert semantics, the returned artboard id, canvasWidth default and semantics, and the live canvas projection behavior. It omits edge cases such as behavior with a non-existent id or prerequisite project/page existence, but is otherwise substantive.
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 front-loaded sentences with zero filler: behavior first, key parameter parenthetical second, then return value and rendering note. Each sentence earns its place and no word is wasted.
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 7-parameter upsert with no annotations and no output schema, the description is largely complete: it covers create/update, return value, and post-call rendering. It lacks failure-mode and precondition details, but these are not essential for basic correct 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 coverage is only 29%, but the description compensates by explaining the id create/update behavior, name/description as update fields, and canvasWidth in detail (default 1440, mobile values). PageId is implicitly clarified as the parent page from the opening sentence, and dir/projectId are already documented in the schema.
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 behavioral statement: no id creates an artboard under a page, while an id updates name/description. This clearly identifies the resource (artboard), the action (upsert), and differentiates it from sibling tools like upsert_page (page-level) and render_canvas (rendering).
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 implicitly defines when to use the tool (create/update artboards) and explicitly tells the agent not to call render_canvas afterward because the canvas updates in real time. However, it does not explicitly compare against page-level or other artboard manipulation alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_pageA
无 id 创建页面,有 id 改名。返回页面 id。画布是项目结构的实时投影——已打开的画布标签刷新一下,新/改名页面就出现在左侧侧边栏,无需重新调用 render_canvas
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| name | Yes | ||
| projectId | Yes | 项目 id(同时也是项目文件夹名) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does real work: it discloses the side-effect model (canvas is a real-time projection; refreshing shows new/renamed pages), the return value (page id), and explicitly preempts a redundant render_canvas call. It does not cover error/edge behavior (e.g., duplicate names, failed renames), but the disclosed behavior substantially exceeds a bare 'create or rename a page'.
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 compact sentences with the core upsert logic front-loaded, followed by return value and the canvas side-effect note. Each sentence earns its place — the canvas projection detail is especially valuable because it prevents an unnecessary tool call, and there is zero 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?
For a 4-parameter, no-output-schema, no-annotation tool, the description covers the primary calling path well: create/rename conditions, return format, and post-call behavior. It omits edge-case expectations such as duplicate-name handling, whether a rename is reversible, and error conditions, which leaves moderate gaps for an upsert 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?
Schema coverage is 50% (dir and projectId documented; id and name bare). The description compensates for the most semantically important gap by explaining that id selects the create/rename branch — meaningful value beyond the schema. However, name (the rename target) gets no explicit meaning, and dir's behavior relies entirely on the schema description, so compensation is partial.
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 explains the upsert semantics explicitly — 'with no id create a page, with id rename' — giving a specific verb, resource, and behavioral branch. It distinguishes the tool by its page-level operation, but it never explicitly differentiates from the sibling upsert_artboard (or notes the page-vs-artboard boundary), so it stops short of full 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?
The description gives clear condition-based guidance: presence of id selects rename vs create, and it explicitly tells the agent not to call render_canvas afterward because the canvas is a live projection. However, it does not address when to choose this tool over alternatives such as upsert_artboard or create_project, so usage context is implied rather than fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_annotationsA
写这块画板的标注。md(annotations.md 全文)与 edits(补丁 [{oldText,newText}])二选一,跟 save_artboard_source 一个套路。md 是一篇 markdown,写法像一节 spec:分区用 ## 标题、一条说明用 ### 标题;正文里想让读者点击定位到某元素就写内联链接 显示名——显示名要用人话(这东西在界面上是什么、可见文字或角色,如「折叠按钮」「候选人卡片列表」),别拿元素 id / class 名 / 内部代号当显示名;#el/元素id 里的 id 才从 elementIds 照抄。顺序 = 文档顺序、分组 = 标题,没有 groupId / order / revision。可选 refs:{ 元素id: { interactionPath:[{type:'click'或'hover',selector,index?}] } },仅当某个被引用的元素要交互之后才在 DOM 里时才需要。md 里 名 引用了当前源码没有的元素 id → REF_NOT_FOUND,整个拒绝。成功自动把 meta.annotationsValidatedHash 盖成当前源码指纹。标注是 annotations.md 的实时投影——刷新已打开的画布标签即最新
| Name | Required | Description | Default |
|---|---|---|---|
| md | No | ||
| dir | No | 覆盖默认工作目录(项目所在父目录);相对路径按当前工作目录解析;缺省用 PROTOFLOW_HOME 或启动时的 cwd | |
| refs | No | ||
| edits | No | ||
| projectId | Yes | 项目 id(同时也是项目文件夹名) | |
| artboardId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the md/edits exclusivity, the absence of groupId/order/revision, all-or-nothing rejection on REF_NOT_FOUND, automatic setting of meta.annotationsValidatedHash, and real-time projection/refresh behavior. It omits return value and explicit overwrite semantics, but the disclosed side effects are substantial.
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 monolithic, but nearly every clause adds operational information, and the first sentence front-loads purpose and the md/edits choice. A bulleted layout would improve scannability, but there is little wasted text.
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 complex write tool with no output schema, it covers formatting, validation, side effects, and freshness thoroughly. However, it never states what the tool returns or confirms on success, and it assumes the agent already knows where to find elementIds/current source, leaving a couple of invocation-critical facts implicit.
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 only 33%, and the description compensates strongly: it explains md's markdown/spec structure, display-name rules, link syntax, the edit patch shape, refs structure with interactionPath, and that element ids must be copied from elementIds. Previously undocumented parameters receive concrete, usable meaning.
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 '写这块画板的标注' (write annotations for this artboard), giving a specific verb and resource, and immediately clarifies the two payload modes (md vs edits). It does not explicitly distinguish itself from siblings like get_annotations or save_artboard_source, but the core action 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?
There are rich internal usage rules: md vs edits are mutually exclusive, refs are only needed for elements appearing after interaction, and invalid references trigger REF_NOT_FOUND. However, the description never states when to choose this tool over related siblings such as get_annotations for reading or save_artboard_source for writing source, so cross-tool selection is left to inference.
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.
22 tool updates
v0.1.0- First observed
build_doc - First observed
build_publish_pack - First observed
chain_status - First observed
create_doc - First observed
create_project - First observed
delete - First observed
export_canvas - First observed
export_doc - First observed
get_annotations - First observed
get_doc_kind - First observed
get_guide - First observed
get_project - First observed
import_project - First observed
list_projects - First observed
record_publish - First observed
render_canvas - First observed
render_preview - First observed
reorder_artboards - First observed
save_artboard_source - First observed
upsert_artboard - First observed
upsert_page - First observed
write_annotations
TDQS
Scored across 22 tools
Most tools are clearly distinct, but render_preview and render_canvas are near-identical in behavior (both return the whole-canvas URL), and the generic `delete` tool is ambiguous without a resource prefix. This creates real misselection risk for agents.
The vast majority follow verb_noun (upsert_page, list_projects, create_doc, export_canvas), but `delete` and `chain_status` break the pattern. The inconsistent outliers are minor, so the set is still predictable overall.
22 tools falls into the heavy range (16–25) and the surfaced redundancy between render_preview and render_canvas could be trimmed. However, the breadth is mostly justified by the project/page/artboard/docs workflow.
Core lifecycle coverage is strong: projects can be listed/get/created/imported, pages/artboards can be upserted/deleted/reordered, source and annotations are writable, and docs can be built and published. Minor gaps remain: no dedicated get_source or get_doc tool (relying on file tools), and no project deletion or doc read utility.
Maintenance
Related MCP Connectors
- MaketaOAuthpro.maketa
Build and edit app screen mockups and clickable prototypes from your AI assistant.
Structured visual plans and PR recaps with diagrams, prototypes, annotations, and sharing
Intelligent product canvas: iterate on your product's design with your coding agent, synced to code.
UI design from prompts, screenshots, and URLs for AI coding agents and theme tokens.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI to create interactive HTML-based software prototypes with navigation, markers, and annotations. Provides a complete prototyping environment without requiring tools like Figma or Axure.18 npm4Cryptographic Autonomy 1.0 (Combined Work Exception)
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to read and modify Figma designs programmatically, supporting design analysis, element creation, text replacement, annotations, auto-layout configuration, and prototype visualization through natural language commands.653 npmMIT
- FlicenseAqualityCmaintenanceEnables AI assistants to generate production-ready, professional UI design systems and components from simple descriptions, with real images, animated components, and automated quality checks.16-
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to access and manipulate Figma designs, including extracting design systems, creating and debugging UI components, and syncing design tokens bidirectionally.50,349 npmMIT