factorio-mcp
Click on "Install 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., "@factorio-mcplist connected players"
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.
factorio-mcp
MCP server for controlling and inspecting a Factorio 2.0 server over RCON.
It exposes tools for common server administration and game-state queries, plus escape hatches for raw console commands and Lua snippets.
Requirements
Node.js 23+ with native TypeScript stripping support
A running Factorio server with RCON enabled
An MCP client that can launch stdio servers
Related MCP server: Minecraft MCP Server
Factorio RCON Setup
For a local Factorio game, enable RCON from the hidden advanced options:
Hold
Ctrl+Altwhile clicking Settings.Click the newly visible The rest button.
Enable the local RCON socket.
Set an RCON password.
Use the same password as
FACTORIO_RCON_PASSWORDwhen starting this MCP server.
For a dedicated server, start Factorio with RCON enabled, or set the equivalent values in your server config:
factorio --start-server save.zip \
--rcon-port 27015 \
--rcon-password "change-me"Keep the RCON port private. This server can execute admin commands and arbitrary Lua through Factorio's /silent-command.
Install
npm install
npm run typecheckRun
FACTORIO_RCON_HOST=localhost \
FACTORIO_RCON_PORT=27015 \
FACTORIO_RCON_PASSWORD=change-me \
npm startEnvironment variables:
Name | Default | Description |
|
| Factorio RCON host |
|
| Factorio RCON port |
| empty | Factorio RCON password |
MCP Client Config
Example stdio configuration:
{
"mcpServers": {
"factorio": {
"command": "node",
"args": ["/path/to/factorio-mcp/src/index.ts"],
"env": {
"FACTORIO_RCON_HOST": "localhost",
"FACTORIO_RCON_PORT": "27015",
"FACTORIO_RCON_PASSWORD": "change-me"
}
}
}
}If you install it as a package or link it locally, you can use the factorio-mcp bin instead of calling node src/index.ts directly.
Tools
Command tools:
rcon_command: execute a raw Factorio console command.lua_exec: execute Lua through/silent-command; return values are printed and tables are serialized withserpent.line.send_chat: send a chat message as[MCP].save_game: save the current game, optionally with a save name.
Player tools:
get_players: list connected players.get_player_info: inspect a player's position, inventory, health, and crafting state.player_action: kick, ban, unban, mute, unmute, promote, or demote a player.
Game-state tools:
get_game_status: tick, age, player count, evolution, research, and speed.get_research_status: current research, progress, queue, and completed technologies.get_production_stats: item or fluid production and consumption stats.get_surface_info: surface details, pollution, and entity counts.find_entities: search entities by name, type, area, or radius.get_logistics_info: logistic network robot and storage information.get_planets: list Space Age planets.get_space_platforms: list Space Age platforms.get_alerts: active alerts for a force.get_electric_network: electric network production, consumption, and satisfaction.get_train_info: train state, schedules, and cargo.get_player_surroundings: nearby entities, resources, enemies, GUI state, cursor stack, vehicle, and walking state.
Resources
factorio://server-status: connection status and basic game information.
Development
npm run typecheckThere is no build step at the moment; the server runs directly from src/index.ts.
Available Tools
19 toolsfind_entitiesA
Search for entities on a surface. Can search by name, type, or area. Returns position, name, health, and other info for each match.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Entity name filter (e.g. 'assembling-machine-3') | |
| type | No | Entity type filter (e.g. 'assembling-machine', 'furnace', 'inserter') | |
| limit | No | Max results to return (default: 50) | |
| radius | No | Search radius around position (default: 50) | |
| surface | No | Surface name (default: 'nauvis') | |
| position | No | Center position for area search |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Mentions return info but does not disclose any behavioral traits (e.g., read-only, rate limits, side effects). Brief and lacks depth.
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?
Two sentences, front-loaded with action, no redundant information. Highly efficient.
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 6 parameters and no output schema, description explains search modes and basic return fields but omits details on combining criteria, defaults, or scope. Adequate but incomplete for a search tool.
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 coverage is 100%, so description adds little beyond listing search criteria. Baseline 3 is appropriate as the description does not significantly enhance schema meanings.
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?
Description clearly states the verb 'Search', resource 'entities on a surface', and search criteria (name, type, area). Distinguishes from sibling tools which are mostly specific getters.
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?
Implies usage for generic entity search but lacks explicit when-to-use or when-not-to-use guidance. Does not mention alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_alertsB
Get active alerts for a force (entity destroyed, turret fire, no storage, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Force name (default: 'player') | |
| surface | No | Surface name to filter alerts (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must fully disclose behavior. It mentions 'active alerts' but does not explain whether alerts are one-time or continuous, if pagination exists, authentication needs, or any side effects. A simple read operation is assumed but not 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?
One concise sentence with no wasted words. However, could be slightly more structured by separately stating purpose and examples.
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?
No output schema exists, but description does not clarify return format. For a simple list tool, this is acceptable but not comprehensive. Behavioral gaps lower the score from a potential 4.
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 coverage is 100% with descriptions for both parameters. Description adds no extra information beyond schema, so baseline 3 is appropriate.
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?
Description clearly states the tool retrieves active alerts for a force, providing examples of alert types (entity destroyed, turret fire, etc.). It is specific and distinguishes from sibling tools like get_game_status or get_player_info.
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?
Implied usage when needing alerts for a force, but no explicit guidance on when to use or not use this tool versus alternatives. No prerequisites or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_electric_networkA
Get electric network statistics: power production, consumption, battery charge, satisfaction.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Force name (default: 'player') | |
| surface | No | Surface name (default: 'nauvis') | |
| position | No | Position of an electric pole in the network to query (default: searches near 0,0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full burden. It states 'Get' which implies read-only behavior, but does not explicitly mention that no modifications occur or disclose any permissions needed.
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, concise sentence with key information front-loaded. However, it could be slightly more detailed without losing efficiency.
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?
The description lists the return values (power production, consumption, etc.), which is helpful given no output schema. It lacks information about edge cases or behavior, but is fairly complete for a simple query tool.
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 100%, with each parameter already documented in the schema. The tool description does not add additional meaning or context beyond the 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 clearly states the verb 'Get' and the resource 'electric network statistics', listing specific items like power production, consumption, battery charge, and satisfaction. It distinguishes itself from sibling tools like get_production_stats and get_game_status.
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 implies usage for retrieving electric network stats but provides no explicit guidance on when to use this tool vs alternatives, nor any prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_game_statusA
Get high-level game state: tick count, map age, player count, evolution factor, current research, game speed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It implies a read-only operation by saying 'Get high-level game state', but does not explicitly state safety, side effects, or authorization requirements. This is adequate but not fully transparent.
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 sentence that immediately states the action and lists the returned data. No wasted words, and it is front-loaded with the key purpose.
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 output schema, the description lists fields but does not explain types, formats, or how to interpret the data. For a tool with no parameters, more detail about the return structure would improve completeness. It is adequate but not fully complete.
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 are no parameters, so the description cannot add meaning beyond the schema. The baseline for zero parameters is 4, and the description meets this by not requiring further parameter clarification.
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 clearly states the tool's purpose: retrieving high-level game state. It lists specific data fields (tick count, map age, etc.), making the resource and scope unambiguous. The sibling tools cover different aspects, so this tool is well-distinguished.
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 guidance is provided on when to use this tool versus alternatives. Given the sibling list, the context is implied, but explicit 'when to use' or 'when not to use' instructions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_logistics_infoB
Get logistics network information: robot counts, items in logistic storage, pending requests.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Force name (default: 'player') | |
| surface | No | Surface name (default: 'nauvis') | |
| position | No | Position to find the nearest logistic network (default: {0,0}) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only lists data returned without disclosing behavioral traits such as read-only nature, error conditions (e.g., when no network exists), or performance implications. Minimal additional context beyond the basic action.
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?
Single concise sentence that effectively communicates the tool's purpose. No unnecessary words, but lacks structured bullet points for clarity.
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?
Description gives a high-level overview but does not specify output format or structure; with no output schema, the agent may be uncertain about the response shape. Could be more complete given the tool's 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 coverage is 100% with descriptions for all three parameters; the tool description adds no extra meaning beyond what is in the schema. Baseline 3 is appropriate.
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?
Description clearly states verb 'Get' and specific resource 'logistics network information' with concrete details like robot counts, items, and pending requests, distinguishing it from sibling tools like get_electric_network.
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 guidance on when to use this tool versus alternatives; no prerequisites or exclusions mentioned. The description does not help the agent choose between this and similar get_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_planetsB
List all planets in the game (Space Age). Shows name, surface properties, and connections.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description implies a read-only operation but does not disclose any behavioral traits such as rate limits, caching, or data freshness.
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?
Two sentences convey purpose and output succinctly with no extraneous words. Information is front-loaded.
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 zero parameters and no output schema, the description provides adequate context (lists planets with name, surface, connections). Could mention if planets are returned in any order or if there is pagination.
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?
No parameters exist, so baseline score of 4 applies. Description correctly indicates no input needed, but adds no additional parameter meaning.
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 clearly states the tool lists all planets and mentions specific details (surface properties, connections). It distinguishes from generic listers but does not differentiate from siblings like get_surface_info.
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 guidance on when to use this tool versus alternatives (e.g., get_surface_info for a single planet). The description is purely descriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_player_infoA
Get detailed information about a specific player: position, inventory summary, character stats, crafting queue.
| Name | Required | Description | Default |
|---|---|---|---|
| player | Yes | Player name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. It lists what information is returned (position, inventory, stats, crafting queue) but does not disclose read-only nature, potential side effects, authentication needs, or rate limits. For a simple getter, this is adequate but not fully transparent.
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, well-structured sentence that front-loads the purpose and lists key categories. Every word contributes value with 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?
With no output schema, the description must inform expected return values. It lists four major categories (position, inventory, stats, crafting queue), which is fairly complete for a player info tool. Minor omission: does not mention if additional details like health or energy are included, but 'detailed information' covers this adequately.
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 coverage is 100% for the single parameter 'player' with description 'Player name'. The description adds that it is for a 'specific player' but does not provide additional semantic details beyond the schema. Baseline 3 is appropriate as schema already handles the parameter documentation.
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 clearly states the tool retrieves 'detailed information about a specific player' and lists specific categories (position, inventory, stats, crafting queue). This is a specific verb+resource combination that effectively distinguishes it from sibling tools like 'get_players' (list all) and 'get_player_surroundings' (environment).
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 guidance on when to use this tool versus alternatives. The description implies usage for a single player's details, and the presence of sibling tools like 'get_players' allows inference, but no clear when-not or alternative naming provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playersB
List all online players with basic info (position, surface, force).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It does not disclose whether authentication is needed, if there are rate limits, or if the list is paginated. Only states it lists 'online players', but no details on behavior beyond that.
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?
Single sentence, clear and front-loaded with the essential information. No unnecessary words.
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 simple list tool with no parameters, the description is minimally adequate. However, it lacks details on return format, pagination, or authentication requirements, which would be helpful given the number of sibling tools.
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?
No parameters exist, so schema coverage is 100%. The description adds no param info but none is needed. Baseline for 0 params is 4.
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 clearly states the tool lists online players with specific fields (position, surface, force). It distinguishes from sibling tool 'get_player_info' which is singular, but does not explicitly differentiate from 'find_entities' which might also find players.
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 guidance on when to use this tool versus alternatives like 'get_player_info' or 'find_entities'. No mention of when not to use it or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_player_surroundingsA
See what's around a player — nearby entities grouped by type, what they're looking at, open GUI, walking state, and the terrain/resources in the area. Use this to understand what the player is currently doing.
| Name | Required | Description | Default |
|---|---|---|---|
| player | No | Player name (default: first connected player) | |
| radius | No | Scan radius around the player (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and adequately discloses behavioral traits: it groups entities by type, includes looking direction, GUI, walking state, and terrain/resources. It implies a read-only operation, though it doesn't specify if it's a snapshot or streaming, or if there are performance considerations.
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?
Two sentences with zero waste. First sentence lists the output components, second sentence states the use case. Front-loaded with the core purpose.
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?
The description explains the return structure sufficiently for a tool with no output schema, listing major components. It is complete for understanding the player's environment, though it might not cover edge cases like empty surroundings.
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 coverage is 100%, so baseline is 3. The description does not add additional meaning beyond the schema for the two parameters; it mentions 'nearby entities' but the schema already describes the radius. No extra value.
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 clearly specifies the verb 'see' and the resource 'player surroundings', listing specific elements like nearby entities grouped by type, looking direction, GUI, walking state, and terrain/resources. This distinguishes it from siblings like get_player_info (general info) and get_players (list of players).
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 explicitly states 'Use this to understand what the player is currently doing', providing clear context for use. However, it does not mention when not to use this tool or name alternative tools for other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_production_statsB
Get item/fluid production and consumption statistics for a force on a surface. In Factorio 2.0, stats are per-surface.
| Name | Required | Description | Default |
|---|---|---|---|
| item | No | Specific item to query (omit for top producers) | |
| type | No | Whether to query items or fluids (default: 'item') | |
| force | No | Force name (default: 'player') | |
| surface | No | Surface name (default: 'nauvis') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavioral traits. It adds one behavioral detail (stats are per-surface in 2.0) but fails to mention if data is cumulative, real-time, or historical, nor any performance implications or permissions needed.
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 two sentences with no wasted words. First sentence states purpose, second adds key behavioral context. Perfectly concise.
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?
The tool has 4 parameters and no output schema, so the description should explain what the return value looks like (e.g., list of stats, numbers, format). It does not. The version detail is helpful but insufficient for complete understanding.
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 100%, so the schema already documents all 4 parameters well. The description adds no additional meaning beyond stating the version-specific surface behavior, which is not parameter-specific. Baseline 3 is appropriate.
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 clearly states the verb 'Get' and the resource 'item/fluid production and consumption statistics', specifying the scope (force on a surface) and a version-specific detail. It distinguishes from sibling tools like get_electric_network or get_logistics_info by focusing on production/consumption metrics.
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 implies usage for querying production/consumption stats but does not provide when-to-use or when-not-to-use guidance relative to alternatives. No explicit context or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_research_statusB
Get research status for a force: current research, progress, research queue, and recently completed technologies.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Force name (default: 'player') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but fails to explicitly state that the operation is read-only or has no side effects. It does not mention error handling, authentication needs, or performance characteristics beyond stating what data is returned.
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, well-structured sentence with no wasted words. It clearly conveys the tool's purpose and output in a concise manner.
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 simple tool with one parameter and no output schema, the description covers the key output fields but lacks details on handling invalid or missing force names, error scenarios, or format of returned data. Adequate but not comprehensive.
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 coverage is 100% and the schema already describes the 'force' parameter with default. The tool description adds no additional meaning or context beyond what the schema provides, so a baseline score of 3 is appropriate.
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 clearly states the tool retrieves research status for a force and lists the specific data returned (current research, progress, queue, completed technologies). It distinguishes itself from sibling tools that cover game state, logistics, or player info.
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 guidance on when to use this tool versus alternatives like get_game_status or get_player_info. The description implies usage is for checking research progress, but does not provide explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_space_platformsA
List all space platforms (Space Age). Shows platform name, state, location, and hub info.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Force name (default: 'player') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the output fields but omits the filtering behavior of the 'force' parameter. Since the description says 'List all space platforms' while the parameter defaults to 'player', it could imply a global list when in reality it filters. With no annotations, this omission is a moderate gap.
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, direct sentence with no extraneous words. It front-loads the primary action and key output, fitting the minimalist structure expected for a simple tool.
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 simple list tool with only one optional parameter and no output schema, the description reasonably conveys the return shape. However, 'hub info' is somewhat vague, and the filtering aspect is missing, preventing a perfect score.
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 coverage is 100% and the parameter description in the schema already explains 'force name' and default. The description adds no additional meaning beyond what the schema provides, meeting the baseline but not exceeding it.
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 clearly states the tool lists all space platforms and enumerates the displayed fields (name, state, location, hub info). It is distinct from sibling tools like get_planets which lists planets, avoiding confusion.
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 guidance is given on when to use this tool versus alternatives like get_planets or get_surface_info. The description does not mention any prerequisites or complementary tools, leaving the agent to infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_surface_infoB
Get information about a game surface (planet): name, map settings, daytime, pollution stats, entity counts.
| Name | Required | Description | Default |
|---|---|---|---|
| surface | No | Surface name (default: 'nauvis') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It lists the type of information returned but does not disclose any side effects, permissions, rate limits, or other behavioral traits like whether it is a read-only 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 a single sentence, front-loaded with the action and resource, and contains no unnecessary words. Every part is informative.
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 simple read tool with one optional parameter and no output schema, the description lists the main categories of returned data. It is fairly complete, though missing an explicit statement that it is a read-only operation.
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 input schema already describes the single parameter 'surface' with default value 'nauvis'. The tool description adds no additional meaning beyond the schema, resulting in a baseline score of 3 for high schema coverage.
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 clearly states the tool retrieves information about a game surface, listing specific data types (name, map settings, daytime, pollution stats, entity counts). However, it does not explicitly distinguish from sibling tools like 'get_planets', which may also involve surface information.
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 provides no guidance on when to use this tool versus alternatives (e.g., get_planets for listing surfaces). No usage context or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_train_infoC
Get information about trains: list trains, their schedules, states, and cargo.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Force name (default: 'player') | |
| limit | No | Max trains to return (default: 20) | |
| surface | No | Surface name (default: 'nauvis') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose behavioral traits. It implies read-only via 'get' but does not explicitly state that it is safe, non-destructive, or any potential side effects. Minimal transparency 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?
Single sentence with a colon-delimited list is efficient and front-loaded. Every word contributes, though the list format could be more structured. No wasted language.
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?
The description mentions what information is returned (schedules, states, cargo) but does not explain how parameters like force, surface, and limit affect results. Since all params are optional with defaults, the agent may not understand filtering capabilities. Adequate but not thorough.
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 coverage is 100%, each parameter has a description. The description adds no additional meaning beyond the schema, but baseline is 3 since the schema already documents force, limit, surface adequately.
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 clearly states the verb 'get' and resource 'trains', and specifies the aspects covered: schedules, states, cargo. It effectively distinguishes from siblings like 'get_logistics_info' by focusing on trains specifically, though not explicitly naming 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?
No guidance on when to use this tool versus alternatives like 'get_logistics_info' or 'get_game_status'. With 18 sibling tools, the agent receives no context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lua_execA
Execute Lua code on the Factorio server via /silent-command. The code is wrapped in a function — use 'return' to send results back. Results are serialized via serpent.line for tables. Use this for any game state query not covered by specific tools.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Lua code to execute. Use 'return expr' to get a value back. Tables are auto-serialized. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. Discloses code wrapping and serialization but fails to state whether tool is read-only or can modify game state. This is a critical omission for an execution tool that could be destructive.
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?
Two succinct sentences with no redundancy. Front-loaded with action and target.
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?
Provides purpose, usage, result handling, and when-to-use. Lacks error handling or security notes, but for a single-param tool with clear schema, this is sufficient. No output schema, so return format covered.
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 coverage is 100% and description adds useful semantics: 'Use 'return expr' to get a value back. Tables are auto-serialized.' Enhances understanding beyond schema's code description.
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 clearly states the tool executes Lua code via /silent-command and distinguishes it from sibling tools by noting it's for queries not covered by specific tools. The verb 'Execute' and resource 'Lua code on the Factorio server' are specific.
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?
Provides explicit context: 'Use this for any game state query not covered by specific tools.' Gives usage instructions on wrapping code, using 'return', and serialization. Lacks explicit when-not-to-use or alternative references beyond sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
player_actionC
Perform an admin action on a player: kick, ban, unban, mute, unmute, promote, or demote.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | The action to take | |
| player | Yes | Player name | |
| reason | No | Reason (for kick/ban) |
TDQS
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 says 'Perform an admin action' but does not disclose behavioral traits like permission requirements, irreversibility of actions (ban/kick), side effects, or success/failure responses.
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 sentence with 13 words, containing the essential purpose and list of actions. No wasted words.
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 the absence of annotations and output schema, the description is insufficient. It does not address error conditions, permissions, return format, or the specific usage of the reason parameter (e.g., only for kick/ban).
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 100%, so baseline is 3. The description lists the enum values but adds no extra meaning beyond what the schema already provides. It does not explain each action's effect or the optional reason parameter's context.
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 uses a specific verb ('Perform') and identifies the resource ('admin action on a player'). It lists the possible actions, which clarifies the scope. However, it does not differentiate from sibling tools like lua_exec or rcon_command.
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 provides no guidance on when to use this tool versus alternatives. There is no mention of prerequisites, when-not-to-use, or comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rcon_commandA
Execute a raw console command on the Factorio server via RCON. Use this as an escape hatch for commands not covered by other tools.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | The console command to execute (e.g. '/players', '/time', '/evolution') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry the full burden. It mentions RCON but lacks details about authentication, error handling, side effects (e.g., destructive commands), rate limits, or output format. This is insufficient for a raw command 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?
Two sentences, zero wasted words, front-loaded with the action. Efficient and easy to parse.
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 one parameter, no output schema, and no annotations, the description provides purpose and usage guidance but omits output behavior, error cases, and safety warnings. It's functionally complete for a simple tool but lacks rich context.
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 coverage is 100%, and the description adds value with concrete examples (e.g., '/players', '/time', '/evolution') that go beyond the schema's generic description, helping the agent know valid inputs.
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 explicitly states the action ('Execute a raw console command'), the resource ('Factorio server via RCON'), and frames it as an escape hatch for commands not covered by other tools, clearly distinguishing it from siblings.
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 says 'Use this as an escape hatch for commands not covered by other tools,' providing clear guidance on when to use it (fallback) and implying when not (if a dedicated tool exists). The sibling tool list reinforces this, though explicit exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_gameB
Save the current game. Optionally specify a save name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Save file name (optional) |
TDQS
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 says 'Save' which implies mutation, but lacks details like overwrite behavior, confirmation, or side effects. Minimal behavioral disclosure.
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?
Two sentences, no unnecessary words. Efficiently communicates the core purpose and optional parameter, though it could be more 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?
For a simple one-parameter tool with no output schema, the description is minimally adequate. However, given no annotations, more context about success/failure or state changes would improve completeness.
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 coverage is 100% and the description adds little beyond what the schema already provides for the 'name' parameter. Baseline score applies as schema does the heavy lifting.
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 explicitly states 'Save the current game' with a clear verb and resource, and mentions the optional parameter. It is distinct from sibling tools which are all queries or other actions.
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 guidance on when to use vs. alternatives, but the tool's purpose is obvious. Implied usage for saving game state, no exclusions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_chatA
Send a chat message visible to all players on the server.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | The message to send |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It fails to disclose potential side effects, required permissions, rate limits, message length restrictions, or behavior on failure. As a simple tool, it barely meets minimum expectations.
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 concise sentence that conveys the core purpose without any extraneous text.
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 the tool's simplicity (single parameter, no output schema, no nested objects), the description is largely complete. However, it could mention message formatting or content restrictions. Still, it provides sufficient context for an AI agent.
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 coverage is 100% with the 'message' parameter described as 'The message to send'. The description adds no additional semantics beyond what the schema provides, meeting the baseline for high coverage.
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 clearly states the verb 'Send' and the resource 'chat message', and specifies the scope 'visible to all players on the server'. It distinguishes itself from sibling tools like player_action or lua_exec which have different purposes.
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 implies usage for sending broadcast messages but provides no explicit guidance on when to use this tool versus alternatives, nor any conditions or prerequisites. It is adequate but lacking depth.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct aspect of the Factorio server: players, entities, surfaces, logistics, etc. Overlaps are minimal and clarified by descriptions, e.g., get_game_status vs get_research_status serve different detail levels.
Most tools follow a 'get_' prefix for queries, but there are deviations like 'find_entities', 'lua_exec', 'player_action', and 'save_game'. The naming is readable and mostly consistent, though not perfectly uniform.
With 19 tools covering player info, world state, actions, and escape hatches, the count is well-scoped for a complex game server. Each tool serves a clear purpose without redundancy.
The tool set covers key game aspects (players, entities, logistics, production, research, trains, surfaces) and includes escape hatches (lua_exec, rcon_command) for any uncovered queries. Missing features like blueprint management are not core to the server's purpose.
Maintenance
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
Manage FadeHost game servers, Discord bots and VPS: console, stats, backups, logs, lifecycle.
Create, configure, manage Minecraft servers — plugins, files, console, modpacks, backups, metrics.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI interactions with a running Minecraft server inside a Docker container using RCON, allowing models to programmatically create Minecraft builds and manage the server.10
- FlicenseNot gradedqualityDmaintenanceEnables control of a Minecraft server through RCON commands via natural language, including game commands, chat-based AI interactions, and server management capabilities.6
- AlicenseAqualityDmaintenanceConnects AI agents to Minecraft servers via RCON to execute commands, monitor logs, and perform read-only SQLite database queries. It is specifically designed to facilitate AI-assisted plugin development, live debugging, and automated testing workflows.611MIT
- AlicenseAqualityDmaintenanceEnables Minecraft server management via RCON: execute commands, list players, get server info, manage whitelist and operators.91MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/phiresky/factorio-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server