Skip to main content
Glama

infrontofx / FiveM

A local toolkit for writing, debugging and reviewing FiveM resources, connected directly to your installed infrontofx-skill. Includes an optional authenticated realtime telemetry bridge.

คู่มือเริ่มใช้ภาษาไทย

This is an initial development release. MCP protocol and transport behavior are tested in Node; the resources still need live FXServer validation. No performance or production-readiness claim is made.

What's included

Component

Purpose

Local stdio MCP

Eleven read-only tools: installed-skill search/retrieval, task context, canonical template previews, source triage, manifest parsing, resource inspection, official native lookup and planning

Eight guidance resources

Architecture, security, performance, React/Vue/Svelte NUI, database, debugging, networking and optional realtime integration

1nfx_bridge

Server-side WebSocket telemetry with authentication, origin allowlist, publisher ownership, limits, heartbeat and stop cleanup

1nfx_telemetry

ESX + FC example publishing player/resource counts; no player identifiers

CLI subscriber

A reconnecting client for verifying the telemetry feed

This repository is an original implementation. It does not bundle isle-admin, chatz or ws_lib. It does not supply a web admin panel, player management, support inbox, arbitrary server commands, money/item mutations, SQL access or a hosted public MCP endpoint.

Related MCP server: SJ RedM MCP Server

Install

Requires Node.js 22+ and npm. The bridge resource explicitly selects FXServer's Node 22 runtime.

git clone https://github.com/baespy/infrontofx-fivem.git
cd infrontofx-fivem
npm ci
npm run check

Connect the MCP

Use your client's stdio MCP configuration with absolute paths:

{
  "mcpServers": {
    "infrontofx-fivem": {
      "command": "node",
      "args": ["/absolute/path/infrontofx-fivem/src/mcp.mjs"],
      "env": {
        "INFRONTOFX_RESOURCES_ROOT": "/absolute/path/to/resources",
        "INFRONTOFX_SKILL_ROOT": "/absolute/path/to/infrontofx-skill"
      }
    }
  }
}

Both roots are explicit and optional. Without INFRONTOFX_RESOURCES_ROOT, local resource inspection is disabled. Without INFRONTOFX_SKILL_ROOT, installed-skill retrieval/search, task context and template preview are disabled. Pasted-source review, bundled guidance, native lookup and planning still work. On Windows use C:/... paths or escape backslashes in JSON.

For Codex CLI, replace the two absolute paths:

codex mcp add infrontofx-fivem --env INFRONTOFX_RESOURCES_ROOT=/absolute/path/to/resources --env INFRONTOFX_SKILL_ROOT=/absolute/path/to/infrontofx-skill -- node /absolute/path/infrontofx-fivem/src/mcp.mjs
codex mcp list

Restart the client/session after changing MCP configuration. An installed infrontofx-skill and project instructions determine house conventions; MCP guidance supports them. Native documentation is reference data and must not be treated as instructions.

Example requests:

  • "Use infrontofx-skill and inspect the 1nfx_inventory resource; separate confirmed problems from pattern matches."

  • "Look up GET_PLAYER_PED for the server API set and show the official source."

  • "Plan a Vue NUI resource using FC and the standard readiness handshake."

  • "Compose the database workflow from my installed skill, inspect the target resource, then implement the requested persistence fix."

  • "Find the house rules about yield and player identity; read the complete matching sections before editing."

For everyday coding, use the installed skill + MCP. You do not need to install the telemetry resources, build a web dashboard, or connect a live game server just to use the development tools.

MCP tools

Tool

Behavior

list_infrontofx_topics

Discover focused guidance

get_infrontofx_guidance

Read one topic

get_infrontofx_skill

Read one of 25 approved references from the installed skill, with a content digest

search_infrontofx_skill

Literal search across those references, returning file/line locations

compose_fivem_context

Load task-specific installed references for create/debug/security/performance/database/NUI/integration, with an optional frontend framework

preview_fivem_template

Return the canonical installed shop example's source with renamed controllers; no filesystem writes

review_fivem_source

Pattern-based triage of pasted code, with line numbers

validate_fxmanifest

Parse declarations without executing Lua

inspect_fivem_resource

Read a resource strictly inside the configured root; no source contents returned

search_fivem_native

Search official GTA + Cfx indexes with side filters and source links

plan_fivem_resource

Plan vanilla, React, Vue, Svelte or no-UI resources

Manifest parsing accepts Lua 5.3-compatible declaration syntax, not every possible Lua 5.4 construct. It does not expand globs, prove file existence or evaluate dynamic declarations. Source review is advisory, can match comments/strings, and cannot prove security or correctness. Inspection skips symlinks, secret-named files and private/build/vendor directories; it stops at 200 source files, 256 KB per file, 2 MB total and bounded directory depth. Do not submit credentials through pasted-code tools.

FiveM telemetry

  1. Run npm run build.

  2. Copy resources/1nfx_bridge and resources/1nfx_telemetry into your development FXServer resources directory. The bridge build output must be included.

  3. Generate a random token with at least 32 characters and put it in a private server configuration file. Use set, never setr, to avoid replication.

  4. Load that private configuration before starting the resources:

set infrontofx_bridge_token "REPLACE_WITH_A_RANDOM_SECRET_OF_AT_LEAST_32_CHARACTERS"
set infrontofx_bridge_host "127.0.0.1"
set infrontofx_bridge_port "30125"
set infrontofx_bridge_publishers "1nfx_telemetry"
set infrontofx_bridge_max_clients "16"
ensure es_extended
ensure 1nfx_bridge
ensure 1nfx_telemetry

Do not commit the private configuration. The text above is an example, not a working secret. A non-local deployment needs a TLS reverse proxy and explicit firewall/origin settings. Browser origins are denied by default; set infrontofx_bridge_origins to comma-separated exact origins only if a browser client is needed.

To verify from a terminal, set INFRONTOFX_BRIDGE_TOKEN in that terminal's environment, then run:

node scripts/telemetry-client.mjs

The default URL is ws://127.0.0.1:30125/live. Set INFRONTOFX_BRIDGE_URL for another endpoint; remote clients require wss://. Do not place credentials in a URL or browser storage.

Other Lua resources publish through their FC adapter, after adding their resource name to the publisher allowlist:

FC.PublishStatus = function(data)
    return exports[Config.General.bridge_resource]:publish("status", data)
end

Clients receive topics scoped as resourceName:topicName. Messages are ephemeral; reconnecting clients must resubscribe and wait for the next snapshot. There is no delivery guarantee or action replay.

WebSocket protocol

Connect to /live. Non-browser clients authenticate with an Authorization: Bearer ... header. Browser clients must have an allowed Origin and send an initial {"type":"auth","token":"..."} frame within three seconds. The server replies {"type":"ready","protocol":1}.

Then send {"type":"subscribe","topic":"1nfx_telemetry:status"}. Unsubscribe uses the same topic and type: "unsubscribe". Any other message type is rejected. No inbound game commands exist.

Limits: 16 total peers by default, 8 subscriptions per peer, 8 KB frames, 10 incoming messages/second, 16 topics and 50 publish attempts/second per resource, 128 publishers, 128 KB buffered output. Overflow is rejected or the slow peer is disconnected; no unbounded queue is retained. A shared read-only token can read all published topics; do not publish private player data to this feed.

Verification and release gate

npm test
npm run build
node scripts/verify-native.mjs

Tests exercise a real stdio MCP client handshake, source/manifest review, installed-skill reads and digests, literal search, context selection, template name substitution without writes, path traversal/junction rejection, secret-file skipping, inspection budgets, websocket auth/origins, payload and connection limits, publisher bounds and port release on shutdown. The native smoke test requires internet and is separate from offline CI.

Installed-skill reads use a fixed reference/template allowlist, reject paths escaping the configured root and cap each file at 64 KB. Search reads at most 512 KB; composed context returns at most 32,000 reference characters and reports truncation. Templates are examples that require adaptation and live testing; the tool does not generate an arbitrary finished feature.

Before using on a live server: verify the export caller identity in FXServer, stop/start both resources, connect/disconnect clients, check malformed messages and slow peers, and measure actual resmon/profiler data. Node tests do not substitute for those checks. Keep this on a development server until those checks pass.

Sources and design notes

Researched 2026-10-22:

The references discussed with the user — fivem-mcp, ws_lib, isle-admin and chatz — informed the scope comparison. They are not dependencies, and no compatibility with them is implied.

Available Tools

11 tools
compose_fivem_contextB
Read-onlyIdempotent

