noita-data
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., "@noita-datawhat's the spell bundle for POLLEN?"
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.
mcp-noita-data
把 Noita 解包后的 data/ 目录以 只读 MCP 工具暴露给模型。
只做数据获取,不做计算:不执行 Lua、不推导法术属性、不解析图片内容, 只负责把磁盘上的 XML / Lua / 文本原样读出来。
工具
工具 | 作用 |
| 列出目录直接子项(名称、路径、类型、大小、扩展名) |
| 按行读取文本文件,返回总行数以便翻页 |
| 解析 XML 为嵌套字典(属性平铺、同名子节点转数组) |
| 在文本内容中检索,返回文件 + 行号 + 行内容;有译文时支持中文查询 |
| 在译文表里互查: |
| 把一个法术在 |
| 一次汇总:卡牌字段 + 全部组件(合并 |
| 读取任意实体,合并一层 |
路径统一使用游戏内写法,data/ 前缀可省略:
data/scripts/gun/gun_actions.lua
scripts/gun/gun_actions.lua # 等价Related MCP server: obsidian-mcp
安装与运行
uv sync
uv run noita-data-mcp --data-dir ./data默认按以下顺序查找数据目录:
环境变量
NOITA_DATA_DIR当前工作目录下的
data/仓库根目录下的
data/
客户端配置
{
"mcpServers": {
"noita-data": {
"command": "uv",
"args": [
"run", "--directory", "C:/Users/dynas/Documents/Code/mcp-noita-data",
"noita-data-mcp", "--data-dir", "C:/Users/dynas/Documents/Code/mcp-noita-data/data"
]
}
}
}设计说明
路径隔离:所有路径先
resolve()再校验是否位于数据根之下,..与绝对路径一律拒绝。只读:没有任何写盘操作;文件系统权限交给操作系统。
不预扫描:4,000+ XML、1,000+ Lua 全部按需读取,避免启动时全量索引。
返回有上限:
read_text按行分页,read_xml按节点数截断并标记_truncated,search默认最多 50 条,避免单次结果撑爆上下文。二进制识别:按扩展名 + NUL 字节双重判断,图片/音频不会被当作文本读出。
UTF-8:启动时把 stdin/stdout 强制为 UTF-8,避免 Windows 控制台 GBK 破坏 JSON-RPC。
返回示例
read_text("scripts/gun/gun_actions.lua", offset=1, limit=2){
"path": "data/scripts/gun/gun_actions.lua",
"total_lines": 11126,
"start_line": 1,
"end_line": 2,
"lines": ["dofile_once(\"data/scripts/gun/procedural/gun_action_utils.lua\")",
"dofile_once(\"data/scripts/lib/utilities.lua\")"],
"truncated": true
}结构
src/noita_data/
├─ paths.py # data/xxx -> 绝对路径,越界与盘符一律拒绝
├─ text.py # 编码嗅探、二进制判定、按行分页
├─ xmljson.py # XML -> 嵌套字典(多根兜底、节点预算)
├─ search.py # glob + 正则/子串检索
└─ server.py # MCP 工具与入口本地化(translations)
译文来自 Noita 原生的 data/translations/*.csv(形如 "$action_light_bullet","火花弹")。
放进去即生效,也可以用环境变量指定:
set NOITA_TRANSLATIONS=D:\path\to\common.csv # 或一个目录有译文表时:
search("火花弹")会先反查成$action_light_bullet再搜,命中行附带translations;translate("火花弹")返回对应 key,translate("$action_light_bullet")返回译文;没有译文表时两者安全降级,只是不能按中文查。
当前这份 dump 不含 data/translations/,所以开箱只能用 id 搜索。
开发
uv run pytest # 10 个用例,覆盖路径、分页、XML、检索示例:复刻一个法术需要什么
spell_bundle("POLLEN") 一次返回整条链(节选):
{
"card": {"mana": "10", "price": "110", "spawn_level": "0,1,3,4",
"action_effects": ["c.fire_rate_wait = c.fire_rate_wait + 2",
"c.spread_degrees = c.spread_degrees + 20"]},
"projectiles": [{
"body": {"damage": "0.2", "lifetime": "750", "speed_min": "150", "speed_max": "250"},
"velocity": {"gravity_y": "10", "air_friction": "2.8", "mass": "0.35"},
"homing": {"homing_targeting_coeff": "10.0", "homing_velocity_multiplier": "0.89"},
"particles": [{"material": "spark_white", "color": "7fFEFEFF", "glow": "90"}],
"sprite": {"animation": {"frame_count": "4", "frame_width": "11", "frame_wait": "0.09"}},
"audio": {"event_root": "player_projectiles/bullet_arrow"}
}],
"not_available": ["贴图像素", "音频采样", "引擎侧公式(追踪/碰撞/伤害换算)"]
}数值来自 gun_actions.lua → related_projectiles → 实体 XML(合并一层 <Base>)→
materials.xml 的材质颜色 → projectiles_gfx/*.xml 的帧定义。全部只读。
同一法术的多份定义
scripts/gun/ 下有多张法术表(普通 / 有限法术 / 无限 / petri),字段并不相同。
spell("LIGHT_BULLET") 会把这些表里的条目并列列出(含行号区间):
_gun_actions_unlimited.lua L1052-1067 mana=5 price=- max_uses=- name="Spark bolt"
gun_actions.lua L43-63 mana=5 price=100 max_uses=- name="$action_light_bullet"
gun_actions_limited.lua L1146-1162 mana=5 price=- max_uses=100 name="Spark bolt"
gun_actions_petri.lua L1146-1162 mana=5 price=- max_uses=- name="Spark bolt"
gun_actions_unlimited.lua L1052-1067 mana=5 price=- max_uses=- name="Spark bolt"它按源码文本解析,不执行 Lua;要读函数体就用返回的 source 区间再 read_text。
范围
明确不做的事情:执行 Lua、计算法术派生数值、切分图集、渲染图片。 需要这类派生数据时应当在调用方完成,或另建一个构建期脚本,而不是塞进 MCP 工具。
致谢
Design inspired by Noita_Lib (GPL); no code copied.
Available Tools
8 toolsentityB
读取任意实体 XML,合并一层 ,返回它的全部组件。
组件不做筛选(Projectile / DamageModel / Homing / ParticleEmitter … 都保留), 适合自己实现行为逻辑时逐个组件取值。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it discloses two genuinely useful traits: it merges exactly one level of <Base>, and it deliberately does NOT filter components (Projectile / DamageModel / Homing / ParticleEmitter are all kept). It remains silent on failure modes (missing/malformed XML) and permissions, but for a single-argument read tool the key behavioral surprise is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, with the follow-up sentences spent only on the merge rule and the no-filtering behavior. No filler or repetition; slightly longer than strictly necessary but every clause 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?
An output schema exists, so return-value explanation is rightly omitted, and the merge/filter behavior is documented. The remaining gap is the completely undocumented 'path' parameter, which is required for every call, leaving the definition just short of complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the sole parameter 'path' has no description in the schema, so the description is the only place that could define it. It never mentions 'path' at all — no format, no base directory, no indication of file vs. entity id — so the coverage gap is not compensated.
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 first sentence gives a specific verb+resource ('读取任意实体 XML') plus a non-obvious operation (merge one level of <Base>) and the result ('返回它的全部组件'). That is enough for an agent to tell it apart from a raw read like read_xml, though it never names read_xml or the spell/spell_bundle siblings explicitly.
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?
'适合自己实现行为逻辑时逐个组件取值' implies the scenario where this tool is preferred, but it is stated as a suitability note rather than an explicit when-to-use / when-not-to-use rule. No alternative (read_xml, spell, spell_bundle) is named as a fallback for other cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dirA
列出 data/ 下某个目录的直接子项(不递归)。
返回每一项的名称、游戏内路径、类型、大小与扩展名,用于定位文件。
| Name | Required | Description | Default |
|---|---|---|---|
| path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose a genuine behavioral trait (non-recursive traversal) and the fields returned, but says nothing about error handling for missing directories, permission/auth needs, or what an empty path resolves to.
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 scope constraint (non-recursive) front-loaded. The second sentence enumerating returned fields is mildly redundant given an output schema exists, but it is not wasteful enough to penalize further.
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 one-parameter listing tool with an output schema present, the description covers purpose, scope, and return shape adequately. The remaining gaps are the default-path behavior and lack of any alternative-tool routing.
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 0% for the single path parameter, so the description must compensate. It partially does by implying the path is a directory relative to data/, but it never states whether the value is relative or absolute, or how the default empty string is interpreted.
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 (列出/list), resource (data/ 下某个目录的直接子项), and explicit scope (不递归), so an agent immediately knows this is a directory-listing tool. It does not explicitly contrast itself with any sibling tool, so it falls short of the top tier.
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 by the phrase 用于定位文件 (to locate files); there is no statement of when to choose this over read_text, read_xml, or search. No prerequisites or when-not-to-use conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_textA
按行读取一个文本文件(xml / lua / txt / csv 等)。
offset 为 1 起始行号,limit 为最多返回行数; 返回 total_lines 便于继续翻页。二进制文件会被拒绝。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does fairly well: it discloses the line-oriented read model, that offset is 1-based, that limit caps returned lines, that total_lines is returned for pagination, and that binary input is rejected. It omits encoding assumptions, file-size limits, and error behavior on missing paths, but the core operational traits are present.
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 compact clauses, front-loaded with the core action and then the parameter semantics, with zero filler. The Chinese phrasing packs the format list, pagination contract, and rejection rule into minimal space.
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?
An output schema exists, so the description is not obligated to document return values, and the parameters are covered. The remaining gap is the absence of any tie-breaker against read_xml and no note on encoding or size limits, which an agent handling large or non-UTF-8 files would want.
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, and it does for the two non-obvious parameters: offset is defined as a 1-based line number (critical, since the default of 1 could otherwise be misread) and limit as the maximum number of lines. Only 'path' is left unexplained, which is self-evident from the required-parameter 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 states a specific verb and resource ('按行读取一个文本文件') and enumerates supported formats (xml/lua/txt/csv), so an agent immediately knows what this does. However, it never distinguishes itself from the sibling read_xml, which it even lists as a supported type, leaving a real routing ambiguity unresolved.
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 implied rather than stated: no explicit 'use this when' or 'use read_xml instead when' guidance is given, despite read_xml being an obvious alternative for part of this tool's format coverage. The one hard rule provided — that binary files are rejected — is a useful negative constraint but is really a behavioral trait, not selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_xmlB
把 XML 解析成嵌套字典返回。
属性直接平铺为键;同名子节点合并成数组;文本放在 "_text"。 max_nodes 限制节点总数,超出部分标记 "_truncated"。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| max_nodes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses output behavior (attributes flattened, same-name children merged into arrays, text under '_text') and the novel truncation behavior with max_nodes, which is not derivable from the schema. It omits error handling, encoding assumptions, and read-only semantics.
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 terse lines, front-loaded with the core purpose followed by the mapping and truncation rules. Every sentence carries distinct information 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?
An output schema exists, so return values need not be explained, yet the description adds useful structural detail anyway. Together with the max_nodes explanation and truncation semantics, the definition is sufficient for correct invocation; only error/encoding edge cases are unaddressed.
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 explains max_nodes well ('限制节点总数,超出部分标记 _truncated'), clarifying both its meaning and its effect. The required 'path' parameter is left entirely to inference, though its meaning is 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?
States a specific verb+resource ('把 XML 解析成嵌套字典返回' - parse XML into a nested dict) and even details the transformation mapping rules, so the purpose is unambiguous. It does not, however, explicitly distinguish itself from the sibling read_text, leaving that differentiation to inference.
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 tool versus alternatives such as read_text or search. The XML-specific nature implies a use case, but no explicit condition, prerequisite, or exclusion is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchA
在文本文件内容中搜索(默认忽略大小写)。
query 为子串;regex=True 时按正则解释。存在译文表时, query 会先反查成 $key 一起匹配(可直接搜中文),命中行附带译文。 glob 用于缩小范围,例如 "/*.lua"、"scripts//*.xml"。 返回命中的文件、行号与行内容。
| Name | Required | Description | Default |
|---|---|---|---|
| glob | No | **/* | |
| query | Yes | ||
| regex | No | ||
| max_results | No | ||
| case_sensitive | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the default case-insensitivity, the regex interpretation mode, and the non-obvious translation-table reverse-lookup behavior (searching Chinese via $key). It does not mention permissions or rate limits, but for a read-only search these are minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main purpose is front-loaded in the first clause, followed by parameter behavior and return format. It is compact and each line adds information, though the multi-line layout is slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema existing, the description still summarizes the return (files, line numbers, line content), and covers the key query semantics including the translation feature. The only gap, max_results, is minor for a search 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 0%, so the description must compensate and largely does: it explains query (substring), regex, glob (with example patterns), and the default case-insensitivity that maps to case_sensitive. Only max_results is left undocumented, so nearly all parameters gain 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?
States a specific verb and resource ('在文本文件内容中搜索'), which is clearly distinct from reading (read_text/read_xml) or listing (list_dir). It is clear on its own but never explicitly differentiates itself from the sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains how glob narrows scope with concrete examples and clarifies the regex toggle, implying when those options apply. However, it gives no explicit when-to-use/when-not guidance versus read_text or list_dir, leaving the agent to infer the choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spellA
把一个法术在 scripts/gun/gun_actions*.lua 各版本表里的条目并列返回。
只解析源码文本,不执行 Lua、不做取舍:每个版本给出字段与行号区间, 需要看函数体时再用 read_text 按行区间读取。
| Name | Required | Description | Default |
|---|---|---|---|
| spell_id | Yes | ||
| max_tables | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose real traits: it parses source text only, never executes Lua, and deliberately makes no trade-offs, returning fields plus line-number ranges per version. That tells the agent the output is deterministic and raw. It still omits error behavior (e.g. unknown spell_id) and the meaning of the table cap.
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 short clauses, purpose front-loaded, then the parsing constraint, then the follow-up routing. Every sentence earns its place with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema means return values need not be described, and the description adequately covers the parsing model and the hand-off to read_text. It remains incomplete on the undocumented max_tables parameter and on what happens when a spell id is absent or appears in fewer tables than the cap.
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, and it does not name either parameter. spell_id is inferable from '把一个法术…的条目', but max_tables is never mentioned or explained, leaving the default-10 cap opaque.
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: it returns one spell's entries side-by-side across every version table in scripts/gun/gun_actions*.lua. That is far more precise than the bare name 'spell'. It does not, however, distinguish itself from the sibling tool spell_bundle, so an agent cannot tell the two apart from this text 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?
It gives one clear routing rule: when the function body is needed, follow up with read_text on the reported line ranges. That is useful implied usage guidance, but there is no statement of when to prefer this over spell_bundle or entity, and no exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spell_bundleA
一次性汇总一个法术的数值:卡牌字段 + 投射物实体 + 特效 + 音效。
会自动跟随 related_projectiles、合并一层 、查 materials.xml 的粒子颜色、 读取 SpriteComponent 指向的图集帧定义。只读,不执行 Lua、不做换算。 拿不到的东西列在 not_available 里(贴图像素、音频采样、引擎公式)。
| Name | Required | Description | Default |
|---|---|---|---|
| spell_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the whole burden and does so: it declares read-only, no Lua execution, no unit conversion, and discloses the automatic resolution steps (following related_projectiles, merging one <Base> layer, materials.xml particle colors, SpriteComponent atlas frames). It also names what is deliberately excluded (texture pixels, audio samples, engine formulas), which sets 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?
Front-loaded with the aggregation summary, then behavior/limits, then exclusions. No filler sentence; each line (auto-follow rules, read-only constraints, not_available contents) adds distinct, useful 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?
An output schema exists, so return-value documentation is not required, and the description covers aggregation semantics plus limitations well. The one shortfall is the missing explanation of what spell_id must be, which the agent needs before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter 'spell_id' is left completely undocumented. The description never says whether this is an internal ID, a name, a path, or its expected format, so it fails to compensate for the schema 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?
States a specific verb (一次性汇总 / one-shot aggregation) and resource (spell data), then enumerates exactly which sub-parts are bundled: card fields, projectile entity, effects, and sound. That scope makes it clearly distinguishable from the plain 'spell' sibling without opening either 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?
Usage is only implied — the agent can infer this is the one-call way to get a full spell picture rather than chaining 'spell', 'entity' and 'read_xml'. There is no explicit when-to-use-this vs when-to-use-an-alternative routing, and no prerequisites named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translateA
查询本地化词条:给 key 返回译文,给译文返回 key。
数据来自 data/translations/*.csv;文件不存在时 available=False, 此时搜索仍然可用,只是不能按中文等译文反查。
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose one genuine behavioral trait: when data/translations/*.csv is absent, available=False and reverse lookup by translation stops working while search still functions. That is useful degradation info, but permission needs, limit behavior, and result format are untouched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core behavior front-loaded and the data-source caveat following. No filler, though slightly more could have been said about the undocumented limit without harming brevity.
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?
An output schema exists, so return values need not be described, and the description still names the 'available' flag that appears in that output. Purpose, data source, and failure-mode behavior are covered; the only real gap is 'limit' and sibling routing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does add meaning for 'text' by explaining the input may be either a key or a translation, which the bare schema does not convey. The 'limit' parameter (default 20) is never explained anywhere, leaving half the parameters opaque.
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 operation on a specific resource: bidirectional lookup between a localization key and its translation. The reversal ('给 key 返回译文,给译文返回 key') is precisely stated, so an agent knows exactly what it does. It does not, however, distinguish itself from the sibling 'search' tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the description ('查询本地化词条'), and the note about search remaining usable when the file is missing gives a partial operational condition. But there is no explicit when-to-use guidance and no routing against the sibling 'search' tool.
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.
8 tool updates
v0.1.0- First observed
entity - First observed
list_dir - First observed
read_text - First observed
read_xml - First observed
search - First observed
spell - First observed
spell_bundle - First observed
translate
TDQS
Scored across 8 tools
Most tools have clearly distinct purposes (directory listing, raw text read, XML parse, search, translation, entity read). There is mild overlap between spell / spell_bundle (both about spells, though one returns aggregated numbers and the other Lua source entries) and between entity / read_xml (both read entity XML), but the descriptions clarify the boundaries well enough.
A partial verb_noun pattern exists (list_dir, read_text, read_xml), but it is broken by bare nouns (entity, spell) and noun compounds (spell_bundle), plus a bare verb (search, translate). Mixed conventions but each name is still readable and unambiguous.
Eight tools is well-scoped for a read-only data-inspection server, and each tool covers a distinct layer (listing, raw IO, parsing, search, localization, domain-specific aggregation). No redundant or filler tools.
The surface covers the core read-only lifecycle: locate files, read raw text, parse XML, search content, resolve translations, and domain-specific entity/spell inspection. Minor gaps like a spell/entity index or bulk listing exist but search plus list_dir let agents work around them.
Maintenance
Related MCP Connectors
Read-only MCP for the Eco game wiki: search, Markdown pages, and wiki_* lookups. No keys, no writes.
Search MCP servers, MCP clients and AI agents, and retrieve listing details. Free, read-only access.
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
Public read-only MCP server for Genvernium product and developer resources.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables listing, reading, and searching local files and directories through MCP tools.4-
- AlicenseAqualityDmaintenanceProvides read-only access to an Obsidian vault, enabling file listing, content reading, and text search across notes via MCP.42Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables safe, read-only browsing of allowlisted local directories through MCP, providing tools to list roots, read files, and search text.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI clients to search and read a folder of Markdown/text documents via a read-only MCP server with hybrid BM25 and local embedding search, treating the calling model as untrusted.11 npmMIT