Skip to main content
Glama

Tests Version Install in Claude Desktop

A complete D&D 5e reference and utility MCP server backed by live 5etools data.

Quick Start

Prerequisite: Node.js ≥ 22 must be your system's default node. Claude Desktop uses the macOS launch environment PATH, not your shell session — your terminal's active nvm version doesn't apply. If you use nvm, run nvm alias default 22 (or nvm install 22 && nvm alias default 22 if you don't have it) and fully quit and relaunch Claude Desktop. If you don't use nvm, install Node.js from nodejs.org.

  1. Download 5eMCP.mcpb from the latest release

  2. Open the file — Claude Desktop will prompt you to install it, or go to Settings → Extensions → Install Extension and select the file

  3. Enter your GitHub personal access token when prompted (required — create a free one at github.com/settings/tokens with public_repo scope or read-only access to public repos)

  4. Choose your default ruleset (2024 or 2014)

  5. Restart Claude Desktop

Your token is stored securely in the OS keychain (macOS Keychain / Windows Credential Manager) — never in plain text.


Developers (Claude Code, Cursor, manual config)

Requirements: Node.js ≥ 22, optional GitHub personal access token (read-only, public repos)

git clone https://github.com/jazzsequence/5eMCP.git
cd 5eMCP
npm install
npm run build
pwd   # copy this — you'll use it as your path in the config below

In the configs below, replace /path/to/5eMCP with the output of pwd above (e.g. /Users/you/Projects/5eMCP).

Claude Code

Add to ~/.claude.json:

{
  "mcpServers": {
    "5etools": {
      "command": "node",
      "args": ["/path/to/5eMCP/dist/index.js"],
      "env": {
        "GITHUB_TOKEN": "ghp_your_token_here",
        "DEFAULT_RULESET": "2024"
      }
    }
  }
}

Cursor

Add to .cursor/mcp.json in your project (or ~/.cursor/mcp.json globally):

{
  "mcpServers": {
    "5etools": {
      "command": "node",
      "args": ["/path/to/5eMCP/dist/index.js"],
      "env": {
        "GITHUB_TOKEN": "ghp_your_token_here",
        "DEFAULT_RULESET": "2024"
      }
    }
  }
}

Claude Desktop (manual config) {#claude-desktop-manual-config}

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "5etools": {
      "command": "node",
      "args": ["/path/to/5eMCP/dist/index.js"],
      "env": {
        "GITHUB_TOKEN": "ghp_your_token_here",
        "DEFAULT_RULESET": "2024"
      }
    }
  }
}

DEFAULT_RULESET can be "2024" (default) or "2014" for legacy rules. GITHUB_TOKEN is optional but strongly recommended — unauthenticated requests are rate-limited to 60/hr.

Related MCP server: D&D 5E MCP Server

How It Works

5e.tools is fully client-side. When spells.html loads, the browser fetches data/spells/spells-phb.json directly from GitHub and renders it in JavaScript. This server replicates that pattern server-side:

GitHub Contents API
  → manifest: { spells: [...], bestiary: [...], book: [...], ... }
  → SHA-keyed disk/Redis cache
  → raw.githubusercontent.com (fetch on miss)
  → translation layer (resolve {@tags}, merge fluff, normalize)
  → MCP tool response

The manifest is schema-agnostic and self-updating. When 5etools adds a new content type, the next manifest refresh picks it up automatically — no code change required. Unknown types run through the passthrough handler (tags resolved, internal fields stripped) and return clean JSON. Nothing is ever inaccessible.

Available Tools

Meta Tools

Tool

Description

help

Full decision guide to every tool — call first when unsure which one to use.

manifest_status

Build time, file counts by type, unknown types discovered.

list_sources

All source abbreviations with content types.

fetch_content

Fetch and translate any file in the manifest by content type + file name. Universal fallback for any content type.

Search Tools (*_search)

All search tools accept query (name substring), ruleset ("2024" or "2014"), limit, fields (optional list of field names to include in each result — default is all fields, e.g. ["name","cr","source"]), and include_homebrew (boolean, default false — when true also searches TheGiddyLimit/homebrew alongside official results). Results match on name, source abbreviation, pantheon/setting, and any top-level array-of-strings field in the data (e.g. damageInflict, conditionInflict, environment, property tags like "Vst|EGW").

Selected tools support additional structured filter parameters:

Tool

Extra Parameters

spell_search

level (int 0–9), school (full name: evocation, necromancy, etc.)

monster_search

type (beast, humanoid, undead…), cr_max (max CR inclusive: "1/4", "1/2", "5"…), environment (habitat substring: "underdark", "forest", "nine hells"…)

item_search

rarity (common, uncommon, rare, very rare, legendary, artifact), type (weapon, armor, wondrous…)

classfeature_search

class_name (e.g. "Wizard"), level (int 1–20)

subclassfeature_search

class_name (e.g. "Wizard"), subclass_name (e.g. "Abjurer"), level (int 1–20)

Tool

Content

spell_search

Spells

monster_search

Monsters and creatures

item_search

Magic and mundane items

race_search

Playable species / races

background_search

Character backgrounds

feat_search

Feats

condition_search

Conditions and diseases

vehicle_search

Vehicles and vessels

object_search

Objects

trap_search

Traps and hazards

psionic_search

Psionic powers and disciplines

deck_search

Decks (e.g. Deck of Many Things)

reward_search

Supernatural gifts and boons

optfeature_search

Optional class features and invocations

table_search

Random tables

variantrule_search

Variant rules

deity_search

Deities and gods (searchable by pantheon/setting)

language_search

Languages

skill_search

Skills

sense_search

Senses (darkvision, tremorsense, etc.)

book_search

Sourcebooks (name, ID, source, publication date)

adventure_search

Published adventures

class_search

Character classes (official + homebrew)

subclass_search

Subclasses and archetypes

classfeature_search

Class features (searchable by class and level)

subclassfeature_search

Subclass features (searchable by class, subclass, and level)

Get Tools (*_get)

Exact lookup by name with full fluff/description merged in. Accept name, optional source, and ruleset.

Tool

Content

spell_get

Full spell entry with description

monster_get

Full stat block with lore

item_get

Full item entry with description

race_get

Full race entry with traits and fluff

background_get

Full background entry with fluff

feat_get

Full feat entry

book_get

Sourcebook metadata by name

adventure_get

Adventure metadata by name

class_get

Full class entry by name

subclass_get

Full subclass entry by name

Sourcebook & Adventure Content

Tool

Description

book_content_get

