Skip to main content
Glama

fivem-mcp

npm version license: MIT CI

An MCP (Model Context Protocol) server that lets AI agents — Claude, Qwen, or anything that speaks MCP — build, run and live-test FiveM servers from the same machine.

It is the missing test layer for the "did it actually work in-game?" question: the agent can run real console commands, watch both the server log and the live F8 console of a running FiveM client, wait for specific output, and react — without you touching the keyboard.

agent (Claude / Qwen / …)
   │  MCP over stdio
   ▼
fivem-mcp-server ──► UDP RCON / getinfo ──► FXServer (game port, e.g. 30120)
                   ──► TCP devcon (29200/29300) ──► FiveM Legacy client F8 console
                   ──► tail ─────────────────────► FXServer's redirected stdout log

Status

v0.5 drives the whole loop: server console (RCON), client F8 console (devcon), the game window (launch, focus, screenshot, keyboard/mouse) and an in-game bridge (mcpb) for natives, exports and NUI callbacks — plus ready-made test prompts. Tools answer with structured content, carry MCP annotations, and stop as soon as the client cancels. All of it live-verified against a real FXServer + FiveM Legacy client (see docs/plan.md and scripts/live-*.mjs).

Related MCP server: Universal Computer Control MCP

Where it is published

Channel

Address

npm

fivem-mcp-server — npx -y fivem-mcp-server

MCP Registry

io.github.ziyacivan/fivem-mcp (registry.modelcontextprotocol.io)

Source releases

GitHub Releases, tagged vX.Y.Z

The repository's GitHub Packages sidebar is deliberately empty: the artifact lives on npmjs.com, not GitHub Packages — the latter would force a scoped @ziyacivan/ package name and a second registry for no benefit.

Requirements

  • Node 22+ (Windows, macOS or Linux for the server side; the client devcon works wherever the FiveM client runs — this tool must run on that machine for the client_* tools since devcon binds to localhost by default).

  • A running FXServer you administer (rcon_password set for server_command).

  • The Legacy FiveM client for the client-console tools (Enhanced removed the client devcon ports; see docs/protocol.md).

  • The keyboard/mouse/screenshot tools are Windows-only and run on the machine with the game. On other platforms every tool except those is served normally.

Install

Published on npm — no clone needed. Add it to Claude Code in one line:

claude mcp add fivem -s user \
  -e FIVEM_RCON_PASSWORD=your-rcon-password \
  -e FIVEM_SERVER_LOG=C:\FXServer\my-data\server.log \
  -- npx -y fivem-mcp-server

(-s user = available in every project; drop it for a per-project entry. Verify with claude mcp get fivem — status should read ✓ Connected. Remove with claude mcp remove fivem -s user.)

For a shared project config, put .mcp.json in the repo root and commit it — Claude Code asks to approve it on first open, and env values can be interpolated from your local .env-less shell via ${VAR} expansion:

{
  "mcpServers": {
    "fivem": {
      "command": "npx",
      "args": ["-y", "fivem-mcp-server"],
      "env": {
        "FIVEM_RCON_PASSWORD": "${FIVEM_RCON_PASSWORD}",
        "FIVEM_SERVER_LOG": "${FIVEM_SERVER_LOG}"
      }
    }
  }
}

For Claude Desktop (or any client with JSON config), add to claude_desktop_config.json:

{
  "mcpServers": {
    "fivem": {
      "command": "npx",
      "args": ["-y", "fivem-mcp-server"],
      "env": { "FIVEM_RCON_PASSWORD": "your-rcon-password" }
    }
  }
}

The server is also listed in the MCP Registry as io.github.ziyacivan/fivem-mcp. Building from source (development):

git clone https://github.com/ziyacivan/fivem-mcp
cd fivem-mcp && pnpm install && pnpm build
claude mcp add fivem -- node ./dist/index.js        # points at your working copy

Configuration (environment)

Variable

Default

Meaning

FIVEM_HOST

127.0.0.1

Machine running the FiveM client (devcon host)

FIVEM_EXECUTABLE

%LOCALAPPDATA%\FiveM\FiveM.exe

FiveM.exe for the launch tool

FIVEM_CLIENT_DEVCON_PORT

29200 then 29300

Override the client devcon port

FIVEM_RCON_ADDRESS

FIVEM_HOST:30120

FXServer game port (UDP RCON + getinfo)

FIVEM_RCON_PASSWORD

—

Matches rcon_password in server.cfg; needed by server_command

FIVEM_SERVER_LOG

—

Path to FXServer's redirected stdout; enables server-side read_console / wait_for_console. Not needed by the bridge since v0.5 (results poll in-band) — it is the pre-0.5 fallback transport

FIVEM_MCPB_TOKEN

—

Matches mcpb_token on the server; sent with every bridge request

FIVEM_CONSOLE_CAPACITY

5000

Client console lines kept in the ring buffer

FIVEM_QUIET_MS

400

Consider command output done after this quiet period

FIVEM_COMMAND_TIMEOUT_MS

5000

Default max wait for client_command output

FIVEM_MCP_DEBUG

—

1 traces devcon frames and RCON round-trips on stderr

Tools

Tool

What it does

status

Connection state: RCON, log file, client devcon. Call first.

server_info

getinfo over UDP — hostname, players, max clients, protocol, game build. No credentials needed.

server_command

Any server console command over UDP RCON; returns the captured output.

client_command

Types into the F8 console of a running Legacy client over devcon (nothing steals focus). This is the local console command layer — connect, quit, tooling; RegisterCommand chat commands are a different system (use server_command, which runs with console privileges, or the input/bridge tools). Returns the console lines it printed.

read_console

Recent lines: client = live devcon stream (with afterSeq paging), server = tail of FIVEM_SERVER_LOG. Filter by channel/contains/pattern.

wait_for_console

Block until a line matching a regex appears — your assertion primitive.

list_commands

Every command the client console knows (devcon handshake).

launch

Start FiveM, optionally straight into host:port (default: the configured server).

quit_game

Graceful quit over devcon; force kills the FiveM process tree.

window_status

Game window existence, title, pid, rect, foreground state.

focus_window / restore_focus

Bring the game forward / give focus back to your window. Input tools focus automatically.

