Elite Dangerous MCP
Summary: This MCP server lets an LLM answer plain-English Elite Dangerous questions by grounding them in your local journal files plus EDSM, Spansh, Inara, and live EDDN data.
Journal / commander state — read your latest journals for commander name, current system/station, ship loadout, and recent activity history (
get_commander_status,get_current_location,get_ship_loadout,get_journal_history).Galaxy lookups (EDSM) — find systems within a radius of a system or x/y/z coordinates, and get population/government/station details plus a "claimable" assessment for a single system (
edsm_sphere_systems,edsm_system_info).Station & systems search (Spansh) — locate nearby stations with pads/services for shopping lists, and run flexible systems queries (e.g. zero-population filters) (
spansh_find_nearby_stations,spansh_query_systems).Inara — find nearest stations/systems via the Inara API (requires
INARA_API_KEY) (inara_search_nearest).Live market data (EDDN) — pull a bounded sample of live EDDN relay messages, e.g. commodity/outfitting/shipyard updates (
eddn_live_sample).Composite workflows — find zero-population claimable systems near the Teapot asterism (or any centre) for colonisation, and build an Anaconda max-cargo module shopping list with where to buy each part near your current location (
find_colonisation_candidates,build_cargo_shopping_list).Notes — journal tools accept an optional
journal_dirand return a clearfound: falsepayload if no journals exist, so the model can ask for a path rather than hallucinate; Inara API tools stay dormant without a key.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Elite Dangerous MCPWhat's my current location and ship loadout?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Elite Dangerous MCP service (ed-mcp)
Ask an LLM plain-English questions about Elite Dangerous and get answers grounded in your local journal files plus public galaxy data from the EDDN (Elite Dangerous Data Network), EDSM, Spansh, and Inara.
Example queries this server is built to answer:
"Find all stars within 15 light years of the stars in the Teapot (Sagittarius) asterism that have zero population and are claimable for a brand-new space station."
"Make a shopping list to set up my Anaconda as a maximum-cargo hauler: use my journal to find my current system, then find which nearby stations sell the modules I need, where to get them, and how much they cost."
How it works
Claude / LLM client <--MCP (stdio)--> ed-mcp server
|-- local journals (%USERPROFILE%\Saved Games\...)
|-- EDSM API (systems, sphere, stations)
|-- Spansh API (systems/stations search, trade)
|-- Inara API (needs INARA_API_KEY)
|-- EDDN relay (live ZeroMQ firehose docs + sampler)MCP tools
Tool | Source | What it does |
| journal | Commander name, current system/station, ship, credits, rank summary |
| journal | Current system + coordinates, station, body — always from latest journal |
| journal | Current ship type + modules from latest |
| journal | Last N relevant events ( |
| journal | Cargo manifest + rack capacity + free space ( |
| journal | Live market at docked station (prices/supply/demand from |
| journal | Outfitting stock at station ( |
| journal | Shipyard stock at station ( |
| journal | All ships + computed cargo each (latest first) |
| journal | Credits + trade/mission reward sums |
| journal | Backpack + ShipLocker + suit loadout (on-foot) |
| EDSM | Systems in a radius around coordinates / system name |
| EDSM | Population, government, allegiance, bodies for a system (claimable check) |
| Spansh | Stations near coordinates with pads, distance, services |
| Spansh | Flexible tradedangerous-style systems search near a reference |
| Spansh | Full |
| Spansh | Best buy/sell stations for a commodity near you (supply/demand + prices) |
| Spansh | Stations selling a module (name or |
| Spansh | Stations selling a ship near you |
| Spansh | Exploration search over bodies (Earth-likes, values, landables) |
| EDSM | LY distance + jump estimate between two systems |
| Inara | Nearest stations/components via Inara API (needs key) |
| Inara web | Search links + page check, no key (bot-limited, open in browser) |
| EDDN | Sample N live EDDN messages from the relay (commodity/outfitting/shipyard) |
| EDSM+local | Zero-pop, claimable systems near a constellation/centre (Teapot example) |
| journal | Per-system survey ledger (COMPLETE/PARTIAL/VISITED) + totals |
| EDSM+journal | Community bodies catalog + value for one system, plus your log row |
| EDSM+journal | Systems near a reference you have not fully scanned (search backlog) |
| journal+Spansh/EDSM | Anaconda max-cargo module list + where to buy near you + prices |
Three MCP prompts (colonisation_survey, anaconda_cargo_refit, trade_run, raxxla_survey) encode the worked
examples above so the LLM follows a grounded workflow instead of guessing.
Related MCP server: Yamcs MCP Server
Quickstart
Requires Python 3.10+.
# 1. Clone
git clone https://github.com/ramgarden/ed-mcp.git
Set-Location ed-mcp
# 2. Install (venv recommended)
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -e ".[dev]"
# 3. Configure (optional but recommended for Inara tools)
Copy-Item .env.example .env
# edit .env -> INARA_API_KEY=...
# 4. Run tests
pytest -q
# 5. Run the MCP server (stdio)
python -m ed_mcp.serverClaude Desktop config
{
"mcpServers": {
"ed-mcp": {
"command": "C:\\Users\\YOU\\Source\\ed-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "ed_mcp.server"],
"env": { "INARA_API_KEY": "…" }
}
}
}For Claude Code / mcp add, any stdio MCP client works — point it at python -m ed_mcp.server.
OpenCode config
Add an ed-mcp entry under mcpServers in your OpenCode config
(%USERPROFILE%\.config\opencode\opencode.json on Windows,
~/.config/opencode/opencode.json on macOS/Linux):
{
"mcpServers": {
"ed-mcp": {
"command": "C:\\Users\\YOU\\Source\\ed-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "ed_mcp.server"],
"env": { "INARA_API_KEY": "…" }
}
}
}Notes:
Use the venv Python from step 2 above (the package is installed editable, so
-m ed_mcp.serverresolves from any working directory).envis optional — withoutINARA_API_KEYonly theinara_*API tools stay dormant; theinara_website_searchfallback still works.Restart OpenCode (or
opencode mcp reloadif supported) after editing.
GitHub Copilot (VS Code) config
Copilot agent mode consumes MCP servers declared in a workspace
.vscode/mcp.json file (requires VS Code with MCP support enabled).
Create .vscode/mcp.json in your workspace:
{
"servers": {
"ed-mcp": {
"type": "stdio",
"command": "C:\\Users\\YOU\\Source\\ed-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "ed_mcp.server"],
"env": { "INARA_API_KEY": "…" }
}
}
}Notes:
On macOS/Linux use the venv binary path instead, e.g.
/home/YOU/Source/ed-mcp/.venv/bin/python.After saving, run MCP: List Servers from the VS Code command palette to confirm
ed-mcpstarts, then approve its tools when Copilot asks — approval is per session.Same
INARA_API_KEYnote as above: optional, only gatesinara_*API tools.
Journal location
Defaults (in order):
ED_JOURNAL_DIRenv var%USERPROFILE%\Saved Games\Frontier Developments\Elite Dangerous~/.local/share/Frontier Developments/Elite Dangerous(Proton/Linux)
If no journals are found the journal tools return a clear {"found": false, …}
payload so the LLM can ask the user for a path instead of hallucinating.
Data sources & credits
EDDN relay
tcp://eddn.edcd.io:9500(ZeroMQ) — message docs: https://github.com/EDCD/EDDNEDSM API — https://www.edsm.net/en/api-v1
Spansh API — https://spansh.co.uk/api
Inara API — https://inara.cz/settings-api/ (key required)
Journal spec — https://elite-journal.readthedocs.io/
This is a community tool. Not affiliated with Frontier Developments, EDDN/EDCD, EDSM, Spansh, or Inara.
Available Tools
12 toolsbuild_cargo_shopping_listC
Anaconda max-cargo module list + where to buy near your current location.
Uses journals for current system/coords + owned modules, Spansh for nearby stations with outfitting, EDSM sphere as fallback. Prices/stock rotate; verify at the station.
| Name | Required | Description | Default |
|---|---|---|---|
| journal_dir | No | ||
| max_stations | No | ||
| search_radius_ly | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It usefully discloses the data-source chain (journals for coords/owned modules, Spansh for outfitting stations, EDSM as fallback) and warns that 'prices/stock rotate; verify at the station'. However it omits any mention of auth requirements, rate limits, or what happens if journals are absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences with the core purpose front-loaded, followed by mechanism and a caveat. Little waste, though the middle sentence is dense with tool names that could be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, but for a 3-parameter tool with 0% schema coverage and no annotations, the description leaves parameters and the location/radius behavior unexplained. It is under-specified for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 3 parameters (journal_dir, max_stations, search_radius_ly), and the description never names or explains them. It hints at 'your current location' and 'journals' but adds no actionable semantics for overriding the directory, station count, or radius.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (build) and resource (cargo shopping list) and clarifies the output is an Anaconda max-cargo module list plus purchase locations near the player. It is distinguishable from siblings, though the 'Anaconda max-cargo' framing is jargon-heavy and assumes domain familiarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance and no routing away from sibling tools like spansh_find_nearby_stations or inara_search_nearest, which overlap with the 'where to buy' function. The agent must infer usage purely from the purpose statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eddn_live_sampleB
Bounded sample of live EDDN relay messages (needs pyzmq + network).
| Name | Required | Description | Default |
|---|---|---|---|
| timeout_s | No | ||
| max_messages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that output is 'bounded' (not an endless stream), 'live' (real-time vs historical), and dependent on 'pyzmq + network', but it omits failure modes, rate limits, and what the bounding concretely means.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. The core purpose comes first, and the runtime dependency is placed parenthetically without disrupting the main clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need not be explained. But with no annotations, 0% parameter description coverage, and no usage guidance, the definition leaves the agent unable to judge how to tune timeout_s or max_messages or when this live-sample tool is preferable to siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention timeout_s or max_messages. The word 'bounded' faintly relates to the limits but does not map to parameters or add semantic meaning beyond the schema titles and defaults, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the resource (EDDN relay messages) and scope (bounded sample, live), so an agent knows it obtains a limited set of real-time EDDN messages. It does not explicitly differentiate from the sibling tools, which are mostly static game-data queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor any when-not conditions. The parenthetical 'needs pyzmq + network' is a runtime prerequisite, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edsm_sphere_systemsC
Systems within radius_ly of a system name or x/y/z coords (EDSM).
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| z | No | ||
| radius_ly | No | ||
| system_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it discloses almost nothing beyond the '(EDSM)' data source: no rate limits, no indication of what happens when both a name and coordinates are supplied, and no note on result caps. A safe read-only call is implied but never stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with zero filler and the core scope front-loaded. It is efficient, though the extreme terseness leaves it close to under-specified rather than optimally structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, but with five optional parameters, 0% schema coverage, and no annotations, the definition omits essential calling context: how to pick a center, what the default radius means, and any limits on results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description partially compensates by naming radius_ly and indicating that either a system name or x/y/z coordinates can define the center. It does not explain the default radius of 15, units, or the mutual exclusivity/precedence of system_name vs coordinates, leaving real ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (systems) and a specific scope (within radius_ly of a point), enough to distinguish it from edsm_system_info (one system) and spansh_find_nearby_stations (stations). It does not explicitly name a competing sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the many alternatives (edsm_system_info, spansh_query_systems, spansh_find_nearby_stations). Usage is only inferable from the phrase 'within radius_ly'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edsm_system_infoC
Population/government/stations for one system + claimable assessment (EDSM).
| Name | Required | Description | Default |
|---|---|---|---|
| system_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only lists output fields and does not state that the operation is read-only, whether any authentication or rate limits apply, or how errors (e.g., unknown system) are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the returned data, but it is a fragmented, slash-delimited phrase rather than a well-structured sentence. It avoids waste but is under-specified for the tool's scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value details need not be fully described. However, the description omits usage context relative to its many siblings and provides no parameter format guidance, leaving gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one required parameter (system_name) with 0% schema description coverage, and the description does not clarify its format, case sensitivity, or accepted values. It only implies 'one system', which is insufficient to compensate for the undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (one system) and enumerates the data returned (population, government, stations, claimable assessment), so the agent knows what it does. However, it does not differentiate this tool from EDSM sibling edsm_sphere_systems or the generic spansh_query_systems, leaving ambiguity about which to choose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no mention of alternatives, and no exclusions. The phrase 'for one system' implies a single-system lookup but does not help the agent decide between this and the many other system/stations tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_colonisation_candidatesB
Zero-pop, claimable systems near a constellation/centre.
centre: 'teapot' (Sagittarius asterism) or an EDSM system name or 'x,y,z'. Workflow: resolve Teapot anchor stars -> EDSM sphere search per anchor -> batch detail lookup -> filter zero-pop/uncontrolled/stationless -> dedupe.
| Name | Required | Description | Default |
|---|---|---|---|
| centre | No | teapot | |
| radius_ly | No | ||
| max_candidates | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses a multi-step pipeline (anchor resolution, EDSM sphere search, batch detail lookup, filtering, deduplication) plus the exact filter criteria (zero-pop, uncontrolled, stationless). It does not mention read-only safety, rate limits, or authentication, but the search nature implies a safe read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the core purpose before the centre formats and workflow. The arrow-chain workflow is terse but each line contributes distinct information, with no obvious filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, three parameters, and an output schema already present, the description is adequate but incomplete. It covers purpose, centre formats, and internal workflow, but omits semantics for two parameters and any behavioral notes on rate limits or result volume, leaving gaps an agent could need before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description only explains one of three parameters: centre's accepted formats ('teapot', EDSM system name, 'x,y,z'). It says nothing about radius_ly units/meaning or max_candidates behavior, leaving two parameters undocumented beyond their names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific outcome: zero-pop, claimable systems near a centre, which distinguishes it from generic system or station search siblings. However, it does not explicitly name an alternative tool or contrast itself against edsm_sphere_systems or spansh_find_nearby_stations, so sibling differentiation is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The workflow bullet implies how the tool operates and the centre formats are given, so usage is inferable. But there is no explicit when-to-use guidance, no exclusions, and no reference to alternative sibling tools for nearby-system or station searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_commander_statusC
Commander name, current system/station, ship, credits from local journals.
| Name | Required | Description | Default |
|---|---|---|---|
| journal_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and 'from local journals' is the only behavioral clue (data source). It says nothing about read-only safety, auth/permission needs, staleness of local journal data, or what happens when journals are absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence-fragment with no filler, front-loading the returned fields. It is efficient, though its fragmentary style contributes to the missing verb/action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, but the one input parameter is entirely undocumented and there is zero usage context. For an aggregate status tool with many overlapping siblings, this leaves notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single 'journal_dir' parameter, and the description never mentions it, so the agent gets no help on what directory it expects, its format, or its default-null behavior. With one undocumented parameter this falls below the 3 baseline that a fully covered schema would earn.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates the returned fields (commander name, system/station, ship, credits) but never states a verb or action, reading as a noun phrase rather than a description of an operation. It gives a partial sense of scope versus siblings like get_current_location or get_ship_loadout, but doesn't explicitly frame itself as an aggregate status snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of alternatives among the many location/ship/inara sibling tools, and no exclusions. The agent is left to infer that this is a broad status read versus the narrower siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_locationB
Current system + coords + station from latest Location/FSDJump/Docked event.
| Name | Required | Description | Default |
|---|---|---|---|
| journal_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral burden, and it does disclose the provenance (latest Location/FSDJump/Docked event), which tells the agent the result reflects the most recent relevant journal entry. However, it says nothing about read-only nature, failure modes when no event exists, or staleness behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with no filler, front-loading the returned data and its source. It leans toward under-specification rather than verbosity, but every word carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the terse description needn't enumerate return fields. Yet the undocumented journal_dir parameter and absent failure/empty-state behavior leave gaps for an agent calling the tool without prior knowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter journal_dir has 0% schema description coverage, and the description never mentions it. An agent cannot tell whether journal_dir is required, what format it takes, or what the default behavior is when omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (current system, coordinates, station) and the data source it derives from, so an agent immediately knows this returns the player's present position. It is distinguishable from siblings like get_ship_loadout or get_commander_status, though the terse phrasing leaves the exact field set to the output schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description names the underlying journal events but gives no guidance on when to call this versus alternatives such as get_journal_history or get_commander_status. No prerequisites (e.g., needing a journal_dir or prior game session) are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_journal_historyC
Recent relevant journal events, newest first (FSDJump, Docked, Loadout, ...).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| journal_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses ordering and example event types only; it omits read-only/security semantics, how 'relevant' is determined, pagination behavior, and what journal_dir or limit actually do.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the resource and ordering, followed by illustrative examples. No unnecessary words are used.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, 0% parameter coverage, and an output schema that only offloads return-format explanation, the description is too thin. It leaves the two parameters, selection logic, and usage context undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description mentions neither limit nor journal_dir. It adds no semantic information beyond the bare parameter names, so an agent gets no guidance on what journal_dir expects or what limit controls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource (journal events), ordering (newest first), and examples of event types (FSDJump, Docked, Loadout). It does not differentiate from sibling tools like get_commander_status or get_ship_loadout, so clear but no sibling routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no alternatives, and no conditions are provided. An agent must infer when journal history is preferable to the many sibling status, location, and search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ship_loadoutB
Current ship + modules from latest Loadout event.
| Name | Required | Description | Default |
|---|---|---|---|
| journal_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full load, and it does disclose the data source ('latest Loadout event'), which tells the agent the value is derived from journal data and may be stale. It says nothing about what happens if no Loadout event exists, whether results are cached, or permissions, leaving real gaps for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler and the resource front-loaded. It is efficient, though the telegraphic fragment style leaves no room for the context an unannotated tool needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the source is identified. However, for a tool with no annotations and an undocumented parameter, the definition omits error behavior (e.g., no Loadout event found) and the meaning of journal_dir.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the single optional parameter journal_dir is never mentioned in the description, so the agent gets no explanation of what it controls or what the null default implies. With one undocumented parameter, the description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource ('current ship + modules') and its source ('latest Loadout event'), which is enough for an agent to distinguish it from sibling tools like get_commander_status or get_current_location. It lacks an explicit verb and any named sibling it is not, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus alternatives, nor any prerequisites. The only implicit cue is 'latest Loadout event', which hints at recency but gives no guidance on conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inara_search_nearestC
Nearest stations/systems via Inara API (needs INARA_API_KEY).
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | station | |
| system_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the external Inara API dependency and required API key, but does not state that it is a read-only search, mention rate limits, or describe error/side effects. The auth note is useful, but the safety profile is left implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the core action and data source; the auth prerequisite is parenthetical and compact. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no annotations and 0% schema description coverage, the definition omits parameter roles, search value semantics, and alternative selection. The output schema covers returns, but callers still lack guidance needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two parameters, so the description must explain them. It never mentions 'search' or 'system_name', and gives no format guidance or default behavior for 'search' (default 'station'). No parameter meaning is added beyond schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific search action (nearest) and resource (stations/systems) and names the data source (Inara API). It is distinguishable from EDSM/Spansh siblings by the API, though it does not explicitly contrast when to prefer Inara over those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Only the prerequisite 'needs INARA_API_KEY' is given; there is no when-to-use or when-not-to-use guidance relative to sibling tools like spansh_find_nearby_stations or edsm_sphere_systems. The API requirement is helpful but does not select between competing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spansh_find_nearby_stationsC
Stations nearest to galactic coords, slimmed for shopping lists (Spansh).
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| z | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Slimmed' is a useful hint that the payload is trimmed relative to a full station query, but there is nothing about result ordering, distance semantics, rate limits, or auth requirements for a Spansh-backed call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the resource and scope front-loaded and no filler. It is arguably too terse, but every word does work and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need not be re-explained, but with no annotations, 0% parameter documentation, and four parameters, the description is too thin to make the tool safely callable without trial and error.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% – x/y/z and max_results have only bare titles. The description's 'galactic coords' loosely maps to x/y/z, but max_results is never explained and no units, ranges, or defaults are given beyond the schema's default of 10.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource (stations), an implicit verb (find nearest), and the source (Spansh) along with a scope qualifier ('slimmed for shopping lists'). An agent can tell it returns station data, though it doesn't explicitly contrast with inara_search_nearest or spansh_query_systems, which is the main thing separating a 4 from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for shopping lists' hints at a use case but there is no explicit when-to-use guidance, no mention of when NOT to use it, and no named alternative despite several overlapping siblings (inara_search_nearest, spansh_query_systems).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spansh_query_systemsC
Flexible Spansh systems search, e.g. {"population": {"value": [0,0]}}.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| filters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read-only search but does not mention pagination, result limits, authentication needs, or any other operational behavior; the single filter example is parameter detail rather than behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. However, its brevity borders on under-specification for a search tool whose parameters are otherwise undocumented.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. Still, with no annotations and no schema descriptions, the description is missing page behavior, filter semantics, usage guidance, and any indication of how the results are structured or limited.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. The example filter object adds meaningful syntax for the filters parameter, but the page parameter is not mentioned at all and the full filter schema remains undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource: a flexible search over Spansh systems. It does not differentiate this tool from sibling search tools such as edsm_sphere_systems or spansh_find_nearby_stations, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the many sibling search tools, nor any stated exclusions or prerequisites. The word 'Flexible' implies general applicability but offers no decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v0.1.0- First observed
build_cargo_shopping_list - First observed
eddn_live_sample - First observed
edsm_sphere_systems - First observed
edsm_system_info - First observed
find_colonisation_candidates - First observed
get_commander_status - First observed
get_current_location - First observed
get_journal_history - First observed
get_ship_loadout - First observed
inara_search_nearest - First observed
spansh_find_nearby_stations - First observed
spansh_query_systems
TDQS
Scored across 12 tools
Several tools retrieve similar data from different providers (e.g., inara_search_nearest vs spansh_find_nearby_stations vs edsm_sphere_systems; get_commander_status vs get_current_location), so an agent may need descriptions to choose correctly. Core distinctions exist by provider/granularity, but overlap remains.
All names are snake_case and follow recognizable source/action prefixes: get_* for local journal tools, provider_* for external API calls, and verb_noun for composite tools. Minor deviations like edsm_sphere_systems (noun phrase) and find_colonisation_candidates (no source prefix) keep it from perfect consistency.
12 tools is well within the ideal 3-15 range and each tool maps to a distinct data source or workflow (local journals, EDSM, Spansh, Inara, EDDN, colonisation, shopping list). No tool feels like filler.
The surface covers the apparent colonisation/shopping/status domain well, including candidate finding, system assessment, and shopping-list generation. Minor gaps exist for standalone station market/outfitting or shipyard queries, but agents can work around them via existing external-search tools.
Maintenance
Related MCP Connectors
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
Ingest and search LogsLoom logs from coding agents.
Machine-readable utilities and datasets for AI agents.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides AI agents with research capabilities for local Calibre e-book libraries, including fulltext search across titles, ISBNs, and comments, plus structured excerpt retrieval from books.2GPL 3.0
- AlicenseBqualityDmaintenanceEnables AI assistants to interact with Yamcs mission control systems through natural language, providing tools and resources for telemetry, commands, links, storage, instances, and alarms.344MIT
- AlicenseNot gradedqualityAmaintenanceEnables LLMs to build and explore a cognitive neuroscience-inspired knowledge graph with SQLite, supporting search, graph traversal, temporal sequences, and structured reasoning.24MIT
- AlicenseNot gradedqualityDmaintenanceAuto-managed SPICE kernels for heliophysics missions. Enables querying spacecraft positions, trajectories, and coordinate transforms via natural language.25 PyPIMIT