Retrieve full prose from a sourcebook or adventure by source abbreviation (e.g. SCC, EGW, SCC-CK). Without section: returns a table of contents. With section only: returns that section's subsection names, or its full text if it has no subsections. With section + subsection: returns that subsection's text rendered as clean markdown. Matching is case-insensitive substring throughout.

Omnisearch

Tool

Description

omnisearch

Search all 24 content types at once. Returns results tagged with entityType. Accepts include_homebrew (default true — homebrew is included by default).

DM Calculator Tools

All calculators are purely local — no network calls, no API key needed.

Tool

Description

cr_calculate

Calculate a monster's Challenge Rating from its stats (HP, AC, DPR, attack bonus). Applies DMG Appendix B algorithm. Supports damage immunity (effective HP ×2), resistance (×1.5), and vulnerability (×0.5). Returns final CR, XP, and the defensive/offensive sub-CRs.

cr_scale

Look up the expected stat ranges (HP, AC, attack bonus, DPR, save DC, proficiency bonus) for a given CR from the DMG reference table. Useful for designing or adjusting homebrew monsters.

encounter_build

Evaluate encounter difficulty for a party vs a set of monsters. Supports both 2014 (easy/medium/hard/deadly, with monster-count XP multiplier) and 2024 (low/moderate/high, no multiplier) rulesets. Returns adjusted XP, difficulty label, and full threshold breakdown.

loot_generate

Generate individual treasure loot for a monster by CR, using the DMG individual treasure tables. Returns all possible outcomes for the CR bracket with probability percentages and average coin amounts.

Session Guidance

The server declares an instructions string on the MCP initialize handshake — a condensed tool decision guide (which tool to reach for, ruleset/homebrew defaults, class feature lookups, calculators). Spec-compliant clients fold this into context automatically on connect, with no user action required. This is what actually reaches Claude Desktop, since Desktop doesn't expose MCP-registered prompts as an invokable command the way Claude Code does.

The same content is also registered as an MCP prompt named 5eMCP, for clients that support explicit prompt invocation — in Claude Code this shows up as /mcp__<server-name>__5eMCP (using whichever key you gave the server in your mcpServers config, e.g. 5etools per the examples above). There's also a help tool with the same guidance, callable like any other tool from clients (including Claude Desktop) that don't support MCP prompts at all.

Environment Variables

Variable

Default

Description

GITHUB_TOKEN

Read-only GitHub PAT. Strongly recommended.

DEFAULT_RULESET

"2024"

Which ruleset to use ("2024" or "2014").

MANIFEST_TTL_SECONDS

3600

How often to rebuild the manifest (seconds).

CACHE_DIR

~/.cache/5emcp

Disk cache location (local stdio mode).

REDIS_URL