screenshot

PNG of the game window (PrintWindow, screen-BitBlt fallback). Downscaled — default 900, optional crop rect. Every shot costs transcript tokens all session: prefer text probes, shoot small.

press_key / hold_key / release_key

Real scan-code input — GTA's DirectInput ignores VK-only injection. Held keys are released if the process dies.

type_text

Literal Unicode events — the channel the F8 console and chat NUI read.

mouse_move / click / scroll

Relative moves drive the camera; absolute coordinates position the cursor for NUI.

wait

Pause between actions (loading screens, walk cycles).

read_client_log

The newest CitizenFX_log_*.log from the FiveM install.

bridge

Invoke the mcpb bridge resource: ping, players, poll, call_export, trigger_event (server half) and ping, position, teleport, freeze, call_native, send_nui, nui_callback (client half). op is validated against the chosen target.

Prompts

Two workflows are shipped as MCP prompts, distilled from the live-verified loops:

  • test_resource(resource, expectations?) — clean restart → console error scan → client-half scan → in-game scenario (keys, screenshot, bridge state) → evidence-backed PASS/FAIL report where anything unverifiable is said so out loud.

  • smoke_check — one fast sweep: connections, which server, error tails on both sides, window + screenshot, persisted client log. OK/WARN/DOWN per line.

The bridge resource (bridge/)

Client-side testing (natives, NUI callbacks, position) is outside what devcon and RCON can reach — the small companion resource closes that gap and ships in this repo.

# on the dev server
cp -r bridge/ <server-data>/resources/mcpb     # or a junction
# server.cfg:
#   ensure mcpb
#   setr mcpb_enabled true
#   setr mcpb_token <a-random-token>
#   setr mcpb_event_allowlist  my:event,other:event      # trigger_event may fire only these
#   setr mcpb_export_allowlist myres:*,other:method       # optional; empty = any export
#   setr mcpb_native_allowlist SetEntityHealth,GetGameTimer   # optional; empty = any native
#   setr mcpb_client_timeout_ms 8000                      # a silent client fails fast
#   setr mcpb_verbose true                                # echo requests to both consoles

and point this server at it with FIVEM_MCPB_TOKEN. Then:

bridge { target: "client", src: 1, op: "position" }
bridge { target: "server", op: "call_export", args: "{\"resource\":\"myres\",\"method\":\"money\",\"args\":[1]}" }

Client results come back through an in-band queue polled over RCON (~100 ms granularity since v0.5 — no log file needed; pre-0.5 resources still fall back to the log tail).

Dev servers only. mcpb_enabled defaults to false, the command is accepted only from the console/RCON (never from a player), and the token is checked when set — but call_native is exactly as safe as the console it runs behind. Keep RCON and this bridge off anything you care about; see SECURITY.md. The full wire contract: docs/protocol.md §4.

Typical loop (what an agent does)

  1. server_command: "ensure my-resource"

  2. wait_for_console: target=server, pattern="Started resource my-resource|Error"

  3. client_command: "connect localhost:30120" drives the join itself, then read_console: target=client catches client-side console output that never reaches the server log.

Security notes — read before exposing anything

  • The client devcon socket has no authentication. Anyone who can reach it can run local console commands in that game client (connect, quit, ...). FiveM binds it to 127.0.0.1 unless the client is started with -devcon (then 0.0.0.0); this tool assumes the loopback default and never needs more. Do not tunnel it.

  • RCON is the server's admin root. Keep rcon_password strong; FIVEM_RCON_PASSWORD lives in your MCP config — protect that file the same way.

  • FXServer itself has no server-side devcon socket on current builds (verified 2026-09-02), which is why the server half is RCON + log tail.

  • Treat server_command as giving the agent root on your box the moment it can exec anything; run it only against development servers.

Development

pnpm test        # vitest: fake devcon/rcon servers, byte-level SendInput/PNG checks, bridge contract, docs drift
pnpm typecheck
pnpm check       # biome
pnpm build       # -> dist/
pnpm run ci      # all of the above (plain `pnpm ci` is a pnpm builtin and errors)

Releasing: move the Unreleased changelog notes under the new version heading, then pnpm version <patch|minor|major> (bumps and syncs server.json + the bridge manifest, and tags), npm publish from your machine (prepublishOnly runs the full gate), and git push --follow-tags. The Release workflow then re-runs the gate, creates the GitHub Release from CHANGELOG.md, and registers the version with the MCP Registry. See CONTRIBUTING.md.

Live verification against a real server/game: pnpm live:probe, live:e2e, live:m2, live:m3.

The wire protocol (DevCon frames, RCON/getinfo OOB datagrams, the Cfx string hash) is documented byte-by-byte in docs/protocol.md, derived from the open-source CitizenFX server, citizenfx/fivem@03dcc562. Live-verified: RCON reply format, getinfo response and the >8-byte challenge drop were confirmed against a real FXServer on 2026-09-02.

License

MIT. The FiveM/CitizenFX name is a trademark of Cfx.re; this project is not affiliated with or endorsed by Cfx.re.

Available Tools

23 tools
bridgeInvoke a bridge operation (mcpb resource)A
Destructive

Runs an operation through the mcpb bridge resource — the half neither devcon nor RCON can reach. Server ops (target=server): ping, players, poll, call_export, trigger_event, wait; call_export {resource, method, args}, trigger_event {event, args, toClient?, player?} (event names must be in mcpb_event_allowlist). Client ops (target=client, needs src): ping, position, teleport, freeze, call_native, send_nui, nui_callback; teleport {x,y,z,heading?}, freeze {freeze}, call_native {name, args}, send_nui {resource, message, event?}, nui_callback {resource, endpoint, payload}. Client results are collected in-band via the bridge's poll queue — no FIVEM_SERVER_LOG needed. The bridge must be installed, started and enabled (mcpb_enabled true).

ParametersJSON Schema
NameRequiredDescriptionDefault
opYesOperation name (see description for which target)
srcNoPlayer server id (required for target=client)
argsNoOperation arguments as a JSON object string, e.g. {"resource":"chat"}
targetYesWhere the op runs — server console or game client
timeoutMsNoClient-op result wait (default 8000)

