Skip to main content
Glama

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 (nexus_*)

Resources

documents the client can read

nexus://cheatsheet, nexus://graphql-cheatsheet, nexus://upload-guide

Prompts

reusable prompt templates

nexus_mod_report, nexus_release_update

Instructions

global routing hints sent at initialize

"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 build

The 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_KEY

Check 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 UI

Node gives precedence to the process environment over .env. If NEXUS_API_KEY is already set in the shell, that value wins.

3. Environment variables

Variable

Required

Description

NEXUS_API_KEY

yes

Personal Nexus key (apikey header)

NEXUS_OAUTH_TOKEN

no

Bearer token for the v2 GraphQL / v3 REST APIs

NEXUS_DEFAULT_GAME

no

Default domain (mountandblade2bannerlord)

NEXUS_USER_AGENT

no

Identifiable User-Agent, required by Nexus

NEXUS_ALLOW_WRITES

no

true to allow endorse / track / changelog / rename / mutations

NEXUS_ALLOW_UPLOADS

no

true to allow publishing files (also needs NEXUS_ALLOW_WRITES)

NEXUS_UPLOAD_ROOT

no

Restricts which directory archives may be uploaded from

NEXUS_UPLOAD_TIMEOUT_SECONDS

no

Timeout of each presigned transfer (default 900)

NEXUS_CACHE_TTL_SECONDS

no

Read cache lifetime (default 300, 0 disables it)

NEXUS_TIMEOUT_SECONDS

no

Per-request timeout (default 20)

NEXUS_MAX_RETRIES

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 the env block of the client's own MCP config, the same way every MCP host is designed to inject configuration into the server subprocess. The .env file at the repo root is only a convenience fallback for local development and the npm run smoke* scripts — it is git-ignored and never required once a client supplies the key via env. Node's process.loadEnvFile never overrides a variable that is already set in the process environment, so a client-provided env value 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.json

Block 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

dist/index.js missing -> npm run build

"NEXUS_API_KEY is missing"

Set NEXUS_API_KEY in the client's env block (preferred) or in .env

node not found

Use the absolute path C:\Program Files\nodejs\node.exe

Tools missing from the chat

Switch the chat to Agent mode, then enable nexus-mods in the tool list

HTTP 401 on every call

Invalid key -> test with nexus_validate_user

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 NEXUS_ALLOW_UPLOADS=true (and NEXUS_ALLOW_WRITES=true)

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

name/version or a flag broke a Nexus constraint; the field is named in the error

Upload succeeded but publishing failed

Reuse the returned upload_id with nexus_publish_upload, do not re-upload

6. Tools

Aggregating tools (prefer these)

Tool

What it returns

Calls saved

nexus_find_mods

name/keywords -> mod_id, version, author, downloads, endorsements, URL

replaces GraphQL introspection + search

nexus_mod_overview

metadata + files grouped by category + recent changelogs + page URL

replaces get_mod + get_mod_files + get_mod_changelogs

nexus_list_author_mods

full catalogue of an author (or "my mods"), with download/endorsement totals

replaces one call per mod

nexus_upload_mod_file

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

nexus_mod_file_targets

/v3/games/{domain}/mods/{id} + /v3/mods/{uid}/files + versions

no

nexus_upload_mod_file

full upload session + /v3/mod-files[/{id}/versions]

yes*

nexus_publish_upload

/v3/mod-files[/{id}/versions] from an existing upload_id

yes*

nexus_upload_status

/v3/uploads/{id}

no

nexus_add_changelog

/v3/mods/{uid}/changelogs

yes

nexus_rename_mod_file

PUT /v3/mod-files/{id}

yes

* also requires NEXUS_ALLOW_UPLOADS=true.

Supporting tools

Tool

Nexus endpoint

Write

nexus_validate_user

/v1/users/validate.json

no

nexus_rate_limit_status

x-rl-* headers + server stats + cache reset

no

nexus_list_games

/v1/games.json (+ local filter)

no

nexus_get_game

/v1/games/{domain}.json

no

nexus_get_mod

/v1/games/{domain}/mods/{id}.json

no

nexus_get_mod_files

.../files[.json|/{file_id}.json]

no

nexus_get_mod_changelogs

.../changelogs.json

no

nexus_list_mods

latest_added / latest_updated / trending / updated

no

nexus_search_md5

.../md5_search/{hash}.json

no

nexus_get_download_link

.../download_link.json (Premium)

no

nexus_tracked_mods

/v1/user/tracked_mods.json

yes*

nexus_endorse_mod

.../endorse.json | abstain.json

yes

nexus_graphql

POST /v2/graphql

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, verify

nexus_upload_mod_file runs the whole v3 sequence in one call:

  1. POST /v3/uploads (or /uploads/multipart above 100 MiB) with size, filename and MD5.

  2. PUT the bytes to the presigned storage URL, with the exact Content-Disposition and Content-MD5 the signature was built from; multipart also POSTs the ETag list.

  3. POST /v3/uploads/{id}/finalise, then polls GET /v3/uploads/{id} until state: available.

  4. POST /v3/mod-files/{mod_file_id}/versions (update) or POST /v3/mod-files (new file).

  5. 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_WRITES and NEXUS_ALLOW_UPLOADS;

  • NEXUS_UPLOAD_ROOT confines which directory archives may be read from, so the model cannot ask the server to publish an arbitrary file;

  • name / version are validated against the Nexus patterns before any byte is sent;

  • dry_run: true reports 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 a next_step field in results, so the model chains the right tools instead of probing.

  • No introspection needed: nexus://graphql-cheatsheet documents ModsFilter, ModsSort and 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.json and the profile), so a repeated call costs nothing. refresh=true forces 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

src/nexus-client.ts

HTTP transport: auth, retry, timeout, cache, rate limit

src/format.ts

Compaction: markup stripping, compactMod, compactFile

src/queries.ts

GraphQL documents + schema crib sheet

src/upload.ts

v3 upload session: MD5, presigned PUT, multipart, polling

src/index.ts

Tool/resource/prompt registration

scripts/smoke.mjs

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 tools
nexus_add_changelogAdd changelog entriesA
Idempotent

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
mod_idYesNumeric mod id (visible in the page URL)
versionYesVersion the entries apply to
changelogYesChangelog text
game_domain_nameNoGame domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord"

TDQS

A3.6/5.0
Behavior1/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 modA
Idempotent

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
mod_idYes
versionNoMod version, required by the API
game_domain_nameNoGame domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord"

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 nameA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoExact tag, e.g. 'Gameplay'
sortNorelevance (default when searching) | downloads | endorsements | updatedAt | createdAt | name | ...
limitNoMax results (default 10)
matchNoname = full-text on the title (default), exact = strict full title, description = full-text inside mod descriptions (use for 'a mod that does X')
queryNoName or keywords, e.g. 'party size'
authorNoExact author name as shown on the mod page
offsetNoPagination offset
categoryNoExact category name, e.g. 'Gameplay Changes'
uploaderNoExact Nexus account name of the uploader
all_gamesNoSearch every game instead of a single domain
directionNoSort direction (default DESC)
include_adultNoInclude adult content (default false)
updated_sinceNoISO date (YYYY-MM-DD); keeps mods updated on or after it
game_domain_nameNoGame domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord"

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_gameGame detailsA
Read-only

Return details for one game, including its category list (category_id values needed when publishing a mod).

ParametersJSON Schema
NameRequiredDescriptionDefault
game_domain_nameNoGame domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord"

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 metadataA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
mod_idYesNumeric mod id (visible in the page URL)
compactNoTrim the payload (default true)
refreshNoBypass the cache
game_domain_nameNoGame domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord"

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 changelogsA
Read-only

Per-version changelogs for a mod, newest first. Narrow follow-up tool: nexus_mod_overview already returns the most recent versions.

ParametersJSON Schema
NameRequiredDescriptionDefault
mod_idYes
refreshNoBypass the cache
versionsNoHow many versions to keep (default 10)
game_domain_nameNoGame domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord"

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 filesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
mod_idYes
compactNoTrim each file entry (default true)
file_idNoDetails of one specific file
refreshNoBypass the cache
categoryNoNexus filter, e.g. 'main,update' or 'old_version'
include_oldNoInclude ARCHIVED/OLD_VERSION (default false)
include_historyNoInclude the file_updates replacement history (default false, very verbose)
game_domain_nameNoGame domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord"

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)A
Read-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"}}].

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesGraphQL document (query only unless writes are enabled)
refreshNoBypass the cache
variablesNo

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 authorA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 25)
user_idNoNumeric member id (takes precedence)
uploaderNoNexus account name; defaults to the authenticated user
all_gamesNoDo not restrict to a single game (default true)
game_domain_nameNoGame domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord"

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 gamesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 25)
filterNoCase-insensitive match on the name or domain

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 modsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
feedYes
limitNoMax results (default 15)
periodNoRequired for feed=updated
compactNoTrim each entry (default true)
game_domain_nameNoGame domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord"

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 modA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
mod_idYesNumeric mod id (visible in the page URL)
refreshNoBypass the cache (use right after an upload)
game_domain_nameNoGame domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord"
include_versionsNoFetch the version chain of each file (default true, one extra call per file)
versions_per_fileNoHow many recent versions to keep per file (default 3)

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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)A
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
mod_idYesNumeric mod id (visible in the page URL)
refreshNoBypass the cache (use after an upload)
descriptionNoAmount of page description to include (default summary, markup stripped)
game_domain_nameNoGame domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord"
include_old_filesNoInclude ARCHIVED/OLD_VERSION files (default false)
changelog_versionsNoNumber of recent versions to include (default 3, 0 to skip)

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
mod_idYesNumeric mod id (visible in the page URL)
versionYes
upload_idYesUpload id returned by nexus_upload_mod_file
descriptionNo
mod_file_idNoExisting file to add this version to (omit to create a new file)
file_categoryYes
game_domain_nameNoGame domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord"
update_mod_versionNo
previous_version_idNo
archive_existing_fileNo
show_requirements_pop_upNo
allow_mod_manager_downloadNo
primary_mod_manager_downloadNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 statusA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoForce a lightweight network call to refresh the quota
clear_cacheNoDrop the in-memory read cache

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 fileA
Idempotent

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNew name (letters/digits/space/_'().- only)
mod_file_idYesv3 mod file id, from nexus_mod_file_targets

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 MD5A
Read-only

Resolve an MD5 hash to its Nexus mod and file: the reliable way to identify an unknown local archive.

ParametersJSON Schema
NameRequiredDescriptionDefault
md5_hashYes32 hexadecimal characters
game_domain_nameNoGame domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord"

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 modsA
Idempotent

Manage the mods tracked by the authenticated user. action=list is read-only; track/untrack are writes and require NEXUS_ALLOW_WRITES=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
mod_idNoRequired for track/untrack
game_domain_nameNoGame domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord"

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFile name shown on the mod page (max 50 chars, letters/digits/space/_'().-)
mod_idYesNumeric mod id (visible in the page URL)
dry_runNoValidate everything and report the plan without contacting Nexus
versionYesFile version (max 50 chars, letters/digits/dot/dash)
changelogNoChangelog text to append for this version (posted after publishing)
file_pathYesAbsolute path of the archive to upload (must already exist)
descriptionNoShort description shown under the file
mod_file_idNoExisting file to add this version to (omit to create a new file)
file_categoryYesmain | optional | miscellaneous
upload_filenameNoArchive name sent to storage (defaults to the file name on disk)
game_domain_nameNoGame domain, e.g. "skyrimspecialedition". Default: "mountandblade2bannerlord"
update_mod_versionNoBump the mod page version to match this file (default false)
previous_version_idNoversion_id this release replaces (new versions only)
archive_existing_fileNoArchive the version being replaced (new versions only, default false)
show_requirements_pop_upNoShow the requirements pop-up
allow_mod_manager_downloadNoAllow mod manager downloads
primary_mod_manager_downloadNoMake it the default mod-manager download

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 statusA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
upload_idYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 keyA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoBypass the cache and re-query Nexus

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 22 tool updatesv0.3.0
    • First observednexus_add_changelog
    • First observednexus_endorse_mod
    • First observednexus_find_mods
    • First observednexus_get_download_link
    • First observednexus_get_game
    • First observednexus_get_mod
    • First observednexus_get_mod_changelogs
    • First observednexus_get_mod_files
    • First observednexus_graphql
    • First observednexus_list_author_mods
    • First observednexus_list_games
    • First observednexus_list_mods
    • First observednexus_mod_file_targets
    • First observednexus_mod_overview
    • First observednexus_publish_upload
    • First observednexus_rate_limit_status
    • First observednexus_rename_mod_file
    • First observednexus_search_md5
    • First observednexus_tracked_mods
    • First observednexus_upload_mod_file
    • First observednexus_upload_status
    • First observednexus_validate_user

TDQS

A4.1/5.0

Scored across 22 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables 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.
    1
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to search, read, and publish Minecraft mods on Modrinth, including creating projects and uploading jar files as new versions.
    7
    350
    MIT