Redis connection URL (e.g. redis://localhost:6379). When set and reachable, Redis is used instead of disk cache. Falls back to disk on connection failure.

LOCAL_BASE_URL

Base URL of a self-hosted 5etools static mirror (e.g. https://5e.example.com). When set, spell/monster/item/etc. content for the 2024 and 2014 ruleset repos is fetched from this mirror instead of raw.githubusercontent.com — faster, no GitHub rate limit for content fetches. Ignored if LOCAL_DATA_DIR is also set. Manifest indexing (file listing) still uses the GitHub Contents API, since a static mirror has no equivalent listing endpoint. Homebrew content is never redirected.

LOCAL_DATA_DIR

Filesystem path to a local 5etools data/ directory (e.g. /opt/5etools/data) — typically used when the MCP server runs colocated with a self-hosted mirror. When set, both manifest indexing and content fetching read directly from disk, bypassing GitHub entirely for core ruleset content (no rate limit, no network round-trip at all). Homebrew still goes through the GitHub Contents API regardless, since self-hosted mirrors don't bundle it — that call degrades gracefully (logged, non-fatal) if it hits a rate limit. Assumes the directory matches the ruleset(s) you query; a single local mirror generally only reflects one ruleset.

PORT

3000

Port for the HTTP transport (npm start / dist/http.js).

MCP_HTTP_TOKEN

Bearer token required on the HTTP transport's /mcp endpoint. If unset, the endpoint is unauthenticated — fine on a private network, not recommended for public exposure.

HTTP Transport

In addition to stdio (used by Claude Desktop/Code/Cursor above), the server supports the MCP Streamable HTTP transport, useful for running the server remotely (e.g. colocated with a self-hosted 5etools mirror) and connecting to it from clients that can't spawn a local process.

Colocated with a self-hosted mirror (reads the mirror's data/ directory straight off disk — fastest, no GitHub calls for core content):

LOCAL_DATA_DIR=/opt/5etools/data MCP_HTTP_TOKEN=your-secret npm start

Or pointing at a mirror over HTTP (e.g. the MCP server runs elsewhere than the mirror):

LOCAL_BASE_URL=https://5e.example.com MCP_HTTP_TOKEN=your-secret npm start

npm start runs the TypeScript source directly via tsx — no separate build step needed. If you do want a compiled build (e.g. for npm run build:mcpb), note that tsc is memory-hungry; on RAM-constrained hosts it can OOM, in which case npm start is the way to go anyway.

This starts a stateless HTTP server:

  • POST /mcp — MCP JSON-RPC endpoint (Streamable HTTP transport, one server instance per request)

  • GET /health — health check, returns {"status":"ok","service":"5eMCP"}

If MCP_HTTP_TOKEN is set, requests to /mcp must include Authorization: Bearer <token>; /health is always open.

Connecting Claude Desktop / claude.ai to a Remote Instance

Once the HTTP server is deployed and reachable, connect to it as a Custom Connector rather than editing claude_desktop_config.json — that file is for stdio servers that Claude spawns as a local process, which doesn't apply to a server running elsewhere:

  1. Claude Desktop (or claude.ai) → Settings → Connectors → Add custom connector

  2. Enter your server's URL, e.g. https://5emcp.example.com/mcp

  3. Click Add

If MCP_HTTP_TOKEN is unset, that's all — the connector works immediately. Note that the Custom Connector UI's "Advanced settings" are built for OAuth (Client ID/Secret), not a raw static bearer token, so MCP_HTTP_TOKEN isn't directly pluggable there. If you need auth on a Custom Connector, put a reverse proxy in front (e.g. Cloudflare Access, Caddy with basicauth) rather than relying on MCP_HTTP_TOKEN alone.

Ruleset Support

Most tools accept ruleset: "2024" | "2014":

  • "2024"5etools-mirror-3/5etools-src (current rules)

  • "2014"5etools-mirror-3/5etools-2014-src (legacy rules)

Exceptions: cr_calculate, cr_scale, and loot_generate are ruleset-agnostic (the DMG reference tables they use don't differ by edition) — of the DM calculators, only encounter_build takes a ruleset param. help takes no parameters at all.

Development

npm run dev          # Run without compile step (tsx)
npm run build        # Compile TypeScript
npm run typecheck    # Type-check without emitting
npm test             # Run tests (Vitest)
npm run lint         # ESLint

This project uses TDD. Tests are written before implementation. See AGENTS.md for the full workflow including mandatory reviewer agent approval before commits.

# First-time setup: install git hooks
./.githooks/install.sh

Architecture

flowchart TD
    Client["MCP Client\n(Claude Desktop / Claude Code / Cursor)"]
    Server["MCP Server (Node.js)"]
    Manifest["Manifest Layer\n1-hour TTL refresh"]
    Cache["Cache Layer\nSHA-keyed disk or Redis"]
    Translation["Translation Layer\ntag resolver · typed handlers · passthrough"]
    Calculators["Calculators\nCR · encounter · loot · scaling"]
    GH["GitHub Contents API"]
    Raw["raw.githubusercontent.com"]
    Redis[("Redis / Disk")]

    Client -->|stdio| Server
    Server --> Manifest
    Server --> Cache
    Server --> Translation
    Server --> Calculators
    Manifest -->|"index all files"| GH
    Cache -->|"fetch on miss"| Raw
    Cache <-->|"read / write"| Redis

5etools data is fetched live from public GitHub repositories. This server does not store or redistribute any content. The GitHub API rate limit applies. A GitHub token is required for sustained use.

Calculator logic is ported from 5etools' MIT-licensed JavaScript source.

Credits

D20 icon by Delapouite via game-icons.net, licensed CC BY 3.0.

Available Tools

46 tools
adventure_getA

Get a specific D&D 5e published adventure by exact name. Returns the complete entry with description merged in. Prefer this over adventure_search when you have an exact name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExact name of the adventure (case-insensitive)
sourceNoSource abbreviation to disambiguate (e.g. PHB, XGE)
rulesetNoWhich ruleset to search. Omit to use the configured default ("2024"); pass "2014" to override.2024

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that the tool returns 'the complete entry with description merged in,' which is meaningful information about the response structure. It does not cover failure behavior on no match, but for a lookup tool this is a reasonable level of transparency.

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 no wasted words. The central behavior is front-loaded, followed by the return characteristics and usage guidance. Every sentence 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 lookup tool with full schema coverage, the description is nearly complete. It states the return payload ('complete entry with description merged in') and provides routing guidance. It does not describe not-found behavior, but the absence is minor because the tool is straightforward and the schema handles parameter details.

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?

The input schema already documents all three parameters at 100% coverage, so the baseline is 3. The description adds the phrase 'exact name,' which reinforces the required parameter's meaning, but it does not add meaning to source or ruleset beyond what the schema already states.

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 states a specific verb and resource: 'Get a specific D&D 5e published adventure by exact name.' It clearly distinguishes itself from sibling adventure_search by explicitly saying it should be preferred when an exact name is known, leaving no ambiguity about its role.

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?

The description gives explicit routing guidance: 'Prefer this over adventure_search when you have an exact name.' This tells the agent when to use this tool versus a clear alternative. It also implies that adventure_search is the fallback when an exact name is not available.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

background_getA

Get a specific D&D 5e character background by exact name. Returns the complete entry with description merged in. Prefer this over background_search when you have an exact name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExact name of the background (case-insensitive)
sourceNoSource abbreviation to disambiguate (e.g. PHB, XGE)
rulesetNoWhich ruleset to search. Omit to use the configured default ("2024"); pass "2014" to override.2024

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the behavioral burden. 'Get' implies a read operation, and 'Returns the complete entry with description merged in' discloses a useful output behavior beyond the schema. It does not address not-found or error behavior, but for a simple lookup that is a minor gap.

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?

The description is two concise sentences with no filler. The main operation and return behavior are front-loaded, and the usage guidance is separated cleanly into the second 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?

For a low-complexity get tool, the description adequately covers purpose, return behavior, and when to choose it over the search sibling. Parameter semantics are fully covered by the schema, and no output schema is needed given the explicit 'complete entry' statement.

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?

All three parameters already have descriptions in the schema, giving 100% schema description coverage. The tool description only repeats the 'exact name' concept and does not add meaningful parameter-level detail beyond what the schema already provides.

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 states the verb 'Get', the resource 'a specific D&D 5e character background', and the selection criterion 'by exact name.' It also explicitly distinguishes itself from the sibling 'background_search', making tool selection unambiguous.

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?

The description provides an explicit routing rule: 'Prefer this over background_search when you have an exact name.' This names the alternative and gives the condition that selects this tool, which is strong usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

book_content_getA

Get content from a D&D 5e sourcebook or adventure by source abbreviation (e.g. SCC, EGW, PHB). Uses a drill-down navigation model to minimise token usage — fetch only what you need:

  1. Omit section → returns top-level section/chapter names (TOC).

  2. Provide section only → if the section has subsections, returns their names; if it is a leaf (no subsections), returns its full text.

  3. Provide section + subsection → returns the rendered text of just that subsection.

  4. Not found → returns an error and the available names at that level. Supports book sources (PHB, DMG, SCC, EGW…) and adventure content (SCC-CK, COS…). Section and subsection filters are case-insensitive substring matches.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesSource abbreviation for the book or adventure (e.g. 'SCC', 'EGW', 'SCC-CK'). Case-insensitive.
rulesetNoWhich ruleset to use. Omit to use the configured default ("2024"); pass "2014" to override.2024
sectionNoTop-level section or chapter name (case-insensitive substring match). Omit to get a table of contents.
subsectionNoNamed subsection within the matched section (case-insensitive substring match). Requires section to be set. Returns rendered text of just this subsection.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden and handles it well. It discloses branch-dependent return behavior (TOC, subsection names, leaf text, subsection text), not-found error behavior with available names, and case-insensitive substring matching. The read-only nature is strongly implied by 'Get content' and the navigation model.

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?

The description is front-loaded with purpose and then uses a compact numbered list to explain each drill-down level. Every sentence earns its place, and the structure makes conditional behavior easy for an agent to parse and act on.

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?

Given no output schema and no annotations, this description is effectively complete for invocation: it tells the agent what to pass, in what combinations, what responses to expect at each level, and what happens on not-found. It covers both book and adventure content; a pointer to list_sources for valid abbreviations would be a minor enhancement, not a real 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?

Input schema coverage is 100%, so the baseline is 3. The description adds meaningful navigation semantics beyond the schema: it clarifies the relationship between section and subsection, explains what omission produces, and defines leaf behavior. It does not add detail about the ruleset parameter, but the schema already documents that fully.

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 states a specific verb ('Get content'), a specific resource ('D&D 5e sourcebook or adventure'), and a clear addressing mechanism (source abbreviation). The drill-down navigation model further distinguishes this tool from metadata/search siblings like book_get, book_search, and funnctionally related content tools.

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 numbered list provides explicit conditional usage guidance: omit section for TOC, provide section only for subsection names or leaf text, and provide section+subsection for a specific rendered subsection. It does not explicitly name alternatives or exclusion cases relative to siblings such as fetch_content or book_get, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

book_getA

Get a specific D&D 5e sourcebook by exact name. Returns the complete entry with description merged in. Prefer this over book_search when you have an exact name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExact name of the book (case-insensitive)
sourceNoSource abbreviation to disambiguate (e.g. PHB, XGE)
rulesetNoWhich ruleset to search. Omit to use the configured default ("2024"); pass "2014" to override.2024

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotation are provided, so the description carries the behavior disclosure burden. It does add useful behavior info—'Returns the complete entry with description merged in'—which clarifies the expected output. However, it does not say what happens when an exact name has no match, which is a relevant gap for a lookup tool.

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, each earning its place: what it gets, what it returns, and when to prefer it over the sibling search. No filler or redundancy.

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 exact-name getter with full schema coverage, it is mostly complete: it describes the returned entry and distinguishes from book_search. The only notable omission is not-found or error behavior, which would be useful since no output schema exists.

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 parameter semantics are already fully documented. The description reinforces the 'exact name' requirement but does not add meaning beyond the schema, matching the baseline score of 3.

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 verbplus resource: 'Get a specific D&D 5e sourcebook by exact name.' It also distinguishes itself from the sibling book_search by saying to prefer this tool when an exact name is known, so an agent can select it correctly.

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 'Prefer this over book_search when you have an exact name,' which provides both the condition for using this tool and the alternative to fall back on. This is clear enough to route the agent correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

class_getA

Get a D&D 5e character class by exact name. Returns the full class entry plus a resolvedFeatures array containing the complete text of every class feature at each level — no reference strings, actual feature descriptions. The ruleset param selects the correct edition: '2024' returns the 2024 XPHB version (e.g. XPHB Wizard), '2014' returns the classic PHB version. For features at a specific level use classfeature_search. For subclass details use subclass_get or subclassfeature_search.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExact name of the class (case-insensitive)
sourceNoSource abbreviation to disambiguate (e.g. PHB, XGE)
rulesetNoWhich ruleset to search. Omit to use the configured default ("2024"); pass "2014" to override.2024

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the behavioral burden and does so well by stating that resolvedFeatures contains complete feature text rather than reference strings. It also clarifies the edition-selection behavior of the ruleset parameter. It stops short of describing not-found behavior or the full shape of the class entry, but this is strong for a getter.

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?

The description is four short sentences, each earning its place: core action, returned data behavior, ruleset semantics, and alternative-tool routing. The most important behavioral detail about resolvedFeatures is front-loaded, and there is no filler or repetition of schema content.

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?

The description covers the key invocation decisions: exact-name lookup, ruleset override, and which sibling tools to use for related feature or subclass needs. Since there is no output schema, a little more detail about the overall class entry structure would strengthen it, but the provided level of detail is sufficient for an agent to select and call this tool 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?

The schema already documents all three parameters and has 100% coverage, so the baseline is 3. The description adds substantive value by explaining that ruleset '2024' returns the XPHB version and '2014' returns the classic PHB version, giving the enum real meaning. It adds less for name and source, but the ruleset clarification is meaningful.

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 names a specific action, 'Get', and resource, 'D&D 5e character class', scoped to exact-name lookup. It also distinguishes itself from sibling search tools by explaining that results include a resolvedFeatures array with full feature text rather than references.

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?

The description explicitly routes to alternatives for related needs: classfeature_search for features at a specific level and subclass_get or subclassfeature_search for subclass details. The exact-name scoping also implies that class_search is the better choice when the name is uncertain.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cr_calculateA

Calculate the Challenge Rating (CR) for a custom monster given its defensive and offensive stats. Uses the DMG Appendix B algorithm: defensive CR is derived from HP (adjusted for damage immunity, resistance, or vulnerability) and AC; offensive CR is derived from DPR and attack bonus (or save DC). The two are averaged to produce the final CR. Provide at least one of attackBonus or saveDc for the offensive calculation.

ParametersJSON Schema
NameRequiredDescriptionDefault
acYesMonster's Armor Class.
hpYesMonster's hit point total.
dprYesAverage damage per round (DPR). For multi-attack creatures, sum all attacks' average damage.
saveDcNoMonster's spell/ability save DC. Used when attackBonus is not provided.
immunityNoMonster is immune to a common damage type — effective HP is doubled for CR purposes.
resistanceNoMonster is resistant to a common damage type — effective HP is treated as 1.5× actual.
attackBonusNoMonster's attack bonus (e.g. +5 → 5). Takes precedence over saveDc.
vulnerabilityNoMonster is vulnerable to a common damage type — effective HP is halved for CR purposes.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It explains the calculation flow: defensive CR from HP/AC (with adjustments), offensive CR from DPR and attack bonus/save DC, then averaged. It stops short of covering rounding rules or edge cases, but the core behavior is clearly visible.

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?

The description is compact and front-loaded, starting with the primary action and then efficiently explaining the algorithm and input expectation. Every sentence earns its place; there is no filler or repetition of schema content.

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?

Given the algorithmic complexity, 8 parameters, no annotations, and no output schema, the description covers the main behavioral contract well: what is calculated, how, and what inputs are expected. It would be slightly stronger with rounding/edge-case notes, but as a calculator tool the description is reasonably complete.

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 baseline is 3 and the description does not need to redefine parameters. It does add meaningful relationship guidance ('Provide at least one of attackBonus or saveDc'), but most parameter-level meaning is already present in 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?

The description states a specific verb ('Calculate') and resource ('Challenge Rating for a custom monster'), and identifies the exact algorithm used (DMG Appendix B). It clearly differentiates itself from siblings like cr_scale or encounter_build by focusing on stat-to-CR conversion for custom monsters.

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 provides clear context: use this when you have a custom monster's defensive and offensive stats and want its CR. It also explicitly instructs that at least one of attackBonus or saveDc must be provided. It does not name alternative tools or direct when not to use it, but the usage context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cr_scaleA

Look up the expected stat ranges for a given Challenge Rating from the DMG reference table. Returns proficiency bonus, expected AC, HP range, attack bonus, DPR range, and save DC. Useful for scaling a homebrew monster up or down to a target CR, or for quickly checking whether a monster's stats are appropriate for its intended CR.

ParametersJSON Schema
NameRequiredDescriptionDefault
crYesTarget Challenge Rating. Accepts '0', '1/8', '1/4', '1/2', or integers 1–30. Valid values: 0, 1/8, 1/4, 1/2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral burden and does so well by stating exactly what the tool returns: proficiency bonus, expected AC, HP range, attack bonus, DPR range, and save DC. It also implies a read-only lookup through the phrase 'Look up'. It does not mention edge cases like invalid CR values, but for a pure table lookup the disclosed behavior is largely sufficient.

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?

The description is two sentences with no filler. The first sentence states the action and outputs, and the second supplies practical use cases. Every clause earns its place and the most important information is front-loaded.

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 single-parameter, no-output-schema lookup tool, the description is complete: it names the input domain, lists all returned fields, and gives usage context. It could be slightly stronger by distinguishing itself from cr_calculate, but nothing essential for correct invocation 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%: the cr parameter already includes valid values and the accepted format. The description only refers to 'a given Challenge Rating' and 'target CR', adding no substantive meaning beyond the schema, so the baseline 3 is appropriate.

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 ('Look up') and a clear resource ('expected stat ranges for a given Challenge Rating from the DMG reference table'). It also lists concrete return values, so the tool's function is unmistakable. It does not explicitly contrast with siblings like cr_calculate, but the lookup-oriented wording provides reasonable differentiation.

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 gives explicit use cases: scaling a homebrew monster up or down to a target CR, and checking whether a monster's stats fit its CR. It does not state exclusions or compare directly with alternatives such as cr_calculate, but the context is clear enough for an agent to know when to invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

encounter_buildA

Evaluate the difficulty of a D&D 5e encounter given the party composition and monster CRs. Supports both 2014 (classic) and 2024 (one D&D) rulesets. 2014 mode: uses four difficulty tiers (easy/medium/hard/deadly) with a monster count XP multiplier. 2024 mode: uses three difficulty tiers (low/moderate/high) with no multiplier. Both modes add a 'trivial' tier below easy/low and an 'absurd' tier above deadly/high. Returns total XP, adjusted XP (2014 only), difficulty label, and full threshold breakdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
rulesetNoWhich ruleset to use. Omit to use the configured default ("2024"); pass "2014" to override. '2014' uses the classic XP multiplier; '2024' does not.2024
monsterCrsYesArray of monster CR strings (one entry per monster). Example: ["5", "3", "1/2"]. Valid CR values: 0, 1/8, 1/4, 1/2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30.
partyLevelsYesArray of character levels in the party (one entry per character). Example: [5, 5, 4, 4] for a four-person party at levels 5/5/4/4.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure, and it succeeds: it specifies ruleset-specific mechanics, the extra difficulty tiers, whether the XP multiplier applies, and what the tool returns (total XP, adjusted XP for 2014, difficulty label, threshold breakdown). An agent can predict behavior without needing an output 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?

The purpose is front-loaded, and every subsequent clause adds a distinct piece of information: ruleset support, mode differences, tier additions, and return values. The labeled-mode structure makes the relatively long description easy to scan without wasted words.

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?

For a three-parameter tool with rich schema coverage and no output schema, the description is complete: it states the required inputs, the two operational modes, the output contents, and the mode-specific differences. No essential behavior needed to invoke or interpret the result 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 baseline applies and the schema already documents partyLevels, monsterCrs, and ruleset. The description adds useful mode context, such as why ruleset matters and that adjusted XP is 2014-only, but it does not materially expand the meaning of the individual parameters beyond what the schema already provides.

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 opens with a specific verb ('Evaluate'), a concrete resource (D&D 5e encounter), and the core inputs (party composition and monster CRs). It is unmistakably clear about what the tool does, but it does not explicitly distinguish itself from sibling tools like cr_calculate or cr_scale, so it misses the top score for active sibling differentiation.

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 makes the intended use obvious: answer encounter-difficulty questions given a party and monster CR list. It also provides a clear decision rule for choosing between the 2014 and 2024 rulesets. It does not name alternatives or state when not to use this tool, so it falls short of explicit routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

feat_getA

Get a specific D&D 5e feat by exact name. Returns the complete entry with description merged in. Prefer this over feat_search when you have an exact name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExact name of the feat (case-insensitive)
sourceNoSource abbreviation to disambiguate (e.g. PHB, XGE)
rulesetNoWhich ruleset to search. Omit to use the configured default ("2024"); pass "2014" to override.2024

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. It clearly frames the tool as a read operation ('Get') and reveals what the caller receives ('complete entry with description merged in'), which is sufficient for a simple lookup. It does not describe error behavior for missing exact matches, but that is a minor gap for this tool type.

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 with no waste: the core action and exact-name condition come first, the return value second, and the routing guidance last. Every sentence earns its place.

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?

For a simple lookup tool with only one required parameter and no output schema, the description provides the key invocation detail ('exact name') and the return expectation ('complete entry with description merged in'). Source and ruleset disambiguation are already covered by the schema, so 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%, so the schema already fully documentents all three parameters. The description's phrase 'exact name' reinforces the name parameter but adds no new meaning beyond what the schema provides, so it earns the baseline score.

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 clearly identifies the verb ('Get'), the resource ('specific D&D 5e feat'), and the distinguishing condition ('exact name'). It also names the sibling tool it should be preferred over (feat_search), making the purpose unambiguous.

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?

It explicitly states when to use this tool: when you have an exact feat name. It also names the alternative (feat_search) and says to prefer this tool in that case, implying search is for cases without an exact name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_contentA

Fallback tool — fetch any file in the manifest by content type and file name. Prefer the typed _search and _get tools (spell_search, monster_get, class_get, etc.) when available. Use fetch_content for content types that don't have a typed tool, or when you need raw file access. Omit file_name to list available files for a content type. Returns tag-resolved, metadata-stripped JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
rulesetNoWhich ruleset to query. Omit to use the configured default ("2024"); pass "2014" to override.2024
homebrewNoSearch homebrew content instead of core
file_nameNoFile to fetch (e.g. 'spells-phb.json'). Omit to list available files for this type.
content_typeYesContent type (e.g. 'spells', 'bestiary', 'conditionsdiseases', 'vehicles')

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral burden. It discloses the return format ('tag-resolved, metadata-stripped JSON'), the fallback behavior, and the file-listing behavior. It does not cover error cases or size/rate concerns, but for a read-only fetch tool the disclosure is solid.

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 with no wasted words. The fallback purpose is front-loaded, usage guidance follows, and the return format closes the description efficiently.

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?

For a fallback file-fetch tool with no output schema, this description is complete: it explains when to use it, how to use it, what to omit to list files, and what kind of JSON to expect. An agent has enough context to invoke it correctly.

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 parameters in detail. The description reinforces the file_name omission behavior, but that is also present in the schema. It adds little beyond the 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?

The description states a specific verb and resource: 'fetch any file in the manifest by content type and file name.' It also explicitly frames the tool as a fallback and distinguishes it from the typed _search and _get siblings, so an agent can tell them apart 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?

The description gives explicit guidance: prefer typed tools when available, use fetch_content for content types without a typed tool or for raw file access, and omit file_name to list files. This is strong when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

helpA

Returns a guide to all available 5eMCP tools and when to use each. Call this first when unsure which tool to reach for — it explains the decision between omnisearch vs typed search vs _get tools, class feature lookups, book content, DM calculators, and the fetch_content fallback.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It accurately characterizes the tool as informational — it 'returns aguide' and explains routing decisions, with no implied mutation or side effects. The only gap is that, absent an output schema, the exact form of the returned guide is left unspecified.

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 with no waste: the core purpose is in the opening clause, and the second sentence adds routing value by naming the specific decision points. The enumeration of decision axes earns its place because it tells the agent exactly what guidance to expect.

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 zero-parameter tool with no annotations and no output schema, the description covers what the tool does, when to call it, and what decisions it resolves — sufficient for an agent to decide whether to invoke it. The only minor gap is the lack of detail on the output form, since no output schema exists to define it.

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?

The input schema is an empty object with zero parameters, so there are no parameter semantics to document. Per the baseline for 0-parameter tools, the description doesn't need to compensate for anything.

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 states a specific verb and resource: it 'returns a guide to all available 5eMCP tools and when to use each.' It clearly positions this as the meta-tool among 44 siblings, distinct from search, get, and DM-calculator tools because it explains their selection rather than performing their function.

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?

'Call this first when unsure which tool to reach for' is an explicit when-to-use condition, and the second sentence enumerates the decision axes it covers (omnisearch vs typed search vs _get tools, class feature lookups, book content, DM calculators, fetch_content fallback). It lacks an explicit when-not-to-use statement, though 'when unsure' implies the opposite condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

item_getA

Get a specific D&D 5e magic or mundane item by exact name. Returns the complete entry with description merged in. Prefer this over item_search when you have an exact name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExact name of the item (case-insensitive)
sourceNoSource abbreviation to disambiguate (e.g. PHB, XGE)
rulesetNoWhich ruleset to search. Omit to use the configured default ("2024"); pass "2014" to override.2024

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full disclosure burden. It adds useful behavioral detail by stating that the complete entry is returned and that the description is merged in. It does not discuss failure behavior, but that is a minor gap for a simple exact-name lookup.

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?

The description is two sentences, front-loads the core function, and avoids repetition of schema details. Every sentence earns its place, and the usage guidance is concise.

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 straightforward exact-name item lookup with a well-detailed input schema, the description covers the essential retrieval behavior and even mentions output merging. It is not missing any critical information needed to invoke the tool correctly, though it could briefly state what happens when no exact match exists.

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?

The input schema already documents the name parameter as an exact case-insensitive match, explains source as a disambiguation abbreviation, and defines the ruleset default. The description does not add meaningful semantics beyond what the schema already provides, so the baseline score 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?

The description clearly identifies the action (Get), the resource (a specific D&D 5e magic or mundane item), and the required input condition (exact name). It also differentiates this tool from item_search, helping an agent distinguish them without opening either 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?

The description explicitly says to prefer this tool over item_search when an exact name is available. This gives direct selection guidance and names the alternative, leaving no ambiguity about when this tool should be chosen.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sourcesA

List all available source abbreviations with their content types and files. Optionally filter by content type.

ParametersJSON Schema
NameRequiredDescriptionDefault
rulesetNoWhich ruleset to query. Omit to use the configured default ("2024"); pass "2014" to override.2024
homebrewNoList homebrew sources instead
content_typeNoFilter to a specific content type (e.g. 'spells', 'bestiary')

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It transparently states that the tool lists all available source abbreviations with their content types and files, and that filtering by content type is optional. For a read-only enumeration operation, this is adequate, though it does not describe output shape or any edge-case 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?

The description is a single, front-loaded sentence with no wasted words. It states the primary action and the optional filter in a compact and readable way.

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?

The tool is simple, has no required parameters, and the schema covers all parameters thoroughly. The description conveys the essential behavior and return contents, though it could be slightly more complete by noting the default ruleset behavior or how homebrew interacts with the source list; these are already covered by parameter descriptions.

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 schema already provides detailed descriptions for ruleset, homebrew, and content_type. The description adds context about the output contents but does not meaningfully extend parameter semantics beyond the schema, so the baseline score of 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 states a specific verb ('List') and resource ('available source abbreviations'), and clarifies what is included ('content types and files'). This clearly distinguishes list_sources from the many get/search sibling tools, which retrieve specific content rather than enumerate available sources.

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?

The description implies usage when you need to enumerate available sources, and mentions optional content-type filtering, but it does not explicitly state when to prefer this over alternatives or provide exclusions. No sibling tool is referenced, leaving the when-to-use decision mostly to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

loot_generateA

Generate individual treasure loot for a monster of a given Challenge Rating, based on the DMG individual treasure tables. Returns all possible outcomes for the appropriate CR bracket (Challenge 0-4, 5-10, 11-16, or 17+) with their d100 range, probability percentage, and average coin amounts (using dice average values). Roll a d100 to select a row, or use the average coins for a quick reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
crYesMonster's Challenge Rating. Accepts '0', '1/8', '1/4', '1/2', or integers 1–30. Valid values: 0, 1/8, 1/4, 1/2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it does well by explaining the deterministic table-based output: all possible outcomes for the CR bracket, d100 range, probability percentage, and average coin amounts. It also clarifies that the tool returns a table for the user to roll against rather than performing a random roll 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?

The description is efficient, front-loaded with the core purpose, and every sentence adds value: what the tool does, what it returns, and how to use the result. There is 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 simple one-parameter tool with no output schema, the description explains the input, the output categories, and the intended post-call action. It is sufficiently complete for an agent to select and invoke the tool correctly, though it could mention coin denominations explicitly.

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?

The schema covers 100% of parameter documentation with a detailed valid-value list for 'cr'. The description adds useful context about CR brackets and the relationship to treasure tables, but it does not need to compensate for schema gaps.

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 uses a specific verb and resource: 'Generate individual treasure loot for a monster of a given Challenge Rating' based on the DMG individual treasure tables. It clearly distinguishes this tool from sibling tools, which are predominantly search/get operations or encounter/CR utilities.

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 clearly establishes when to use the tool: when generating individual treasure loot by a monster's Challenge Rating. It also gives practical usage instructions ('Roll a d100 to select a row, or use the average coins'), though it does not explicitly discuss exclusions or contrast with alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manifest_statusA

Returns the manifest build time, file counts by content type, and any unknown content types (those without typed handlers).

ParametersJSON Schema
NameRequiredDescriptionDefault
rulesetNoWhich ruleset to query. Omit to use the configured default ("2024"); pass "2014" to override.2024

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description communicates the core behavior — returning status information — and lists the output categories. However, with no annotations provided, it does not explicitly state that the operation is read-only, nor does it disclose behavior around missing manifests, freshness/caching, or error conditions. The verb 'Returns' implies non-mutating behavior, but only implicitly.

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, focused sentence that leads with the verb and immediately specifies the output contents. There is no filler or repetition; every word contributes to understanding what the tool does.

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 tool with one optional parameter and no output schema, the description adequately captures the primary return information: build time, file counts, and unknown content types. It is complete enough for an agent to call the tool and interpret the general result, though it does not specify the exact JSON structure or timestamp format.

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%, with the ruleset parameter fully documented including its enum values and default behavior. The description itself adds no parameter detail, but the schema already carries the full meaning, so the baseline score of 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 states a specific verb, 'Returns', and identifies the exact resource: the manifest. It also enumerates the returned data — build time, file counts by content type, and unknown content types — making the tool's function unambiguous and distinct from the many sibling search/get tools.

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 makes clear that this tool is for querying manifest status, and no sibling tool appears to offer the same resource, so there is little ambiguity about when to use it. It does not explicitly specify exclusions or alternative tool recommendations, but the unique scope provides clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

monster_getA

Get a specific D&D 5e monster or creature by exact name. Returns the complete entry with description merged in. Prefer this over monster_search when you have an exact name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExact name of the monster (case-insensitive)
sourceNoSource abbreviation to disambiguate (e.g. PHB, XGE)
rulesetNoWhich ruleset to search. Omit to use the configured default ("2024"); pass "2014" to override.2024

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It adds useful behavior information ('Returns the complete entry with description merged in'), but it does not disclose not-found behavior, duplicate-name disambiguation nuances, or response format specifics. This is adequate but not rich.

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, each earning its place: what the tool does, what it returns, and when to prefer it. The key fact (exact name lookup) is front-loaded, and there is no redundancy.

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 exact-name lookup with well-described parameters, the description is nearly complete: it states the resource, the matching behavior, and the return shape. Minor gaps like not-found behavior and duplicate-name disambiguation are not covered, but the absence of an output schema is partially offset by the 'complete entry' return statement.

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?

The input schema already describes all three parameters with 100% coverage, so the baseline is 3. The description's 'exact name' phrasing reinforces the required 'name' parameter but does not add material meaning beyond 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?

The description clearly states a specific verb ('Get'), a specific resource (D&D 5e monster or creature), and the exact-match lookup mode. It also explicitly differentiates this tool from monster_search by naming when to prefer it, so an agent can distinguish it from the sibling without inspecting 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?

The description gives explicit routing guidance: prefer this over monster_search when you have an exact name. This directly tells the agent when to use the tool versus an alternative, leaving little ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

omnisearchA

Search across ALL D&D 5e content types simultaneously — spells, monsters, items, classes, subclasses, feats, races, backgrounds, conditions, and more. Start here when you don't know what type of content you need. Each result includes an entityType field so you can tell what kind of thing was found. For deeper filtering within a single type, follow up with the typed _search tool (e.g. spell_search, monster_search). Homebrew is included by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesName or partial name to search for across all content types
rulesetNoWhich ruleset to search. Omit to use the configured default ("2024"); pass "2014" to override.2024
per_type_limitNoMax results per content type (default 5)
include_homebrewNoInclude TheGiddyLimit/homebrew content in results (default true — homebrew classes, spells, etc. are included by default)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses that results span all types at once and that each result includes an entityType field, which is non-obvious and essential for interpreting a mixed-type result set. It also notes the homebrew-included-by-default trait. It does not explicitly state 'read-only', but 'Search' strongly implies it, and there are no side-effect concerns for a search tool.

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?

The description is three sentences with zero filler. The primary action is front-loaded, and each sentence contributes a distinct piece of information: scope, when to use, result format, and follow-up routing.

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?

Given there is no output schema, the description appropriately explains the key aspect of the return shape ('Each result includes an entityType field') and the default homebrew behavior. It could be slightly more explicit about result ordering or grouping, but nothing critical is missing for an agent to call the tool correctly.

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 baseline is 3. The description adds no additional parameter meaning; it only restates the include_homebrew default ('Homebrew is included by default'), already visible in the schema. The query, ruleset, and per_type_limit semantics are all adequately covered by the schema's existing parameter descriptions.

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 opens with a specific verb and resource: 'Search across ALL D&D 5e content types simultaneously' and enumerates example types. It clearly differentiates itself from the typed _search siblings by naming them ('spell_search, monster_search'), so an agent can immediately tell this is the cross-type entry point.

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?

It explicitly states when to use the tool: 'Start here when you don't know what type of content you need.' It also gives an exclusion/alternative: 'For deeper filtering within a single type, follow up with the typed _search tool.' This is explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

race_getA

Get a specific D&D 5e playable species or race by exact name. Returns the complete entry with description merged in. Prefer this over race_search when you have an exact name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExact name of the race (case-insensitive)
sourceNoSource abbreviation to disambiguate (e.g. PHB, XGE)
rulesetNoWhich ruleset to search. Omit to use the configured default ("2024"); pass "2014" to override.2024

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of disclosing behavior. It states that the tool returns 'the complete entry with description merged in,' which is useful observable behavior beyond what the schema reveals. It also communicates exact-name matching. It does not mention not-found/error behavior, but for a simple fetch operation this is a reasonably transparent description.

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?

The description is three sentences with no filler. The core purpose is front-loaded, the return behavior is stated, and the routing guidance to race_search is placed last. Every sentence 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 getter with three parameters and no output schema, the description conveys the essential purpose, matching mode, and return behavior. It could mention error/not-found behavior, but the sibling list and schema already clarify the scope. The guidance distinguishing it from race_search completes the decision context.

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 three parameters well. The description adds context by emphasizing exact-name lookup and the merged description, but it does not need to repeat parameter details. The baseline of 3 applies because the description adds only modest meaning beyond 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?

The description names a specific action ('Get'), a specific resource ('a specific D&D 5e playable species or race'), and a clear selection criterion ('by exact name'). It also distinguishes itself from race_search by noting that exact names are the use case, which helps an agent choose between the two tools 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?

The description explicitly tells the agent when to prefer this tool: 'Prefer this over race_search when you have an exact name.' This directly guides tool selection and names the alternative, giving clear decision criteria rather than leaving the choice implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spell_getA

Get a specific D&D 5e spell by exact name. Returns the complete entry with description merged in. Prefer this over spell_search when you have an exact name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExact name of the spell (case-insensitive)
sourceNoSource abbreviation to disambiguate (e.g. PHB, XGE)
rulesetNoWhich ruleset to search. Omit to use the configured default ("2024"); pass "2014" to override.2024

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It communicates a read-only operation through 'Get' and adds a useful output detail: 'Returns the complete entry with description merged in.' It does not discuss error/not-found behavior, but for a simple read tool this is a minor gap.

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, each earning its place: what it gets, what it returns, and when to choose it over the sibling. No filler or repetition of schema content.

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 low-complexity getter with three params and no output schema, the description covers purpose, selection criterion, and return composition. It could be slightly more complete about what happens when no spell matches, but that is not a blocking 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 baseline is 3. The description reemphasizes 'exactly name,' mirroring the schema's name parameter, but adds no new meaning for the source or ruleset parameters.

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: 'Get a specific D&D 5e spell by exact name.' It also distinguishes itself from spell_search by emphasizing the exact-name requirement, so an agent can tell them apart without inspecting 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?

Explicitly says 'Prefer this over spell_search when you have an exact name.' This names the sibling alternative and gives the condition that selects this tool; the opposite case (use spell_search for non-exact/fuzzy queries) is clearly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subclass_getA

Get a specific D&D 5e subclass or archetype by exact name. Returns the complete entry with description merged in. Prefer this over subclass_search when you have an exact name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExact name of the subclass (case-insensitive)
sourceNoSource abbreviation to disambiguate (e.g. PHB, XGE)
rulesetNoWhich ruleset to search. Omit to use the configured default ("2024"); pass "2014" to override.2024

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It transparently states that the tool returns 'the complete entry with description merged in,' clarifying the output behavior. It does not mention failure modes or disambiguation caveats, but for a simple read-only retrieval this is reasonable coverage.

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 with no filler: the first states the operation and output, the second gives routing guidance. Every sentence earns its place and the key information is front-loaded.

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?

For a simple exact-name retrieval tool, the description is complete: it defines the input condition (exact name), the return behavior (complete entry with merged description), and the alternative when the condition is not met (subclass_search). The schema covers the remaining parameter details.

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 every parameter already has a descriptive meaning, so the baseline is 3. The description does not add further semantic detail about parameters like source or ruleset beyond what the schema already provides.

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 states a specific verb and resource: 'Get a specific D&D 5e subclass or archetype by exact name.' It also distinguishes itself from the sibling subclass_search by explicitly noting the exact-name requirement, so an agent can clearly tell the two apart.

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?

The description gives explicit routing guidance: 'Prefer this over subclass_search when you have an exact name.' This directly tells the agent when to use this tool versus its main alternative, leaving no ambiguity.

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. 46 tool updatesv1.2.0
    • First observedadventure_get
    • First observedadventure_search
    • First observedbackground_get
    • First observedbackground_search
    • First observedbook_content_get
    • First observedbook_get
    • First observedbook_search
    • First observedclass_get
    • First observedclass_search
    • First observedclassfeature_search
    • First observedcondition_search
    • First observedcr_calculate
    • First observedcr_scale
    • First observeddeck_search
    • First observeddeity_search
    • First observedencounter_build
    • First observedfeat_get
    • First observedfeat_search
    • First observedfetch_content
    • First observedhelp
    • First observeditem_get
    • First observeditem_search
    • First observedlanguage_search
    • First observedlist_sources
    • First observedloot_generate
    • First observedmanifest_status
    • First observedmonster_get
    • First observedmonster_search
    • First observedobject_search
    • First observedomnisearch
    • First observedoptfeature_search
    • First observedpsionic_search
    • First observedrace_get
    • First observedrace_search
    • First observedreward_search
    • First observedsense_search
    • First observedskill_search
    • First observedspell_get
    • First observedspell_search
    • First observedsubclass_get
    • First observedsubclass_search
    • First observedsubclassfeature_search
    • First observedtable_search
    • First observedtrap_search
    • First observedvariantrule_search
    • First observedvehicle_search

TDQS

A4/5.0

Scored across 46 tools

Disambiguation4/5

The search/get pairs for each content type are clearly distinguished, and omnisearch is explicitly positioned as the fallback when the content type is unknown. However, book_get vs book_content_get and class_get vs classfeature_search have somewhat overlapping boundaries that could cause misselection.

Naming Consistency4/5

The vast majority of tools follow a consistent contenttype_search/contenttype_get convention, making the names highly predictable. Utility tools like help, manifest_status, fetch_content, and cr_calculate break the pattern, but they form a recognizable secondary category.

Tool Count2/5

At 46 tools, this is far above the 25+ threshold and creates a heavy selection burden on the agent. The typed search/get pairs are comprehensive but could be consolidated into a smaller set of parameterized tools, and the utility tools could reasonably be separated.

Completeness5/5

The surface covers nearly every meaningful D&D content type with search and exact-get access, plus class feature resolution, book content navigation, DM calculators, and a fetch_content fallback. The manifest_status and fallback tools ensure even untracked content types are reachable, so there are no significant dead ends.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Provides fast, cached access to comprehensive Dungeons & Dragons 5th Edition data including spells, monsters, classes, races, equipment, and rules through Open5e and D\&D 5e APIs.
    7
    2
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    Provides comprehensive access to Dungeons & Dragons 5th Edition content through the Open5e API. It enables users to search for game mechanics, generate character builds, and create balanced encounters via natural language.
    37
    22
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides read-only SRD lookup and deterministic enrichment tools for D&D 5e content generation, including search, entity retrieval, and generation of monsters, spells, items, NPCs, and encounters.
    MIT