Output Schema

ParametersJSON Schema
NameRequiredDescription
opYes
dataYes
targetYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false, and the description adds genuinely new behavioral context: the prerequisite enablement state, the mcpb_event_allowlist constraint on trigger_event, and the in-band poll-queue result mechanism. It doesn't flag which specific ops are the destructive ones (teleport/freeze/send_nui), leaving some ambiguity for a destructive-annotated tool.

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?

Front-loads the core purpose, then the target/op matrix, then the prerequisite — a sensible order with no filler sentences. It is dense and cramped into long clauses, but every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/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 explains how client results arrive (poll queue, no FIVEM_SERVER_LOG). Combined with target/op routing, src requirement, timeout default and prerequisites, an agent has everything needed to invoke it correctly.

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 coverage is 100%, so baseline is 3, but the description goes well beyond the schema by decomposing the opaque 'args' JSON string into per-op shapes ({resource, method, args}, {event, args, toClient?, player?}, teleport {x,y,z,heading?}, send_nui {resource, message, event?}). That is real added meaning the schema cannot convey; it only falls short of 5 because a few op argument sets are listed without field semantics.

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 concrete verb and resource ('Runs an operation through the mcpb bridge resource') and immediately differentiates itself from sibling command tools by naming the boundary ('the half neither devcon nor RCON can reach'). The op inventory further pins down exactly what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for selection: server ops vs client ops, the rule that client ops 'needs src', and the prerequisite that the bridge must be installed, started and enabled. It stops short of explicitly naming when to prefer a sibling (e.g., server_command/client_command) over this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clickMouse clickA

Click at the current cursor position (position it with mouse_move absolute first for NUI).

ParametersJSON Schema
NameRequiredDescriptionDefault
buttonNodefault left
doubleNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-readonly, non-destructive, non-idempotent action, so the safety profile is covered. The description's one useful addition is that the click occurs at the existing cursor position rather than at a supplied coordinate. It does not disclose latency, focus requirements, or how the click interacts with the target window.

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?

One sentence, action first, prerequisite in the parenthetical. Every clause carries information and there is no filler.

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 prerequisite is covered and annotations carry the safety profile, with no output schema needed for a fire-and-forget input action. Gaps remain around what 'double' does and whether the click targets the focused window, which an agent needs for correct invocation.

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 only 50%: 'button' has an enum and default, but 'double' is a bare boolean with no explanation anywhere. The description mentions neither parameter, so it adds nothing to compensate for the undocumented half.

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 (click) and the target (current cursor position), which clearly separates it from mouse_move, the sibling it explicitly names. The scope is unambiguous, though nothing states that this is a synthetic input event rather than a UI query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit prerequisite: position with 'mouse_move absolute' first, and flags the NUI case where this matters. It stops short of saying when not to use click (e.g. vs. press_key or hold_key), so it is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

client_commandRun a FiveM client (F8) console commandA
Destructive

Type a LOCAL console command into the running Legacy client's F8 console over devcon — no screen focus needed, nothing is typed into the game window. This is the process's console context (connect, quit, tooling commands), NOT the chat command layer: commands registered with RegisterCommand are chat commands and live in a different system (run them through server_command, which has console privileges, or drive the chat UI with the M2 input tools). Waits until output goes quiet and returns the lines the client console printed.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYesCommand text, e.g. 'connect localhost:30120'
timeoutMsNoMax ms to wait for output (default 5000)
waitForOutputNoSet false to fire without waiting (long-loading maps, blocking commands)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, non-idempotent and non-readOnly, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: it runs over devcon with no screen focus and nothing typed into the game window, and it waits until output goes quiet before returning printed lines. It stops short of detailing the concrete destructive effect or auth requirements.

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?

The core action is front-loaded in the first sentence, and the behavioral and differentiation details follow in an ordered way. The chat-vs-console parenthetical is long but earns its place by preventing a common mis-selection; slightly verbose overall.

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?

With no output schema, the description correctly discloses the return value (the lines the client console printed) and the waiting behavior, and it fully covers the guidance needed to invoke it correctly. The main gap is concrete detail on the destructive consequences implied by destructiveHint=true.

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 100%, so command, timeoutMs and waitForOutput are already documented in the schema; baseline 3 applies. The description adds only the general note that no screen focus is needed, not parameter-level syntax or format detail.

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 and resource: type a LOCAL F8 console command into the running client over devcon, explicitly scoped to the process console context, not chat. It clearly separates itself from the chat command layer and names sibling server_command as the alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this (process console commands like connect, quit, tooling) and when not to (commands registered with RegisterCommand are chat commands), and routes the agent to the correct alternatives (server_command or M2 input tools). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

focus_windowBring the game to the foregroundA

Restores/minimizes-out if needed and steals foreground (remembering the previous window for restore_focus). Every input/screenshot tool calls this automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag it as a non-read-only, non-idempotent mutation of window state, so the bar is lower; the description adds genuinely useful behavior beyond that by disclosing the foreground steal, the automatic restore/minimize-out step, and that the prior window is remembered for restore_focus. It does not say what happens if the game is not running or if the steal fails.

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?

Two short sentences, front-loaded with the core action and followed by the practical routing note. Every clause earns its place; nothing is redundant with the title or schema.

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 zero-param, no-output-schema tool this covers the essential behavior and the relationship to restore_focus and the input/screenshot family. Minor gaps remain around failure modes (game not launched, no window to focus), but nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and the schema is empty, so there is no parameter semantics to document; baseline 4 applies. The description correctly adds no spurious parameter discussion.

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+resource ('steals foreground') with concrete mechanics (restores/minimizes-out if needed), which cleanly separates it from siblings like restore_focus and window_status. The title reinforces rather than restates, and the parenthetical naming of restore_focus tells the agent how the two tools relate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Every input/screenshot tool calls this automatically' is a strong routing signal telling the agent it usually does not need to invoke this manually, and it names restore_focus as the counterpart tool. It stops short of an explicit when/when-not rule (e.g. only call if window_status shows it is not foreground), so it is clear context rather than full exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hold_keyHold a key downA