Read the installed house references needed for one coding workflow and optional NUI framework. Use before implementing or reviewing a FiveM resource.

NameRequiredDescriptionDefault
uiNonone
workflowYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so the description's job is lighter. It adds the useful detail that references are 'installed house references' (local, not web), but says nothing about missing-workflow behavior, output shape, or size of the returned context.

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 purpose and followed by timing. No filler or repeated structured data.

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 simple two-parameter read tool with no output schema, the description is barely sufficient. It omits what the returned context looks like and how large or structured it is, which matters for a context-composition tool.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, yet it only alludes to 'one coding workflow' and 'optional NUI framework'. It does not explain what the workflow values select or what choosing a ui framework changes in the returned references.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reading installed house references scoped to a workflow and optional NUI framework. It is distinguishable from siblings like search_fivem_native or get_infrontofx_guidance, though the 'compose' framing is not fully explained.

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?

Gives a timing hint ('Use before implementing or reviewing a FiveM resource') but never names an alternative tool or when-not to use it. An agent has to infer how this differs from get_infrontofx_guidance or get_infrontofx_skill.

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

get_infrontofx_guidanceC
Read-onlyIdempotent

Read focused guidance. Existing project instructions and the installed infrontofx-skill remain authoritative for house conventions.

NameRequiredDescriptionDefault
topicYes

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare read-only, idempotent, non-destructive, and closed-world behavior. The description adds a meaningful authority caveat—that existing project instructions and the installed skill take precedence—but says nothing about the form of the returned guidance or whether it is static or versioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the core action front-loaded and no wasted text. The authority caveat is efficiently stated, though 'focused guidance' remains vague.

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 simple one-parameter read tool, the annotations cover the safety profile and the description provides a precedence caveat. However, it leaves the topic semantics and return format undocumented, and gives no routing guidance relative to the skill-oriented siblings.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, but it never mentions the required 'topic' parameter or its eight enum values. The enum values are largely self-descriptive, but the description adds no meaning about how topics map to guidance content.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb and resource are present ('Read focused guidance'), but 'guidance' is vague and the description never distinguishes this tool from close siblings like get_infrontofx_skill or search_infrontofx_skill. The second sentence clarifies authority but not what the tool actually returns or how it differs from the skill lookup.

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

Usage Guidelines2/5

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

The description does not state when to call this tool versus alternatives, nor does it mention list_infrontofx_topics for discovering valid topics. The note that project instructions and the installed skill 'remain authoritative' is a precedence caveat, not a usage condition for selecting this tool.

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

get_infrontofx_skillA
Read-onlyIdempotent

Read a selected reference directly from the installed infrontofx-skill, with a content digest. Requires INFRONTOFX_SKILL_ROOT; never reads arbitrary paths.

NameRequiredDescriptionDefault
sectionYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real context beyond them: a required INFRONTOFX_SKILL_ROOT environment prerequisite, the guarantee that arbitrary paths are never read, and the fact that output includes a content digest.

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 compact clauses with no filler, and the core action is front-loaded before the environment and path-safety caveats. Slightly awkward phrasing ('Read a selected reference directly ... with a content digest') costs a point but nothing is wasted.

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 single-parameter read tool with a rich annotation set and no output schema, the essential prerequisites and path-safety constraint are present. However, 'content digest' is undefined (checksum vs. summary) and the description never says how content is scoped or how sections are discovered, leaving gaps an agent would hit at call time.

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 `section` parameter, so the description must compensate; it only implies that the value names a reference to read. The enum of 24 topic-like values is largely self-documenting, but the description never explains what a 'section' maps to or how the valid values relate to the topics returned by list_infrontofx_topics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Read a selected reference directly from the installed infrontofx-skill', which tells an agent this is a single-item fetch rather than a list or search. It does not distinguish itself from the similarly named sibling get_infrontofx_guidance, so the boundary between the two getters is left inferential.

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?

'A selected reference' implies the section must already be known, hinting that list_infrontofx_topics / search_infrontofx_skill come first, but no sibling is named and there is no explicit when-to-use or when-not statement. Usage is implied rather than stated.

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

inspect_fivem_resourceB
Read-onlyIdempotent

Read-only local triage inside INFRONTOFX_RESOURCES_ROOT. Skips secret-named files, private/build/vendor directories and symlinks. Returns findings, not raw files.

