CalabiYau Map Engine MCP
OfficialClick 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., "@CalabiYau Map Engine MCPList my connected map editor sessions"
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.
CalabiYau Map Engine MCP
通过本机 MCP 服务连接 CalabiYau Map Engine 浏览器编辑器。
支持 STDIO、Streamable HTTP 和旧 HTTP+SSE。

环境
Python 3.11 或更新版本。
uv。
支持本地网络访问授权和 WebSocket 的桌面浏览器,推荐更新后的 Chrome 或 Edge。
Map Engine 站点:https://klbqmap.miyo.wiki
Related MCP server: Godot AI
安装与配对
在本项目目录执行:
uv sync --python 3.11
uv run python -m calabiyau_map_engine_mcp pairpair 在当前用户的配置目录读取或首次生成凭据,并在终端显示 JSON:
字段 | 用途 |
| 浏览器 WebSocket 地址,默认为 |
| Streamable HTTP 地址,默认为 |
| 旧 SSE 地址,默认为 |
| 仅填入浏览器的配对凭据 |
| 仅用于 MCP HTTP 客户端的 Bearer 认证 |
| 服务允许连接的网页来源 |
两个 token 相互独立。再次执行 pair 不会轮换已保存的凭据。
启动服务后,在更新后的 Map_Engine 中打开“设置 → MCP”,填写 bridge_url 和 pairing_token,点击“连接并配对”。首次连接可能出现浏览器的本地网络访问授权提示,需要用户手动允许。
启动方式
# 默认模式。由 MCP 客户端启动时使用,stdout 专供 MCP 消息。
uv run python -m calabiyau_map_engine_mcp --transport stdio
# Streamable HTTP。
uv run python -m calabiyau_map_engine_mcp --transport streamable-http
# 兼容只支持旧 HTTP+SSE 的客户端。
uv run python -m calabiyau_map_engine_mcp --transport sse
# STDIO、Streamable HTTP 和旧 SSE 同时启用。
uv run python -m calabiyau_map_engine_mcp --transport all也可以显式使用 serve 子命令。STDIO 模式同样会启动本机 WebSocket 桥接端口,但不启用 MCP 的 HTTP 端点。
路径 | 用途 | 启用模式 |
| Streamable HTTP |
|
| 旧 SSE 事件流入口 |
|
| 旧 SSE 的消息提交端点,由 SSE 客户端自动发现 |
|
| 浏览器 WebSocket 桥接 | 全部模式 |
| 最小健康检查 | 全部模式 |
HTTP 客户端应在 /mcp,或旧 SSE 的事件流和消息提交请求中携带:
Authorization: Bearer <http_token>/sse 是兼容旧客户端的独立传输,不是 /mcp 的别名。/mcp 根据 MCP 协议和请求内容返回 JSON 或 SSE;
stdio 和 all 将标准输入 EOF 视为进程退出信号,随后关闭桥接和 HTTP 监听。希望服务在关闭某个 MCP 客户端后独立常驻时,使用 streamable-http 或 sse 模式。
参数
参数 | 默认值 | 说明 |
|
|
|
|
| MCP HTTP 和浏览器桥接共用的本机端口 |
| 见下文 | 可重复传入,追加精确的网页来源 |
| 当前用户的应用配置目录 | 自定义凭据存储目录 |
|
| 浏览器请求的超时秒数 |
| 服务默认日志级别 | 日志写入 stderr |
服务始终监听 127.0.0.1,没有开放公网或局域网监听的 --host 参数。默认网页来源:
http://127.0.0.1:5173
http://localhost:5173
https://klbqmap.miyo.wiki自定义开发端口时,增加对应的来源,例如:
uv run python -m calabiyau_map_engine_mcp --transport streamable-http --allowed-origin http://127.0.0.1:5174--config-dir 也可通过 CALABIYAU_MCP_CONFIG_DIR 环境变量配置。pair、serve 和 MCP 客户端必须使用相同目录,否则会读取到不同凭据。
客户端配置
参见 examples/mcp-clients.json。该文件展示三种连接方式,使用的是占位路径和占位 token,需按实际客户端支持的配置格式选择条目。
示例中的 STDIO 条目使用 all,因此后续 HTTP 与 SSE 条目可连接它启动的同一个进程。只需要一个 STDIO 客户端时,将该条目的 all 改为 stdio。
如果 MCP 客户端找不到 uv,将 command 改为本机 uv 的绝对路径。--directory 必须指向本项目的绝对路径。不同客户端可能使用不同的远程传输类型名称,地址和 Bearer header 保持不变。
地图工具
先调用 list_sessions 获得 browser_session_id,再针对选定浏览器调用 get_state。同一服务支持多个浏览器标签页。
工具 | 行为 |
| 列出已连接并完成配对的浏览器会话 |
| 返回当前地图和编辑状态、地图会话及修订号 |
| 分页查询可用物品 |
| 分页查询当前地图中的 Actor |
| 按编辑器 Actor 标识设置选区 |
| 在地图格子中放置物件 |
| 按格子增量移动物件 |
| 删除指定物件 |
| 使用现有编辑器撤销和重做历史 |
具体桥接消息和错误约定参见 docs/protocol.md。
凭据与撤销配对
浏览器中的“忘记配对”只清除该网页来源下本浏览器保存的连接设置,不轮换服务端 token。
若凭据泄露或需要撤销全部已配对页面:
停止正在运行的服务。
在相同配置目录下执行
uv run python -m calabiyau_map_engine_mcp reset-pairing。再执行
pair获取新凭据,更新 HTTP 客户端并重新配对浏览器。重新启动服务。
HTTPS 页面连接本机服务
网页仍连接本机的 http://127.0.0.1:8765 和 ws://127.0.0.1:8765。浏览器可能要求用户授予本地网络访问权限,权限被拒绝时,应在浏览器站点设置中恢复权限,再手动连接。
站点若配置 Content Security Policy,connect-src 需要明确允许本机 HTTP 健康检查地址和 WebSocket 地址。使用自定义端口时,也需要相应更新 CSP 和连接设置。
浏览器策略、组织策略或网页 CSP 可能阻止连接;此时先通过本地开发页面诊断。
Available Tools
10 toolsdelete_actorsCDestructive
Delete ordinary actors. Linked partners may also be deleted by existing editor rules.
| Name | Required | Description | Default |
|---|---|---|---|
| actor_ids | Yes | ||
| map_session_id | Yes | ||
| expected_revision | Yes | ||
| browser_session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered. The description adds genuinely useful non-annotation context: that linked partners may be deleted as a side effect via editor rules. It says nothing, however, about batch size limits, partial failure, or what happens when the expected revision mismatches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the primary action is front-loaded. The second sentence is dense but earns its place by disclosing the cascade side effect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive batch mutation with four required, wholly undocumented parameters and no output schema, the description leaves out too much: revision-conflict behavior, atomicity, and the practical size limit. Only the cascade-to-partners warning is supplied.
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% across four required parameters, so the description carries the full burden and covers none of them. The critical expected_revision optimistic-concurrency parameter and the 256-item cap on actor_ids go entirely unexplained.
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 ('Delete ordinary actors'), which clearly separates it from siblings like place_actor, move_actors, and list_actors. The phrase 'ordinary actors' versus 'linked partners' is not defined anywhere, so the scope boundary is only partially clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool over alternatives, no mention of prerequisites, and no mention of undo/redo as a recovery path even though both are sibling tools. The agent must infer all usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stateBRead-onlyIdempotent
Read current map, revision, grid, selection, editability, dirty and combined history.
| Name | Required | Description | Default |
|---|---|---|---|
| browser_session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and non-destructive, so the safety profile is covered. The description usefully enumerates the state fields returned, but does not describe their shape or how 'combined history' is composed, which matters since there is no output 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?
A single front-loaded sentence with no filler, leading with the verb and then the payload. The field list is dense but every term earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read with no output schema, the description is close to sufficient because it enumerates the returned state components. The gap is the unexplained session parameter and the ambiguous 'combined history' field.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one required parameter, browser_session_id, with 0% schema description coverage, and the description never mentions it or explains what a session id scopes the read to. With low coverage the description should compensate, and it does not.
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 gives a specific verb ('Read') plus an enumerated set of returned fields (map, revision, grid, selection, editability, dirty, combined history), which makes it clearly a state-inspection tool. It is implicitly distinct from mutating siblings like place_actor or delete_actors, but no sibling is named.
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?
Usage is only implied: reading current state before/after edits. There is no explicit statement of when to call this versus list_items, list_actors, or select_actors, and no stated prerequisites beyond the required session id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_actorsBRead-onlyIdempotent
Page live actors using editor_id. Pin session and revision for consistent pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| item_id | No | ||
| selected_only | No | ||
| map_session_id | No | ||
| expected_revision | No | ||
| browser_session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover read-only, idempotent, non-destructive behavior, and the description adds a meaningful pagination-consistency note. It still does not explain what 'live actors' means, what is returned, or what happens when session/revision are not pinned.
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 definition is two short sentences with the primary purpose front-loaded and little wasted text. The reference to 'editor_id' is a minor structural weakness because it does not map to any schema field.
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 seven-parameter list tool with no output schema and no parameter descriptions, the description is too sparse. It provides pagination guidance but does not explain filtering, selection, map/session scoping, or the shape of returned actor data.
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?
With 0% schema description coverage across seven parameters, the description must do more work, but it only vaguely references 'session and revision' and mentions an 'editor_id' that is not a parameter. It leaves limit, offset, item_id, selected_only, map_session_id, and browser_session_id unexplained.
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 verb/resource pair: paging live actors. It distinguishes itself from list_items and list_sessions by naming actors specifically, though the reference to 'editor_id' is confusing because no such parameter exists in the schema.
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 useful pagination advice to pin session and revision for consistent pagination. However, it does not explicitly say when to use this tool versus list_items or get_state, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_itemsBRead-onlyIdempotent
Search the editor's baked item catalog. Some items are queryable but not placeable.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| offset | No | ||
| browser_session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real context beyond that: the catalog is static ('baked') and includes entries that are queryable but not placeable, warning the agent about a downstream failure mode. It says nothing about result ordering, default result set size (limit defaults to 100), or whether the catalog is scoped to the browser session.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the resource statement front-loaded and no filler. It is efficient, though the brevity is part of why parameter and usage details are missing rather than a sign of disciplined editing.
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?
Four parameters, no output schema, and no parameter descriptions mean the agent gets almost no information about what comes back or how to use the results. Critically, the description does not say whether returned items carry the identifiers needed by place_actor, which is the natural next step in this workflow.
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% across all four parameters, so the description carries the full burden and does not meet it. It never explains what 'query' matches against (name, tag, type), how 'limit'/'offset' interact, or why 'browser_session_id' is required for a read-only catalog lookup.
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 ("Search the editor's baked item catalog"), which is enough to distinguish it from the actor-oriented siblings (list_actors, place_actor). The verb "Search" versus the tool name "list_items" creates mild ambiguity about whether results are filtered or enumerated, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The clause "Some items are queryable but not placeable" implies a downstream constraint that matters when choosing between this tool and place_actor, but it never states when to call this instead of get_state or list_actors. There is no guidance on pagination strategy or the required browser_session_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sessionsARead-onlyIdempotent
List paired browser tabs. Explicitly choose a browser_session_id for other tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a read-only, idempotent, non-destructive, closed-world operation. The description adds useful workflow guidance about explicitly choosing a browser_session_id for other tools, but does not describe the return shape, empty results, or whether multiple sessions may be listed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and resource. Every sentence adds usable information, with no filler or redundant restatement.
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 list tool with rich read-only annotations and no output schema, the description is nearly complete. It identifies the resource and explains how the result is used, though it could clarify the return shape more explicitly.
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 and full schema coverage, so there are no parameter semantics to explain. The description appropriately focuses on the tool’s purpose and prerequisite usage rather than redundant parameter details.
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: "List paired browser tabs." This clearly identifies the tool’s function and distinguishes it from the mutation-oriented siblings, though it uses "browser tabs" rather than explicitly saying "sessions."
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?
Adds clear workflow context by saying to choose a browser_session_id for other tools, which implies this tool is the prerequisite for session-scoped operations. It does not state exclusions or alternatives, but none are obviously needed for a zero-parameter list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_actorsCDestructive
Move ordinary actors by integer grid cells; inspect actual returned positions.
| Name | Required | Description | Default |
|---|---|---|---|
| delta | Yes | ||
| actor_ids | Yes | ||
| map_session_id | Yes | ||
| expected_revision | Yes | ||
| browser_session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and non-idempotent, so the safety profile is covered. The description adds genuinely useful behavior — that returned positions may differ from the requested delta and should be inspected — which is valuable given there is no output schema. It still omits concurrency semantics (expected_revision conflicts), whether a move is all-or-nothing across actor_ids, and what happens on collision.
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 tight sentence with the operation front-loaded and no filler. The second clause is slightly cryptic ('inspect actual returned positions') but it earns its place by flagging a non-obvious behavior.
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 destructive, non-idempotent, five-required-parameter mutation with no output schema and no schema documentation, the description is too thin. An agent cannot tell from it how to handle a revision mismatch, partial application, or invalid coordinate targets.
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 carry the load for five required parameters. It explains only that movement is in integer grid cells (clarifying delta's semantics) and implies actor_ids is a list; it says nothing about expected_revision acting as an optimistic-concurrency token, nor the roles of browser_session_id and map_session_id.
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 ('Move ordinary actors') plus the unit of movement ('integer grid cells'), which distinguishes it from placement (place_actor) and selection (select_actors). The qualifier 'ordinary' hints at an actor-type restriction but never names the alternative or what non-ordinary actors would use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use versus place_actor/select_actors/undo, and no mention of prerequisites such as needing a prior select or a fresh revision. The only implicit guidance is the word 'ordinary', which suggests some actors are excluded but leaves the agent to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_actorCDestructive
Place one ordinary item in an empty grid cell. Color is linear RGB, not sRGB.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | ||
| item_id | Yes | ||
| map_session_id | Yes | ||
| rotation_index | No | ||
| color_linear_rgb | No | ||
| expected_revision | Yes | ||
| browser_session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the danger profile is covered. The description adds genuine value with the single-item limit and the empty-cell precondition, but omits what the destructive operation affects, how expected_revision conflicts are handled, and whether sessions must be pre-attached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed by the one non-obvious format rule. There is no filler, though the brevity is arguably under-specification rather than tight editing on a 7-parameter mutation tool.
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 destructive, non-idempotent mutation with 5 required parameters, 0% schema coverage, and no output schema, the description is far too thin. Nothing explains the revision-check contract, the two session identifiers, or the failure modes an agent must anticipate before calling 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 0% across 7 parameters, so the description carries the full burden and largely fails: expected_revision (optimistic-concurrency token), rotation_index, browser_session_id, map_session_id, and item_id are never explained. Only color_linear_rgb gets meaning beyond the schema, via the 'linear RGB, not sRGB' note, and 'cell' is only implied by 'empty grid cell'.
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 ('Place one ordinary item') plus a placement constraint ('empty grid cell'), which is enough to tell it apart from move_actors and delete_actors. However, the tool is named place_actor while the description says 'item', leaving a naming ambiguity an agent must resolve on its own.
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 no when-to-use/when-not guidance and never names the obvious alternatives (move_actors for existing actors, select_actors, undo). The 'empty grid cell' phrase implies a precondition but does not say what happens if the cell is occupied or when an agent should prefer a different sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redoCDestructive
Redo the editor's latest combined history entry.
| Name | Required | Description | Default |
|---|---|---|---|
| map_session_id | Yes | ||
| expected_revision | Yes | ||
| browser_session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered, but the description adds nothing about what gets discarded, whether the call fails or no-ops when nothing is available to redo, or what expected_revision guards against. For a state-mutating history operation this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no filler or repetition. It is efficient, though its brevity is part of the under-specification problem rather than a virtue here.
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 three-required-parameter mutation tool with no output schema and no parameter documentation, the description leaves the agent without the revision-guard contract, session scoping, or failure behavior. Terms like 'combined history entry' are unexplained jargon.
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% across three required parameters, and the description never references any of them. Critically, 'expected_revision' is clearly an optimistic-concurrency token and 'browser_session_id' versus 'map_session_id' are two distinct session scopes, none of which is explained anywhere.
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 (redo) and a specific target (the editor's latest combined history entry), which is enough to distinguish it from the read/list siblings. It stops short of naming its counter-operation 'undo', so the pairing must be inferred from the tool name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus undo, no prerequisite such as 'only valid immediately after an undo', and no mention of what to do when the redo stack is empty. The agent must guess the ordering semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_actorsCDestructive
Select up to 256 editor IDs. An empty replace clears selection.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | replace | |
| actor_ids | Yes | ||
| map_session_id | Yes | ||
| expected_revision | Yes | ||
| browser_session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and non-idempotency; the description adds real value by explaining that an empty replace-mode call clears the selection, which justifies the destructive flag. However, it never explains what add or toggle do, nor the concurrency role of expected_revision, so the mutation behavior remains partly opaque.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. It is efficiently written, though the brevity comes at the cost of coverage rather than being a virtue in itself.
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 5-parameter, 4-required mutation tool with no output schema and no annotation-level detail about revision semantics or mode behavior; the description covers only a fraction of that burden. An agent could not reliably invoke add/toggle modes or satisfy expected_revision from this text.
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 carry parameter meaning and largely doesn't. It mentions the 256 cap (already encoded as maxItems) and one mode edge case, but leaves mode's add/toggle values, expected_revision, browser_session_id, and map_session_id entirely unexplained.
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 ("Select") and states a capacity limit, but it refers to "editor IDs" rather than actors, leaving the agent to infer that the resource is actors in the map editor. It also doesn't distinguish selection-state mutation from siblings like list_actors or place_actor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus list_actors, place_actor, or move_actors. The only usage-adjacent statement is "An empty replace clears selection," which explains one edge case but not the decision context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undoBDestructive
Undo the editor's latest combined history entry, including a human edit.
| Name | Required | Description | Default |
|---|---|---|---|
| map_session_id | Yes | ||
| expected_revision | Yes | ||
| browser_session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered. The description does add real value by disclosing that it can revert a human edit and only the latest combined entry, but it omits what happens on revision mismatch, whether the undo is reversible, and any concurrency/permission expectations for a destructive 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?
A single front-loaded sentence with no filler; the verb and scope come first. It is slightly under-specified rather than bloated, but there is no wasted wording.
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 destructive, non-idempotent mutation with three fully undocumented required parameters and no output schema, the description is too thin. It leaves the agent without the meaning of `expected_revision`, the granularity of a 'combined history entry', or the outcome of a failed undo.
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% across three required parameters, so the description must compensate and largely does not. It never mentions `browser_session_id`, `map_session_id`, or `expected_revision` — the last of which is clearly a concurrency guard the agent needs to understand. 'Latest' vaguely gestures at revision semantics but gives no syntax or failure behavior.
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: undoes the editor's latest combined history entry. It is distinguishable from the sibling `redo`, but the phrase 'combined history entry' is jargon that leaves the exact unit of reversal ambiguous. The clarifying clause 'including a human edit' hints at scope without fully defining it.
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?
Implied usage (revert the most recent edit) is apparent, but there is no explicit when-to-use/when-not guidance and no mention of the obvious alternative `redo`. Nothing tells the agent how this behaves relative to state-reading siblings like `get_state`.
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.
10 tool updates
v0.1.0- First observed
delete_actors - First observed
get_state - First observed
list_actors - First observed
list_items - First observed
list_sessions - First observed
move_actors - First observed
place_actor - First observed
redo - First observed
select_actors - First observed
undo
TDQS
Scored across 10 tools
Each tool targets a distinct action: reading state, listing sessions/catalog/actors, selecting/placing/moving/deleting actors, and undo/redo. The only mild ambiguity is item vs. actor terminology, since place_actor mentions placing an 'ordinary item' while list_items is a non-placeable catalog, but descriptions largely clarify the boundary.
Seven tools follow a consistent snake_case verb_noun pattern, and singular/plural usage is natural for place_actor vs. move_actors/delete_actors. The verb-only undo and redo are standard and understandable, but they are the minor deviation from the verb_noun pattern.
Ten tools is well-scoped for a map editor MCP server. Each tool covers a meaningful operation across state, sessions, catalog, actors, selection, and history, with no obvious redundancy.
The surface covers the core actor lifecycle (list, select, place, move, delete) plus state reading, catalog search, sessions, and undo/redo. Minor gaps remain around richer actor property editing and explicit save behavior, but core workflows are covered.
Maintenance
Related MCP Connectors
Official remote MCP server bridge for Muumuu Domain.
MCP server to assist with JxBrowser development.
Collaborative whiteboard MCP server — create objects, connectors, C4 diagrams, and manage boards
Remote MCP server exposing SMI Aware tools, resources, and skills over Streamable HTTP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceExposes any stdio-based MCP server to the internet via HTTP/SSE transport, enabling remote agents to access MCP tools over a network.7 npmMIT
- AlicenseAqualityAmaintenanceConnects MCP clients directly to a live Godot editor, enabling AI assistants to build scenes, edit nodes, and control the editor through over 120 operations.4717,600 PyPI3,171MIT
- AlicenseAqualityBmaintenanceConnects MCP clients to a running hx-multianim game via DevBridge for scene inspection, state manipulation, input injection, and diagnostics.3845 npmBSD 3-Clause
- FlicenseNot gradedqualityBmaintenanceEnables MCP clients to explicitly pair with a Web64 browser IDE tab and, with separate user approval, read working-copy project sources, create and atomically edit native projects, import files, save/export, and run asynchronous PRG/Exomizer/D64 build jobs. It also exposes capability discovery and public SDK/documentation/schema lookups over local stdio or authenticated loopback Streamable HTTP.-