Key stays pressed until release_key. Use for movement (W) and camera. Key name: W A S D E F Q space enter esc tab shift ctrl alt arrows up down left right, f1-f12, letters/digits. Held keys are released if this process exits.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false and idempotent=false, but the description adds real lifecycle behavior not in the schema: the key remains held until released, and held keys are auto-released if the process exits. That process-exit caveat is exactly the kind of context annotations can't convey.

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?

Front-loads the critical semantics ('stays pressed until release_key') before the long key enumeration. The key list is lengthy but earns its place given 0% schema coverage; minor redundancy with 'arrows up down left right'.

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 one-parameter, no-output-schema tool this covers the essentials: hold semantics, the release counterpart, valid key names, and process-exit cleanup. Only gap is behavior on repeated calls with the same key, which is a minor omission.

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 coverage is 0% for the single 'key' parameter, so the description carries the full burden — and it does, enumerating accepted key names (W/A/S/D, space, enter, esc, tab, modifiers, arrows, f1-f12, letters/digits). The 'letters/digits' bucket is vague on case/format, so it falls just short of fully specifying syntax.

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 action ('key stays pressed until release_key') and names the complementary tool, which cleanly distinguishes it from the sibling press_key (a momentary tap). An agent can tell immediately that this is the sustained-input tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete usage context ('use for movement (W) and camera') and points to release_key as the terminating call. It stops short of an explicit when-not (e.g., 'for a single tap use press_key instead'), so the routing decision against the sibling is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

launchStart the FiveM clientA

Launch FiveM, optionally straight into a server via the fivem://connect link. Default target is the configured game port. Returns immediately — watch window_status/client_command to see when the game is up.

ParametersJSON Schema
NameRequiredDescriptionDefault
connectToNohost:port to connect to (default: the configured rcon host:port)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, non-idempotent, non-destructive), so the description only needs to add what they cannot. It does so by disclosing the non-blocking return ('Returns immediately') and pointing at the status tools that reveal when the game is actually up — genuine behavioral context. It still omits what happens if a client is already running, which matters given idempotentHint=false.

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?

Three compact sentences, front-loaded with the action and the optional variant before operational notes. The 'Default target is the configured game port' sentence largely duplicates the schema default, which is the only minor redundancy.

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 one-optional-param mutation tool with no output schema and solid annotation coverage, the description supplies the key missing piece — that it is asynchronous and how to observe readiness. The only gap is the undefined behavior when the game is already launched.

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 coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by tying connectTo to the 'fivem://connect link' concept and restating the default target. That is a modest but real semantic addition over the structured field.

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?