NameRequiredDescriptionDefault
resourceYes

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare this as read-only, idempotent, non-destructive, and closed-world. The description adds meaningful behavioral detail beyond those annotations by listing what is skipped: secret-named files, private/build/vendor directories, and symlinks. It also states that the tool returns findings rather than raw files, which is useful context.

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?

The description is three short, front-loaded sentences with no filler. Scope, exclusions, and output behavior are each stated directly and efficiently.

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 description covers the tool's operating scope, exclusions, and the general nature of its output, which is helpful given the rich annotations. However, with no output schema and 0% schema description coverage, it should do more to explain how the resource parameter identifies the target. The definition is usable but leaves a notable invocation gap.

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

Parameters1/5

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

The schema has zero description coverage for the single required resource parameter. The description never explains whether resource should be a name, relative path, absolute path, identifier, or something else, nor does it clarify how it relates to INFRONTOFX_RESOURCES_ROOT. This leaves an agent without the semantics needed to supply the parameter correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific operation on a named resource domain: read-only local triage inside INFRONTOFX_RESOURCES_ROOT. It also clarifies the output nature by saying it returns findings rather than raw files. It does not explicitly distinguish the tool from relevant siblings such as review_fivem_source or plan_fivem_resource, which keeps it below a 5.

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 read-only local triage scope and the note that it returns findings instead of raw files. However, the description does not explicitly say when to choose this tool over siblings like review_fivem_source, plan_fivem_resource, or validate_fxmanifest.

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

list_infrontofx_topicsB
Read-onlyIdempotent

List FiveM guidance topics aligned with infrontofx-skill.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds only the vague 'aligned with infrontofx-skill' scoping note and says nothing about what a topic contains, ordering, or pagination — notable since there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. The resource and scope come first, and nothing is redundant.

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?

With no params and no output schema, the description must carry the burden of explaining the return shape, and 'topics' is only loosely indicative. It is adequate for a trivial list call but leaves the agent guessing what each topic entry looks like.

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 implies no filtering or input is required, consistent with the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (List) and resource (FiveM guidance topics) and adds a scoping qualifier ('aligned with infrontofx-skill'). However, it does not distinguish this from siblings like get_infrontofx_guidance or get_infrontofx_skill, so an agent cannot tell from the description alone which listing tool to pick.

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

Usage Guidelines2/5

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

There is no statement of when to use this versus the many sibling *infrontofx*/guidance tools, and no noted prerequisites. The phrase 'aligned with infrontofx-skill' hints at a relation but gives no actionable selection rule.

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

plan_fivem_resourceC
Read-onlyIdempotent

Return a house-style FiveM resource plan with explicit validation steps. Does not write files.

NameRequiredDescriptionDefault
uiNonone
nameYes

TDQS

C2.9/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so 'Does not write files' is largely redundant. What the description does add is content-level behavior: the output is a house-style plan containing explicit validation steps. It does not say how complete the plan is, what sections it covers, or whether it depends on prior context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler, and the core purpose is front-loaded before the scoping caveat. Brevity is close to under-specification here, but nothing written is wasted.

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

Completeness2/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 carries the burden of explaining what the returned plan looks like, and 'house-style' plus 'explicit validation steps' is undefined. It also leaves both input parameters undocumented. For a planning tool feeding a downstream compose/preview flow, an agent cannot predict the response shape or how 'ui' changes it.

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

Parameters2/5

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

Schema description coverage is 0% for two parameters, so the description must compensate and it does not. The 'ui' parameter with its enum (none/vanilla/react/vue/svelte) is never mentioned, and 'name' is left to the schema's min/max length alone with no indication of naming conventions or how it shapes the plan.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Return a ... FiveM resource plan') and adds a differentiating qualifier ('house-style ... with explicit validation steps'). It is distinguishable from mutating siblings, though it never names compose_fivem_context or preview_fivem_template, which occupy adjacent planning/rendering space.

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

Usage Guidelines2/5

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

The only guidance is the negative 'Does not write files', which restates the readOnly annotation rather than telling the agent when to pick this over compose_fivem_context, preview_fivem_template, or inspect_fivem_resource. No prerequisites, no ordering, no exclusions tied to alternatives.

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

preview_fivem_templateA
Read-onlyIdempotent

Preview source files from the installed canonical house shop example, with a validated resource/controller name. Does not write files or implement arbitrary requested features.

