Initial commit: Claude Co-Engineer

A Factorio 2.x mod plus MCP server that lets Claude answer questions about
a running game over Lua UDP, without RCON, so it works in singleplayer.

- Read-only tools: overview, problems, entities, production, power, trends,
  research, recipes, ratio calculator, belt tracer, screenshots, Lua queries
- In-game highlights with clickable [gps] links
- /ask chat command answered by a local helper running claude -p, with a
  per-player model setting and a systemd user service

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
faabandClaude Opus 5.5 committed 2026-10-29 21:28:44 +01:00
commit 1a5cc7426e
13 files changed
+3578

No files matched your search

File diff suppressed because it is too large. Load diff
+9
View File
@@ -0,0 +1,9 @@
{
"name": "claude-co-engineer",
"version": "0.1.0",
"title": "Claude Co-Engineer",
"author": "faab",
"factorio_version": "2.1",
"description": "Answers read-only questions about your world over Lua UDP, so an MCP server can let Claude advise you. Launch Factorio with --enable-lua-udp <port>.",
"dependencies": ["base"]
}
@@ -0,0 +1,15 @@
[mod-setting-name]
claude-co-engineer-allow-lua=Allow Lua queries
claude-co-engineer-ask-port=Ask helper port
claude-co-engineer-ask-model=/ask model
[mod-setting-description]
claude-co-engineer-allow-lua=Lets the Co-Engineer run arbitrary Lua to answer questions the built-in queries can't. It is told to only read, but Lua can't be sandboxed to read-only; disable this if you want a hard guarantee that nothing changes.
claude-co-engineer-ask-port=UDP port the claude-co-engineer-ask helper listens on. /ask sends your question there.
claude-co-engineer-ask-model=Which Claude model answers your /ask questions. Faster models use less of your plan's usage; larger ones give more thorough answers.
[string-mod-setting]
claude-co-engineer-ask-model-haiku=Haiku (fastest)
claude-co-engineer-ask-model-sonnet=Sonnet (balanced)
claude-co-engineer-ask-model-opus=Opus (most thorough)
claude-co-engineer-ask-model-fable=Fable (largest)
+27
View File
@@ -0,0 +1,27 @@
data:extend({
{
type = "bool-setting",
name = "claude-co-engineer-allow-lua",
setting_type = "runtime-global",
default_value = true,
order = "a",
},
{
type = "int-setting",
name = "claude-co-engineer-ask-port",
setting_type = "runtime-global",
default_value = 34201,
minimum_value = 1024,
maximum_value = 65535,
order = "b",
},
{
-- Per player, so everyone in a multiplayer game can pick their own.
type = "string-setting",
name = "claude-co-engineer-ask-model",
setting_type = "runtime-per-user",
default_value = "sonnet",
allowed_values = { "haiku", "sonnet", "opus", "fable" },
order = "c",
},
})