The description names a specific verb and resource ('Launch FiveM'), plus the optional scope (straight into a server via the fivem://connect link). No sibling tool launches the client, so the purpose is unambiguously separable from quit_game, window_status, and client_command.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for use and routes the agent to the right follow-up tools ('watch window_status/client_command to see when the game is up'), which is exactly the sequencing an agent needs. There is no explicit when-not guidance (e.g. re-launching while already running), but no real alternative tool exists, so 4 is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_commandsList client console commandsA
Read-onlyIdempotent

The devcon handshake streams every command the client console knows (CVAR frames). For server commands, run 'help' through server_command instead. Filter with a case-insensitive substring.

ParametersJSON Schema
NameRequiredDescriptionDefault
containsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
commandsYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description adds the data-source mechanism (handshake streams CVAR frames), which is useful context, but says nothing about volume, rate limits, or auth. With annotations carrying the safety burden, a 3 fits.

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?

Three short sentences, front-loaded with what gets returned, then the routing alternative, then the filtering behavior. No filler, and each sentence carries information. Slightly dense with domain jargon.

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 no explanation. For a read-only listing tool, the description covers the source, the sibling alternative, and the filter behavior. It is complete enough for correct invocation without being exhaustive.

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. It does: 'Filter with a case-insensitive substring' explains the semantics of the 'contains' param, including case-insensitivity, which the bare schema does not convey.

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 the tool streams every command the client console knows, with the parenthetical '(CVAR frames)' clarifying the return. It distinguishes the client console from server commands and routes the latter to server_command, but the core action is conveyed through jargon ('devcon handshake') rather than a clean verb+resource statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names an explicit alternative and the condition for using it: 'For server commands, run help through server_command instead.' That is a clear routing rule. It does not, however, address the other nearby siblings like client_command or read_console, so guidance is present but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mouse_moveMove the mouseA

Relative dx/dy drives the in-game camera; absolute x/y (screen pixels) positions the real cursor for NUI elements.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
dxNo
dyNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnly=false, idempotent=false, destructive=false, openWorld=false, which together mark this as a non-idempotent state-changing input action. The description adds the meaningful behavioral distinction that the same tool drives two different targets depending on which params are used. It does not say whether movement is instantaneous, how repeated calls accumulate, or what happens with no parameters (0 required), leaving gaps beyond the annotations.

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?

A single dense sentence with zero filler; the relative-mode semantics are front-loaded and the absolute-mode behavior follows. Every clause earns its place, and no words are wasted on restating the name or title.

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?

For a four-parameter, zero-required tool with no output schema and thin annotations, the description covers the core mode semantics but leaves the agent without guidance on precedence between x/y and dx/dy, units, or the effect of calling with no parameters. Adequate but not complete.

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 coverage is 0% and none of the four integer parameters carry descriptions, so the description carries the full semantic burden—and it does so well by mapping dx/dy to relative camera movement and x/y to absolute screen pixels. It omits units for dx/dy (degrees vs pixels), accepted defaults, and precedence when both pairs are provided.

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 concrete verb and resource (mouse movement) and splits it into two distinct modes: relative dx/dy for the in-game camera and absolute x/y for NUI cursors. That dual-mode semantics is more than the title 'Move the mouse' conveys. It stops short of naming which siblings (click, scroll) it should be paired with, so it is clear but not fully differentiated.

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 implies when each mode applies—relative for camera control, absolute for NUI elements—which is genuine routing guidance for two of the four parameters. However, it never states when to choose this tool over click/scroll or how the two modes interact if both are supplied, so usage is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

press_keyTap a keyA

Press and release a key (scan codes — what GTA's DirectInput/raw input reads). Key name: W A S D E F Q space enter esc tab shift ctrl alt arrows up down left right, f1-f12, letters/digits.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
holdMsNoHold duration (default 20)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-readOnly, non-destructive, non-idempotent behavior. The description adds genuine context by explaining these are scan codes read by DirectInput/raw input, which justifies why it targets games, but it says nothing about timing, default hold behavior, or focus requirements.

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?

Front-loads the action, then the technical rationale, then the accepted values. Slightly list-heavy but every element earns its place; 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?

For a two-parameter input tool with no output schema, the description covers what it does, why scan codes matter, and valid inputs. It omits focus/window prerequisites and the holdMs default, though the latter is in the schema.

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 coverage is only 50%, and the undocumented 'key' parameter is the required one; the description compensates by enumerating accepted key names (letters, digits, f1-f12, named keys). holdMs is covered by the schema, so the remaining gap is minor.

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 ('press and release a key') and the 'press and release' framing implicitly distinguishes it from the sibling tools hold_key and release_key. It stops short of naming those siblings explicitly, so differentiation requires inference.

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 tap semantics contrast with hold_key/release_key, but the description never states when to choose this over them or any prerequisites. The key-name list helps invocation but not tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quit_gameClose the FiveM clientA
Destructive

Graceful path: prints 'quit' to the client console over devcon and waits for the game to close (nothing is typed into the window). force: true kills the FiveM process tree instead — use it only when the game is wedged.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say destructiveHint=true; the description adds how each path works — the graceful path prints 'quit' over devcon and waits for closure without typing into the window, while force kills the process tree. This mechanism-level detail goes well beyond the structured hints.

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?

Two dense sentences, graceful path front-loaded before the force branch. Every clause earns its place with no redundancy.

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 one-param, no-output-schema tool, the description covers the critical decision (graceful vs. force) and the mechanics. It omits edge cases such as what happens if the graceful path times out or fails, which would matter for an agent deciding whether to escalate to force.

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 coverage is 0% and the single 'force' parameter has no schema description, so the description carries the burden — and it does, explaining that force:true kills the process tree and that the default is a graceful quit. Full parameter meaning is conveyed, though without naming acceptable values beyond boolean semantics.

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+resource ('quits the FiveM client') and immediately distinguishes the two shutdown paths (graceful console quit vs. force kill). No sibling tool does this, and the description makes that clear without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use the force path ('only when the game is wedged') and implies the default graceful path otherwise. This is actionable when/when-not guidance rather than mere context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_client_logRead the FiveM client log fileA
Read-onlyIdempotent

Tail the newest CitizenFX_log_*.log under the FiveM install — the same stream as read_console(client) but persisted across sessions, without the channel tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNodefault 100
patternNo
containsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
fileYes
linesYes
matchedYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered; the description adds real behavioral detail on top — it auto-selects the newest log file and returns lines without channel tags, unlike read_console. It does not describe how the pattern/contains filters affect the stream, which keeps it from a 5.

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?

A single front-loaded sentence naming the action, the target file, and the sibling contrast. Every clause earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

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 values need no explanation, and the file-selection behavior is covered. However, with 0 required params and two undocumented filter params, an agent lacks enough to use the filtering capability correctly.

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 coverage is only 33% and the description says nothing about any of the three parameters. Pattern (regex vs glob?) and contains (substring, case sensitivity?) are left entirely undocumented in both places, so the description fails to compensate for the coverage 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?

Specific verb (tail) plus resource (newest CitizenFX_log_*.log under the FiveM install) and an explicit contrast with the sibling read_console. An agent can pick between the two 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause 'the same stream as read_console(client) but persisted across sessions' tells the agent the condition that selects this tool over its sibling. It stops short of an explicit when-not rule, but the routing context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_consoleRead recent console outputA
Read-onlyIdempotent

Return recent console lines without running anything. For 'client', reads the devcon line buffer (live from the moment this server first connected; supports afterSeq paging). For 'server', tails FIVEM_SERVER_LOG (FXServer's redirected stdout) — the last 512 KB, filtered; afterSeq is not supported there.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax lines (default 100)
targetYes'server' = the FXServer console (UDP RCON; needs rcon_password). 'client' = the F8 console of a running FiveM Legacy client (devcon 29200/29300) — LOCAL console commands only (connect, quit, tooling); RegisterCommand chat commands are not console commands.
channelNoExact channel name, e.g. 'breeze-chat' or 'script:breeze-chat'
patternNoJS regex matched against '<channel>: <message>'
afterSeqNoclient only: lines after this sequence number (response carries nextSeq)
containsNoCase-insensitive substring of the message

Output Schema

ParametersJSON Schema
NameRequiredDescription
linesYes
matchedYes
nextSeqYesPass as afterSeq next time (client); -1 for server
clientErrorNoWhy the client console is not live (lines may be stale)

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, but the description adds genuinely useful behavior the annotations cannot convey: the client buffer starts at first server connection, server output is a filtered tail of the last 512 KB, and afterSeq paging only works on the client. These data-freshness and paging constraints are exactly the non-obvious traits an agent needs.

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 sentences, front-loaded with the core guarantee ('without running anything') before splitting into the two target cases. Dense but every clause (buffer origin, 512 KB tail, filtering, afterSeq support) carries behavioral weight rather than padding.

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?

With an output schema present, return formatting needn't be explained, and all six params are schema-documented. The description covers the hard part — per-target data sources and paging limits — though it omits the client-vs-server routing relative to the read_client_log sibling.

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 100%, so the schema already documents all six parameters including the 'client only' note on afterSeq. The description reinforces which parameters apply to which target but adds little syntax or format detail beyond that; baseline 3 is appropriate.

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 ('Return recent console lines') and then breaks the behavior down per 'client' and 'server' target, so an agent can tell exactly which backing buffer is read. It does not, however, distinguish itself from the sibling read_client_log, which plausibly overlaps, leaving target selection between the two 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'without running anything' implicitly contrasts this with the command-execution siblings (server_command, client_command), and the requirement of rcon_password for 'server' appears in the schema. But there is no explicit when-to-use/when-not guidance and no named alternative such as read_client_log or wait_for_console.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

release_keyRelease held key(s)A

Release one held key, or all of them with key='all'.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation profile is covered structurally. The description usefully discloses the 'all' sentinel behavior, which the schema does not, but says nothing about what happens if the key is not currently held or about failure behavior.

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?

A single sentence, zero filler, with the scope constraint ('all') front-loaded and easy to scan. Nothing extraneous.

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?

For a one-parameter mutation tool with annotations covering safety, the description is close to adequate but omits error/edge behavior (e.g. releasing a key that is not held) and does not hint at the result. Not deficient, but not fully complete.

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% for the single 'key' parameter, so the description must carry the semantics. It does add a meaningful sentinel value (key='all') that the bare string schema lacks, but leaves the format for individual key names unspecified.

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 (release) and resource (held key) plus the 'all' scope, so the action is unambiguous. It does not explicitly contrast itself with the sibling hold_key/press_key, so sibling differentiation is left 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'release one held key' implies this is the inverse of hold_key, and the key='all' note conveys a usage option. However, there is no explicit when-to-use or when-not-to-use guidance relative to the alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_focusGive focus back to the previous windowA

Returns foreground to whatever window was focused before this tool focused the game.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the agent knows this mutates foreground state. The description adds the stateful dependency on a previously focused window, but does not say what happens if there was no prior window, if the prior window has closed, or whether the call reports success.

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?

A single front-loaded sentence with no filler. The trailing clause 'before this tool focused the game' is slightly muddled since focus_window, not this tool, performs the focusing, but the meaning survives.

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 no-parameter, no-output-schema tool whose annotations carry the safety profile, the description covers the core contract adequately. The main omission is edge-case behavior when no previous window exists, which is minor given the tool's simplicity.

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?

Zero parameters and no schema properties, so there is nothing for the description to disambiguate. Baseline 4 applies; the description correctly avoids inventing parameters.

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 (returns/restores) and the exact target (the window focused before the game was focused), which is a precise and unusual resource. This implicitly distinguishes it from the sibling focus_window, since the agent can tell this is the undo counterpart rather than a fresh focus request.

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 semantics — an agent infers this should be called after focus_window to return the user to their prior application. No explicit when-to-use, when-not-to-use, or named alternative (focus_window is not mentioned by name).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

screenshotCapture the game windowA

PNG of the FiveM window (PrintWindow with PW_RENDERFULLCONTENT; falls back to a screen BitBlt of the window rect when the swapchain returns black, which means whatever covers the window is also captured — the game is focused first). Downscaled so vision models can read it cheaply. COST WARNING: every screenshot stays in the transcript and is re-sent on every later turn - many shots multiply session latency. Prefer text probes (read_console, wait_for_console, bridge ops); when pixels are the evidence, keep maxSide small (640 suffices for layout checks) and crop to the panel of interest.

ParametersJSON Schema
NameRequiredDescriptionDefault
cropNoWindow-pixel rect, as an object or JSON string, e.g. {"x":300,"y":200,"width":400,"height":300}
maxSideNoDownscale longest side (default 900)

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond annotations: it discloses the capture mechanism (PrintWindow with PW_RENDERFULLCONTENT), the black-swapchain fallback to BitBlt (and that occluding windows are then captured), and — critically — that the game is focused first, which explains the readOnlyHint=false annotation. The transcript-cost warning (shots are re-sent every later turn, multiplying latency) is a behavioral trait no structured field conveys.

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?

Every sentence earns its place — mechanism, fallback, cost, alternatives, and parameter advice are all non-redundant. It is dense with parentheticals and the cost warning arguably belongs before the mechanism detail, but there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still specifies the return format (PNG), the resize behavior, and the failure/fallback path, plus cost and alternative-tool context. Nothing an agent needs to invoke this correctly — or to decide against it — is missing.

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 coverage is 100%, so baseline is 3; the description adds operational meaning by tying maxSide to cost ('keep maxSide small (640 suffices for layout checks)') and by advising crop to the panel of interest, which the schema's bare types don't imply. It doesn't restate ranges or defaults, but the added usage-level semantics lift it above baseline.

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+resource (capture PNG of the FiveM window) and immediately names the mechanism and scope, distinguishing it from text-oriented siblings like read_console and wait_for_console. An agent can tell what this returns and how it differs from the surrounding tools without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to prefer text probes (read_console, wait_for_console, bridge ops) and names the condition that justifies this tool: 'when pixels are the evidence'. It further routes usage with 'keep maxSide small (640 suffices for layout checks) and crop to the panel of interest', which is actionable when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scrollMouse wheelA

Scroll the wheel (positive = up). NUI lists respond to it.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the bar is lower. The description usefully adds the direction convention and that NUI lists are the responsive target, but says nothing about focus requirements, rate limits, or repeat behavior.

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?

Two short sentences with the direction convention front-loaded and zero 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?

For a simple one-parameter input tool with annotations covering safety and no output schema, the definition covers direction and target context adequately. Remaining gaps (focus/prerequisite conditions) are minor.

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 coverage is 0% and the single 'amount' parameter only exposes a -50..50 range with no description. The description supplies the crucial missing semantics ('positive = up'), which is exactly what the schema omits, though it doesn't state units or step granularity.

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 ('Scroll') and resource ('the wheel'), and adds sign semantics ('positive = up'). It is distinguishable from siblings like mouse_move and click, though it doesn't explicitly contrast with them.

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?

The clause 'NUI lists respond to it' implies a usage context but gives no when-to-use vs alternatives guidance, no prerequisite such as needing an open NUI or focused window, and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

server_commandRun an FXServer console commandA
Destructive

Execute a command on the server console over UDP RCON (any command the console accepts: ensure/stop/restart, convars, registered commands). The reply carries the command's captured console output. Needs rcon_password on the server and FIVEM_RCON_PASSWORD here; rate-limited server-side (~5 burst).

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYesCommand text without a leading slash, e.g. 'restart breeze-chat'

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructive/non-readonly, and the description adds substantial context beyond them: the UDP RCON transport, the two required credentials (rcon_password on the server plus FIVEM_RCON_PASSWORD locally), and a server-side rate limit (~5 burst). These are exactly the operational facts an agent needs before firing a destructive command.

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?

Three tight sentences, front-loaded with the verb and transport, then reply semantics, then prerequisites. No filler, though the parenthetical command examples could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description explains that the reply carries the command's captured console output, and it covers auth, transport, and rate limiting. Nothing essential for correct invocation is missing.

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 100% and the schema already documents the single command parameter, including the no-leading-slash rule. The description adds only the category examples of valid commands, so baseline 3 applies.

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 (Execute) and resource (command on the server console) and scopes it via the transport (UDP RCON) plus examples of what the console accepts. It clearly contrasts with the sibling client_command, which acts on the client rather than the server.

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?

The description implies usage by enumerating command categories (ensure/stop/restart, convars, registered commands), but it never states when to prefer this over siblings like client_command, list_commands, or read_console. No explicit when-not guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

server_infoQuery server identity (no credentials)A
Read-onlyIdempotent

Ask the server's getinfo out-of-band endpoint: hostname, players online, max clients, protocol, game build. Works without rcon_password; use it to confirm which server you are pointed at.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent safety, so credit goes to what the description adds: it discloses that this uses an out-of-band endpoint and requires no rcon_password, which is genuinely useful auth context. It does not mention latency, rate limits, or failure behavior, keeping it below a 5.

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?

Two tightly written sentences with no filler. The returned fields are front-loaded and the usage/credential note follows immediately, so nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/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 need not explain return formatting, and it still conveniently previews the fields. For a simple, no-arg, read-only probe, everything an agent needs to call it correctly is present.

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?

The tool takes zero parameters, so per the baseline this scores 4; the description correctly adds no parameter syntax that would be redundant. There is nothing more needed for a no-arg call.

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?

The description names a specific action (query the server's getinfo out-of-band endpoint) and enumerates exactly what it returns: hostname, players online, max clients, protocol, game build. It also implicitly separates this credential-free identity probe from the rcon-based siblings like server_command and status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear use case ('use it to confirm which server you are pointed at') and the key selection condition ('works without rcon_password'), which routes the agent here rather than to credential-requiring tools. It stops short of an explicit when-not or naming the alternative tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statusConnection statusA
Read-onlyIdempotent

Report RCON configuration for the server, the devcon connection to the FiveM client console, and the server log-file tailer. Call this first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostYes
clientYes
serverYes
clientDevconPortsYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety and repeatability profile is fully covered by structured data. The description adds real value by enumerating the three subsystems whose connection state is reported, but it says nothing about failure/degraded states or what a disconnected result looks like.

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?

Two short sentences: the first enumerates scope, the second is the usage directive. Nothing is redundant and the scope statement is front-loaded.

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?

With an output schema present, return values need not be explained, and the description gives the agent enough to know what is being checked and that it should run this first. It is a near-complete diagnostic preamble, missing only guidance on interpreting a failed connection.

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?

The tool takes zero parameters, so the baseline is 4. The description correctly introduces no parameter semantics to confuse the agent, and the schema is trivially complete.

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?

Names a specific verb ("Report") and three concrete resources it inspects: RCON configuration, the devcon connection to the FiveM client console, and the server log-file tailer. That is far more specific than the bare name/title "status / Connection status", though it does not explicitly differentiate itself from sibling diagnostics like server_info or read_console.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Call this first" is an explicit, actionable ordering directive that tells the agent when to reach for this tool relative to the rest of the toolset. There is no when-not guidance or named alternative, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

type_textType literal textA

Sends Unicode key events — the F8 console and chat/NUI inputs read these normally. Open the target input first (e.g. client_command to focus, or a chat key like T). Does not press Enter.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the generic safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false). The description adds real behavioral context beyond that: the input goes out as Unicode key events, it is consumed by F8 console and chat/NUI inputs, a focused target input is required first, and it deliberately omits the Enter keystroke. What it does not cover is failure behavior when no input is focused or whether repeated calls append.

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?

Two dense sentences with no filler; the mechanism and its consumer surfaces come first, then the required precondition, then the boundary. Every clause carries information an agent needs.

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?

There is no output schema, so return values are the description's responsibility and they are left unaddressed (success/failure signal, whether text is echoed). For a one-parameter input-injection tool the prerequisite and effect coverage is otherwise strong, so the gap is narrow rather than structural.

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?

The single 'text' parameter is completely undocumented in the schema (0% coverage, bare string type), so the description carries the burden. It does add meaning — the value is typed literally as Unicode key events, not interpreted as a key name or macro — but it stops short of spelling out constraints such as embedded newlines or special-character handling.

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 and mechanism — 'Sends Unicode key events' — and names the exact surfaces that consume them (F8 console, chat/NUI inputs). This cleanly separates it from the sibling key tools (press_key, hold_key, release_key) without the reader needing to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit precondition ('Open the target input first') and names concrete ways to satisfy it (client_command to focus, or a chat key like T). The closing 'Does not press Enter' is a useful boundary that implies press_key for submission, but the alternative is not stated outright, so it falls just short of fully explicit when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

waitPauseA
Read-onlyIdempotent

Sleep between actions — loading screens, walk cycles, held-key sequences.

ParametersJSON Schema
NameRequiredDescriptionDefault
msYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnly, idempotent, non-destructive, closed-world, which already communicate safety. The description adds that this is meant to 'sleep between actions' with specific scenarios, providing useful context about when the tool is appropriate, though it doesn't describe maximum duration, blocking behavior, or whether it returns anything.

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?

The description is a single, efficient sentence that front-loads the core action ('Sleep between actions') followed by illustrative examples. No wasted words, though the em-dash style is compact.

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?

Given the tool's simplicity (one parameter, no output schema), the description is adequate but doesn't mention the maximum wait time or that it blocks execution. An agent might need to know these details to avoid unexpected delays. However, for a basic wait tool, the essentials are covered.

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%, so the schema only shows that 'ms' is a required integer between 0 and 120000. The description says 'Sleep' but doesn't clarify that 'ms' is milliseconds or the max limit. However, the parameter name 'ms' is self-explanatory and the schema provides bounds; the description adds minimal value.

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?

Titled 'Pause' and described as 'Sleep between actions', the tool clearly performs a delay. The examples ('loading screens, walk cycles, held-key sequences') clarify its use over generic sleep, and it is distinguishable from siblings like wait_for_console, but the description doesn't explicitly name them.

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 examples ('between actions – loading screens...'), which suggest when to insert a pause. However, there's no explicit when-to-use vs. wait_for_console or other alternatives, leaving some ambiguity for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wait_for_consoleWait for a console line to appearA
Read-onlyIdempotent

Block until a line matching a regex appears. 'client' watches the live devcon stream; 'server' polls FIVEM_SERVER_LOG for newly written lines (only lines appended after the call count). Use after a fire-and-forget command, to watch for a resource's startup banner, an error, or a scripted RESULT: line.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes'server' = the FXServer console (UDP RCON; needs rcon_password). 'client' = the F8 console of a running FiveM Legacy client (devcon 29200/29300) — LOCAL console commands only (connect, quit, tooling); RegisterCommand chat commands are not console commands.
patternYesJS regex, e.g. 'Started resource breeze-chat'
afterSeqNoclient only: ignore lines up to this sequence number
timeoutMsNoDefault 10000

Output Schema

ParametersJSON Schema
NameRequiredDescription
seqYes
channelYes
messageYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely useful behavior: the call blocks, 'client' watches a live stream while 'server' polls FIVEM_SERVER_LOG, and only lines appended after the call are considered. It does not describe what a timeout yields, which is the main remaining gap for a blocking tool.

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 sentences, front-loaded with the core action, then the target mechanics, then the usage trigger. 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?

With an output schema present, return values need not be explained, and the description covers the blocking model and target behavior. The only omission is timeout/partial-result behavior, which matters for a tool that blocks up to timeoutMs.

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 coverage is 100%, so the baseline is 3, but the description adds meaning beyond it: the stream-vs-poll distinction for 'target' and the 'only lines appended after the call count' semantics that govern afterSeq and the freshness of matches.

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 precise verb+resource+mechanism: 'Block until a line matching a regex appears.' It also distinguishes itself from read-only siblings (read_console, wait) by describing the two observation targets and the streaming-vs-polling model, so an agent can tell what this tool does without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to reach for it: 'Use after a fire-and-forget command, to watch for a resource's startup banner, an error, or a scripted RESULT: line.' That is concrete triggering context, though it never names a competing sibling (e.g., read_console) or says when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

window_statusGame window stateA
Read-onlyIdempotent

Whether the FiveM game window exists, its title/pid, on-screen rect, and whether it is the foreground window. Input/screenshot tools focus it automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
pidNo
rectNo
foundYes
titleNo
focusedYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent and non-destructive, so safety is covered. The description adds genuine behavioral context beyond them: it lists the state fields returned (existence, title/pid, rect, foreground) and discloses the non-obvious side-effect-free property that input/screenshot tools handle focusing on their own.

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?

Two sentences, no filler, and the core answer to 'what is this?' is front-loaded before the useful focusing caveat.

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 need not explain return values, and annotations cover the safety profile. The description is complete enough for an agent to call it correctly, with only explicit sibling routing missing.

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?

The tool takes zero parameters, so there is nothing to document in the description; the baseline for a parameterless tool is 4.

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 resource (the FiveM game window) and enumerates exactly what it reports: existence, title/pid, on-screen rect, foreground status. It is clearly distinguishable from siblings like server_info or status, though it never names a sibling to contrast with.

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 — an agent infers it should call this before input/screenshot work, and the second sentence helpfully notes that input/screenshot tools focus the window automatically. There is no explicit when-to-use/when-not guidance or named alternative (e.g. focus_window).

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. 23 tool updatesv0.6.0
    • First observedbridge
    • First observedclick
    • First observedclient_command
    • First observedfocus_window
    • First observedhold_key
    • First observedlaunch
    • First observedlist_commands
    • First observedmouse_move
    • First observedpress_key
    • First observedquit_game
    • First observedread_client_log
    • First observedread_console
    • First observedrelease_key
    • First observedrestore_focus
    • First observedscreenshot
    • First observedscroll
    • First observedserver_command
    • First observedserver_info
    • First observedstatus
    • First observedtype_text
    • First observedwait
    • First observedwait_for_console
    • First observedwindow_status

TDQS

A3.9/5.0

Scored across 23 tools

Disambiguation4/5

Most tools target distinct capabilities (input vs window vs console vs bridge), and descriptions go to lengths to clarify boundaries (e.g., server_command vs client_command vs the chat layer). However there is genuine overlap among the read/inspect tools (read_console, read_client_log, list_commands) and between the multi-purpose bridge and server_command/client_command, which could still cause misselection.

Naming Consistency3/5

Many tools follow a verb_noun or clear noun pattern (read_console, hold_key, focus_window, window_status), but others are bare verbs or nouns (bridge, status, launch, click, scroll, wait) with no single governing convention. It stays readable but is a mixed bag rather than a predictable scheme.

Tool Count4/5

23 tools is on the heavy side, but the surface spans genuinely separate domains — RCON server control, devcon client console, the mcpb bridge, raw input, and window/screenshot management — so nearly every tool earns its place. It is slightly over what feels ideal but not padded.

Completeness4/5

Coverage is broad and coherent: server and client command execution, console reading/waiting, bridge ops, full keyboard/mouse/text input, window focus, and screenshots. Minor gaps remain, such as a dedicated chat-send or screenshot-crop helper, but agents can work around these with existing primitives.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to read and administer FiveM/RedM game servers via txAdmin, supporting queries about server status, players, bans, and actions like announcements, resource control, and bans.
    37 npm
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    This server enables AI agents to operate Windows and Linux computers by observing the screen, understanding the UI through accessibility, OCR, and vision, and performing mouse, keyboard, window, clipboard, and system actions with verification and recovery.
    29
    2
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables local FiveM development by letting an AI assistant execute JavaScript/Lua on the server or client, automate NUI interactions, capture game screenshots, manage resources, and run repeatable tests with screenshot evidence.
    4
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to connect to one or more running Roblox game clients to execute Lua code, decompile and search scripts, browse instances with CSS-like selectors, intercept and block remotes, drive GUIs, and capture screenshots through a local dashboard and bridge.
    21
    66 npm
    MIT