Exposes Factorio game tools via the Model Context Protocol (MCP) and REST endpoints. Routes all write operations through an Action Broker for serialized game-state management. Provides tools for executing Python code in the Factorio Learning Environment, querying game state, retrieving lab tasks, and accessing few-shot examples.
Server has 5 tools with complete input schemas and descriptions. Naming follows verb_noun convention (get_*, execute_*). Descriptions are substantive (100-250 chars), exceeding the 10-char minimum but below the 1024-char cap. However, parameter descriptions are sparse or missing in several tools. The execute_code tool accepts arbitrary Python, creating a high-risk surface that lacks input validation guidance or security warnings in the description. Output schemas are not documented, LLMs cannot predict response structure. Error handling is mentioned in execute_code ('hint' field) but not formalized across tools. No tool annotations (readOnlyHint/destructiveHint) present despite clear risk profiles.
Execute arbitrary Python code inside the Factorio Learning Environment. Code runs in the game context and has access to all FLE APIs (get_resource_patches, move_to, harvest_resource, craft_item, place_entity, insert_item, extract_item, inspect_inventory, get_entities, sleep, etc.). Returns stdout, stderr, and a success flag. On error the 'hint' field suggests the fix.
Return verified working FLE Python code for a given category. Call this BEFORE writing code for a new action category. Categories: mining, smelting, crafting, placement, logistics.
Return the current cached Factorio game state from the broker. Includes: inventory, research_progress, entities_near_player (radius 20), production_stats_per_minute, player_position, map_dimensions. This is instant — it does NOT queue an action.
Return all 24 FLE lab-play task definitions including task_id, target_entity, target_count, time_limit_s, complexity_tier.
Return current progress toward a specific lab-play task goal.
execute_code lacks security warnings and input validation guidance. Accepts arbitrary Python code with no sanitization hints or constraints documented. Description does not warn about injection risks or require permission checks.
No output schemas documented for any tool. LLMs cannot predict response structure (e.g., what fields does get_game_state return? What is the structure of lab tasks?). Breaks downstream tool chaining.
Tool annotations missing. execute_code is destructive (WRITE risk) and get_game_state is read-only, but no readOnlyHint or destructiveHint attributes present in schema.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | <=2025-11-25 | v2 |
execute_code priority parameter lacks validation constraints. Accepts 0-3 but no description of what each level means or consequences of priority inversion.
Error handling not formalized. execute_code mentions 'hint' field for errors, but no other tools document error responses or recovery guidance.