NameRequiredDescriptionDefault
nameYes

TDQS

A3.5/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 no-write claim largely restates them. The description does add that the target is a fixed canonical example rather than arbitrary resources, but it does not say what 'preview' returns or how output is shaped.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the core action front-loaded and the scope exclusion second. No filler, though the phrase 'resource/controller name' adds slight ambiguity rather than clarity.

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 single-parameter, read-only preview tool with no output schema, the description covers purpose, scope limits, and safety sufficiently. The only real gap is what the preview actually surfaces, which is minor given the fixed-example framing.

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% and the single parameter is an undescribed 'name'. The description gestures at it with 'validated resource/controller name', which is a meaningful hint, but the slash phrasing is ambiguous about whether it identifies a resource, a controller, or both.

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 (preview) and resource (source files from the installed canonical house shop example). However, it does not distinguish itself from close siblings like review_fivem_source or inspect_fivem_resource, leaving the agent to infer whether it previews rendered output or raw files.

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 negative clause 'does not write files or implement arbitrary requested features' usefully bounds scope, but there is no explicit statement of when to pick this over the sibling source-inspection tools. Usage is only implied.

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

review_fivem_sourceA
Read-onlyIdempotent

Pattern-based advisory review of pasted Lua/NUI source. Does not execute code or prove security. Do not send credentials.

NameRequiredDescriptionDefault
codeYes
sideYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds genuinely new behavioral context: the review does not execute code, does not prove security, and credentials should not be sent. The advisory-output caveat is exactly the kind of expectation-setting that annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero waste; the core purpose is front-loaded and each subsequent sentence adds a distinct constraint (non-execution, non-guarantee, credential hygiene).

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?

With no output schema, the description should signal what a review returns (findings list, severity, matched patterns) and clarify the `side` parameter. The safety caveats are covered, but the agent still lacks enough to predict the response shape or fill `side` confidently.

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 0%, so the description must compensate, but it never mentions either parameter. "Pasted Lua/NUI source" loosely maps to `code`, yet the `side` enum (client/server/nui) is entirely unexplained — the agent cannot tell whether it selects the review perspective, the running context, or something else.

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 (review) and resource (pasted Lua/NUI source) with a qualifier that frames the output as pattern-based and advisory. It is distinguishable from siblings like validate_fxmanifest and inspect_fivem_resource, though it does not name them explicitly.

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

Usage Guidelines3/5

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

"Pasted source" and "advisory review" imply the usage context (code you already have, not a live resource), and the disclaimer sets expectations. However, no explicit when-to-use/when-not guidance or named alternatives are given, so the agent must infer routing versus validate_fxmanifest or inspect_fivem_resource.

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

search_fivem_nativeA
Read-onlyIdempotent

Search the official GTA and Cfx native indexes by name/hash, with API-set filtering and source links. Network access only to two fixed official index URLs.

NameRequiredDescriptionDefault
sideNoany
limitNo
queryYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description earns credit for adding a concrete network boundary ('only to two fixed official index URLs'), which meaningfully narrows the broad openWorldHint, plus mentions API-set filtering and source links. It stops short of describing failure behavior when the network is unavailable.

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, zero filler, with the core action and resource stated first and the network constraint as a follow-on caveat.

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?

With no output schema, the description should say what a result looks like; 'source links' is the only hint at return content. For a simple read-only search this is close to adequate, but the meaning of `side` and the shape of results remain unstated.

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

Parameters3/5

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

Schema description coverage is 0%, so the description has to carry parameter meaning and only partly does: 'by name/hash' usefully clarifies the `query` field beyond a bare 2-100 char string, and 'API-set filtering' hints at `side`. The `limit` parameter and the exact client/server/any semantics of `side` are left entirely to the schema, and 'API-set filtering' is too vague to be reliable.

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 gives a specific verb (Search) plus a precisely-scoped resource (the official GTA and Cfx native indexes) and names the lookup keys (name/hash). That is plainly a different resource class from every sibling (skill/topic lookups, resource inspection, fxmanifest validation), so an agent can route to it without ambiguity.

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 phrasing 'by name/hash' implies what kinds of queries are appropriate, which is light usage guidance. However, it never states when to prefer this over reviewing FiveM source code or inspecting a resource, nor any exclusions or prerequisites.

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

search_infrontofx_skillB
Read-onlyIdempotent

Find relevant house rules by literal terms across approved installed-skill references, with file and line locations.

NameRequiredDescriptionDefault
limitNo
queryYes

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, closed-world, and non-destructive behavior. The description adds useful context beyond that: it searches only 'approved installed-skill references,' uses 'literal terms' rather than semantic matching, and returns file and line locations.

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 with no filler. Every phrase contributes: the search action, target corpus, matching mode, approval constraint, and return location format.

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 simple read-only search tool with no output schema, the description adequately covers purpose, scope, and return shape. However, it omits the limit parameter entirely and gives no usage alternatives, leaving minor but meaningful gaps.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the burden for both parameters. It clarifies that 'query' is a literal-term search, but the 'limit' parameter is not mentioned at all, leaving its semantics and constraints unexplained beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Find relevant house rules ... across approved installed-skill references.' This clearly separates it from retrieval-oriented siblings like get_infrontofx_skill and list_infrontofx_topics, though it does not name those siblings explicitly.

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

Usage Guidelines2/5

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

The description explains what the tool does but gives no explicit guidance on when to use it instead of get_infrontofx_skill, list_infrontofx_topics, or other siblings. The 'literal terms' phrasing implies a search use case, but no alternatives or exclusions are stated.

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

validate_fxmanifestA
Read-onlyIdempotent

Parse a pasted Lua manifest without executing it; inspect declared API, distribution and load order. Lua 5.3-compatible manifest syntax only.

NameRequiredDescriptionDefault
codeYes

TDQS

A3.9/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds meaningful context beyond annotations by clarifying that the manifest is parsed 'without executing it' and that it inspects declared API, distribution and load order. It does not cover return values or error behavior, but the safety profile is reinforced.

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?

The description is two sentences, front-loaded with the core action and immediately followed by the key non-execution constraint. Every sentence adds useful information and there is no redundant text.

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 simple one-parameter tool with rich safety annotations, the description covers the essential purpose and syntax constraint. However, because there is no output schema, the description could do more to explain what the parse returns or what validation errors look like.

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

Parameters3/5

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

Schema description coverage is 0%, so the schema does not explain the single 'code' parameter. The description partially compensates by indicating that the input is a pasted Lua manifest with Lua 5.3-compatible syntax, but it does not mention the maxLength constraint or provide further format details.

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 uses a specific verb and resource: 'Parse a pasted Lua manifest'. It further scopes the purpose by saying it does not execute the manifest and instead inspects declared API, distribution and load order. This clearly distinguishes it from sibling tools like review_fivem_source or inspect_fivem_resource.

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 when to use the tool by mentioning 'pasted Lua manifest' and 'Lua 5.3-compatible manifest syntax only'. However, it does not explicitly state when to choose this tool over siblings or when not to use it, so usage guidance is only implied.

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. 11 tool updatesv0.2.0
    • First observedcompose_fivem_context
    • First observedget_infrontofx_guidance
    • First observedget_infrontofx_skill
    • First observedinspect_fivem_resource
    • First observedlist_infrontofx_topics
    • First observedplan_fivem_resource
    • First observedpreview_fivem_template
    • First observedreview_fivem_source
    • First observedsearch_fivem_native
    • First observedsearch_infrontofx_skill
    • First observedvalidate_fxmanifest

TDQS

B3.4/5.0

Scored across 11 tools

Disambiguation3/5

Most tools have distinct scopes (review, validate, inspect, search natives, plan, preview). However, get_infrontofx_skill, get_infrontofx_guidance, list_infrontofx_topics, and search_infrontofx_skill all read reference material, and an agent could easily misselect among them without close reading of the descriptions.

Naming Consistency4/5

Consistent snake_case verb_noun pattern throughout (get_/list_/search_/compose_/preview_/review_/validate_/inspect_/plan_). Minor deviation: the domain prefix alternates between infrontofx_skill and fivem_*, and validate_fxmanifest lacks a prefix, but style is otherwise uniform.

Tool Count4/5

11 tools is a well-scoped count for a guidance/review/planning surface. Slightly heavy only because the four reference-reading tools could arguably be consolidated.

Completeness4/5

Covers discovery, reference reading, context composition, planning, template preview, review, manifest validation, resource inspection, and native lookup — a coherent advisory lifecycle. Notably absent are any write/scaffold operations, though this appears deliberate given the read-only safety framing.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers