nexus-mods-mcp
Exposes the Nexus Mods API to AI agents, enabling them to search for mods by name or keyword, retrieve mod metadata, files grouped by category, changelogs and page URLs, list all mods by an author (or the user's own mods) with download and endorsement totals, and publish or update mod files from a local archive via the v3 Upload API (upload sessions, version publishing, changelogs, upload status). Includes read tools plus opt-in write/upload operations gated by configuration flags.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nexus-mods-mcpfind mods for Skyrim that add new weapons"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
nexus-mods-mcp
MCP (Model Context Protocol) server exposing the Nexus Mods API to an AI agent (GitHub Copilot, Claude, Junie...). Written in TypeScript, stdio transport.
Covers the read APIs (v1 REST, v2 GraphQL) and the v3 Upload API, so an agent can publish or update one of your mods from a local archive.
Design goal: answer a question in as few tool calls as possible. Instead of a thin 1:1 mapping over REST endpoints, the high-value tools aggregate several requests and return compacted results.
1. Concepts
A MCP server is a process speaking JSON-RPC 2.0 over stdin/stdout and declaring:
Primitive | Role | Here |
Tools | actions the model can call | 21 Nexus tools ( |
Resources | documents the client can read |
|
Prompts | reusable prompt templates |
|
Instructions | global routing hints sent at | "name -> find_mods -> mod_overview" |
The agent never sees the URL nor the API key: it calls a typed tool, the server translates it into HTTP calls, handles authentication, caching and quotas, then returns a compact result.
Related MCP server: ModWrench MCP Server
2. Install
Clone the repository, install the locked dependencies, and build the server:
git clone https://github.com/PHLemp/nexus-mods-mcp.git
cd nexus-mods-mcp
npm ci
npm run buildThe commands above assume Node.js and Git are installed. If you already have a checkout, run
git pull, then repeat npm ci and npm run build after updating the repository.
Get an API key: https://www.nexusmods.com/users/myaccount?tab=api%20access (section "Personal API Key"), then:
Copy-Item .env.example .env
# edit .env and paste the key into NEXUS_API_KEYCheck that everything works:
npm run smoke # offline: lists tools, resources and prompts
npm run smoke:live # calls the read-only tools against the live API
npm run inspect # MCP Inspector web UINode gives precedence to the process environment over
.env. IfNEXUS_API_KEYis already set in the shell, that value wins.
3. Environment variables
Variable | Required | Description |
| yes | Personal Nexus key ( |
| no | Bearer token for the v2 GraphQL / v3 REST APIs |
| no | Default domain ( |
| no | Identifiable User-Agent, required by Nexus |
| no |
|
| no |
|
| no | Restricts which directory archives may be uploaded from |
| no | Timeout of each presigned transfer (default 900) |
| no | Read cache lifetime (default 300, |
| no | Per-request timeout (default 20) |
| no | Retries on network errors / 5xx (default 2) |
4. Wiring it into a MCP client
Recommended: pass
NEXUS_API_KEY(and any other overrides) through theenvblock of the client's own MCP config, the same way every MCP host is designed to inject configuration into the server subprocess. The.envfile at the repo root is only a convenience fallback for local development and thenpm run smoke*scripts — it is git-ignored and never required once a client supplies the key viaenv. Node'sprocess.loadEnvFilenever overrides a variable that is already set in the process environment, so a client-providedenvvalue always wins over.env.
JetBrains Rider + GitHub Copilot plugin (setup used here)
The Copilot plugin for JetBrains reads its MCP configuration from:
%LOCALAPPDATA%\github-copilot\intellij\mcp.jsonBlock to add under servers:
"nexus-mods": {
"type": "stdio",
"command": "C:\\Program Files\\nodejs\\node.exe",
"args": ["C:\\path\\to\\nexus-mods-mcp\\dist\\index.js"],
"env": {
"NEXUS_API_KEY": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"NEXUS_DEFAULT_GAME": "mountandblade2bannerlord",
"NEXUS_ALLOW_WRITES": "false"
}
}Replace the example path and key above with your checkout location and personal API key. If you'd
rather not store the key in this file, omit it from env and drop it into <your checkout>/.env
instead — both are read, but env takes precedence.
After changing the code, run npm run build and restart the server (or Rider) so the client picks
up the new tools.
JetBrains AI Assistant / Junie
Settings > Tools > AI Assistant > Model Context Protocol (MCP) > +, button As JSON:
{
"mcpServers": {
"nexus-mods": {
"command": "C:\\Program Files\\nodejs\\node.exe",
"args": ["C:\\path\\to\\nexus-mods-mcp\\dist\\index.js"],
"env": {
"NEXUS_API_KEY": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}For a configuration versioned with the project (Junie): .junie/mcp/mcp.json at the repo root. Since
this file is typically committed, prefer leaving the key out of it and relying on .env (git-ignored)
for that particular workflow, or on a per-user Junie secrets mechanism if available.
VS Code / GitHub Copilot — .vscode/mcp.json (optional)
{
"servers": {
"nexus-mods": {
"type": "stdio",
"command": "node",
"args": ["E:\\Modding\\Tools\\nexus-mods-mcp\\dist\\index.js"],
"env": { "NEXUS_API_KEY": "${input:nexusApiKey}" }
}
},
"inputs": [
{ "id": "nexusApiKey", "type": "promptString", "description": "Nexus Mods API key", "password": true }
]
}5. Troubleshooting
Symptom | Likely cause / fix |
Server "failed to start" in Rider |
|
"NEXUS_API_KEY is missing" | Set |
| Use the absolute path |
Tools missing from the chat | Switch the chat to Agent mode, then enable |
HTTP 401 on every call | Invalid key -> test with |
New tools not showing up | Rebuild, then restart the MCP server from the client |
HTTP 429 | Quota exhausted; the error states the reset time. Reuse cached results |
"Publishing is disabled" | Set |
Upload refused, "outside NEXUS_UPLOAD_ROOT" | The archive is not under the configured sandbox directory |
HTTP 403 on a publishing call | The API key does not belong to an author of that mod |
HTTP 422 on publish |
|
Upload succeeded but publishing failed | Reuse the returned |
6. Tools
Aggregating tools (prefer these)
Tool | What it returns | Calls saved |
| name/keywords -> mod_id, version, author, downloads, endorsements, URL | replaces GraphQL introspection + search |
| metadata + files grouped by category + recent changelogs + page URL | replaces |
| full catalogue of an author (or "my mods"), with download/endorsement totals | replaces one call per mod |
| local archive -> published file or new version (+ optional changelog) | replaces the 5-step v3 upload dance |
Publishing tools (v3 Upload API)
Tool | Nexus endpoint | Write |
|
| no |
| full upload session + | yes* |
|
| yes* |
|
| no |
|
| yes |
|
| yes |
* also requires NEXUS_ALLOW_UPLOADS=true.
Supporting tools
Tool | Nexus endpoint | Write |
|
| no |
|
| no |
|
| no |
|
| no |
|
| no |
|
| no |
|
| no |
|
| no |
|
| no |
|
| no |
|
| yes* |
|
| yes |
|
| yes* |
* only for mutating actions, blocked unless NEXUS_ALLOW_WRITES=true.
Publishing / updating a mod
Nexus vocabulary matters here, because the two operations are different endpoints:
Term | Meaning |
mod file | one entry of the Files tab, i.e. a whole update chain |
mod file version | one release inside that chain |
Updating a mod = adding a new version to an existing mod file. Adding a second entry to the Files tab = creating a new mod file.
nexus_find_mods -> mod_id
nexus_mod_file_targets -> mod_file_id of the file to update
nexus_upload_mod_file -> dry_run: true, review the plan
nexus_upload_mod_file -> for real
nexus_mod_overview -> refresh: true, verifynexus_upload_mod_file runs the whole v3 sequence in one call:
POST /v3/uploads(or/uploads/multipartabove 100 MiB) with size, filename and MD5.PUTthe bytes to the presigned storage URL, with the exactContent-DispositionandContent-MD5the signature was built from; multipart alsoPOSTs the ETag list.POST /v3/uploads/{id}/finalise, then pollsGET /v3/uploads/{id}untilstate: available.POST /v3/mod-files/{mod_file_id}/versions(update) orPOST /v3/mod-files(new file).Optionally
POST /v3/mods/{uid}/changelogs.
If step 4 fails, the bytes are already on Nexus: do not re-upload, reuse the returned
upload_id with nexus_publish_upload.
Guardrails:
two independent switches,
NEXUS_ALLOW_WRITESandNEXUS_ALLOW_UPLOADS;NEXUS_UPLOAD_ROOTconfines which directory archives may be read from, so the model cannot ask the server to publish an arbitrary file;name/versionare validated against the Nexus patterns before any byte is sent;dry_run: truereports the plan (size, transfer mode, target, category) without contacting Nexus.
The nexus_release_update prompt drives the whole sequence and asks for confirmation before the
real upload. nexus://upload-guide documents it for the model.
7. Applied best practices
Guided routing: server
instructions, cross-referencing tool descriptions and anext_stepfield in results, so the model chains the right tools instead of probing.No introspection needed:
nexus://graphql-cheatsheetdocumentsModsFilter,ModsSortand the operators, verified against the live API. Introspection queries are rejected with a pointer to that resource.Bounded responses: markup stripped (HTML/BBCode), archived files and upload history hidden by default, 45 000 character cap with an actionable message.
Quota aware: every reply ends with the remaining quota. The v2/GraphQL endpoint sends no
x-rl-*headers, so the last known v1 snapshot is kept instead of showing?/?.Cache: reads are cached in memory (default 5 minutes, one hour for
/games.jsonand the profile), so a repeated call costs nothing.refresh=trueforces a fresh read.Resilience: 20 s timeout, exponential-backoff retries on network errors and 5xx, HTTP status codes translated into actionable messages (401/403/404/429).
Protected writes: explicit opt-in via
NEXUS_ALLOW_WRITES, a second opt-in (NEXUS_ALLOW_UPLOADS+NEXUS_UPLOAD_ROOT) for anything that publishes to a mod page, plus MCP annotations (readOnlyHint/destructiveHint) so clients can display the risk.Resumable publishing: the upload id is always returned, so a failed publishing step never forces a re-upload (
nexus_publish_upload).Secrets out of the model: the key lives in the environment, never in tool arguments.
stderr-only logging: stdout is reserved for JSON-RPC (writing to it breaks the session).
8. Extending the server
File | Role |
| HTTP transport: auth, retry, timeout, cache, rate limit |
| Compaction: markup stripping, |
| GraphQL documents + schema crib sheet |
| v3 upload session: MD5, presigned PUT, multipart, polling |
| Tool/resource/prompt registration |
| Capability checks + live read-only test suite |
Adding a tool means adding a server.registerTool(...) block in src/index.ts, then
npm run build. Before doing so, ask whether an existing tool could return the information
in the same call - that is usually the better change.
Add a check to scripts/smoke.mjs for anything you add, then run npm run smoke:live.
Available Tools
22 toolsnexus_add_changelogAdd changelog entriesAIdempotent
Append changelog text for a version of one of your mods. Additive only: calling it twice for the same version appends, it does not replace. Write operation (NEXUS_ALLOW_WRITES=true).
| Name | Required | Description | Default |
|---|---|---|---|
| mod_id | Yes | Numeric mod id (visible in the page URL) | |
| version | Yes | Version the entries apply to | |
| changelog | Yes | Changelog text | |
| game_domain_name | No | Game domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'calling it twice for the same version appends, it does not replace' — i.e. the tool is NOT idempotent, since two calls produce a different state than one. The annotations declare idempotentHint=true, so the description directly contradicts the structured metadata. This is the kind of inconsistency that can lead an agent to skip duplicate-safety checks it actually needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and followed by the two facts an agent most needs (append semantics, write gating). No filler and no restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description supplies the append-only semantics, the existential precondition, and the target scope. It stops short of describing failure modes (auth errors, rate limits, max-length rejection), but the essentials for calling correctly are present — the idempotency mismatch is a correctness defect rather than a missing-coverage one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so mod_id, version, changelog, and game_domain_name (including its default and max lengths) are already fully documented in the schema. The description only gestures at the same concepts ('changelog text for a version', 'your mods') without adding format, length, or default guidance, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb ('Append') with a precise resource ('changelog text for a version of one of your mods') and a scope qualifier ('one of your mods'). It is immediately distinguishable from the read-side sibling nexus_get_mod_changelogs, so an agent needs no schema inspection to route correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states an operational precondition ('Write operation (NEXUS_ALLOW_WRITES=true)') and the repeated-call behavior, which tells the agent when the call is viable. It does not, however, explicitly contrast itself with nexus_get_mod_changelogs for the read case, so there is no full when/when-not routing statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_endorse_modEndorse a modAIdempotent
Endorse a mod or withdraw the endorsement. Write operation: requires NEXUS_ALLOW_WRITES=true. The version must match the one Nexus knows (nexus_get_mod returns it).
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| mod_id | Yes | ||
| version | No | Mod version, required by the API | |
| game_domain_name | No | Game domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (write, idempotent, open-world), and the description adds genuinely new behavioral context: the server-side write gate and the fact that the version must match what Nexus knows. It omits failure behavior (e.g. what a mismatch returns) and any auth/user-binding requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two lean sentences with the core purpose front-loaded, followed by the two preconditions in priority order. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a small mutation tool with no output schema, the description covers the action pair, the write gate, and the version precondition. It leaves minor gaps around error outcomes and how the endorsement is attributed, but nothing an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 50% schema coverage, the description compensates by clarifying that 'abstain' means withdraw the endorsement and that the version argument must match the version Nexus knows, adding meaning the schema ('required by the API') does not convey. mod_id and game_domain_name remain unelaborated, though the latter carries a schema default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Endorse a mod') plus the inverse operation ('withdraw the endorsement'), so the agent knows both directions of the operation. It does not need to distinguish itself from overlapping siblings since no other tool endorses, but it also doesn't explicitly route against alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete precondition (NEXUS_ALLOW_WRITES=true must be set) and tells the agent where to obtain a required value via the sibling nexus_get_mod. It stops short of stating when not to use the tool or what to do on a mismatch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_find_modsFind mods by nameARead-only
START HERE when you only know a mod's name/keywords: resolves it to a mod_id with version, author, downloads, endorsements, last update and page URL, in ONE call. Backed by the v2 search index - never write a raw GraphQL search yourself. If the name search finds nothing it automatically retries against mod descriptions, so a single call is normally enough. Follow up with nexus_mod_overview only if you need files or changelogs.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Exact tag, e.g. 'Gameplay' | |
| sort | No | relevance (default when searching) | downloads | endorsements | updatedAt | createdAt | name | ... | |
| limit | No | Max results (default 10) | |
| match | No | name = full-text on the title (default), exact = strict full title, description = full-text inside mod descriptions (use for 'a mod that does X') | |
| query | No | Name or keywords, e.g. 'party size' | |
| author | No | Exact author name as shown on the mod page | |
| offset | No | Pagination offset | |
| category | No | Exact category name, e.g. 'Gameplay Changes' | |
| uploader | No | Exact Nexus account name of the uploader | |
| all_games | No | Search every game instead of a single domain | |
| direction | No | Sort direction (default DESC) | |
| include_adult | No | Include adult content (default false) | |
| updated_since | No | ISO date (YYYY-MM-DD); keeps mods updated on or after it | |
| game_domain_name | No | Game domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/openWorld/non-destructive, but the description adds non-obvious behavior: an automatic fallback retry against mod descriptions when the name search returns nothing, and the fact it is backed by the v2 search index. It does not cover pagination/rate-limit behavior, which keeps it just under a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place, with the primary directive ('START HERE') front-loaded and the fallback and follow-up guidance ordered by relevance. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by listing the resolved fields. Combined with the auto-retry note and the sibling for deeper follow-up, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (14 params fully described), so the baseline is 3. The description earns extra credit by explaining that match=name silently retries against descriptions, which adds behavioral meaning to the `match` parameter beyond the schema's own text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('resolves [a mod name] to a mod_id') and enumerates the return payload (version, author, downloads, endorsements, last update, page URL). It clearly differentiates from nexus_mod_overview, nexus_get_mod, and nexus_graphql, so an agent can select it without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Opens with an explicit trigger ('START HERE when you only know a mod's name/keywords'), routes away from a sibling ('Follow up with nexus_mod_overview only if you need files or changelogs'), and forbids an alternative ('never write a raw GraphQL search yourself'). When-to-use, when-not-to-use, and the alternative are all named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_get_download_linkDownload linkARead-only
Generate a download link for a file. Requires a Premium account, unless nxm_key/expires (taken from an nxm:// link) are supplied.
| Name | Required | Description | Default |
|---|---|---|---|
| mod_id | Yes | ||
| expires | No | expires parameter of an nxm:// link | |
| file_id | Yes | ||
| nxm_key | No | key parameter of an nxm:// link | |
| game_domain_name | No | Game domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false, so the safety profile is covered. The description adds the account-tier prerequisite, which is genuine behavioral context an agent needs before calling. It does not mention rate limits or link validity, keeping it short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero waste, front-loading the core action and putting the conditional requirement second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should say more about what is returned (a URL, a temporary link, expiry behavior). It covers the auth prerequisite but leaves the return value and the meaning of the two calling paths (Premium vs nxm link) under-explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%; nxm_key and expires are already described in the schema, and the description largely repeats their nxm:// origin. game_domain_name and its default are left entirely to the schema. The description adds only marginal meaning beyond structured fields, so baseline 3 fits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Generate a download link for a file') that no sibling tool covers — the other file-related siblings (nexus_get_mod_files, nexus_rename_mod_file) list or modify files rather than produce download URLs. An agent can identify the tool's function without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage condition: Premium account is required unless nxm_key/expires from an nxm:// link are supplied. This tells the agent when the call can succeed, but it never names alternatives or states when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_get_gameGame detailsARead-only
Return details for one game, including its category list (category_id values needed when publishing a mod).
| Name | Required | Description | Default |
|---|---|---|---|
| game_domain_name | No | Game domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds no behavior beyond that (no note on default resolution, caching, or errors for an unknown domain), but the bar is lower with annotations present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence that front-loads the verb and resource, then qualifies with the practical reason to call it. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does name the key returned structure (category list with category_id values). It stops short of describing the rest of the game detail fields an agent might rely on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is a single optional parameter, so the schema already explains game_domain_name and its default. The description adds no syntax or format detail for the parameter, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Return details for one game") and names the payload it carries (the category list). It is clearly distinguishable from nexus_list_games, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an implied downstream trigger — you need this to obtain category_id values before publishing a mod — which is genuinely useful context. It does not state when to use nexus_list_games instead or note that any preconditions beyond the game domain exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_get_modMod metadataARead-only
Raw metadata for a single mod (name, version, author, counters, status). Narrow follow-up tool: if you also need files or changelogs, call nexus_mod_overview instead of chaining calls.
| Name | Required | Description | Default |
|---|---|---|---|
| mod_id | Yes | Numeric mod id (visible in the page URL) | |
| compact | No | Trim the payload (default true) | |
| refresh | No | Bypass the cache | |
| game_domain_name | No | Game domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, covering the safety profile. The description adds that the payload is raw metadata and mentions counters/status, plus the anti-chaining hint, but says nothing about caching or throttling behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, with the core purpose front-loaded and the routing guidance second. Size matches the tool's narrow scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description lists the returned fields (name, version, author, counters, status), which is enough to set expectations. Minor omission of cache/refresh semantics prevents a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so mod_id, compact, refresh, and game_domain_name are all documented in the schema itself. The description adds no parameter-level detail (e.g., default domain or cache semantics) beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (raw metadata for a single mod) and enumerates the returned fields. It also explicitly distinguishes itself from nexus_mod_overview, so an agent can separate them without reading schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit routing: if files or changelogs are also needed, use nexus_mod_overview rather than chaining calls. This names the alternative and the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_get_mod_changelogsMod changelogsARead-only
Per-version changelogs for a mod, newest first. Narrow follow-up tool: nexus_mod_overview already returns the most recent versions.
| Name | Required | Description | Default |
|---|---|---|---|
| mod_id | Yes | ||
| refresh | No | Bypass the cache | |
| versions | No | How many versions to keep (default 10) | |
| game_domain_name | No | Game domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds useful ordering context ('newest first') but says nothing about cache behavior or how many entries come back by default beyond what the schema implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste; the ordering and the sibling relationship are both front-loaded. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must convey return shape; 'per-version changelogs, newest first' adequately does so for a read-only list tool. It could note pagination/volume limits, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, with refresh, versions (default 10) and game_domain_name documented in the schema itself. The description adds no parameter-level meaning (no default count, no game-domain note), so it merely hits the baseline for a well-annotated schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Per-version changelogs for a mod') plus ordering ('newest first'), and explicitly differentiates itself from the sibling nexus_mod_overview. An agent can tell exactly what this returns without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Labels itself a 'narrow follow-up tool' and names the alternative (nexus_mod_overview) that already covers recent versions, implying this is for deeper/older changelog retrieval. The selection condition is strongly implied rather than spelled out as an explicit 'use when X, not Y' rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_get_mod_filesMod filesARead-only
List the files published for a mod. By default archived/old versions and the upload history are filtered out. Pass file_id for a single file. For a complete picture (metadata + files + changelogs) prefer nexus_mod_overview.
| Name | Required | Description | Default |
|---|---|---|---|
| mod_id | Yes | ||
| compact | No | Trim each file entry (default true) | |
| file_id | No | Details of one specific file | |
| refresh | No | Bypass the cache | |
| category | No | Nexus filter, e.g. 'main,update' or 'old_version' | |
| include_old | No | Include ARCHIVED/OLD_VERSION (default false) | |
| include_history | No | Include the file_updates replacement history (default false, very verbose) | |
| game_domain_name | No | Game domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true. The description adds real behavioral context beyond that: the default exclusion of archived/old versions and the upload history. It omits pagination/return-shape details, but the safety and default-filtering profile is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, all front-loaded: purpose first, then default behavior, then the alternative route. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with a fully-described schema and no output schema, this covers purpose, defaults, single-file mode, and the alternative route. Missing only minor operational detail (e.g. pagination), which is not required given the annotations and schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (88%), so the schema does the heavy lifting and baseline is 3. The description nonetheless adds meaning by explaining the file_id single-file path and the default filtering behavior that governs include_old/include_history, edging above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the files published for a mod'), and names a sibling (nexus_mod_overview) with the condition that selects it. An agent can distinguish it from nexus_get_mod and nexus_mod_overview without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context (default filtering of old versions/history) and explicitly routes to nexus_mod_overview 'for a complete picture', plus when to pass file_id. This is strong routing guidance; it stops short of enumerating every when-not scenario, so 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_graphqlRaw GraphQL query (API v2)ARead-only
Escape hatch for the v2 GraphQL API (collections, media, advanced filters). Read the nexus://graphql-cheatsheet resource first: the schema is already documented, so introspection queries are unnecessary. For plain mod searches use nexus_find_mods. Filters look like {"gameDomainName":[{"value":"","op":"EQUALS"}],"nameStemmed":[{"value":""}]}; sorts look like [{"updatedAt":{"direction":"DESC"}}].
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | GraphQL document (query only unless writes are enabled) | |
| refresh | No | Bypass the cache | |
| variables | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, openWorldHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuinely non-structured context: introspection is unnecessary because the schema is pre-documented, and the resource to consult first. It omits auth/rate-limit behavior and only hints at write mode via the schema ('query only unless writes are enabled'), so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then prerequisites, then the alternative, then syntax. Every sentence earns its place and the routing information comes before the dense JSON examples. The inline filter/sort examples are heavy but functional rather than redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and an open-world GraphQL surface, the description correctly redirects to external schema documentation rather than restating it, and covers the awkward parts (filters, sorts, introspection avoidance). It leaves the write-mode behaviour and error/return shape unaddressed, which is the only meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the description compensates well for the sparse 'query' parameter by giving concrete filter and sort document shapes with operators (EQUALS, direction DESC), which the schema does not provide. It says nothing about 'refresh' or 'variables', but the query-shape guidance is the highest-value information for this tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (raw GraphQL query against the v2 API) and enumerates its scope (collections, media, advanced filters), which distinguishes it from the many curated siblings like nexus_get_mod and nexus_list_games. An agent can immediately tell this is the general-purpose escape hatch rather than a purpose-built endpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'For plain mod searches use nexus_find_mods' names the alternative and the condition that selects it, and 'read the nexus://graphql-cheatsheet resource first' states a prerequisite in the correct order. Use-when (advanced filters, collections, media) and use-when-not (plain mod searches) are both present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_list_author_modsMods of an authorARead-only
List every mod published by a Nexus account, newest update first, in ONE call. With no argument it uses the authenticated account ('my mods'). Ideal for 'how are my mods doing?' - returns downloads, endorsements, version and last update for each mod.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 25) | |
| user_id | No | Numeric member id (takes precedence) | |
| uploader | No | Nexus account name; defaults to the authenticated user | |
| all_games | No | Do not restrict to a single game (default true) | |
| game_domain_name | No | Game domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a safe, read-only, open-world call. The description adds real behavioral value on top: sort order ('newest update first'), the implicit-auth default, and the concrete fields returned (downloads, endorsements, version, last update). The 'in ONE call' phrasing is slightly in tension with a default limit of 25, but it usefully signals no follow-up fetching is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences that front-load the core action and the default behavior, with no filler. Slightly denser than necessary given it packs scope, sorting, default resolution and return fields into one run-on sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the returned fields, and for a zero-required-parameter query tool the scope, ordering and default account resolution are all covered. Nothing an agent needs in order to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters, making 3 the baseline. The description only reinforces the no-argument path already implied by the uploader default and does not explain precedence between user_id and uploader, the limit cap, or the game_domain_name/all_games interaction.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List every mod published by a Nexus account') and scopes it to an author, which separates it from generic siblings like nexus_list_mods or nexus_find_mods. It does not, however, explicitly name a sibling it is not, so the differentiation is inferential rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: the no-argument case resolves to the authenticated account ('my mods') and the tool is framed around the 'how are my mods doing?' scenario. There are no explicit exclusions or named alternatives for when another listing tool should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_list_gamesList gamesARead-only
List the games supported by Nexus Mods. Always pass 'filter' (case-insensitive, matches name or domain): the unfiltered catalogue has 2000+ entries. Use it to resolve a game domain before any other tool.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 25) | |
| filter | No | Case-insensitive match on the name or domain |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/non-destructive, so the safety bar is met. The description adds real behavioral context beyond them: the unfiltered catalogue has 2000+ entries, which warns the agent about result volume. It stops short of describing pagination or return shape, but the added signal is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero waste; the core action, the required-filter rule, and the workflow position are all front-loaded in that order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description supplies the purpose, the filtering mandate, and the 'resolve a domain' framing that implies what the caller needs from the result. Return-field detail is lightly implied rather than stated, a minor gap for a list tool with read-only annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description restates the filter semantics (case-insensitive, name or domain) already in the schema and adds the rationale for using it, but contributes no syntax or format detail beyond structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List the games supported by Nexus Mods'), immediately distinguishable from the singular sibling nexus_get_game. An agent knows this is the catalogue-enumeration tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions the tool in the workflow ('Use it to resolve a game domain before any other tool') and gives a hard operational rule ('Always pass filter'). This is prescriptive when-and-how guidance, not implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_list_modsRecent / trending modsARead-only
Browse a game's feeds: latest_added, latest_updated, trending, or updated (needs period=1d|1w|1m). Use it for discovery; to look for a specific mod use nexus_find_mods instead.
| Name | Required | Description | Default |
|---|---|---|---|
| feed | Yes | ||
| limit | No | Max results (default 15) | |
| period | No | Required for feed=updated | |
| compact | No | Trim each entry (default true) | |
| game_domain_name | No | Game domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered structurally. The description adds the discovery-vs-lookup framing but says nothing about result ordering, pagination, or how compact changes the payload, leaving behavior largely to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences; the capability enumeration comes first and the sibling routing second, with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with full annotations and a near-complete schema, the description covers purpose and routing adequately. It stops short of describing result shape or pagination, which is a minor gap given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80% and already documents limit, period, compact, and game_domain_name defaults. The description only restates the period requirement for feed=updated, adding no meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (browse) and resource (a game's feeds) and enumerates the four feed values, so an agent knows exactly what comes back. It explicitly distinguishes itself from nexus_find_mods, which is named in the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear routing rule: use this for discovery, use nexus_find_mods for a specific mod. It also attaches a precondition to one feed value (updated requires period=1d|1w|1m), so the agent knows which calls are valid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_mod_file_targetsUpload targets of a modARead-only
START HERE before updating a mod: lists the v3 identifiers needed to publish. Returns the internal mod id plus every mod file (the update chain shown on the Files tab) with its mod_file_id and latest versions. Pass the mod_file_id to nexus_upload_mod_file to release a new version of that file; omit it to create a brand new file. The numeric mod_id is the one in the page URL.
| Name | Required | Description | Default |
|---|---|---|---|
| mod_id | Yes | Numeric mod id (visible in the page URL) | |
| refresh | No | Bypass the cache (use right after an upload) | |
| game_domain_name | No | Game domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord" | |
| include_versions | No | Fetch the version chain of each file (default true, one extra call per file) | |
| versions_per_file | No | How many recent versions to keep per file (default 3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so safety is covered; the description adds real operational context beyond that, namely that include_versions costs 'one extra call per file' and that refresh bypasses the cache right after an upload. These cost/caching disclosures are exactly the kind of trait annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences with zero filler, front-loaded with the imperative 'START HERE before updating a mod'. The return shape and the downstream hand-off are both delivered in the same breath without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry the burden of describing returns, and it does so concretely (internal mod id, per-file mod_file_id, latest versions). Combined with the workflow positioning and the cache/call-cost notes, an agent has everything needed to call this correctly and use its result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (including defaults for game_domain_name, include_versions and versions_per_file) are already documented in the schema, making 3 the baseline. The description restates the mod_id-is-in-the-URL hint and explains what to do with the returned mod_file_id, but adds no syntax or format detail beyond the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('lists the v3 identifiers needed to publish') and enumerates exactly what is returned: the internal mod id, every mod file, its mod_file_id and latest versions. It differentiates itself functionally from sibling file-listing tools by framing the result as upload targets, but it never names a sibling it should not be confused with (e.g. nexus_get_mod_files), so it stops just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'START HERE before updating a mod' gives an explicit entry point in the publish workflow, and the description routes the agent downstream ('Pass the mod_file_id to nexus_upload_mod_file...; omit it to create a brand new file'). It never states when NOT to use this tool or which sibling to prefer for a plain file listing, so no exclusion guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_mod_overviewFull mod report (one call)ARead-only
ONE-CALL mod report: metadata, currently published files grouped by category, recent changelogs and the page URL. Prefer this over chaining nexus_get_mod + nexus_get_mod_files + nexus_get_mod_changelogs. Archived/old files and the upload history are hidden unless you ask for them.
| Name | Required | Description | Default |
|---|---|---|---|
| mod_id | Yes | Numeric mod id (visible in the page URL) | |
| refresh | No | Bypass the cache (use after an upload) | |
| description | No | Amount of page description to include (default summary, markup stripped) | |
| game_domain_name | No | Game domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord" | |
| include_old_files | No | Include ARCHIVED/OLD_VERSION files (default false) | |
| changelog_versions | No | Number of recent versions to include (default 3, 0 to skip) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, openWorld), so the description instead contributes the aggregation behavior and the default-hiding semantics for archived files and upload history. It stops short of noting pagination, response size, or cache-expiry details, but the added context is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the value proposition front-loaded, then the routing guidance, then the default-scope caveat. Every sentence earns its place and nothing is repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter aggregation tool with no output schema and full annotation coverage, the description adequately explains what is returned and the default scope. It could note that refresh interacts with cache or how large the grouped response may be, but nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema carries the parameter burden and baseline would be 3. The description adds meaning by clarifying that archived/old files are excluded unless explicitly requested, which gives operational context for include_old_files beyond the schema's own text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific deliverable ('ONE-CALL mod report') and enumerates its contents: metadata, published files grouped by category, recent changelogs, page URL. It explicitly distinguishes itself from the three sibling tools it replaces, so an agent can route correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Prefer this over chaining nexus_get_mod + nexus_get_mod_files + nexus_get_mod_changelogs' gives an explicit when-to-use and names the exact alternatives. It also states the default scoping ('Archived/old files and upload history are hidden unless you ask'), telling the agent when the default view is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_publish_uploadPublish an existing uploadA
Recovery tool: turns an already finalised upload_id into a mod file or a new version, without re-sending the archive. Use it when nexus_upload_mod_file uploaded the bytes but the publishing step failed, or when the upload was still processing. Check nexus_upload_status shows state=available first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| mod_id | Yes | Numeric mod id (visible in the page URL) | |
| version | Yes | ||
| upload_id | Yes | Upload id returned by nexus_upload_mod_file | |
| description | No | ||
| mod_file_id | No | Existing file to add this version to (omit to create a new file) | |
| file_category | Yes | ||
| game_domain_name | No | Game domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord" | |
| update_mod_version | No | ||
| previous_version_id | No | ||
| archive_existing_file | No | ||
| show_requirements_pop_up | No | ||
| allow_mod_manager_download | No | ||
| primary_mod_manager_download | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it is a non-destructive, non-idempotent write operation with open-world access. The description adds useful behavioral context: it is a recovery tool that avoids re-sending the archive and requires state=available before running. It does not cover permissions or failure modes, but with annotations carrying the safety profile, this is meaningfully beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the recovery purpose, followed by usage and precondition. Every sentence adds distinct value with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity mutation tool with 14 parameters and low schema coverage, the description adequately covers purpose and usage but leaves most parameter semantics and invocation details to an under-documented schema. It is minimally viable but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 29% across 14 parameters, so the description should compensate heavily but does not. It mentions upload_id only implicitly and gives no meaning for name, version, file_category, or the many optional flags.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (turns) and resource (finalised upload_id into mod file/new version), and distinguishes itself from nexus_upload_mod_file as a recovery/publishing step. An agent can tell it apart from upload and status siblings immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it: after nexus_upload_mod_file uploaded bytes but publishing failed, or when the upload was still processing. It also names a required precondition: check nexus_upload_status shows state=available first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_rate_limit_statusQuota and server statusAIdempotent
Return the remaining Nexus quota (hourly/daily) plus this server's request and cache counters. Free of charge unless refresh=true. Use it before a batch of calls, or to decide whether to back off after an HTTP 429.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | Force a lightweight network call to refresh the quota | |
| clear_cache | No | Drop the in-memory read cache |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds cost semantics the annotations do not convey: the call is free unless refresh=true, which ties to readOnlyHint=false and makes the mutating exception understandable. It also explains what is returned (quota plus request/cache counters), though it does not describe the effect of clear_cache or any rate limits on the call itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, front-loaded with what is returned and then the usage triggers. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description names the returned data (quota windows, request and cache counters) and the cost caveat, which is enough to call it correctly. The effect of clear_cache on the in-memory cache's callers is not elaborated, a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema by implying refresh=true incurs a charge, which the schema's 'lightweight network call' wording does not state. clear_cache is left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Return) and resource (remaining Nexus quota hourly/daily plus this server's request and cache counters). No sibling tool deals with quota/rate-limit status, so it is trivially distinguishable from the mod/game/upload siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use triggers: before a batch of calls, or to decide whether to back off after an HTTP 429. There is no explicit when-not or named alternative, but the invocation contexts are concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_rename_mod_fileRename a mod fileAIdempotent
Rename an existing mod file (the whole update chain, not a single version). Get the mod_file_id from nexus_mod_file_targets. Write operation (NEXUS_ALLOW_WRITES=true).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New name (letters/digits/space/_'().- only) | |
| mod_file_id | Yes | v3 mod file id, from nexus_mod_file_targets |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=true, so the write/repeat-safety profile is partly covered. The description adds real context beyond them: the rename applies to the entire update chain, and it requires the NEXUS_ALLOW_WRITES environment flag to be enabled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler; scope, prerequisite source, and write gate are front-loaded in that order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with full schema coverage and no output schema, the definition covers scope, ID provenance, and the write prerequisite. It could note behavior on invalid names or partial failure, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, documenting both mod_file_id and the new-name character constraints. The description reinforces the provenance of mod_file_id but adds no syntax or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (rename) plus resource (mod file) with a clarifying scope note that it affects the whole update chain rather than a single version. This distinguishes it from version-level operations in the sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tells the agent where to obtain mod_file_id (nexus_mod_file_targets) and states the write-operation prerequisite (NEXUS_ALLOW_WRITES=true). No explicit when-not-to-use guidance, but the routing context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_search_md5Identify a file by MD5ARead-only
Resolve an MD5 hash to its Nexus mod and file: the reliable way to identify an unknown local archive.
| Name | Required | Description | Default |
|---|---|---|---|
| md5_hash | Yes | 32 hexadecimal characters | |
| game_domain_name | No | Game domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, covering the safety profile. The description adds the return semantics (resolves to a mod AND a file), which is useful, but says nothing about behavior when the hash is unknown, rate limits, or ambiguity handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler, front-loading the core action ('Resolve an MD5 hash to its Nexus mod and file') before the use-case clause. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup with full schema coverage and no output schema, the description covers the essentials: input meaning, output (mod and file), and intended scenario. Minor gaps (not-found behavior, errors) are tolerable given the tool's simplicity and the safety annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – both md5_hash (32 hex chars) and game_domain_name (with example and default) are fully documented in the schema. The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Resolve an MD5 hash to its Nexus mod and file.' The verb+resource pairing is unambiguous and the tool is unique among siblings (none of the other tools consume an MD5), so an agent can route to it without schema inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear use case: 'the reliable way to identify an unknown local archive,' which tells the agent when this tool applies. It stops short of naming alternatives (e.g. nexus_find_mods for name-based lookups) or stating when-not-to-use, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_tracked_modsTracked modsAIdempotent
Manage the mods tracked by the authenticated user. action=list is read-only; track/untrack are writes and require NEXUS_ALLOW_WRITES=true.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| mod_id | No | Required for track/untrack | |
| game_domain_name | No | Game domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and idempotentHint=true, and the description adds action-level read/write distinction plus the NEXUS_ALLOW_WRITES=true gating requirement. It stops short of rate limits or per-write side effects, but meaningfully supplements the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the tool purpose and then action semantics. Every clause earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety hints and the schema covering parameters, the description supplies action semantics and the write gate. It omits return details (no output schema exists) and sibling routing, but is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%; mod_id and game_domain_name already have schema descriptions. The description adds semantics for the action enum (which values are read vs write), which is useful, but does not add further parameter detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the verb (manage) and specific resource (mods tracked by the authenticated user), and enumerates action values. The scope is clear, though it does not explicitly differentiate itself from sibling tools like nexus_endorse_mod or nexus_list_mods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides action-level guidance: list is read-only; track/untrack are writes requiring NEXUS_ALLOW_WRITES=true. However, it gives no alternatives or when-not conditions, leaving sibling selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_upload_mod_fileUpload and publish a mod fileA
Uploads a local archive to Nexus and publishes it, in ONE call (v3 Upload API): creates the upload session, sends the bytes to the presigned storage URL, finalises, waits for processing, then either appends a new version to an existing file (pass mod_file_id, from nexus_mod_file_targets) or creates a new file on the mod page. Multipart is used automatically above 100 MiB. Optionally posts a changelog entry. Requires NEXUS_ALLOW_WRITES=true and NEXUS_ALLOW_UPLOADS=true. Always run with dry_run=true first to confirm the plan before the real upload.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | File name shown on the mod page (max 50 chars, letters/digits/space/_'().-) | |
| mod_id | Yes | Numeric mod id (visible in the page URL) | |
| dry_run | No | Validate everything and report the plan without contacting Nexus | |
| version | Yes | File version (max 50 chars, letters/digits/dot/dash) | |
| changelog | No | Changelog text to append for this version (posted after publishing) | |
| file_path | Yes | Absolute path of the archive to upload (must already exist) | |
| description | No | Short description shown under the file | |
| mod_file_id | No | Existing file to add this version to (omit to create a new file) | |
| file_category | Yes | main | optional | miscellaneous | |
| upload_filename | No | Archive name sent to storage (defaults to the file name on disk) | |
| game_domain_name | No | Game domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord" | |
| update_mod_version | No | Bump the mod page version to match this file (default false) | |
| previous_version_id | No | version_id this release replaces (new versions only) | |
| archive_existing_file | No | Archive the version being replaced (new versions only, default false) | |
| show_requirements_pop_up | No | Show the requirements pop-up | |
| allow_mod_manager_download | No | Allow mod manager downloads | |
| primary_mod_manager_download | No | Make it the default mod-manager download |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare write/non-idempotent/openWorld. The description adds the concrete internal sequence (session, byte transfer, finalise, wait for processing), the automatic multipart switch above 100 MiB, and two environment prerequisites (NEXUS_ALLOW_WRITES, NEXUS_ALLOW_UPLOADS). These are real operational constraints an agent cannot get from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph, but it is front-loaded with the purpose and workflow before conditions. Every sentence carries information; the run-on length is the only minor cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter mutation with no output schema, the description covers prerequisites, branch selection, dry-run guidance, and processing behavior. It does not describe what success/failure looks like or how the wait-for-processing step surfaces errors, a modest gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter including the mod_file_id branch and defaults. The description adds a little framing (changelog posted after publishing, upload_filename default) but mostly restates schema content, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Uploads a local archive to Nexus and publishes it') and immediately scopes it as a single-call v3 flow. It distinguishes the two modes (append via mod_file_id or create a new file) and clearly differentiates from siblings like nexus_publish_upload and nexus_upload_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditional routing: pass mod_file_id to append a version, omit it to create a new file, and it points to nexus_mod_file_targets for obtaining that id. It also mandates running dry_run=true first. It stops short of naming the multipart/two-step sibling alternative outright, so an agent must infer the fallback from 'in ONE call'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_upload_statusUpload session statusARead-only
Return the state of an upload session: 'created' means Nexus is still processing the archive, 'available' means it can be published with nexus_publish_upload.
| Name | Required | Description | Default |
|---|---|---|---|
| upload_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral context by defining the state machine ('created' = still processing, 'available' = publishable), which tells the agent what to expect over repeated calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with zero filler; the state definitions are the only extra content and they earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the possible return states, which is the key information an agent needs. The only omission is where upload_id originates (presumably a prior upload call), a minor gap for a one-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the burden falls on the description, but it never explains upload_id — only its name and uuid format are visible in the schema. The parameter is arguably self-explanatory for a status call, so this is a gap rather than a failure, but it is not compensated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Return the state of an upload session') and goes further by naming the two concrete states. It also references nexus_publish_upload, which cleanly separates it from the other upload-family siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the workflow: check status, and when it reads 'available', proceed with nexus_publish_upload. That is clear context for when the result is actionable, but it never states explicitly when to call this tool (e.g., poll after nexus_upload_mod_file) or that it should not be used for anything else.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nexus_validate_userValidate API keyARead-only
Validate the Nexus API key and return the profile (name, user id, premium/supporter status). Call this first when authentication looks broken, or to learn the current user before nexus_list_author_mods.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | Bypass the cache and re-query Nexus |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety and network profile is covered. The description adds useful context (auth-diagnosis use case) but says nothing about rate limits, what happens on an invalid key, or cache lifetime beyond what the schema notes for refresh.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and return value, then the usage triggers. Every clause carries information and none is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description helpfully enumerates the returned profile fields, and annotations carry the safety profile. The only gap is failure behavior — it does not say whether an invalid key raises an error or returns a negative result, which matters for a validation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'refresh' parameter is fully documented in the schema ('Bypass the cache and re-query Nexus'). The description adds no additional parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (validate) and resource (Nexus API key), and goes further by naming the returned payload (name, user id, premium/supporter status). This distinguishes it clearly from read-oriented siblings like nexus_get_mod or nexus_list_mods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two explicit triggers: 'call this first when authentication looks broken' and 'to learn the current user before nexus_list_author_mods'. It names a concrete sibling and the dependency condition that selects this tool, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
22 tool updates
v0.3.0- First observed
nexus_add_changelog - First observed
nexus_endorse_mod - First observed
nexus_find_mods - First observed
nexus_get_download_link - First observed
nexus_get_game - First observed
nexus_get_mod - First observed
nexus_get_mod_changelogs - First observed
nexus_get_mod_files - First observed
nexus_graphql - First observed
nexus_list_author_mods - First observed
nexus_list_games - First observed
nexus_list_mods - First observed
nexus_mod_file_targets - First observed
nexus_mod_overview - First observed
nexus_publish_upload - First observed
nexus_rate_limit_status - First observed
nexus_rename_mod_file - First observed
nexus_search_md5 - First observed
nexus_tracked_mods - First observed
nexus_upload_mod_file - First observed
nexus_upload_status - First observed
nexus_validate_user
TDQS
Scored across 22 tools
There is real overlap: nexus_get_mod vs nexus_mod_overview, nexus_get_mod_files, and nexus_get_mod_changelogs all target the same mod resource, and nexus_find_mods vs nexus_list_mods vs nexus_graphql all cover search/discovery. The descriptions work hard to disambiguate ('prefer this over chaining', 'narrow follow-up tool', 'START HERE'), which largely resolves the boundaries for an attentive agent.
Every tool uses a consistent nexus_ snake_case prefix with mostly verb_noun patterns (nexus_find_mods, nexus_upload_mod_file, nexus_endorse_mod). A few are noun-only (nexus_mod_overview, nexus_upload_status, nexus_mod_file_targets), a minor deviation but still readable and predictable.
22 tools sits at the upper edge of the comfortable band, but each maps to a distinct capability across auth, discovery, mod lifecycle, uploads/publishing, and a GraphQL escape hatch. The upload chain (targets → upload → status → publish) justifies several tools, though a few read-only report tools could arguably be merged.
The surface is unusually thorough: authentication, quota checks, game/category resolution, search (name, MD5, feeds), mod metadata and files, changelogs, endorsements, tracking, the full upload/publish/recover workflow, file rename, and a documented GraphQL escape hatch. No obvious lifecycle gaps or dead ends for managing mods on Nexus.
Maintenance
Related MCP Connectors
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
SEO & marketing toolkit for AI agents: GA4, Search Console, AdSense, GTM, PageSpeed, Trends.
A registry of AI agent tools — MCP servers, APIs, CLIs, SDKs — kept current by automated ingestion.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage Obsidian vaults through full CRUD operations, wikilink management, and section-level manipulation. It supports frontmatter editing, tag-based searching, and automated link updates to maintain vault integrity.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to search, browse, and manage mods across Nexus Mods, mod.io, Thunderstore, and Modrinth, as well as perform local diagnostics like detecting games and parsing crash logs.MIT

Civitai MCP Serverofficial
AlicenseNot gradedqualityFmaintenanceEnables AI agents to fully interact with the Civitai platform, including browsing models, images, and creators; posting, reacting, reviewing, following, collecting, writing articles and comments; sending DMs; and managing bounties and announcements.1Apache 2.0- AlicenseAqualityAmaintenanceEnables AI agents to search, read, and publish Minecraft mods on Modrinth, including creating projects and uploading jar files as new versions.7350MIT