Skip to main content
Glama

mcp-noita-data

powered by dsh

把 Noita 解包后的 data/ 目录以 只读 MCP 工具暴露给模型。

只做数据获取,不做计算:不执行 Lua、不推导法术属性、不解析图片内容, 只负责把磁盘上的 XML / Lua / 文本原样读出来。

工具

工具

作用

list_dir(path="")

列出目录直接子项(名称、路径、类型、大小、扩展名)

read_text(path, offset=1, limit=400)

按行读取文本文件,返回总行数以便翻页

read_xml(path, max_nodes=200)

解析 XML 为嵌套字典(属性平铺、同名子节点转数组)

search(query, glob="**/*", regex=False, ...)

在文本内容中检索,返回文件 + 行号 + 行内容;有译文时支持中文查询

translate(text, limit=20)

在译文表里互查:$key → 译文,译文 → $key

spell(spell_id, max_tables=10)

把一个法术在 scripts/gun/*.lua 各版本表里的条目并列返回

spell_bundle(spell_id)

一次汇总:卡牌字段 + 全部组件(合并 <Base>)+ 粒子颜色 + 图集帧 + 音效 + 换算值

entity(path)

读取任意实体,合并一层 <Base>,返回未筛选的全部组件

路径统一使用游戏内写法,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

默认按以下顺序查找数据目录:

  1. 环境变量 NOITA_DATA_DIR

  2. 当前工作目录下的 data/

  3. 仓库根目录下的 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 tools
entityB

读取任意实体 XML,合并一层 ,返回它的全部组件。

组件不做筛选(Projectile / DamageModel / Homing / ParticleEmitter … 都保留), 适合自己实现行为逻辑时逐个组件取值。

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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/ 下某个目录的直接子项(不递归)。

返回每一项的名称、游戏内路径、类型、大小与扩展名,用于定位文件。

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 便于继续翻页。二进制文件会被拒绝。

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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"。

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
max_nodesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

spellA

把一个法术在 scripts/gun/gun_actions*.lua 各版本表里的条目并列返回。

只解析源码文本,不执行 Lua、不做取舍:每个版本给出字段与行号区间, 需要看函数体时再用 read_text 按行区间读取。

ParametersJSON Schema
NameRequiredDescriptionDefault
spell_idYes
max_tablesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 里(贴图像素、音频采样、引擎公式)。

ParametersJSON Schema
NameRequiredDescriptionDefault
spell_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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, 此时搜索仍然可用,只是不能按中文等译文反查。

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 8 tool updatesv0.1.0
    • First observedentity
    • First observedlist_dir
    • First observedread_text
    • First observedread_xml
    • First observedsearch
    • First observedspell
    • First observedspell_bundle
    • First observedtranslate

TDQS

A3.7/5.0

Scored across 8 tools

Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers