Skip to main content
Glama
shoff

msfs2024-mcp

by shoff

msfs2024-mcp

✈️ Also in this repo:

  • a dark-mode PyQt6 electronic flight checklist app (Cessna 172S + Piper Archer II, normal/abnormal/emergency procedures) designed to float on top of MSFS 2024 — pip install -e ".[checklist]", run msfs-checklist.

  • a Claude-powered controls setup advisor for the Honeycomb Alpha/Bravo and VelocityOne Rudder: per-aircraft binding plans with procedure coaching, plus LLM review of your exact hardware — pip install -e ".[controls]", run msfs-controls.

A Model Context Protocol server for Microsoft Flight Simulator 2024. It lets an MCP client (Claude Desktop, Claude Code, etc.) read live sim state and drive the aircraft across three capability layers:

Layer

Source

Covers

Setup

1. SimConnect

Official Microsoft API (python-SimConnect)

Thousands of SimVars, Events (controls), bundled aircraft state

MSFS running

2. FSUIPC7

Offset table (fsuipc module)

Values SimConnect doesn't cleanly expose; stable offsets

FSUIPC7 installed + running

3. Raw memory

pymem / ReadProcessMemory

Escape hatch for anything else

Opt-in, admin rights

Reality check: SimConnect, FSUIPC, and raw memory are Windows-only and require a running MSFS on the same machine (or LAN via SimConnect.cfg). Run this server on that Windows host. Every layer degrades gracefully — if a layer isn't available, its tools return a structured { "ok": false, "error": ... } explaining why, instead of crashing the server. So the server boots and the catalog/discovery tools work even before MSFS is up.

Install (on the Windows host with MSFS)

git clone <your-repo-url> msfs2024-mcp
cd msfs2024-mcp
python -m venv .venv
.venv\Scripts\activate
pip install -e .                 # server core (SimConnect layer)
pip install -e ".[transports]"   # optional: adds the FSUIPC7 + raw-memory layers
copy .env.example .env   # then edit if you like

Layer prerequisites:

  • SimConnect — installed automatically with the SimConnect pip package, which ships its own SimConnect.dll. Just have MSFS running and loaded into a flight.

  • FSUIPC7 — install the transports extra (above), then download and run FSUIPC7 (free for basic offset access). Leave it running alongside MSFS. Both fsuipc and pymem are optional and degrade gracefully when absent, so the core server and the GUI apps run without them.

  • Raw memory — install the transports extra, set MSFS_ENABLE_MEMORY=true in .env, and run the server as Administrator. Off by default.

Related MCP server: mcp-x

Verify it works

python scripts\smoke_test.py

With MSFS loaded into a flight you'll see a live aircraft-state snapshot and an event round-trip (nav lights toggle). Off-Windows or with the sim closed, it prints layer health and exits cleanly — which is how you know the graceful-degradation path is intact.

Platform-independent tests (catalog integrity + degradation) run anywhere:

pip install -e ".[dev]"
pytest -q

Wire into an MCP client

Claude Desktop / Claude Code — add to your MCP config (claude_desktop_config.json or .mcp.json):

{
  "mcpServers": {
    "msfs2024": {
      "command": "python",
      "args": ["-m", "msfs_mcp.server"],
      "cwd": "C:\\path\\to\\msfs2024-mcp",
      "env": { "MSFS_ENABLE_FSUIPC": "true", "MSFS_ENABLE_MEMORY": "false" }
    }
  }
}

(If you pip install -e ., you can use the msfs-mcp console script instead of python -m msfs_mcp.server.)

HTTP mode & auto-start from the companion apps

The server also runs as a shared HTTP (streamable-http) service:

msfs-mcp --transport http --port 8787    # or MSFS_MCP_TRANSPORT=http

Launching either companion app (msfs-checklist / msfs-controls) automatically checks 127.0.0.1:8787 and starts this HTTP instance if it isn't already running — detached, so it keeps serving after the app closes. Server output goes to ~/.msfs_companion/mcp-server.log; set MSFS_COMPANION_AUTOSTART=0 to opt out, MSFS_MCP_PORT to move the port. MCP clients that support HTTP servers (e.g. Claude Code) can then attach at http://127.0.0.1:8787/mcp:

claude mcp add --transport http msfs2024 http://127.0.0.1:8787/mcp

Stdio remains the default transport, so the Claude Desktop config above is unchanged.

Tool surface (23 tools)

Connectionconnection_status, connect_sim

SimConnect / SimVarsget_simvar, get_simvars, set_simvar, get_aircraft_state

SimConnect / Events & autopilottrigger_event, autopilot_set_heading, autopilot_set_altitude, autopilot_set_vertical_speed, autopilot_toggle_master

Discoverylist_simvars, list_events (searchable by keyword/category)

FSUIPCfsuipc_status, fsuipc_read_offset, fsuipc_read_known, fsuipc_write_offset

Raw memorymemory_status, memory_attach, memory_module_base, memory_read, memory_read_pointer_chain, memory_write

Resourcesmsfs://telemetry/state, msfs://catalog/simvars, msfs://catalog/events

Promptspreflight_briefing, fly_to_heading_altitude

Examples (natural language to the MCP client)

  • "What's my current altitude and heading?" → get_aircraft_state

  • "Find me every autopilot-related variable." → list_simvars(category="autopilot")

  • "Raise the landing gear and set flaps to the first notch." → trigger_event('GEAR_UP'), trigger_event('FLAPS_INCR')

  • "Engage the autopilot for heading 270 at 8000 feet." → autopilot_toggle_master, autopilot_set_heading(270), autopilot_set_altitude(8000)

  • "Read FSUIPC offset 0x0560 as a long." → fsuipc_read_offset('0x0560', 'l')

Safety notes

  • Writes are real. set_simvar, trigger_event, and fsuipc_write_offset change the running sim. Fine for your own local flight; think before scripting them.

  • Raw memory is double-gated. It requires both MSFS_ENABLE_MEMORY=true and allow_write=true per write call, because bad writes can crash MSFS. Pointer chains break on most sim updates — keep them version-pinned.

  • Reads are harmless. All read paths are observation-only.

Extending the catalog

src/msfs_mcp/catalog.py is a curated subset, not the full SDK. The generic get_simvar / set_simvar / trigger_event tools reach any SimVar or Event by exact SDK name — add entries to the catalog only to make them discoverable. Full reference: the MSFS SDK SimVars and Event IDs docs.

Architecture

MCP client  ──stdio──▶  msfs_mcp.server (FastMCP, 23 tools)
                              │
              ┌───────────────┼────────────────┐
              ▼               ▼                 ▼
     SimConnectClient   FsuipcClient      MemoryClient
     (SimConnect.dll)   (FSUIPC7)         (pymem)
              │               │                 │
              └──────── Microsoft Flight Simulator 2024 ────────┘

Each client is a singleton with lazy connect, a thread lock around the native handle, and a uniform LayerUnavailable error contract that the server renders as structured JSON.

License

MIT

Companion apps

  • EFB Checklist — PyQt6 always-on-top electronic checklist (normal + emergency procedures, V-speeds) for flying alongside MSFS 2024. Ships with the Cessna 172S and Piper PA-28-181 Archer.

Available Tools

23 tools
autopilot_set_altitudeC

Set the autopilot target altitude in feet.

ParametersJSON Schema
NameRequiredDescriptionDefault
altitude_ftYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries full burden but only states the action. It does not disclose whether autopilot must be on, what happens if altitude is out of range, or any side effects like mode changes.

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 sentence with no redundancy, but it could be more informative without losing conciseness.

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?

Despite having an output schema, the description omits any return value information. It lacks prerequisites, error conditions, and behavioral details needed for a complete tool description.

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?

The only parameter 'altitude_ft' has 0% schema description coverage. The description adds the unit 'feet' but no range, constraints, or additional meaning about the parameter.

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 clearly states the tool sets the autopilot target altitude in feet, with a specific verb and resource that distinguishes it from sibling tools like heading or vertical speed.

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?

No guidance on when to use this tool versus alternatives such as autopilot_set_vertical_speed or when the autopilot must be engaged. The description is purely functional without usage context.

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

autopilot_set_headingA

Set the autopilot heading bug (0-359 degrees).

ParametersJSON Schema
NameRequiredDescriptionDefault
heading_degYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations provided, so the description bears full responsibility. It discloses the heading range and indicates a write operation, but lacks details on side effects (e.g., whether autopilot must be engaged) or response behavior. Minimal but acceptable given simplicity.

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?

Single sentence, no wasted words, front-loaded with action and resource. Slightly under-specified but efficient for a simple command.

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 and presence of an output schema (though not shown), the description covers basic purpose and input range. However, it omits context like prerequisites (e.g., autopilot master on) or effect on aircraft heading, which would help in simulation contexts.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It mentions the parameter's range (0-359 degrees) but does not explicitly name 'heading_deg' or explain its units beyond degrees. Adequate, but could clarify that input is an integer.

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 clearly states the action ('Set the autopilot heading bug') and the resource, with a specific range (0-359 degrees). It distinguishes from siblings that set altitude, vertical speed, or toggle master.

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?

No explicit guidance on when to use this tool vs alternatives like autopilot_set_altitude or autopilot_toggle_master. Usage is implied, but no when-not or prerequisite conditions are mentioned.

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

autopilot_set_vertical_speedB

Set the autopilot target vertical speed in feet per minute (negative = descend).

ParametersJSON Schema
NameRequiredDescriptionDefault
fpmYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

The description only states the basic action without disclosing side effects. With no annotations provided, it fails to reveal important details such as whether setting vertical speed changes autopilot modes, requires autopilot engagement, or has any limits.

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 with no wasted words. It efficiently conveys the core purpose and key parameter semantics.

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?

While the tool has an output schema, the description does not reference return values or error states. It omits context like prerequisites (autopilot state) and mode interactions. For a simple one-parameter tool, the description is minimally adequate but incomplete.

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 bears full responsibility for clarifying the 'fpm' parameter. It explains its meaning (vertical speed in feet per minute) and sign convention (negative=descend), but lacks details like typical range or validation rules.

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 clearly states the action ('Set the autopilot target vertical speed'), specifies units ('feet per minute'), and explains sign convention ('negative = descend'). It distinguishes from sibling tools like autopilot_set_altitude or autopilot_set_heading by focusing on vertical speed.

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?

No guidance on when to use this tool versus alternatives like autopilot_set_altitude. No mention of prerequisites (e.g., autopilot must be engaged) or conditions (e.g., vertical speed mode required).

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

autopilot_toggle_masterA

Toggle the autopilot master on/off.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It only states the toggle action without disclosing side effects, prerequisites (e.g., need connection), or return 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?

The description is a single sentence that directly conveys the tool's function, with no superfluous words.

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 toggle with no parameters and an output schema, the description is minimally adequate but does not explain what the tool returns or any state changes beyond the toggle.

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 input schema has zero parameters, so no additional semantic explanation is needed. Baseline is 4 for 0 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?

The description clearly specifies the action ('Toggle') and the resource ('autopilot master'), and it distinguishes this tool from siblings that set specific autopilot parameters like altitude or heading.

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 usage is implied by the name and description; it's obvious this is for turning the autopilot master on/off. However, no explicit guidance on when not to use or prerequisites.

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

connection_statusA

Report health of all three layers (enabled, imported, connected).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavior, but it only states 'Report health' without explaining what 'enabled, imported, connected' mean or any side effects. The description is too minimal for adequate transparency.

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 a single concise sentence that clearly states the tool's function with no waste.

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?

While an output schema exists (meaning return values need not be explained), the description lacks context about the meaning of the three layers or how this tool differs from other status tools. It is minimally complete but could be improved.

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?

There are zero parameters, so schema coverage is effectively 100%. The description adds no parameter info (unnecessary) but provides context about what the tool reports. Baseline for 0 params is 4.

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 clearly states the tool's purpose: 'Report health of all three layers (enabled, imported, connected).' It uses a specific verb ('Report') and identifies the resource ('health of layers'), distinguishing it from sibling status tools like fsuipc_status and memory_status.

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?

No guidance is provided on when to use this tool versus alternatives. The description does not mention context or exclusions, leaving the agent to infer usage from the name and siblings.

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

connect_simA

Connect the SimConnect layer to a running MSFS. Idempotent.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It adds the behavioral trait 'idempotent', indicating safe repeated calls. However, it does not disclose potential side effects, error conditions, or what happens if MSFS is not running.

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 a single, front-loaded sentence with no extraneous words. It efficiently conveys the core action and idempotency.

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?

Given the tool has no parameters, the description is adequate for the basic action. The existence of an output schema (not shown) covers return values, so the minimal description suffices for completeness.

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 has zero parameters, so the baseline is 4. No additional parameter documentation is needed.

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 clearly states the verb 'Connect', the resource 'SimConnect layer', and the scope 'to a running MSFS'. It also mentions idempotency, which helps distinguish from peer tools like 'connection_status' that likely check connection state.

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?

No guidance is given on when to use this tool versus alternatives. The description does not mention prerequisites, ordering, or that connecting is required before using other SimConnect-dependent tools.

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

fsuipc_read_knownC

Read one of the built-in known offsets by key (see fsuipc_status.known_offsets).

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, and the description gives no behavioral details beyond the basic read action. It does not disclose side effects, safety, output format, or error conditions. Since annotations are absent, the description carries the full burden but provides minimal information.

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 concise sentence with no fluff. It is front-loaded with the core action. However, it could be more structured to include additional details without losing conciseness.

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?

Given the existence of an output schema, the description may not need to detail return values, but it lacks clarity on prerequisite calls (e.g., fsuipc_status), error handling, and differentiation from sibling tools. The description is incomplete for helping an agent use the tool correctly in all scenarios.

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?

The schema has one parameter 'key' with no description (0% coverage). The description says 'by key' and hints that keys come from fsuipc_status.known_offsets, but does not explain the format, accepted values, or how to obtain them. This adds minimal meaning beyond the 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 clearly states it reads a built-in known offset by key, referencing fsuipc_status.known_offsets for valid keys. This differentiates it from other read tools like fsuipc_read_offset, but could be more explicit about what is returned.

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 that the key should come from fsuipc_status.known_offsets, but does not explicitly state when to use this tool over fsuipc_read_offset or other siblings. No exclusion criteria or prerequisites are provided.

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

fsuipc_read_offsetA

Read a raw FSUIPC offset. offset_hex like '0x0560'; type_code one of b/B/h/H/d/u/l/L/f/s.

For strings use type_code='s' and pass a length.

ParametersJSON Schema
NameRequiredDescriptionDefault
lengthNo
type_codeYes
offset_hexYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

As a read operation, the description is adequate. It does not contradict the tool's read-only nature, but it lacks explicit disclosure about side effects, permissions, or safety. No annotations are provided, so the description carries the full burden, but it minimally meets expectations.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose and critical details. No redundant or excessive text. Every sentence adds value.

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?

Given the tool's simplicity and the presence of an output schema, the description covers purpose, parameter formats, and special string handling. It does not explain error behavior or what a raw offset means, but it is sufficient for basic usage.

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

Parameters5/5

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

Schema coverage is 0%, and the description adds high value by explaining offset_hex format ('0x0560'), listing type_code options (b, B, h, H, d, u, l, L, f, s), and clarifying that strings require type_code 's' and a length parameter. This is essential 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 clearly states it reads a raw FSUIPC offset, with specific verb and resource. It provides examples for offset_hex format and type_code options. However, it does not explicitly differentiate from sibling tools like fsuipc_read_known, though 'raw' implies a distinction.

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?

No guidance on when to use this tool versus alternatives. It explains string usage but does not mention prerequisites or scenarios where this tool is preferred over siblings like fsuipc_read_known or memory_read.

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

fsuipc_statusA

FSUIPC layer health plus the list of built-in known offset keys.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavioral traits. It states the tool returns 'layer health' and 'list of known offset keys', which gives some idea of output. However, it does not clarify if the health check involves actual connectivity or what constitutes a healthy state. For a zero-parameter tool, this is adequate but leaves some ambiguity.

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 a single, efficient sentence that conveys the essential purpose without any fluff. It is front-loaded and every word earns its place.

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?

Given the tool has no parameters and an output schema exists (implied), the description covers the two main outputs: health and list of keys. It is complete for a simple status tool, though it could briefly mention that the health check is for the FSUIPC layer's operational state.

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 input schema has zero parameters, so schema_description_coverage is 100%. According to guidelines, baseline is 4 for 0 params. The description adds value by indicating what the tool returns (health + keys), which is not obvious from the empty schema.

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 clearly states the tool provides 'FSUIPC layer health plus the list of built-in known offset keys', specifying the verb (provides health/list) and the resources (FSUIPC layer status and offset keys). This distinguishes it from sibling tools like fsuipc_read_known which reads specific keys, and connection_status which only checks connection.

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 does not explicitly state when to use this tool versus alternatives. It implies that it is for checking health and listing available keys, but gives no guidance on prerequisites or sequencing (e.g., use before other FSUIPC operations). This is a minor gap for a simple informational tool.

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

fsuipc_write_offsetB

Write a raw FSUIPC offset. Use deliberately — offsets are global sim state.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYes
type_codeYes
offset_hexYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It mentions global state but omits details on side effects, reversibility, permissions, or response behavior. The warning is minimal.

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 very short (two sentences) with no redundant text. However, its brevity sacrifices useful information, which lowers the score from a perfect 5.

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?

Given the tool has 3 required parameters, no parameter descriptions, and no annotations, the description fails to provide essential context. The warning alone is insufficient for safe and correct invocation.

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?

Schema description coverage is 0%, and the description adds no meaning to the parameters. The names (value, type_code, offset_hex) are self-explanatory but no details on valid values, format, or units are provided.

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 clearly states the action: 'Write a raw FSUIPC offset.' It uses a specific verb ('write') and resource ('FSUIPC offset'), distinguishing it from sibling tools like fsuipc_read_offset.

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 warns to 'Use deliberately — offsets are global sim state,' implying caution but does not specify when to use this tool over alternatives like fsuipc_read_offset or set_simvar. No explicit conditions or exclusions.

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

get_aircraft_stateA

Bundled snapshot: position, attitude, speeds, engine/fuel, config, autopilot, status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It lists what is included but does not disclose behavioral traits such as whether it is real-time, cached, or has side effects. Minimal but adequate for a read-only 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?

The description is a single sentence that efficiently conveys the tool's purpose and contents. Every word earns its place; no fluff.

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?

Given zero parameters, an existing output schema, and the simple nature of the tool, the description is complete. It sufficiently informs the agent about what the tool returns.

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?

With 0 parameters and 100% schema coverage, the baseline is high. The description adds value by enumerating the output categories (position, attitude, speeds, etc.), which is helpful given the absence of an explicit output schema display.

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 clearly states it's a 'Bundled snapshot' and lists the specific categories (position, attitude, speeds, etc.), making the verb ('get') and resource ('aircraft state') unambiguous. It distinguishes itself from siblings like get_simvar by implying a bulk return of multiple state variables.

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 description implies use when a combined snapshot of aircraft state is needed, but does not explicitly exclude alternatives like get_simvars (which also returns multiple) or detail when not to use it. However, the context is clear given the bundled nature.

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

get_simvarA

Read any SimVar by its exact SDK name. Supports indices, e.g. 'TURB_ENG_N1:1'.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions index support but lacks disclosure on permissions, error handling, rate limits, or side effects. Since it's a read operation, safety is implied but not confirmed.

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 concise sentences, front-loaded with the action verb 'Read', no wasted words. Every sentence adds value.

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 simple single-parameter tool and existing output schema, the description covers the core functionality. However, it lacks usage guidance (when to use singular vs plural) and error behavior, leaving some gaps.

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

Parameters5/5

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

With 0% schema description coverage, the description adds crucial meaning: the 'name' parameter must be an exact SDK string, and shows the indexing format with an example. This fully compensates for the schema gap.

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

Purpose5/5

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

The description clearly states the tool reads a SimVar by exact SDK name, with an example showing index support. It differentiates from sibling tools like 'set_simvar' (write) and 'get_simvars' (plural, likely batch).

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 when you know the exact SDK name, but does not explicitly state when to avoid it or mention alternatives like 'get_simvars' for multiple values. Guidance is implicit, not explicit.

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

get_simvarsA

Read several SimVars at once. Returns a name->value map; failures are inline.

ParametersJSON Schema
NameRequiredDescriptionDefault
namesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations provided. The description notes that failures are inline, which is a useful behavioral trait, but doesn't disclose permissions or rate limits.

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?

Single sentence, no wasted words, front-loaded with purpose.

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 1-parameter tool with an output schema, the description covers the main purpose and return format. Could mention parameter semantics but still adequate.

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 description must compensate. The description implies 'names' are SimVar names but does not explicitly state format or valid values. Adequate but not detailed.

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 clearly states it reads multiple SimVars at once and returns a name->value map, distinguishing it from get_simvar (singular) and list_simvars (lists names).

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?

No explicit when or when-not guidance; usage is implied by the description of batch reading, but alternatives like get_simvar for a single value are not mentioned.

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

list_eventsA

Search the Event catalog by keyword and/or category. Empty args list everything.

Categories: engine, config, autopilot, controls, systems, sim.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
categoryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description explains the search behavior (keyword/category) and special case of empty args returning all. For a read-only list tool, this is sufficient transparency. No hidden side effects are implied.

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 very concise: two sentences plus a list of categories. All information is front-loaded and relevant, with no wasted words.

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?

