Odel
Savecraft

Savecraft

@joshsymondsData & Analytics10GoApache-2.0Updated 1w ago

Savecraft serves real save game data and expert game knowledge to AI assistants.

Server endpointStreamable HTTP

This is the third-party server itself — Odel doesn't run it. Hitting this URL directly talks straight to the upstream server with no auth or proxying. Connect through Odel to front it with managed auth.

Savecraft

Savecraft

Real game data for your AI assistant, on every supported game.

Cloud Deploy Daemon Deploy Plugin Deploy Install Deploy Windows Tests

Savecraft gives Claude, ChatGPT, and Gemini real game data via MCP on every supported game (Magic, Path of Exile, Factorio, RimWorld, Stellaris, Diablo II, and more): rules, items, builds, economy, the moment you add a game. Add a game and Savecraft connects it the right way for that game -- you never pick the plumbing. Account games (Path of Exile, World of Warcraft) connect through the game's own read-only sign-in. Save-file games are parsed by a local daemon on the machine you play on, so your AI sees your actual characters, gear, and run progress.


Quick Start

1. Connect your AI

ChatGPT: install the Savecraft app -- one click from the OpenAI app directory.

Claude: sign in at my.savecraft.gg to get your MCP connector URL, then add it to Claude's connector settings.

2. Add a game

At my.savecraft.gg you add a game; Savecraft connects it the way that game works. There is one verb -- add a game -- and no install to start.

  • Reference is instant. Every supported game answers rules, items, builds, and economy questions the moment it's added: no account, no install, no saves.

  • Account games (Path of Exile -- a GGG-approved connection -- and World of Warcraft) sign in through the game's own provider, read-only. Your AI reads your live characters with nothing installed.

  • Save-file games (Diablo II, RimWorld, Stellaris, Stardew Valley, and more) are read by the Savecraft daemon on the machine you play on. The save files never leave your device -- only parsed state is sent. Install it where you play:

    Linux / Steam Deck:

    curl -sSL https://install.savecraft.gg | bash
    

    Windows / Mac: download from install.savecraft.gg

    It auto-detects supported games and starts syncing. Then ask your AI about your character, your build, or your last run -- it already has the data.

  • Moddable games (Factorio) push state from a Savecraft mod instead; adding the game points you to it.

How It Works

Reference data is served straight from the cloud, and account games reach it through the game's server-side OAuth -- neither needs anything on your machine. The diagram below is the save-file path: how a local game's saves become structured data your AI can read.

  ┌─────────────────────┐            ┌───────────────────────────┐
  │  Gaming Device      │   HTTPS    │  Cloudflare               │
  │                     │  ───────>  │                           │
  │  savecraftd         │   push     │  Push API ──> R2 Storage  │
  │  - fs watcher       │            │                           │
  │  - WASM plugin      │  <──────>  │  SourceHub DO (WebSocket) │
  │    runtime (wazero) │    WS      │                           │
  └─────────────────────┘            │  MCP Server ──> AI Tools  │
                                     └───────────────────────────┘
  ┌─────────────────────┐                       │
  │  Claude / ChatGPT / │   <──── MCP ──────────┘
  │  Gemini             │
  └─────────────────────┘
  1. Daemon watches your save files. Detects changes via fsnotify with debounce + hash dedup.
  2. WASM plugins parse saves into structured JSON. Sandboxed via wazero - plugins can't touch your filesystem or network. Ed25519 signed.
  3. AI reads your state through MCP tools. Section-level granularity - the AI fetches only what it needs to answer your question.

MCP Tools

ToolDescription
list_gamesAll games with saves, note titles, and reference modules with parameter schemas
get_saveSummary, overview, sections, and notes for a save
get_sectionSection data from D1
refresh_saveRequest fresh data (daemon-backed or API-backed)
search_savesFull-text search across all saves and notes
get_noteFull content of a user-attached note
create_note / update_note / delete_noteManage notes via AI conversation
query_referenceExecute reference data computations (drop rates, build math)

Supported Games

Plugins are sandboxed WASM binaries that parse save files. They read raw bytes on stdin, emit structured JSON on stdout, and cannot access your filesystem or network. Each plugin is Ed25519 signed and verified before loading. Plugins can optionally ship a reference.wasm for server-side computation: drop calculators, gift databases, crop planners - deployed via Workers for Platforms.

