DesyncedMCP
DesyncedMCP
MCP-сервер для разработки модов Desynced. Предоставляет ИИ-ассистенту (Claude Code или любому MCP-клиенту) прямой доступ к справочнику Lua API игры, исходному коду базовой игры, живым журналам игры и установленным модам.
Инструменты
Статические (файловая система)
Инструмент | Назначение |
| Поиск по официальному справочнику Lua API (включён в |
| Регулярный поиск по исходникам базовой игры ( |
| Чтение хвоста файла журнала игры, если он существует (см. примечание |
| Список модов, которые загрузит игра, по сравнению с модами в рабочей области |
| Чтение любого файла исходников рабочей области по относительному пути с диапазоном строк |
Живые (связь с отладчиком lrdb, игра запущена с -moddev)
Инструмент | Назначение |
| Живой снимок: тик, фракция игрока, количество сущностей, активные настройки модов |
| Вывод, захваченный в реальном времени (print/errors/BOOT); переживает сбои вплоть до момента смерти |
| Выполнение произвольного Lua внутри запущенной игры и возврат результата |
|
|
Связь использует протокол satoren lrdb (JSON-RPC с разделителями строк, без
init) на 127.0.0.1:21110. Отладочный сервер игры принимает команды от одного клиента: пока этот сервер подключён, внутриигровая консоль журнала замолкает (вывод перенаправляется на связь), и VS Code не может подключиться. Виртуальная машина отвечает на eval только во время выполнения Lua, поэтому простаивающее меню может привести к тайм-ауту.
Related MCP server: ReforgerForge MCP
Мост симуляции (компаньон-мод)
game_eval выполняется в UI Lua VM игры, где мутации симуляции заблокированы. Управление игрой (перемещение, развёртывание, добыча, строительство...) требует компаньон-мода Desynced MCP Bridge в Steam Workshop, который предоставляет FactionAction.MCPSimCmd в контекст симуляции. Этот сервер работает без него для инструментов только для чтения (журналы, статус, чтение eval, горячая перезагрузка).
Настройка
npm install
npm test # smoke testЗарегистрируйте в Claude Code (область проекта):
claude mcp add desynced --scope project -- node <path-to>/DesyncedMCP/server.jsКонфигурация (переменные окружения)
Переменная | По умолчанию |
| текущая рабочая директория — укажите папку с исходниками ваших модов |
|
|
|
|
Поиск по базовой игре (необязательно)
Игра поставляется со всей базовой игрой в виде main.zip внутри папки модов и всегда загружает её в сжатом виде — при обычной установке она никогда не извлекается. Чтобы search_game_source и read_game_file видели Lua базовой игры, распакуйте main.zip в папку main/ внутри вашей рабочей области с помощью любого zip-инструмента. Это чисто для удобства разработки; игре не нужна и не используется извлечённая копия.
Требования на стороне игры
Сам сервер работает вне игры — в игру ничего устанавливать не нужно. Чтобы журналы существовали, запустите Desynced с этими параметрами запуска Steam:
-moddev -log-moddev включает режим разработчика модов (горячая перезагрузка с F7, строгие проверки данных, консоль журнала); -log записывает файл журнала, который читает этот сервер.
План развития
deploy_mod: копирование мода из рабочей области в папку модов игры (заменяет ручной шаг копирования)Живой мост через отладочный протокол lrdb (
localhost:21110в-moddev): выполнение Lua в запущенной игре, проверка сущностей/фракций, запускDebug.Reload()Публикация в Workshop через DesyncedModUploader
Available Tools
9 toolsgame_evalEval Lua in the running gameA
Execute a Lua chunk inside the running game's VM through the debugger and return its result. Use 'return ' to get values back. Full game API available (Map, Game, data, UI...). The VM answers only while executing Lua (in menu or paused game it can time out). Simulation writes from here can desync multiplayer — fine in single player.
| Name | Required | Description | Default |
|---|---|---|---|
| chunk | Yes | Lua code, e.g. 'return Map.GetTick()' or 'return data.frames.f_bot_1s_a.name' | |
| timeout_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses timeout behavior, the multiplayer desync side effect, and the debugger context. It doesn't specify return serialization or error behavior, but the critical operational caveats are 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?
Three sentences, each purposeful: the core action, the usage pattern, and the behavioral caveats. Front-loads the main purpose and avoids redundancy; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an eval tool with no output schema, it explains how to obtain values and flags side effects. It doesn't detail error handling or result formatting, but given the tool's open-ended nature, the essential usage and risks are covered. Slightly more on timeout_ms would push it to 5.
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 description effectively explains that chunk should contain Lua code and demonstrates the 'return' pattern, which maps to the schema's example. It touches on timeout indirectly via the 'can time out' note, but timeout_ms itself is not explicitly described. Since schema coverage is only 50%, this partial compensation is acceptable but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: executing a Lua chunk in the game's VM via the debugger and returning the result. It gives a concrete pattern ('return <expr>') and distinguishes from sibling tools that search or read files, making the intent 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?
It instructs to use 'return <expr>' for output, warns that the VM only responds during Lua execution (timeout in menu/paused), and flags multiplayer desync—implicitly saying when not to use it. However, it does not explicitly contrast with alternatives like search_lua_api, so a small gap remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
game_logsLive game logsA
Return the recent output captured live from the running game (print(), errors, warnings, BOOT lines) via the debugger link. The buffer accumulates while this MCP server stays connected; it survives game crashes up to the moment of death.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | How many entries from the end | |
| filter | No | Regex to filter entries, e.g. 'error|assert|WARNING' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the buffer accumulates while the server is connected and survives crashes up to the moment of death, which are useful behavioral traits. It does not explicitly state the operation is read-only or mention side effects, but the nature of the tool implies no mutation. Given the lack of annotations, this is a solid disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, tightly written, with the core purpose front-loaded. The secondary sentence adds meaningful behavioral context about buffer accumulation and crash survival. Every part earns its place with no unnecessary 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 log-retrieval tool with no output schema and no annotations, the description covers the essential aspects: what it returns, how it behaves, and the connection requirement. It does not address potential differences from the similarly named sibling get_game_logs, which is a minor gap, but overall the agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both 'lines' and 'filter' are well-documented with types, defaults, ranges, and examples. The tool description adds no additional parameter context beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Return the recent output captured live from the running game' with specific content types (print, errors, warnings, BOOT lines). However, it does not differentiate from the sibling tool 'get_game_logs', which appears to serve a similar purpose, so it stops short of a 5.
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: the agent can infer this is the tool to retrieve live game logs. But there is no explicit guidance on when to choose this over alternatives like get_game_logs, nor any mention of exclusions or prerequisites (e.g., must have debugger link). It provides context about buffer behavior but stops short of routing the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
game_reloadHot reload mods (remote F7)A
Trigger Debug.Reload() in the running game: reloads all mod Lua from disk exactly like pressing F7 in-game. Use after deploying mod changes to the game's mods directory.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It states the effect ('reloads all mod Lua from disk') and the context ('in the running game'), which conveys that the tool mutates the running game's state. However, it does not mention potential side effects (e.g., resetting mod state, losing unsaved changes) or prerequisites beyond a running game, which would be helpful for a state-changing tool. The description is functional but not fully transparent about consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no fluff. It front-loads the core action ('Trigger Debug.Reload()'), then explains the effect and the recommended usage. Every sentence contributes necessary information, making it concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and no output schema, the description covers the essential context: what it does, when to use it, and the operational context (running game). It implicitly distinguishes itself from sibling tools by its purpose. Minor gaps like failure behavior or idempotency are not critical for this action, so the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100% (vacuously, as there is nothing to cover). The description does not need to add parameter meaning, and none is missing. The baseline for zero parameters is 4, which is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Trigger Debug.Reload()' and the resource: 'reloads all mod Lua from disk'. It also provides a precise analogy to pressing F7 in-game, which makes the purpose unambiguous. Among sibling tools (game_status, game_logs, list_mods, etc.), this is the only one that performs a reload, so it is easily distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use context: 'Use after deploying mod changes to the game's mods directory.' This is a clear trigger condition. However, it does not mention when not to use it or name alternative tools, though the unique action makes that less critical. The guidance is sufficient for an agent to decide when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
game_statusLive game statusA
Connect to the running game's Lua debugger and report a live snapshot: tick, whether a map is loaded, player faction, entity counts. Fails gracefully when the game is not running with -moddev.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden of behavioral disclosure. It does add value by explaining the connection mechanism (Lua debugger) and the graceful failure behavior when the game isn't running. However, it does not explicitly state whether the operation is read-only or if any side effects occur, and it doesn't describe error behavior beyond the graceful failure. This provides some context but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero fluff. The first sentence front-loads the main purpose and the exact fields reported, while the second sentence adds the failure condition. This is appropriately sized and well-structured, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with no parameters and no output schema. The description covers what it does, what it returns, and the graceful failure mode. However, it does not mention whether the tool has side effects or if it's safe for read-only use, which might be expected given the absence of annotations. For its simplicity, it is fairly complete, but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty, so there are no parameters to document. The description doesn't need to add parameter semantics, and the baseline for 0 parameters is 4. Since there is nothing to clarify, this score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (connect to Lua debugger and report) and a resource (live game status) with concrete output fields (tick, map loaded, player faction, entity counts). This is clearly distinct from sibling tools like game_logs or game_eval, which focus on logs or evaluation rather than current state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It only mentions the failure condition when the game isn't running with -moddev, which is a precondition, not a usage recommendation. There's no mention of selecting this over other tools for specific scenarios, leaving the agent without direction on tool choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_game_logsRead Desynced game logsC
Tail the newest Desynced log file (game must run with -log for a log file to be written; -moddev recommended too). Shows Lua errors, warnings and print() output. Optionally filter lines by regex.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | How many lines from the end | |
| filter | No | Regex to filter lines, e.g. 'error|warning|Lua' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that a log file must exist and what the tool shows (errors, warnings, print output), but it does not mention behavioral traits such as whether the operation is read-only, what the return format is, or potential side effects (e.g., if the tool could block or incur costs). This is insufficient for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no waste. The core purpose is front-loaded, followed by prerequisites and capabilities. The first sentence contains a parenthetical requirement that is helpful but slightly verbose. Overall, it is efficient and structured for quick scanning.
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 tail-and-filter tool with two optional parameters and no output schema, the description covers the basics: what it does, prerequisites, and filter option. However, it omits any description of the return value (the log content format) and does not clarify how this tool differs from the sibling 'game_logs', which may be critical for correct selection. Given the tool's relative simplicity, a 3 reflects the gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('lines' as integer count, 'filter' as regex). The description adds a brief mention of optional regex filtering (e.g., 'error|warning|Lua') which mirrors the schema, but provides no additional semantic meaning beyond what the schema offers. Thus a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: 'Tail the newest Desynced log file'. It identifies the resource (Desynced log file) and purpose (show Lua errors, warnings, print output). However, it does not explicitly distinguish itself from the sibling tool 'game_logs' or other log-related tools, so it lacks the explicit differentiation that would warrant a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful prerequisites (game must run with -log; -moddev recommended) but gives no guidance on when to use this tool versus the sibling 'game_logs' or others. It does not state when not to use it or mention any alternative conditions. The agent is left to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modsList installed Desynced modsA
List mods in the game's mods directory (what the game will actually load) with id/name/version from each def.json, plus mods present in the workspace, to spot version drift between both.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosure. It states exactly what data is extracted (id/name/version from def.json) and from where (game mods and workspace mods). It does not explicitly mention that it is a read-only operation, but that is strongly implied and no side effects are suggested. It adequately discloses scope and output content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the action ('List mods in the game's mods directory') and then adds necessary detail (def.json fields, workspace comparison, purpose). No unnecessary words; 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?
For a parameterless tool with no output schema, the description is remarkably complete. It explains what is listed, the sources (game mods directory and workspace), the extracted fields (id/name/version), and the practical use case (spotting version drift). An agent can call this tool correctly with full confidence in its behavior and expected result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (empty properties). Per the guidelines, the baseline for 0 parameters is 4. The description adds context about what data is listed, which complements the empty schema adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List', the resource 'mods' (in the game's mods directory and workspace), and specifics like 'id/name/version from each def.json'. It explicitly distinguishes its scope from sibling tools (game status, logs, LUA API, etc.) by focusing on mods and version drift.
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 purpose statement 'to spot version drift between both' implies a clear use case. It does not explicitly say 'use this when you need to compare installed mods vs workspace mods', but the context and sibling tooling make that evident. It lacks explicit when-not-to-use guidance, but the single purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_game_fileRead a game/workspace source fileB
Read a file from the workspace (base game 'main' package or any mod) by relative path, with optional line range. Example: 'main/ui/FrameView.lua'.
| Name | Required | Description | Default |
|---|---|---|---|
| to_line | No | ||
| from_line | No | ||
| relative_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose that reading is a non-destructive operation, what happens if the file is missing, whether path is case-sensitive, or what the return format is. The mention of line range is the only behavioral hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise—two sentences—with the core purpose front-loaded and an example serving as a concrete anchor. Every word earns its place; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and three parameters, the description is incomplete. It fails to describe the return format (full file content? line array?), the semantics of line ranges (inclusive boundaries), error conditions (missing file, out-of-range lines), and any limits (file size). An agent would need to infer or probe these details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must explain parameter meanings. It mentions 'relative path' and 'optional line range' but does not clarify that from_line defaults to 1, what to_line does (inclusive/exclusive), or how they interact. The example path helps relative_path but not the line parameters.
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 ('Read') and resource ('file from the workspace'), specifies allowed packages ('main' or any mod), and provides a concrete example path. This clearly differentiates it from siblings like search_game_source (searching vs. reading a known file).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by describing read scope and optional line range, but it does not explicitly advise when to use this tool versus alternatives such as search_game_source or when not to use it. It gives context but no explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_game_sourceSearch Desynced game/mod sourceA
Regex search over the Lua/JSON source of the base game ('main' package) and all mods in the workspace. Returns file:line matches with context. Use to find how the base game defines/uses something before overriding it in a mod.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Regex (case-insensitive). Literal fallback if invalid regex. | |
| max_results | No | ||
| path_filter | No | Substring filter on file path, e.g. 'main/ui', 'ExplorableHacker' | |
| context_lines | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose side effects and limitations. It states it returns matches with context, implying a read-only search, but does not explicitly say it is non-destructive or mention any caveats (e.g., regex performance, indexing behavior, or that it searches the full workspace). The description is adequate for safety but does not go beyond the obvious.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the core function (regex search over source) and then the primary use case. Every word adds value, with no fluff or redundant phrases. It is efficiently structured for an agent to parse quickly.
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 search tool with four parameters and no output schema, the description covers the essential context: what is searched, what is returned, and when to use it. It does not explain parameter details or explicitly differentiate from search_lua_api, but the core usage is clear. The gaps are minor given the tool's simplicity and the schema's partial coverage.
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 50% (query and path_filter have descriptions; max_results and context_lines have defaults but no descriptions). The description does not explain these parameters, their defaults, or how they interact (e.g., what 'context' refers to). It only hints at context via 'with context' but does not clarify the context_lines parameter. The description fails to compensate for the missing schema descriptions.
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 the exact verb ('Regex search'), the resource ('Lua/JSON source of the base game and all mods'), and the output ('file:line matches with context'). It is specific enough to distinguish from sibling tools like search_lua_api (API search) and read_game_file (single file read). No ambiguity.
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 explicitly gives a use case: 'find how the base game defines/uses something before overriding it in a mod.' This tells the agent when to use it, but it does not name alternatives directly or explain when not to use it (e.g., for API docs vs source). The guidance is clear but lacks explicit exclusions or sibling routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_lua_apiSearch Desynced Lua APIA
Search the official Desynced Lua API reference (modules Action/Debug/Game/Input/Map/Tool/Twitch/UI/View and metatables Component/Entity/Faction/ItemSlot/ModPackage/Register/Widget). Returns matching lines with trailing context (signatures + descriptions).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Function/property name or keyword, e.g. 'SetRegister', 'CreateEntity', 'on_update' | |
| max_results | No | ||
| context_lines | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose the return shape (matching lines plus trailing context of signatures and descriptions), which is useful. However, it does not explicitly state that this is a read-only, non-destructive lookup, nor does it disclose search behavior such as case sensitivity, matching semantics, or the effect of the context_lines and max_results parameters.
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 purpose front-loaded and the scope (modules/metatables) enumerated efficiently. The sentence about return format is necessary context. It is focused with no filler, though it could be slightly more compact given the long module list.
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 search tool, the description covers what is searched (modules and metatables) and what is returned (signatures + descriptions). The three parameters are documented through names and defaults in the schema. The main gap is the absence of contrast with search_game_source and lack of search-behavior detail, which prevents a 5 but the tool remains usable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%; only 'query' carries an example in the schema, while max_results and context_lines have no prose. The description adds nothing about parameters. This gap is partially mitigated by the fact that max_results and context_lines are self-explanatory from their names and defaults, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (search) and resource (official Desynced Lua API reference), enumerates the exact modules and metatables covered, and describes the return format (matching lines with signatures + descriptions). It is clear and specific, though it does not explicitly differentiate itself from the closely named sibling search_game_source, which searches game source rather than API docs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes it clear this is for looking up API reference documentation, which implies usage context. However, it gives no explicit when-to-use or when-not-to-use guidance, and it does not mention the alternative sibling search_game_source or state the condition that would select one over the other. The distinction between API docs and game source is left for the agent to infer.
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. Dates show when Glama detected each change.
9 tool updates
v1.0.0- First observed
game_eval - First observed
game_logs - First observed
game_reload - First observed
game_status - First observed
get_game_logs - First observed
list_mods - First observed
read_game_file - First observed
search_game_source - First observed
search_lua_api
TDQS
Most tools are clearly distinct: game_status, game_reload, and game_eval each target different game actions, while search_lua_api and search_game_source have separate scopes. The only potential confusion is between game_logs (live debugger buffer) and get_game_logs (tail log file), but their descriptions clarify the difference. Overall, boundaries are well-defined with one minor overlap.
The naming pattern is largely verb_noun in snake_case (e.g., search_lua_api, list_mods, read_game_file), but there is a minor inconsistency: game_logs vs get_game_logs both refer to logs but use different prefixes. The game_ prefix for three tools and separate prefixes for others is slightly mixed but still predictable and readable.
With 9 tools, the set is well-scoped for a game modding/debugging server. Each tool serves a concrete function—checking status, reloading, evaluating, searching, reading files, listing mods, and retrieving logs—without unnecessary bloat. This falls comfortably within the ideal 3-15 range.
The tool surface covers the core workflows for mod development and debugging: connecting, inspecting state, executing code, searching reference and source, retrieving logs from two sources, and managing mods. Minor gaps include lack of write/update operations for game files and no direct tool to manage mod installation, but these are not essential for the stated purpose and can be worked around.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
Serves your design system and coding standards to coding agents, so they stop guessing.
Build, validate, deploy — HTTP APIs, cron jobs, webhooks and MCP tools — from your AI client.
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- FlicenseBqualityNot gradedmaintenanceEnables AI assistants to interact with running Roblox game instances by inspecting the game hierarchy, reading client-side scripts, and executing Lua code directly within the Roblox client through a WebSocket bridge.437-
- FlicenseNot gradedqualityDmaintenanceEnables AI-powered modding for Arma Reforger with 50 tools for API search, code generation, project scaffolding, and Workbench control.1-
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to Roblox Studio, enabling them to interact with instance hierarchy, edit Luau scripts, manage properties, and sync files over a local connection.141MIT
- AlicenseAqualityAmaintenanceEnables AI agents to inspect, create, edit, debug, and playtest projects inside the Roblox editor via 29 lean tools, with push-based SSE transport, editor-safe script edits, and batched undoable writes.296135MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/angeldeejay/DesyncedMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server