ModWrenchBLOCK
One MCP server for mod platforms and local modding diagnostics. Search Thunderstore, read your real load order from MO2/r2modman/Vortex, and trace a crash log to the mod that caused it — from inside Claude, Cursor, or any MCP client. Free and MIT.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
[](https://github.com/171county/modwrench/actions/workflows/ci.yml) [](https://www.npmjs.com/package/@modwrench/cli) [](LICENSE)
An MCP server that connects your AI assistant to mod platforms and to your own modding setup, so you can ask questions in your AI client instead of clicking through web UIs.
It runs on your machine. No account, no service, no server anyone operates.
Paste a crash log. Get the mod that caused it.
SomeArmorMod.esp is named as a suspect, and SomeArmorMod.dll is sitting at frame 2 of the call stack. ModWrench parsed the log and laid out what is in it. It did not decide the cause — that is the model's job, and the page says so.
Search every platform you have connected, with the author on every row.
These are not screenshots of a website. Each is an MCP Apps page: one self-contained HTML document with no external scripts, no stylesheets, no fetches and no images. Every tool answers in text that any client can show and a model can read. Crash logs, mod lists, dependencies and load orders, known conflicts, the deck, Patch Day, Crash Whisperer and the Doctors also have a page, drawn only in a client that supports MCP Apps: the tool points at its page, the client fetches it and draws it, and the data the page draws comes with the answer as structured data. A client that can't draw pages never fetches one and is never sent tha
b68fc65b330bOBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.
claude mcp add cli -- npx -y @modwrench/[email protected]
Exposed tools (53)
51 read · 2 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
modio_game_tags | read | |
modio_get_file | read | |
modio_get_game | read | |
modio_get_mod | read | |
modio_list_games | read | |
modio_list_mods | read | |
modio_mod_comments | read | |
modio_mod_dependencies | read | |
modio_mod_events | read | |
modio_mod_files | read | |
modio_mod_metadata_kvp | read | |
modio_mod_stats | read | |
modio_mod_tags | read | |
modio_modfile_detail | read | |
modio_popular | read | |
modio_search_mods | read | |
modio_top_games | read | |
mw_activate_platform | read | |
mw_check_known_conflicts | read | |
mw_crash_whisperer | read | |
mw_critique | read | |
mw_deck | read | |
mw_detect_environment | read | |
mw_diagnose_crash | read | |
mw_doctor | read | |
mw_parse_crashlog | read | |
mw_patch_day | write | |
mw_query_mod_metadata | read | |
mw_read_load_order | write | |
nexus_endorse_mod | read | |
nexus_file_preview | read | |
nexus_get_file | read | |
nexus_get_game | read | |
nexus_get_mod | read | |
nexus_latest_added | read | |
nexus_latest_updated | read | |
nexus_list_games | read | |
nexus_md5_search | read | |
nexus_mod_changelogs | read | |
nexus_mod_files | read | |
nexus_search | read | |
nexus_trending | read | |
nexus_updated | read | |
nexus_validate_key | read | |
thunderstore_get_community | read | |
thunderstore_get_mod | read | |
thunderstore_list_communities | read | |
thunderstore_list_mods | read | |
thunderstore_mod_dependencies | read | |
thunderstore_mod_versions | read | |
thunderstore_resolve_dependencies | read | |
thunderstore_search_mods | read | |
thunderstore_top_mods | read |
Trust audit
BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (2 observation(s))
- Network
- declared (8 observation(s))
- Shell
- declared (1 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (25)
exec(cmd);
const reqUrl = new URL(req.url ?? "/", "http://127.0.0.1");
const redirectUri = `http://127.0.0.1:${addr.port}/callback`;url.searchParams.set("redirect_uri", `http://127.0.0.1:${port}/callback`);.gitleaks.toml
const signature = (text: string): string => createHash("sha1").update(text.replace(/\r\n?/g, "\n").trim()).digest("hex");const nonsense = ["", " ", "\0", "a\0b", "x".repeat(10_000), "../../..", "C:\\", "/", "\n", "{}", "__proto__"];for (const args of [{ gamePath: "\0" }, { gamePath: "x".repeat(5000) }, { mo2InstancePath: "a\0b", area: "setup" }, { profileName: "../../.." }]) {import { summarizeCrashWhisper, whisper, type CrashWhisperReport } from "../../src/crashwhisper/index.js";import { VENUES } from "../../src/crashwhisper/types.js";import type { RedactOptions } from "../../src/crashwhisper/redact.js";const response = await fetch(`http://127.0.0.1:${address.port}/`);new URL(`http://127.0.0.1:${address.port}/mcp`)const HOSTILE = "Evil<img src=x onerror=alert(1)>-Mod-1.0.0";
'[\n "BepInEx-BepInExPack-5.4.2100",\n "Evil<img src=x onerror=alert(1)>-Mod-1.0.0",\n "NoHyphen"\n]';
order: ["BepInEx-BepInExPack", "Evil<img src=x onerror=alert(1)>-Mod", "Hostile-Mod"],
dependsOn: ["BepInEx-BepInExPack", "Evil<img src=x onerror=alert(1)>-Mod"],
fullName: "Evil<img src=x onerror=alert(1)>-Mod",
submitted_by: { username: "evilauthor" },author: "evilauthor",
author: "evilauthor",
author: "evilauthor",
author: "EvilAuthor",
@types/node, tsx, typescript
@modelcontextprotocol/sdk, zod
Gates applied: no_behavioural_pass.
b68fc65b330bfull audit observations/trust-audit/mcp-server/171county__modwrench.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | b68fc65b330b | BLOCK | D | 69 | first audit |
Questions
What is the @modwrench/cli MCP server?
One MCP server for mod platforms and local modding diagnostics. Search Thunderstore, read your real load order from MO2/r2modman/Vortex, and trace a crash log to the mod that caused it — from inside Claude, Cursor, or any MCP client. Free and MIT.
What tools does @modwrench/cli expose?
53 in total: 51 read-only, 2 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is @modwrench/cli safe to connect to an agent?
No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.
What credentials does @modwrench/cli need?
No credential environment variables were found in its source, so it appears to need none.
How does @modwrench/cli run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @modwrench/workbench at 0.3.0.
How current is this page?
The grade is for one exact copy of the source (b68fc65b330b), read on 2026-10-11. The repository is watched and re-audited when it changes.