X-Plane Control
Control and inspect an X-Plane flight simulator from ChatGPT or Codex using natural-language requests.
X-Plane Control is a cross-platform plugin containing a bundled, local Model Context Protocol (MCP) server. The MCP server lets the model search X-Plane's own DataRefs.txt and Commands.txt catalogs, read live simulator data, change writable values, execute simulator commands, and relocate the aircraft through X-Plane's native UDP protocol.
Example requests:
- “Move my plane to a random location in Arizona.”
- “Show my current position, indicated airspeed, altitude, and heading.”
- “Find the correct command to lower the landing gear, then execute it.”
- “Set the parking brake and verify its state.”
- “Find writable DataRefs related to the instrument lights.”
The model does not need a hard-coded list of every X-Plane control. It searches the catalog that belongs to your X-Plane version, selects an appropriate command or writable DataRef, and calls the corresponding MCP tool.
[!WARNING]This project is for flight-simulator use only. It is not intended for real-aircraft operation, navigation, or training decisions. Commands and writes can immediately change the simulated aircraft. Keep X-Plane's unauthenticated UDP interface on a trusted computer or private network.
Contents
- How it works
- Features
- Requirements
- Install a prebuilt release
- Install from source
- Prepare X-Plane
- Configure the plugin
- Use X-Plane on another computer
- Start using the plugin
- Available tools
- Configuration reference
- Behavior and limitations
- Troubleshooting
- Update or uninstall
- Development
- Distribution notes
- Technical references
How it works
ChatGPT desktop or Codex CLI
|
| MCP over local stdio
v
X-Plane Control MCP server
|
| Native X-Plane UDP packets
| RREF / DREF / CMND / RPOS / PREL
v
X-Plane 11 or 12
The plugin has two independent inputs:
- A catalog —
DataRefs.txtandCommands.txttell the model which controls exist, what they mean, and which DataRefs are writable. - A network target — an IP address and UDP port identify the running X-Plane simulator.
The catalog and simulator do not have to be on the same computer. For example, ChatGPT can run the plugin on a laptop using copied catalog files while X-Plane runs on a separate gaming PC on the same LAN.
The server runs locally as a Node.js process. It does not install an X-Plane binary plugin, modify the simulator, require Python, require PyYAML, or send simulator traffic through a hosted service.
Features
- Runs on macOS, Linux, and Windows with Node.js 20 or newer.
- Bundles the complete MCP runtime into a single
dist/server.mjsfile. - Searches the user's own X-Plane DataRef and command catalogs.
- Uses an X-Plane installation root or two explicitly selected catalog files.
- Auto-detects several common X-Plane 11 and 12 installation locations.
- Auto-discovers X-Plane from its multicast beacon when possible.
- Supports an explicit host and port for remote computers, VPNs, and networks where multicast is unavailable.
- Reads scalar values with
RREF. - Writes numeric scalar values with
DREF. - Executes exact commands with
CMND. - Reads geographic position, attitude, velocity, and rotation through
RPOS. - Relocates an aircraft through
PRELrather than attempting to write read-only geographic DataRefs. - Includes a high-level tool that selects a random interior point in Arizona.
- Rejects catalog DataRefs marked read-only.
- Rejects unknown DataRefs and commands by default.
- Requires an explicit override for command names associated with quitting, resetting, replay, failures, fire, or crashes.
Requirements
For everyone
- X-Plane 11 or X-Plane 12.
- Node.js 20 or newer on the computer running ChatGPT or Codex.
- A supported local plugin host:
- ChatGPT desktop with plugin support, or
- Codex CLI.
- The
DataRefs.txtandCommands.txtfiles from the X-Plane version you want to control.
Check Node.js before installing:
node --version
The result must begin with v20, v21, v22, or a later version. A packaged release does not require npm, TypeScript, Python, or a separate dependency installation.
The node executable must be available to the plugin host through PATH. The standard Node.js installer is generally the easiest choice on macOS and Windows. If Node was installed only through a shell-specific version manager such as nvm, see The plugin is installed but its MCP server will not start.
Additional requirements when building from source
npm, supplied with Node.js.- Git, if cloning rather than downloading the repository as a ZIP archive.
Supported ChatGPT and Codex surfaces
This repository distributes a local marketplace plugin with a bundled stdio MCP server.
- ChatGPT desktop: supported where local plugins are available.
- Codex CLI: supported. Enter
/pluginsto use the plugin browser after adding the marketplace. - Codex IDE extension: not supported because the IDE extension does not currently support plugins.
- ChatGPT web and mobile: they cannot directly launch this computer's bundled stdio server. A separately hosted and published edition would be needed for those surfaces.
This local marketplace installation normally does not require ChatGPT Developer Mode or a public HTTPS endpoint. Developer Mode is used when registering and testing remote MCP server connections; this package instead launches its own MCP server locally from .mcp.json. Account or workspace policies can still restrict plugin availability.
See the official OpenAI documentation for current plugin availability and installation and plugin packaging.
Install a prebuilt release
This is the recommended installation method for most users.
1. Download and extract the bundle
Download the latest release archive from this repository's Releases page and extract it. Open the extracted x-plane-control-marketplace directory.
If you downloaded the entire repository instead of a release archive, the prebuilt marketplace is located at:
release/x-plane-control-marketplace
The correct marketplace directory contains both of these paths:
.agents/plugins/marketplace.json
plugins/x-plane-control/.codex-plugin/plugin.json
Dot-prefixed directories such as .agents may be hidden in Finder or File Explorer. They do not need to be made visible for the terminal commands to work.
2. Add the downloaded marketplace
Open Terminal on macOS or Linux, or PowerShell on Windows. Change to the extracted marketplace directory, then run:
codex plugin marketplace add .
You can also give the command an absolute path without changing directories:
codex plugin marketplace add "/absolute/path/to/x-plane-control-marketplace"
PowerShell example:
codex plugin marketplace add "C:\Users\YourName\Downloads\x-plane-control-marketplace"
3. Install the plugin
codex plugin add x-plane-control@x-plane-control-local
Confirm that Codex can see the marketplace and plugin:
codex plugin marketplace list
codex plugin list
4. Restart the host
Fully quit and reopen the ChatGPT desktop app, then open the Plugins Directory and confirm that X Plane Control is installed and enabled. Start a new chat so the new skill and MCP tools are loaded.
In Codex CLI, start a new session after installation. You can also enter /plugins to review installed plugins.
Install from source
Use this method to develop the plugin, inspect the source, or build a release yourself.
1. Download the repository
Use GitHub's Code → Download ZIP action and extract the archive, or clone the repository:
git clone https://github.com/josvisser66/x-plane-control.git
cd x-plane-control
If the repository contains x-plane-control as a subdirectory, change into that directory before continuing. It is the directory containing package.json.
2. Install dependencies and validate the project
npm ci
npm run validate
Validation performs a TypeScript check, runs the automated tests, and creates dist/server.mjs.
3. Create the distributable marketplace
npm run package:plugin
This creates:
release/x-plane-control-marketplace
Only the runtime plugin, its marketplace metadata, license, skill, and documentation are copied into this directory. Source files, tests, and development dependencies are not required by the installed plugin.
4. Add and install the local marketplace
codex plugin marketplace add "./release/x-plane-control-marketplace"
codex plugin add x-plane-control@x-plane-control-local
Restart ChatGPT desktop or start a new Codex CLI session.
Prepare X-Plane
1. Locate the catalogs
For a normal X-Plane installation, the files are here:
<X-Plane installation>/Resources/plugins/DataRefs.txt
<X-Plane installation>/Resources/plugins/Commands.txt
The directory name is Resources/plugins, with a lowercase plugins in current X-Plane installations. The plugin also checks a few capitalization variants for compatibility.
Do not configure Resources/plugins as the installation path. Configure the X-Plane installation root that contains Resources, such as:
- macOS:
/Applications/X-Plane 12or/Users/alice/X-Plane 12 - Windows:
C:\X-Plane 12 - Windows Steam:
C:\Program Files (x86)\Steam\steamapps\common\X-Plane 12 - Linux:
/home/alice/X-Plane 12 - Linux Steam:
/home/alice/.steam/steam/steamapps/common/X-Plane 12
DataRefs.txt and Commands.txt are intentionally not embedded in this repository. Loading the files supplied with the simulator keeps discovery aligned with the user's installed X-Plane version. If there is no local X-Plane installation, copy both files to any readable directory and configure their exact paths separately.
2. Enable UDP networking
Open X-Plane's Settings → Network screen. Ensure that X-Plane accepts incoming network/UDP connections and note its inbound UDP port. The standard X-Plane port is commonly 49000, but use the value shown by your simulator.
Allow X-Plane through the operating-system firewall when prompted. When X-Plane is on another computer, its firewall must permit inbound UDP traffic on the configured X-Plane port from the computer running the plugin.
3. Load a flight
The MCP server can start before X-Plane, and X-Plane initializes networking during startup. For reliable DataRef values, commands, and relocation, wait until an aircraft and scenery have finished loading into a flight.
During the splash screen, main menu, or flight loading:
- the status probe might not receive a response;
- some DataRefs may be unavailable or contain placeholder values;
- commands may be ignored; and
- position or DataRef writes may be overwritten by the loading process.
Configure the plugin
Configuration can be saved conversationally, which is the simplest method, or supplied through environment variables.
Option A: configure an X-Plane installation root
Start a new chat with the plugin installed and say:
Use X Plane Control. Configure my X-Plane installation directory as
/Applications/X-Plane 12, then show the status without changing the simulator.
Windows example:
Use X Plane Control. Configure my X-Plane installation directory as
C:\X-Plane 12, then check the catalog.
The plugin looks beneath the root for Resources/plugins/DataRefs.txt and Commands.txt. It validates both files before saving the path.
Option B: configure two catalog files
Use this mode if X-Plane is installed on another computer or the catalog files are stored elsewhere:
Use X Plane Control. Configure DataRefs.txt as
/Users/alice/XPlaneCatalog/DataRefs.txtand Commands.txt as/Users/alice/XPlaneCatalog/Commands.txt, then show the status.
Both paths must be supplied together. The files may be in different directories. Setting explicit catalog paths replaces a previously saved installation root; setting an installation root replaces previously saved explicit paths.
Configure the UDP target
For X-Plane on the same computer, automatic discovery is usually sufficient. If discovery is unavailable, the plugin falls back to 127.0.0.1:49000.
To set an explicit target:
Configure X-Plane at host
192.168.1.50on UDP port49000, then probe it.
The host may be an IPv4 address or a hostname resolvable by the plugin computer. An explicit host is recommended when X-Plane runs on another computer.
Verify the configuration
Ask:
Use X Plane Control to show the complete status and probe the simulator.
The status includes:
- the saved configuration-file location;
- the effective catalog and network settings;
- the resolved
DataRefs.txtandCommands.txtpaths; - the number of parsed DataRefs and commands;
- whether the target was configured, discovered from a beacon, or taken from the localhost default; and
- the result of reading X-Plane's version DataRef.
Use X-Plane on another computer
The bundled MCP server always runs on the ChatGPT/Codex computer. X-Plane may run on that computer or another computer reachable over UDP.
Recommended remote-computer setup
- Connect both computers to the same trusted LAN or private VPN.
- Find the X-Plane computer's private IP address, for example
192.168.1.50. - In X-Plane, enable incoming network connections and note the inbound UDP port.
- Allow inbound UDP traffic to that port through the X-Plane computer's firewall.
- Copy
DataRefs.txtandCommands.txtto the ChatGPT/Codex computer if it does not also have X-Plane installed. - Configure the copied catalog paths.
- Configure the X-Plane computer's IP address and UDP port.
- Load a flight and run the status probe.
Example conversation:
Use X Plane Control. My simulator is at
192.168.1.50:49000. My local catalogs are/Users/alice/XPlaneCatalog/DataRefs.txtand/Users/alice/XPlaneCatalog/Commands.txt. Save that configuration and probe X-Plane.
Multicast discovery normally works only on the same local network segment and may be blocked by Wi-Fi isolation, routers, containers, or VPN software. Configure the host explicitly in those cases.
Do not forward X-Plane's UDP port directly from an internet router. The native protocol is not encrypted or authenticated. For computers in different locations, use a private VPN that makes the machines reachable by private IP, and restrict firewall access to the plugin computer.
Start using the plugin
After installation or an update, always start a new chat or Codex session. A direct instruction to use the plugin makes first-run testing easier:
Use X Plane Control to check whether my simulator and catalogs are ready. Do not change anything yet.
Once the status is healthy, ordinary natural-language requests can be used.
Read simulator state
- “Show my geographic position and attitude.”
- “Read my indicated airspeed, true airspeed, heading, and pressure altitude.”
- “Find the DataRefs for fuel quantity and show their current values.”
- “Check whether the parking brake is set.”
For a request that does not name exact DataRefs, the model should search the catalog first and use the descriptions and types to select candidates.
Execute simulator commands
- “Find and execute the command to toggle the landing gear.”
- “Turn on the landing lights using an X-Plane command.”
- “Pause the simulator.”
- “Execute the starter command twice.”
Commands represent discrete actions. The current server sends CMND command-once packets; it does not implement command-begin/command-end holding.
Set values
- “Find a writable DataRef for the parking brake, set it to fully engaged, and read it back.”
- “Set the first engine throttle ratio to 0.5.”
- “Find writable instrument-light brightness DataRefs for this request and show me the candidates before changing anything.”
Descriptions in DataRefs.txt define units and valid meanings. If a unit, array element, or desired value is ambiguous, ask the model to show the candidates before writing.
Move the aircraft
- “Move my plane to a random location in Arizona.”
- “Teleport the user aircraft to latitude
34.8697, longitude-111.7609, at 5,000 meters MSL, heading east at 60 meters per second.” - “Show my position, move me to these coordinates, and show the resulting position.”
Geographic position DataRefs are read-only. The plugin uses X-Plane's native PREL packet for relocation and then requests a separate RPOS sample when possible.
Ask before changing anything
If you want to inspect the model's choice first, say so explicitly:
Find the best command or writable DataRef for lowering the landing gear. Explain what you found, but do not execute or write anything until I confirm.
The write, command, and relocation tools are marked as mutating operations, so the client may also display a confirmation or approval prompt depending on its security settings.
Available tools
| Tool | Purpose | Changes X-Plane? |
|---|---|---|
get_xplane_status |
Show effective configuration, catalog status, target selection, and optionally probe the simulator. | No |
configure_xplane |
Save catalog paths, installation root, host, port, or discovery timeout. | Saves local configuration only |
search_xplane_catalog |
Search DataRefs and commands by path or description; optionally return only writable DataRefs. | No |
read_xplane_datarefs |
Read as many as 32 scalar or indexed values with RREF. |
No |
write_xplane_datarefs |
Send as many as 32 numeric updates with DREF. |
Yes |
execute_xplane_command |
Execute an exact command with CMND, optionally multiple times. |
Yes |
get_xplane_position |
Read position, attitude, velocity, and rotation with RPOS. |
No |
teleport_xplane_aircraft |
Relocate an aircraft to explicit geographic coordinates with PREL. |
Yes |
move_xplane_aircraft_random |
Choose a random point in a supported region and relocate the user aircraft. | Yes |
The current high-level random-region tool supports arizona. Other geographic locations can still be used through explicit latitude and longitude with teleport_xplane_aircraft.
Configuration reference
Saved configuration
Conversational configuration is stored in the operating system's normal per-user configuration directory:
- macOS:
~/Library/Application Support/XPlaneControl/config.json - Linux:
$XDG_CONFIG_HOME/x-plane-control/config.json, or~/.config/x-plane-control/config.jsonwhenXDG_CONFIG_HOMEis unset - Windows:
%APPDATA%\XPlaneControl\config.json
Example:
{
"installationPath": "/Applications/X-Plane 12",
"host": "192.168.1.50",
"port": 49000,
"discoveryTimeoutMs": 1200
}
Explicit catalog-file example:
{
"datarefsPath": "/Users/alice/XPlaneCatalog/DataRefs.txt",
"commandsPath": "/Users/alice/XPlaneCatalog/Commands.txt",
"host": "192.168.1.50",
"port": 49000
}
Use either installationPath or the datarefsPath/commandsPath pair, not both.
Environment variables
Environment variables override saved values:
| Variable | Meaning |
|---|---|
XPLANE_HOME |
X-Plane installation root containing Resources/plugins |
XPLANE_DATAREFS_PATH |
Exact path to DataRefs.txt; requires XPLANE_COMMANDS_PATH |
XPLANE_COMMANDS_PATH |
Exact path to Commands.txt; requires XPLANE_DATAREFS_PATH |
XPLANE_HOST |
Simulator hostname or IP address |
XPLANE_PORT |
Simulator's inbound UDP port, from 1 through 65535 |
XPLANE_DISCOVERY_TIMEOUT_MS |
Multicast discovery timeout, from 100 through 30000 milliseconds |
XPLANE_CONTROL_CONFIG_PATH |
Alternate saved configuration-file path |
Catalog precedence is:
- the explicit
XPLANE_DATAREFS_PATHandXPLANE_COMMANDS_PATHpair; XPLANE_HOME; and- the saved catalog configuration or automatic installation detection.
XPLANE_HOST, XPLANE_PORT, and XPLANE_DISCOVERY_TIMEOUT_MS override their saved equivalents individually.
Environment variables are easiest with Codex CLI because the CLI inherits the shell environment:
export XPLANE_HOME="/home/alice/X-Plane 12"
export XPLANE_HOST="192.168.1.50"
export XPLANE_PORT="49000"
codex
PowerShell:
$env:XPLANE_HOME = "C:\X-Plane 12"
$env:XPLANE_HOST = "192.168.1.50"
$env:XPLANE_PORT = "49000"
codex
A desktop app launched from Finder, the Dock, or the Start menu may not inherit variables set in a terminal. Use configure_xplane and the saved configuration for the desktop app unless you intentionally launch it with a controlled environment.
Clear saved settings
Ask the plugin to clear individual fields:
Clear the saved X-Plane host and port, then show the effective target without probing.
To switch back from explicit files to automatic installation detection:
Clear both saved DataRefs.txt and Commands.txt paths, then show the catalog status.
The two explicit catalog paths must always be configured or cleared together.
Behavior and limitations
UDP writes are not acknowledged
X-Plane's native DREF, CMND, and PREL datagrams do not return success acknowledgements. A successful tool result means that the datagram was sent, not that X-Plane accepted the change.
When verification matters, ask the model to read the DataRef or position afterward. A readback is a separate observation and can still be affected by UDP loss or simulator behavior.
UDP is unordered and unreliable
Packets can be lost, duplicated, delayed, or arrive out of order. The plugin uses timeouts for reads and reports missing values. It does not provide transaction semantics across multiple writes.
Only numeric scalar writes are supported
The current DREF tool writes finite numeric values. Native arrays and strings must be addressed one indexed numeric element at a time, for example:
sim/example/array_dataref[0]
Whole-array and string reads/writes are not implemented.
RREF values are float32
X-Plane returns RREF subscription values as 32-bit floating-point numbers, even when the catalog describes a DataRef as an integer or double. Small precision differences are expected.
Catalogs do not guarantee runtime availability
DataRefs.txt describes X-Plane's base catalog. Aircraft and third-party plugins can create additional DataRefs or commands at runtime. Those custom entries may not appear in the base files.
The tools have an allowUnlisted escape hatch, but the model should use it only when an exact custom path has been identified from a trusted aircraft/plugin source. An unlisted name should never be guessed.
Writable does not mean every aircraft will honor a value
A DataRef marked writable can still be controlled or overwritten by the active aircraft, autopilot, flight model, or another plugin. Some DataRefs are meaningful only for particular aircraft or simulator states.
Units come from the catalog
Names alone do not always reveal whether a value is degrees, radians, knots, meters per second, feet, meters, a ratio, or an enum. The model should inspect the catalog description and ask for clarification when the intended unit is not clear.
Multiple X-Plane instances
Beacon discovery returns the first valid instance it hears. Configure an explicit host and port when more than one simulator is present.
Troubleshooting
codex: command not found
Install or update Codex CLI, open a new terminal, and confirm:
codex --version
codex plugin --help
The current CLI must provide the codex plugin commands. See the official OpenAI plugin documentation for supported installation surfaces.
The marketplace or plugin is not visible
Run:
codex plugin marketplace list
codex plugin list
Confirm that:
x-plane-control-localappears as a marketplace;x-plane-controlappears in the plugin list;- you added the directory containing
.agents/plugins/marketplace.json, not the inner plugin directory; - the ChatGPT desktop app was fully restarted; and
- you started a new chat after installation.
Workspace administrators can restrict local plugins. If the marketplace is recognized by the CLI but unavailable in the app, check the account or workspace policy.
The plugin is installed but its MCP server will not start
Check Node.js in a terminal:
node --version
On macOS or Linux, also run:
command -v node
On Windows:
Get-Command node
The bundled .mcp.json launches node, so it must be visible on the host's PATH. If Node is available only after a shell profile loads, install Node system-wide with the standard installer or arrange for the desktop application to inherit the correct PATH, then fully restart the app.
To check the packaged server manually, run this from the marketplace directory:
node plugins/x-plane-control/dist/server.mjs --transport=stdio
A healthy stdio server waits silently for MCP messages; press Ctrl+C to stop it. Developers can run the automated handshake test with npm run smoke:stdio from the source directory.
The catalog cannot be found
Ask for status without probing X-Plane:
Show the X Plane Control status with probing disabled, including the resolved catalog paths.
Check that:
- an installation path points at the X-Plane root, not at
Resources/plugins; - both files exist beneath
<root>/Resources/plugins; - explicit file paths name the files themselves;
- both explicit paths were configured together;
- the plugin host has permission to read both files; and
- environment variables are not overriding the saved configuration.
If X-Plane is on another computer, copy both files to the plugin computer and configure those copies.
The UDP probe times out
Check the following in order:
- X-Plane is running and an aircraft has finished loading.
- X-Plane accepts incoming network connections.
- The configured UDP port matches X-Plane's Network settings.
- The configured host is the X-Plane computer's current IP address.
- The operating-system firewall allows the traffic.
- Both computers can reach each other on the same LAN or private VPN.
- Client isolation is disabled on the Wi-Fi network.
- An explicit host is configured if multicast discovery cannot cross the network boundary.
Sending a UDP datagram can appear successful even when no simulator is listening. Use the version probe or a DataRef read to establish reachability.
A command or write says “sent” but nothing changes
Possible causes include:
- the flight is still loading;
- UDP packet loss;
- the DataRef value uses different units or an enum;
- the wrong array index was selected;
- the active aircraft or another plugin immediately overwrote the value;
- the command is not applicable to the active aircraft; or
- the configured catalog does not match the running X-Plane version.
Ask the model to read the value back and to show the catalog entry it selected. For a discrete cockpit action, ask it to search for an exact command instead of forcing a DataRef write.
An add-on aircraft command or DataRef is missing
The standard catalog files do not necessarily contain dynamically registered add-on controls. Consult the aircraft or plugin documentation for the exact path. Then ask the model to use that exact unlisted name and explain why the override is appropriate.
Values look rounded or slightly different
RREF returns float32 values. Precision can be lower than the underlying DataRef type, and X-Plane can update values between separate reads.
Update or uninstall
Update a downloaded local bundle
Download and extract the new release.
Remove the old installed copy:
codex plugin remove x-plane-control@x-plane-control-localIf the new bundle is in a different directory, replace the marketplace registration:
codex plugin marketplace remove x-plane-control-local codex plugin marketplace add "/path/to/new/x-plane-control-marketplace"Install the plugin again:
codex plugin add x-plane-control@x-plane-control-localRestart ChatGPT desktop and start a new chat.
Saved X-Plane Control settings live outside the plugin cache, so reinstalling the plugin does not normally remove the saved simulator/catalog configuration.
Uninstall
codex plugin remove x-plane-control@x-plane-control-local
codex plugin marketplace remove x-plane-control-local
The commands remove the installed plugin and marketplace registration. They do not delete the separately saved X-Plane Control config.json. Delete that file manually only if you also want to erase the saved paths and network target.
Development
Common commands
npm run check
npm test
npm run build
npm run smoke:stdio
npm run package:plugin
npm run checktype-checks the TypeScript source.npm testruns the packet, catalog, configuration, and fake-X-Plane tests.npm run buildbundles the server intodist/server.mjs.npm run smoke:stdiolaunches the bundled server and performs an MCP handshake/tool-list test.npm run package:pluginvalidates, packages, and smoke-tests the distributable plugin.
Project layout
.codex-plugin/plugin.json Plugin manifest
.mcp.json Bundled stdio MCP launch configuration
dist/server.mjs Bundled runtime
skills/x-plane-control/ Model workflow instructions
src/catalog.ts Catalog parsing and search
src/config.ts Saved and environment configuration
src/protocol.ts X-Plane packet encoding and decoding
src/server.ts MCP tools and transports
src/xplane.ts UDP discovery and client
tests/ Automated tests
scripts/package-plugin.mjs Release marketplace builder
scripts/smoke-stdio.mjs MCP stdio smoke test
Optional diagnostic HTTP transport
The normal plugin uses stdio. A loopback HTTP transport is retained for local protocol diagnostics:
node dist/server.mjs --transport=http --host=127.0.0.1 --port=8765
Endpoints:
- MCP:
http://127.0.0.1:8765/mcp - Health check:
http://127.0.0.1:8765/health
This listener is unauthenticated and should remain bound to loopback. Do not expose it publicly.
Distribution notes
Making this repository public on GitHub lets users download and install the local marketplace bundle. It does not automatically list the plugin in OpenAI's universal public Plugins Directory.
The GitHub/local-marketplace edition is deliberately a bundled stdio plugin because it must access local catalog files and a simulator on the user's network. OpenAI's public plugin submission path generally expects a production MCP service at a stable HTTPS endpoint, with appropriate authentication and review. That would be a separate architecture and release channel.
Before creating a GitHub release:
- Update the version and public author/repository metadata in
.codex-plugin/plugin.jsonandpackage.json. - Run
npm ci. - Run
npm run package:plugin. - Test the generated
release/x-plane-control-marketplacedirectory on a clean account or machine. - Archive that directory as the release asset, preserving
.agents/plugins/marketplace.json. - Publish the source and release archive under the included MIT license.
Privacy and security
- The MCP server and X-Plane UDP client run locally.
- No OpenAI API key is required by this server.
- No X-Plane credentials are used.
- Saved configuration contains filesystem paths and, optionally, a simulator hostname/IP and port.
- X-Plane UDP traffic is unencrypted and unauthenticated.
- Catalog files are read locally and used for search and safety metadata.
- The plugin can change simulator state, so review tool approvals and use it only with a simulator you are authorized to control.
Technical references
- X-Plane DataRefs reference
- X-Plane SDK data access documentation
- X-Plane UDP data output protocol overview
- XPlaneConnector protocol notes
- XPPython3 UDP documentation
- OpenAI plugin documentation
- OpenAI plugin packaging guide
- Model Context Protocol specification
License
MIT. See LICENSE.