Given the tool's simplicity (2 optional params, output schema exists), the description covers the essential functionality and filtering options. It could mention matching behavior (exact/partial) but is otherwise 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 has no descriptions (0% coverage), but the description adds meaning by indicating 'query' is a keyword and 'category' is one of the listed categories. This compensates for the schema gap, though no format or examples are given.

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 clearly states the tool's purpose: 'Search the Event catalog by keyword and/or category.' It distinguishes from sibling tools like 'trigger_event' and the various read/write/set tools by focusing on listing events.

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 (to search for events) but does not provide explicit when-not-to-use guidance or differentiate from alternative search tools like 'list_simvars'. The category listing adds context but no exclusions.

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

list_simvarsA

Search the SimVar catalog by keyword and/or category. Empty args list everything.

Categories: position, attitude, speed, engine, fuel, config, autopilot, systems, environment, status.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
categoryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations, the description bears full responsibility. It clarifies that the tool searches a 'catalog' (likely a static reference) rather than live simulator values, and lists categories for filtering. However, it does not disclose pagination, limits, or whether results are case-sensitive, leaving some behavioral ambiguity.

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 extremely concise: two sentences and a bullet list. Every sentence adds value. The core action and optional filters are front-loaded, with categories listed separately for clarity. No waste.

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?

Given the tool's simplicity (2 optional params, no required params) and the presence of an output schema (not shown but exists), the description is complete enough. It covers the search functionality, default behavior, and categories. No additional context is needed for correct selection or invocation.

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% (no parameter descriptions). The description adds meaning by explaining that 'query' is a keyword and 'category' selects from the listed categories. It provides a specific list of categories, which is valuable beyond the schema's empty defaults. However, it does not detail valid formats or case sensitivity.

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 clearly states: 'Search the SimVar catalog by keyword and/or category.' It specifies the action (search), resource (SimVar catalog), and scope (by keyword/category). The additional note 'Empty args list everything' clarifies default behavior. This distinguishes it from siblings like get_simvar (single var) and get_simvars (multiple specific vars).

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 description provides clear when-to-use guidance: use when you need to search or list SimVars by query or category. It does not explicitly state when not to use it, but the sibling tools imply alternatives (e.g., get_simvar for a known SimVar value). No exclusions or prerequisites are mentioned.

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

memory_attachB

Attach to the MSFS process for raw reads. Off unless MSFS_ENABLE_MEMORY=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
process_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full transparency burden. It discloses the dependency on an environment variable and the purpose (raw reads), but does not explain what 'attach' entails (e.g., process handle behavior, idempotency, cleanup). The behavioral insight is minimal but adequate for a simple setup 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?

The description is extremely concise—one sentence containing the core action and a condition. It is front-loaded with the primary purpose. However, it omits parameter details, making it slightly too terse. Overall efficient but not covering all necessary information.

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?

Given the tool has one parameter, no annotations, and an output schema (though not described), the description is incomplete. It fails to discuss the parameter, return value, or setup implications (e.g., how to verify attachment). The agent is left without crucial context for correct invocation.

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 input schema has one parameter 'process_name' with 0% description coverage, and the description does not mention it at all. The description adds no meaning to the parameter, leaving the agent uninformed about its purpose, default behavior, or valid values. This is a critical 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?

The description clearly states the tool's purpose: 'Attach to the MSFS process for raw reads.' The verb 'attach' and resource 'MSFS process' are specific, and the additional condition 'Off unless MSFS_ENABLE_MEMORY=true' distinguishes it from sibling tools like memory_read that operate after attachment.

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 description provides a key usage condition ('Off unless MSFS_ENABLE_MEMORY=true'), indicating when the tool is available. It implies usage before raw memory reads, but does not explicitly state when to use this tool versus alternatives like memory_module_base or memory_read. Overall, clear context but lacks explicit exclusion guidance.

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

memory_module_baseA

Return the base address of a loaded module (defaults to the main executable).

ParametersJSON Schema
NameRequiredDescriptionDefault
module_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations exist; description only states return of base address and default. Missing behavioral details like error handling, permission requirements, or side effects.

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?

Single sentence, front-loaded with action verb, no wasted words.

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 one optional parameter and output schema present, description is sufficient for a simple retrieval tool, but could mention return type if schema not self-explanatory.

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 has 0% description coverage; description adds context by explaining default behavior for null module_name, but doesn't elaborate on the parameter beyond that.

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?

Description clearly states verb 'Return' and resource 'base address of a loaded module', with default behavior 'defaults to the main executable'. Distinct from sibling memory tools that read/write memory.

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?

Implied usage when needing the base address of a module, but no explicit when-to-use, when-not-to-use, or alternatives provided.

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

memory_readB

Read a typed value at an absolute address. type_name: int32/uint32/int64/uint64/float/double/byte/ubyte.

ParametersJSON Schema
NameRequiredDescriptionDefault
type_nameYes
address_hexYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

Description does not mention any side effects, error behavior for invalid addresses, or permissions required. With no annotations, the description fails to disclose these important behavioral traits.

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 concise sentences with no wasted words. Could be slightly improved by structuring use cases or examples, but remains efficient.

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?

Adequate for a simple read operation with two parameters and an output schema. However, lacks behavior details for edge cases and does not differentiate from the pointer chain variant, leaving some gaps.

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?

Explicitly lists allowed type_name values, adding value beyond the schema. However, address_hex format (e.g., '0x' prefix) is not described, and schema coverage is 0%, so the description only partially compensates.

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?

Description clearly states 'Read a typed value at an absolute address' and lists valid type names. This is a specific verb+resource combination that distinguishes it from sibling tools like memory_write or memory_read_pointer_chain.

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?

No guidance on when to use this tool versus alternatives. Does not explain prerequisites (e.g., memory_attach required) or 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.

memory_read_pointer_chainB

Resolve a pointer chain from a base address, then read the typed value at the end.

ParametersJSON Schema
NameRequiredDescriptionDefault
base_hexYes
type_nameYes
offsets_hexYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations exist, and the description fails to disclose error handling or behavior on invalid addresses, leaving the agent uninformed about potential failures.

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 a single concise sentence with no unnecessary words, efficiently conveying core functionality.

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?

Basic understanding is possible, but missing details on return value structure and prerequisites like memory attachment limit completeness.

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?

With 0% schema coverage, the description adds minimal context by mentioning 'pointer chain' but does not explain format constraints for offsets or type_name.

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 clearly states the tool resolves a pointer chain from a base address and reads the typed value, distinguishing it from direct memory reads or module base lookups.

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 for multi-level pointer scenarios, but no explicit when-to-use or comparison with siblings like memory_read is provided.

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

memory_statusA

Raw-memory layer health (enabled flag, attach state, target process/pid).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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

No annotations exist, so the description carries full burden. It discloses what data is returned (health fields) but does not explicitly state that the operation is read-only, non-destructive, or whether it requires prior attachment to a process. More explicit behavioral context is needed.

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 a single concise sentence that front-loads the purpose and lists the key health indicators. No wasted words.

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?

Given zero parameters and the existence of an output schema, the description adequately covers what the tool returns. It could mention that the health status is only meaningful after memory_attach, but it is not strictly necessary since the returned fields imply that context.

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?

No parameters are defined, so baseline is 4. The description does not need to add parameter details, but it also does not leverage the space for extra context about the parameters (which are none).

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 clearly states it provides 'raw-memory layer health' and lists specific fields (enabled flag, attach state, target process/pid). This distinguishes it from sibling memory tools like memory_attach (which performs attachment) and memory_read (which reads values).

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?

No explicit when-to-use or when-not-to-use guidance is provided. It is implied as a status check before memory operations, but no alternatives or exclusions are mentioned among siblings like connection_status or fsuipc_status.

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

memory_writeB

Write to an absolute address. Double-gated: needs MSFS_ENABLE_MEMORY=true AND allow_write=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYes
type_nameYes
address_hexYes
allow_writeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It reveals the double-gating requirement ('MSFS_ENABLE_MEMORY=true AND allow_write=true'), which indicates safety-critical behavior. However, it does not disclose potential side effects, such as crashing the sim or corrupting memory, nor the return value.

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 a single sentence with no extraneous information. It front-loads the purpose and includes essential gating context, making it highly efficient.

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?

Despite the existence of an output schema, the description lacks critical safety context for a memory-write operation. It does not address error handling (e.g., invalid addresses), parameter constraints, or what the output represents. The gating condition is useful but insufficient for safe usage.

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% (low), so the description must compensate. It adds no explanation for the parameters 'value', 'type_name', 'address_hex', or 'allow_write'. The agent must rely on parameter names alone, which are somewhat descriptive but insufficient for precise usage (e.g., valid types for 'type_name').

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 clearly states 'Write to an absolute address', which is a specific verb and resource. It distinguishes this tool from siblings like 'memory_read' and 'fsuipc_write_offset' by specifying it writes to absolute addresses rather than FSUIPC offsets or other memory regions.

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?

No guidance is provided on when to use this tool vs alternatives like 'fsuipc_write_offset' or 'memory_write' vs 'memory_read'. The description only mentions gating conditions but does not explain scenarios where this tool is appropriate or not.

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

set_simvarC

Write a settable SimVar (e.g. AUTOPILOT_HEADING_LOCK_DIR). Check 'settable' in the catalog.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
valueYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description bears the full burden. It states 'Write' indicating mutation, but fails to disclose error handling, side effects, or behavior when the SimVar is not settable.

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

Conciseness3/5

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

The description is very short (one sentence plus a note), but it lacks structure and omits important details. Conciseness is not necessarily effective here.

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?

Given the tool performs a write operation with no annotations, the description is insufficient. It does not explain return values, potential errors, or what happens on failure, and the output schema is present but not leveraged.

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?

Schema description coverage is 0%, so the description must compensate. It only gives an example for 'name' and no description for 'value' or format, adding negligible meaning beyond the 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 clearly states the tool writes a settable SimVar, with an example (AUTOPILOT_HEADING_LOCK_DIR). It distinguishes from get_simvar (read) and from specific autopilot_set_* tools by being a generic setter for any settable SimVar.

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 advises to 'Check settable in the catalog', implying the tool should only be used for settable SimVars, but it does not explicitly contrast with sibling tools like autopilot_set_heading or provide 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.

trigger_eventA

Fire a SimConnect Event (a control/command). Pass 'value' for events that take a parameter.

Examples: trigger_event('GEAR_TOGGLE'); trigger_event('HEADING_BUG_SET', 270).

ParametersJSON Schema
NameRequiredDescriptionDefault
eventYes
valueNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations provided; the description lacks information on side effects, return values, success/failure states, or permissions, leaving significant behavioral gaps.

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 plus examples, no unnecessary words; very efficient and front-loaded.

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 tool with 2 parameters and no annotations, the description covers basic usage but omits details like return format, error handling, or output schema description.

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?

With 0% schema coverage, the description adds some meaning by naming the event parameter and showing the optional 'value' in examples, but does not list possible events or types.

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 explicitly states the verb 'Fire' and the resource 'SimConnect Event', with clear examples distinguishing it from sibling tools like autopilot_set_* or list_events.

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?

Tells when to use the tool and provides an example of the optional parameter usage, but does not explicitly mention when not to use or compare with alternatives.

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

TDQS

A3.7/5.0
Disambiguation5/5

All 23 tools have clearly distinct purposes. Autopilot, connection, FSUIPC, SimVar, event, and memory groups are well-separated, with no ambiguous overlaps even between similar functions like set_simvar and trigger_event.

Naming Consistency5/5

Tool names follow a consistent snake_case verb_noun pattern (e.g., autopilot_set_altitude, get_simvar, memory_read). Only minor exceptions like 'connection_status' are still intuitive and don't break the overall pattern.

Tool Count5/5

23 tools is well-scoped for an MSFS interaction server. Each tool serves a distinct function across autopilot, SimVars, events, FSUIPC, memory, and connection layers, without unnecessary bloat or missing core functionality.

Completeness4/5

The server covers major interaction areas (autopilot, SimVars, events, FSUIPC, memory) with both read and write operations. A minor gap is the lack of a batch FSUIPC read, but generic SimVar and memory tools compensate. Overall comprehensive for low-level sim control.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    Provides a complete end-to-end MCP server implementation with file system tools, web scraping capabilities, and system information access. Includes ready-to-use configuration files and integration examples for Claude Desktop, ChatGPT, and other AI models.
    6
  • A
    license
    Not graded
    quality
    D
    maintenance
    Turns any CLI tool or REST API into an MCP server for Claude, enabling Claude to use git, databases, or any API through natural language.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server with 206+ tools across 16 integrations that gives Claude access to real accounts (LinkedIn, Twitter, Slack, Gmail, WhatsApp, etc.) by extracting auth tokens straight from your browser, no API keys or OAuth needed.
    18
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables Windows desktop automation via MCP, allowing AI agents to control mouse, keyboard, and screen capture with the same interface as Anthropic's computer-use tool.
    2
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/shoff/MSFS-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server