About
MCP server for working with LOOT repository and mods data
README
Single Rust binary: a read-only MCP server using rmcp and libloot. It exposes LOOT-style output (masterlist-driven load order suggestion, plugin metadata YAML, general messages, Bash tags from plugin headers) — not Nexus API data.
Does not replace mutagen-mcp (records, FormIDs, compare) or mod-organizer-mcp (MO2 layout, plugins.txt). Use those for lists and deep plugin analysis; use loot_evaluate with paths from MO2 (especially game_local_path = active profile folder).
Version: see Cargo.toml (loot_server_info also returns the crate version at runtime).
Build (recommended: Docker)
This repo is meant to be built and run in a container (same toolchain as CI/production):
docker build -t loot-mcp .
# binary ends up in the image as /usr/local/bin/loot-mcp
Local cargo build --release works if you have a suitable Rust + libloot environment; the binary path is target/release/loot-mcp.
Run (stdio)
docker run -i --rm loot-mcp
The process speaks MCP over stdio (typical for Cursor and other MCP clients).
Environment variables
| Variable | Purpose |
|---|---|
LOOT_DATA_PATH |
LOOT application data root (masterlists, prelude). Used when tool args omit loot_data_path. |
LOOT_MCP_GAME_TYPE |
Default game id (e.g. SkyrimSE) when the client omits game_type. |
LOOT_MCP_GAME_PATH |
Default game install root when the client omits game_path. |
LOOT_MCP_GAME_LOCAL_PATH |
Default profile folder (plugins.txt / loadorder.txt). |
LOOT_MCP_MO2_MODS_PATH |
MO2 mods directory; requires profile path and modlist.txt for priority order. |
LOOT_MCP_CACHE |
In-process prep cache for libloot game + plugin headers. Default 1 in the published Docker image; set 0 to disable. |
LOOT_MCP_CACHE_TTL_SEC |
Optional TTL (seconds) for cache entries when set to a positive value. |
LOOT_MCP_TIMING |
1 / true: print phase timings to stderr (loot-mcp timing: …). |
LOOT_MCP_TIMINGS_JSON |
1 / true: add a timings object to tool JSON responses (total_ms, prep_cache, per-phase ms). |
LOOT_MCP_DIAGNOSTICS_LOG |
Absolute path to an NDJSON file; appends one JSON object per begin/end (and errors). In Docker, bind-mount a host directory and point this path inside the container. |
LOOT_MCP_PARALLEL_METADATA |
Set to 0 to disable parallel per-plugin metadata evaluation (default is parallel). |
Cursor MCP config
Docker (typical)
Use paths as seen inside the container in tool arguments (e.g. game_path: "/game", game_local_path: "/profile").
{
"mcpServers": {
"loot-mcp": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "/path/to/Skyrim Special Edition:/game:ro",
"-v", "/path/to/MO2/profiles/MyProfile:/profile:ro",
"-v", "/path/to/MO2/mods:/mods:ro",
"-v", "/path/to/LOOT AppData:/loot:ro",
"-e", "LOOT_DATA_PATH=/loot",
"-e", "LOOT_MCP_GAME_TYPE=SkyrimSE",
"-e", "LOOT_MCP_GAME_PATH=/game",
"-e", "LOOT_MCP_GAME_LOCAL_PATH=/profile",
"-e", "LOOT_MCP_MO2_MODS_PATH=/mods",
"-e", "LOOT_MCP_CACHE=1",
"-e", "LOOT_MCP_TIMINGS_JSON=1",
"-e", "LOOT_MCP_DIAGNOSTICS_LOG=/logs/loot-mcp-diagnostics.ndjson",
"-v", "/path/on/host/mcp-logs/loot:/logs",
"loot-mcp"
]
}
}
}
Adjust host paths and image tag (loot-mcp, loot-mcp:local, etc.). Omit LOOT_MCP_TIMINGS_JSON / LOOT_MCP_DIAGNOSTICS_LOG / the logs volume if you do not need diagnostics.
Local binary
{
"mcpServers": {
"loot": {
"command": "/absolute/path/to/loot-mcp"
}
}
}
Container one-liner (manual test)
docker build -t loot-mcp .
docker run -i --rm \
-v "/path/to/Game:/game:ro" \
-v "/path/to/MO2/Profile:/profile:ro" \
-v "/path/to/MO2/mods:/mods:ro" \
-v "/path/to/LOOT:/loot:ro" \
-e LOOT_DATA_PATH=/loot \
-e LOOT_MCP_GAME_TYPE=SkyrimSE \
-e LOOT_MCP_GAME_PATH=/game \
-e LOOT_MCP_GAME_LOCAL_PATH=/profile \
-e LOOT_MCP_MO2_MODS_PATH=/mods \
loot-mcp
The image sets ENV LOOT_MCP_CACHE=1 so repeated tools in one container reuse prep when signatures match.
Tools
loot_evaluate— Main evaluation:load_order_current, optionalload_order_suggested,general_messages, optional per-plugin metadata. Required MCP args:game_type,game_path(defaults can come from env above). Useful flags:include_load_order_suggested: falseskips sorting (faster);include_plugin_metadata: truewithplugin_metadata_content: "problems"returns only plugins with LOOT issues (warn/error messages, incompatibilities, optional requirements/load_after);general_messages_min_severity:say|warn|error; pagination viaplugin_metadata_offset/plugin_metadata_limit;include_master_header_issues. On failure, JSON includeserrorand the MCP result is an error.loot_load_order— Readsloadorder.txtorplugins.txtfromgame_local_path(fast). Optionalload_order_use_libloadorder: trueforces libloadorder (slower with many MO2 paths). Same path/env defaults asloot_evaluate.loot_plugin_metadata— Evaluated metadata for an explicit list of plugin names; same base arguments asloot_evaluate(flattened), plusplugin_names.loot_server_info— Crate version, libloot version/revision, executable path.
Notes
general_messages vs per-plugin messages
general_messages are global LOOT messages (prelude / masterlist “general” section) — usually a small count. Most masterlist text is per plugin; use include_plugin_metadata and plugin_metadata_content: "problems" or "full" to see it.
WSL / Linux
Game and profile paths must be readable inside the process (e.g. /mnt/c/... or distro mounts). libloot behavior matches upstream LOOT for supported games.
Installing LOOT
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/Charrdge/LOOT-MCPFAQ
Is LOOT MCP free?
Yes, LOOT MCP is free — one-click install via Unyly at no cost.
Does LOOT need an API key?
No, LOOT runs without API keys or environment variables.
Is LOOT hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install LOOT in Claude Desktop, Claude Code or Cursor?
Open LOOT on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
Fetch
Web content fetching and conversion for efficient LLM usage.
AWS KB Retrieval
Retrieval from AWS Knowledge Base using Bedrock Agent Runtime.
by modelcontextprotocolSpring AI MCP Server
Provides auto-configuration for setting up an MCP server in Spring Boot applications.
llm-analysis-assistant
A very streamlined mcp client that supports calling and monitoring stdio/sse/streamableHttp, and can also view request responses through the /logs page. It also
by xuzexin-hzCompare LOOT with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All ai MCPs
