build.gradle used 'latest.release', a dynamic version, so the Gradle deps lockfile captured an ephemeral net.runelite snapshot (client 1.12.34-20260721…-SNAPSHOT). repo.runelite.net prunes old snapshots, so fetchDeps 404'd on re-fetch. Pin to the current concrete release (1.12.35) and regenerate deps.json — releases aren't pruned, so the FOD stays reproducible. Assisted-by: pi (claude-opus-4-8)
RuneLite MCP
A local Model Context Protocol server running inside RuneLite. It gives MCP clients current, informational game and client state without exporting periodic snapshots or controlling the game.
This project is deliberately read-only with respect to gameplay. It does not click, type, invoke menu actions, send packets, select prayers, or make gameplay decisions on the player's behalf.
Status
The foundation milestone is complete. The plugin currently provides:
- MCP
2025-11-25over Streamable HTTP athttp://127.0.0.1:18471/mcp; - focused tools for game context, skills, effects, carried/stored items, progression, Slayer, Grand Exchange, wealth, loaded POH features, collection-log summaries, item prices, optional OSRS Wiki knowledge, and generation-aware event history;
- an
osrs_session_briefprompt; - live reads marshalled onto RuneLite's client thread;
- loopback-only binding, Origin checks, bounded request bodies, and bounded HTTP concurrency;
- a bounded 512-record in-memory ring for state, skill, item, movement, and privacy-safe interaction changes;
- clean logged-in/logged-out behavior and disable/re-enable recovery.
Pi consumes the endpoint through the Foundry MCP registry as osrs. See the
requirements, architecture,
game-context interface,
observation tools,
event-history interface,
progression/account-state tools,
knowledge tools, test strategy,
and roadmap.
Installation
Foundry builds the source from this directory as pkgs.runelite-mcp. Home Manager
links its jar into ~/.runelite/sideloaded-plugins/, and the patched RuneLite
launcher enables developer mode so the installed client can load it. Restart
RuneLite after rebuilding, then enable RuneLite MCP in its plugin list.
The MCP listener has no authentication. It is intentionally reachable only through IPv4 loopback and trusts processes running as the local user.
Development
Enter the Java 11 development shell and run the tests or development client:
nix-shell
./gradlew check
./gradlew run
A valid initialization request:
curl -s http://127.0.0.1:18471/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}' \
| jq
Plugin Hub posture
The design follows Jagex's third-party client guidelines and RuneLite Plugin Hub review guidance. Any feature that can cause an in-game action is out of scope, as are RuneLite plugin introspection and cross-plugin adapters.
The project uses RuneLite's existing Gson dependency and the JDK HTTP server; it adds no third-party runtime dependencies. Network behavior is explicit and limited to the configured loopback listener.