GameFormatReference ModulesStatusAuthor
Clair Obscur: Expedition 33Save file (WASM)--Beta@joshsymonds
Diablo II: Resurrected.d2s / .d2i binaryDrop CalculatorBeta@joshsymonds
FactorioFactorio Mod Portal + WASMRecipe Lookup, Ratio Calculator, Oil Balancer, Tech Tree, Blueprint Analyzer, Evolution Tracker, Power Calculator, Production FlowAlpha@joshsymonds
Magic: The Gathering ArenaPlayer.logCard Search, Rules Search, Draft Advisor, Play Advisor, Card Stats, Deckbuilding, Collection Diff, Match Stats, Sideboard Analysis, Mana BaseBeta@joshsymonds
Path of ExileGGG account (approved app) or pobb.in/pastebin URLBuild Planner (headless Path of Building), Gem Search, Passive Tree Search, Unique Search, Mod Search, Economy PricesBeta@joshsymonds
RimWorldSteam Workshop modSurgery Calculator, Crop Optimizer, Combat Calculator, Material Lookup, Drug Analyzer, Raid Estimator, Gene Builder, Research NavigatorBeta@joshsymonds
Stardew ValleyXML save directoryGift Preferences, Crop PlannerBeta@joshsymonds
StellarisSteam Workshop + .sav (Clausewitz/Rust)Tech Search, Tech Path, Building Search, Component Search, Tradition Search, Trait Search, Civic Search, Edict Search, Job SearchAlpha@joshsymonds
World of WarcraftBattle.net API--Beta@joshsymonds

See docs/games.md for detailed descriptions of each game's sections and reference modules.

Planned save-file parsers: Victoria 3 (Clausewitz/Rust), CK3/HOI4 (Clausewitz), Baldur's Gate 3 (.lsv), Elden Ring (.sl2), Civilization VI, Bethesda games (.ess)

Planned API adapters (no daemon required): Path of Exile 2 (GGG API), FFXIV

Planned mod integrations: Minecraft, Terraria (mod-as-device: mod pushes directly, no daemon)

Want to add a game? See the plugin development guide.

Project Structure

savecraft.gg/
├── cmd/savecraftd/       # Daemon entrypoint
├── internal/
│   ├── daemon/           # Orchestrator, domain types, interfaces
│   ├── runner/           # WASM plugin execution (wazero)
│   ├── watcher/          # Filesystem watcher (fsnotify + debounce)
│   ├── wsconn/           # WebSocket client (reconnecting)
│   ├── pluginmgr/        # Plugin download, verification, caching
│   ├── selfupdate/       # Daemon self-update mechanism
│   └── signing/          # Ed25519 plugin signature verification
├── worker/               # Cloudflare Worker + Durable Object (TypeScript)
├── reference/            # Reference Worker - WASI shim for server-side plugin computation (WfP)
├── web/                  # SvelteKit frontend
├── plugins/              # WASM plugin sources (parser + optional reference per game)
├── proto/                # Protobuf protocol definitions
├── install/              # Platform installers + systemd units
├── assets/               # Brand assets
└── docs/                 # Architecture docs

Development

Requires nix devenv + direnv. direnv allow activates the environment on cd.

just --list          # Show all targets
just test            # Run all tests (Go + Worker)
just check           # Lint, generate, test everything
just proto           # Regenerate Go + TypeScript from protobuf
just dev-worker      # Start Worker dev server (Miniflare)

See docs/overview.md for the system architecture, or browse docs/ for component-specific documentation.

Tech Stack

ComponentTechnology
DaemonGo, wazero (WASM runtime), fsnotify, nhooyr.io/websocket
CloudCloudflare Workers, Durable Objects, R2, D1 (SQLite/FTS5)
AuthClerk (OAuth, JWT, magic links)
FrontendSvelteKit, TypeScript
PluginsGo or Rust compiled to WASI Preview 1, ndjson stdout contract
ProtocolProtobuf (buf codegen to Go + TypeScript)
Buildjust, nix devenv + direnv

Security

  • WASM sandboxed: Plugins cannot access filesystem, network, or environment. stdin in, JSON out.
  • Ed25519 signed: Every plugin binary is cryptographically signed. Tampered = refused.
  • Read-only daemon: Cannot modify your saves. Kernel-enforced on Linux via systemd sandboxing.
  • No filesystem exposure: AI sees structured JSON, never your local paths or files.
  • Private R2: No public bucket access. The Worker mediates all reads/writes, scoped to the authenticated user.

License

Apache License 2.0


savecraft.gg - by @joshsymonds · Privacy Policy