ChatRPG
ChatRPG is a comprehensive D&D 5e MCP server providing AI Dungeon Masters with 30+ tools for tabletop gaming, featuring character persistence, real-time combat tracking, ASCII art rendering, and a web client interface.
Character Management: Create, update, delete, and level up characters with full D&D 5e stats, classes, races, equipment, and spell slots. Supports rest mechanics (short/long with hit dice spending), skill checks, saving throws, attack rolls, and spell slot management for all caster types including warlock pact magic.
Combat System: Initialize tactical encounters with initiative tracking, terrain, and lighting. Execute actions (attack, dash, dodge, cast spells, grapple, shove) with automatic hit/damage resolution. Manage turn advancement with automatic condition duration tracking, death saves, dynamic terrain modification, cover detection, and ASCII battlefield rendering.
Magic System: Track spell concentration with automatic DC calculation, manage aura effects (Spirit Guardians, Paladin auras), use spell scrolls with success/failure resolution, and enable improvised magic through arcane synthesis with Arcana checks.
Spatial Mechanics: Calculate grid-based distances with elevation, determine areas of effect (sphere, cone, line, cube, cylinder) with automatic target detection, check line of sight with obstacle detection and special vision modes, calculate movement paths considering terrain, and place interactive props (barrels, doors, chests) with cover, HP, AC, locks, and traps.
World & Session Management: Create location graphs with interconnected areas, move the party between locations with locked/hidden passage mechanics, manage party composition with role assignments, handle inventory operations (give/take/equip/transfer), maintain searchable session notes with tags and importance levels, and retrieve comprehensive session context snapshots.
Dice Rolling: Supports standard notation (2d6+4, 4d6kh3) with advantage/disadvantage and batch rolling for simultaneous expressions.
Technical Features: Persistent storage in AppData/config directories, WebSocket broadcasting for real-time encounter updates, dual transport support (stdio for Claude Desktop, SSE for web clients), fuzzy enum matching for forgiving input parsing, and D&D 5e SRD-compliant mechanics.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ChatRPGroll a perception check for my rogue Finn"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ChatRPG
D&D 5e MCP Server for AI Dungeon Masters
A Model Context Protocol (MCP) server providing 30+ D&D 5e tools for LLM-powered tabletop gaming. Features real-time combat tracking, character persistence, ASCII art rendering, and a web client interface.
Features
30+ D&D 5e Tools - Character creation, combat encounters, spell tracking, dice rolling
ASCII Art Output - Retro-style box drawing for immersive terminal/chat display
Dual Transport - stdio for Claude Desktop, SSE for web client
Real-time Sync - WebSocket broadcasting for encounter updates
Persistent Storage - Characters and encounters saved to AppData
Web Client - Browser-based interface with typing indicators
Related MCP server: rpg-mcp
Quick Start
1. Build & Run
npm install
npm run build
# Run with stdio (for Claude Desktop)
npm start
# Run with SSE (for web client, port 3001)
node dist/index.js --sse2. Configure Claude Desktop
Add to your Claude Desktop config:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"chatrpg": {
"command": "node",
"args": ["C:\\path\\to\\ChatRPG\\dist\\index.js"]
}
}
}3. Web Client
The web client connects to the SSE endpoint:
# Start server with SSE
node dist/index.js --sse
# Open web-client/index.html in browserAvailable Tools
Character Management
Tool | Description |
| Full D&D 5e character creation with auto-calculated stats |
| Retrieve by ID/name, supports listing and filtering |
| Modify stats with before/after comparison |
| Remove with cascade cleanup, batch support |
| Level progression with HP rolls, spell slots |
| Short/long rest with hit dice and recovery |
| Full/half/third casters, warlock pact magic |
| Skill checks, saves, attacks, initiative |
Combat System
Tool | Description |
| Initialize combat with participants and terrain |
| Retrieve state with verbosity levels |
| Attack, dash, dodge, disengage, grapple, shove, cast |
| Turn management with condition ticking |
| Close with outcome tracking |
| D&D 5e death save mechanics |
| Apply/remove conditions with duration |
| Composite operations with state sync |
| ASCII tactical map |
| Hazards, obstacles, difficult terrain |
Magic System
Tool | Description |
| Concentration checks and tracking |
| Spirit Guardians, Paladin auras, etc. |
| Spell scroll mechanics |
| Improvised magic with Arcana checks |
Spatial Mechanics
Tool | Description |
| Grid-based distance (5e rules) |
| Sphere, cone, line, cube, cylinder |
| Obstacle detection |
| Half, three-quarters, full cover |
| Interactive battlefield objects |
| Pathfinding with terrain |
World & Session
Tool | Description |
| Location graph for navigation |
| Travel between locations |
| Party composition and roles |
| Item management and equipping |
| Session notes with tagging |
| Comprehensive state snapshot |
Dice
Tool | Description |
| Standard notation, advantage/disadvantage, batch rolls |
Project Structure
ChatRPG/
├── src/
│ ├── index.ts # MCP server (stdio + SSE transports)
│ ├── registry.ts # Tool registration (30+ tools)
│ ├── types.ts # Shared Zod schemas
│ ├── fuzzy-enum.ts # Fuzzy enum matching
│ ├── websocket.ts # Real-time broadcasting
│ └── modules/
│ ├── ascii-art.ts # Box drawing, formatting
│ ├── characters.ts # Character CRUD, leveling
│ ├── combat.ts # Encounters, conditions, actions
│ ├── data.ts # Locations, party, inventory, notes
│ ├── dice.ts # Dice parsing and rolling
│ ├── magic.ts # Spells, concentration, auras
│ └── spatial.ts # Distance, AoE, movement
├── web-client/ # Browser-based interface
├── tests/ # Vitest test suites
├── dist/ # Compiled output
└── design docs/ # ADRs and documentationDevelopment
Commands
# Development with auto-rebuild
npm run dev
# Type check
npx tsc --noEmit
# Build
npm run build
# Run tests
npm test
# Run tests once
npm test -- --runAdding a New Tool
Define Zod schema in
src/modules/[module].tsWrite handler function
Export schema from module
Register in
src/registry.tsAdd tests in
tests/[module]/
Git Workflow
main - Production-ready, auto-deploys to Railway
development - Active development branch
Data Storage
Character and session data is stored in:
Windows:
%APPDATA%\rpg-lite-mcp\macOS/Linux:
~/.config/rpg-lite-mcp/
rpg-lite-mcp/
├── characters/ # Character JSON files
├── encounters/ # Active encounter state
├── locations/ # Location graph
├── party/ # Party composition
└── notes/ # Session notesExample Usage
Ask Claude:
"Create a level 5 halfling rogue named Finn with high dexterity"
Response:
╔═══════════════════════ CHARACTER SHEET ════════════════════════╗
║ Finn ║
║ PC - Halfling Rogue (Level 5) ║
║ ║
║ HP: [████████████████] 35/35 ║
║ ║
║ ────────────────────────────────────────────────────────────── ║
║ ║
║ AC │ Speed │ Initiative │ Prof Bonus ║
║ 15 │ 25 ft │ +4 │ +3 ║
╚════════════════════════════════════════════════════════════════╝Other commands:
"Roll 4d6 drop lowest for ability scores"
"Start a combat encounter with 3 goblins"
"Cast fireball centered at position 5,5"
"Move the party to the tavern"
Deployment
The server is deployed on Railway and auto-deploys from the main branch.
SSE Endpoint: https://chatrpg-production.up.railway.app/
Troubleshooting
Server Won't Start
Verify build:
npm run buildCheck path in config is absolute
Test manually:
node dist/index.js
Tool Calls Failing
Rebuild:
npm run buildRun tests:
npm test -- --runCheck TypeScript:
npx tsc --noEmit
Encoding Issues
If ASCII art displays as garbled text (e.g., ââ€â‚¬ instead of ─), ensure:
Source files are UTF-8 encoded
Terminal/client supports Unicode
No double-encoding in transport layer
Architecture
MCP Protocol
Transports: stdio, SSE (Server-Sent Events)
Format: JSON-RPC 2.0
Capabilities: Tools (30+)
Design Principles
ASCII Art First - All output uses box drawing for terminal aesthetics
Zod Validation - Strict input schemas with fuzzy enum matching
Stateful Persistence - JSON files in AppData
D&D 5e Accurate - SRD-compliant mechanics
Real-time Updates - WebSocket broadcasting for encounters
Contributing
This project follows TDD:
Write failing tests
Implement minimal code to pass
Refactor
PRs must:
Include tests
Pass TypeScript strict mode
Follow existing patterns
License
Proprietary - Personal, non-commercial use permitted. See LICENSE.
Credits
@modelcontextprotocol/sdk - MCP TypeScript SDK
Zod - Schema validation
Vitest - Testing framework
D&D 5e SRD (System Reference Document)
Available Tools
35 toolsadvance_turnA
Advance to the next combatant's turn in an encounter. Handles round transitions when all combatants have acted, ticks condition durations (removing expired conditions), clears action economy for the previous combatant, and provides death save reminders for combatants at 0 HP. Returns ASCII-formatted turn info with initiative order preview.
| Name | Required | Description | Default |
|---|---|---|---|
| encounterId | Yes | Active encounter ID | |
| processEffects | No | Process start/end turn effects | |
| processAuras | No | Process aura effects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does an excellent job disclosing behavioral traits: it explains round transitions, condition duration ticking, action economy clearing, death save reminders, and ASCII-formatted output. The only minor gap is lack of explicit mention about permissions or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Perfectly structured with zero wasted words. The first sentence states the core purpose, subsequent clauses detail behavioral aspects, and the final sentence describes the return format. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description provides excellent behavioral context about what happens during turn advancement. The only minor gap is not explicitly stating this is a write operation (though 'advance' implies mutation), but overall it's quite complete given the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description doesn't add any parameter-specific information beyond what the schema provides, maintaining the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Advance to the next combatant's turn') and resource ('in an encounter'), distinguishing it from siblings like 'end_encounter' or 'execute_action'. It precisely defines the scope of the operation beyond just moving initiative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage during active combat encounters but doesn't explicitly state when to use this tool versus alternatives like 'end_encounter' or 'execute_action'. No guidance is provided about prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_aoeC
Calculate area of effect for D&D 5e spells/abilities (sphere, cone, line, cube, cylinder)
| Name | Required | Description | Default |
|---|---|---|---|
| encounterId | No | ||
| shape | Yes | ||
| origin | Yes | ||
| length | No | ||
| width | No | ||
| radius | No | ||
| sideLength | No | ||
| height | No | ||
| direction | No | ||
| includeOrigin | No | ||
| excludeIds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states what the tool does (calculate area of effect) but doesn't describe how it behaves: e.g., whether it modifies game state, requires specific permissions, has rate limits, returns data format, or handles errors. For a tool with 11 parameters and no annotations, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded in a single, efficient sentence. It wastes no words, clearly stating the tool's purpose and scope without redundancy. Every part of the sentence earns its place by specifying the domain (D&D 5e), action (calculate area of effect), and applicable shapes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (11 parameters, nested objects, no output schema, and 0% schema description coverage), the description is incomplete. It doesn't explain the tool's behavior, parameter usage, or return values, leaving the agent with insufficient context to use it correctly. For a calculation tool with many parameters in a game system like D&D, more guidance is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no meaning beyond what the input schema provides. With 0% schema description coverage and 11 parameters (including complex nested objects like 'origin' and 'direction'), the description doesn't explain what parameters like 'encounterId', 'excludeIds', or 'includeOrigin' mean, how shapes map to parameters (e.g., 'radius' for sphere, 'length' for line), or provide any D&D-specific context. This fails to compensate for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Calculate area of effect for D&D 5e spells/abilities' with specific shape types listed (sphere, cone, line, cube, cylinder). It distinguishes from siblings like 'measure_distance' or 'check_line_of_sight' by focusing on area calculation rather than distance or visibility. However, it doesn't explicitly differentiate from all siblings (e.g., 'synthesize_spell' might overlap in spell context).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an active encounter), when not to use it, or how it relates to siblings like 'synthesize_spell' (which might handle spell effects) or 'measure_distance' (which might handle simpler measurements). Usage is implied only by the tool's name and description context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_movementC
Calculate movement paths, reachable squares, or adjacent squares with terrain support
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | path | |
| encounterId | No | ||
| from | Yes | ||
| to | No | ||
| movement | No | ||
| gridWidth | No | ||
| gridHeight | No | ||
| creaturesBlock | No |
TDQS
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 mentions 'terrain support' which hints at environmental considerations, but fails to describe critical behaviors: whether this is a read-only calculation or has side effects, what permissions are needed, how results are returned, or any rate limits. For a tool with 8 parameters and no annotation coverage, this leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise - a single sentence that efficiently lists the three calculation modes and mentions terrain support. Every word earns its place with no redundancy or unnecessary elaboration. It's front-loaded with the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters including nested objects, no output schema, and no annotations), the description is insufficient. It doesn't explain what the tool returns, how to interpret results, error conditions, or the relationship between the three calculation modes. For a movement calculation tool in what appears to be a gaming/encounter system, more context about expected use cases and outputs is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage for all 8 parameters, the description must compensate but provides almost no parameter information. It mentions 'terrain support' which might relate to some parameters, but doesn't explain what 'mode', 'encounterId', 'from/to' coordinates, 'movement', grid dimensions, or 'creaturesBlock' mean. The description adds minimal value beyond what the bare schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with specific verbs ('calculate movement paths, reachable squares, or adjacent squares') and mentions terrain support. It distinguishes itself from siblings like 'measure_distance' or 'move_party' by focusing on calculation rather than measurement or execution. However, it doesn't explicitly differentiate from all possible alternatives in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose 'calculate_movement' over similar tools like 'measure_distance' or 'move_party', nor does it specify prerequisites or appropriate contexts. The agent must infer usage from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_coverC
Check cover between attacker and target, returning AC and Dex save bonuses
| Name | Required | Description | Default |
|---|---|---|---|
| attacker | Yes | ||
| target | Yes | ||
| obstacles | No | ||
| creatures | No | ||
| creaturesProvideCover | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool returns 'AC and Dex save bonuses,' which hints at read-only behavior, but doesn't clarify if it modifies data, requires specific permissions, or has side effects. For a tool with complex inputs and no annotations, this lack of detail on safety, error handling, or output format is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence: 'Check cover between attacker and target, returning AC and Dex save bonuses.' It is front-loaded with the core purpose and output, with no wasted words. Every part of the sentence contributes essential information, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters with nested objects, no output schema, and 0% schema coverage), the description is incomplete. It doesn't explain the return format beyond mentioning 'AC and Dex save bonuses,' nor does it detail how cover is calculated or what the inputs entail. For a spatial analysis tool in a combat system, more context on behavior and parameters is needed for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning parameters like 'attacker,' 'target,' 'obstacles,' 'creatures,' and 'creaturesProvideCover' are undocumented in the schema. The description adds no meaning beyond the tool's purpose, failing to explain what these parameters represent (e.g., coordinate systems, obstacle types, or creature sizes) or how they affect the cover calculation. This leaves key semantics unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Check cover between attacker and target, returning AC and Dex save bonuses.' It specifies the verb ('check'), resource ('cover'), and output ('AC and Dex save bonuses'), making the function evident. However, it doesn't differentiate from sibling tools like 'check_line_of_sight' or 'calculate_aoe', which might involve similar spatial calculations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, such as needing an existing encounter or character data, or compare it to siblings like 'check_line_of_sight' for different combat calculations. Usage is implied only by the tool's name and description, with no explicit context or exclusions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_line_of_sightC
Check line of sight between positions with obstacle/cover detection
| Name | Required | Description | Default |
|---|---|---|---|
| encounterId | No | ||
| from | No | ||
| to | No | ||
| fromId | No | ||
| toId | No | ||
| obstacles | No | ||
| creatures | No | ||
| creaturesBlock | No | ||
| lighting | No | ||
| darkvision | No | ||
| senses | No | ||
| blindsightRange | No | ||
| tremorsenseRange | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While it mentions 'obstacle/cover detection,' it doesn't explain what the tool returns (e.g., a boolean result, detailed blockage info, or error conditions), how it handles edge cases (e.g., invalid positions), or any performance implications. For a complex tool with 13 parameters, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence: 'Check line of sight between positions with obstacle/cover detection.' It's front-loaded with the core purpose and wastes no words. Every part of the sentence adds value, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (13 parameters, nested objects, no output schema, and no annotations), the description is inadequate. It doesn't explain the return value, error handling, or how parameters interact (e.g., whether 'fromId' overrides 'from'). For a tool that likely returns critical game-state information, more context is needed to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning none of the 13 parameters are documented in the schema. The description only vaguely references 'positions' and 'obstacle/cover detection,' which doesn't compensate for the lack of parameter documentation. Key parameters like 'encounterId', 'fromId', 'toId', 'lighting', and various sensory ranges are left unexplained, making it difficult for an agent to use this tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Check line of sight between positions with obstacle/cover detection.' It specifies the verb ('check') and resource ('line of sight'), and the mention of 'obstacle/cover detection' adds useful context. However, it doesn't explicitly differentiate from sibling tools like 'check_cover' or 'measure_distance', which could have overlapping functionality in a gaming context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'check_cover' and 'measure_distance' present, the agent has no indication whether this tool is for combat scenarios, map exploration, or specific game mechanics. There's no mention of prerequisites, context (e.g., during an encounter), or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_characterC
Create a new D&D 5e character with stats, class, race, and equipment
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| race | No | Human | |
| class | No | Fighter | |
| level | No | ||
| background | No | ||
| characterType | No | pc | |
| stats | No | ||
| hp | No | ||
| maxHp | No | ||
| ac | No | ||
| speed | No | ||
| resistances | No | ||
| immunities | No | ||
| vulnerabilities | No | ||
| conditionImmunities | No | ||
| spellcastingAbility | No | ||
| knownSpells | No | ||
| preparedSpells | No | ||
| cantrips | No | ||
| skillProficiencies | No | ||
| saveProficiencies | No | ||
| equipment | No | ||
| customClass | No | ||
| customRace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a creation tool but doesn't mention whether this requires specific permissions, what happens on success/failure, whether the character becomes immediately available, or any system constraints. For a complex creation tool with 24 parameters, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every word earns its place by specifying the game system (D&D 5e) and key components.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex character creation tool with 24 parameters, no annotations, no output schema, and 0% schema description coverage, the description is inadequate. It doesn't explain what the tool returns, how to handle the many optional parameters, or provide context about the creation process beyond the basic statement of purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and 24 parameters (many complex nested objects), the description only mentions 'stats, class, race, and equipment' - covering just 4 of the 24 parameters. This provides minimal semantic context beyond the schema's structural definition, failing to compensate for the extensive coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create' and resource 'new D&D 5e character' with specific components (stats, class, race, equipment). It distinguishes from obvious siblings like 'update_character' and 'delete_character' by specifying creation, though it doesn't explicitly differentiate from all possible alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'update_character' or 'get_character'. It mentions what the tool does but gives no context about prerequisites, appropriate scenarios, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_encounterC
Create a D&D 5e combat encounter with participants, terrain, and initiative tracking
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | ||
| participants | Yes | ||
| terrain | No | ||
| lighting | No | bright | |
| surprise | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but provides minimal behavioral context. It mentions 'initiative tracking' but doesn't explain how initiative is calculated, whether the encounter is automatically started, or what happens on creation (e.g., persistence, side effects). For a complex creation tool with nested objects, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose. However, given the complexity of the tool, it could benefit from additional structured details without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters, complex nested objects, no annotations, and no output schema, the description is incomplete. It doesn't cover parameter meanings, behavioral expectations, or what the tool returns (e.g., encounter ID, initiative order), leaving significant gaps for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate but fails to do so. It mentions 'participants, terrain, and initiative tracking' which hints at some parameters, but doesn't explain what 'seed' does, the structure of participants/terrain objects, or the purpose of 'lighting' and 'surprise' parameters. This leaves most parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('create') and resource ('D&D 5e combat encounter'), specifying it includes participants, terrain, and initiative tracking. This distinguishes it from general encounter management tools like 'manage_encounter' or 'end_encounter', though it doesn't explicitly differentiate from all siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing characters created first with 'create_character'), when to use 'manage_encounter' for modifications instead, or how it relates to 'get_encounter' for retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_characterB
Permanently delete a D&D 5e character by ID or name. Supports batch deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| characterId | No | ||
| characterName | No | ||
| batch | No |
TDQS
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 mentions 'permanently delete' and 'batch deletion', which imply destructive and batch operations, but fails to detail critical aspects like permissions required, irreversible consequences, rate limits, or error handling. This leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and efficiently structured in two sentences: the first covers the primary deletion method, and the second adds batch support. Every sentence earns its place without redundancy, making it appropriately sized and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity as a destructive operation with 3 parameters, no annotations, and no output schema, the description is incomplete. It lacks details on behavioral traits, parameter usage, and return values, failing to provide sufficient context for safe and effective use by an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It mentions parameters 'by ID or name' and 'batch deletion', which loosely map to 'characterId', 'characterName', and 'batch', but does not explain their semantics, relationships, or constraints (e.g., that 'batch' can handle up to 20 items). This adds minimal value beyond the schema's structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('permanently delete'), the resource ('a D&D 5e character'), and the method ('by ID or name'), distinguishing it from sibling tools like 'get_character' or 'update_character'. It also mentions 'batch deletion' as an additional capability, making the purpose explicit and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as 'update_character' for modifications or 'get_character' for retrieval. It lacks context on prerequisites, like whether the character must be in a specific state, or exclusions, such as not using it during active encounters, leaving the agent without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
end_encounterA
End a combat encounter with outcome tracking and optional summary generation. Supports victory, defeat, fled, negotiated outcomes. Can preserve encounter log for review.
| Name | Required | Description | Default |
|---|---|---|---|
| encounterId | Yes | The encounter to end | |
| outcome | Yes | How combat ended | |
| generateSummary | No | Include combat statistics | |
| preserveLog | No | Keep encounter accessible after end | |
| notes | No | DM notes about the encounter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: the tool ends encounters, tracks outcomes (listing types like victory, defeat), and can preserve logs. However, it does not cover critical aspects such as permission requirements, whether the action is reversible, rate limits, or error conditions, leaving gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first clause and efficiently lists key features in two sentences. Every sentence adds value (e.g., outcome types, log preservation), though it could be slightly more structured by explicitly linking parameters to features.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is moderately complete for a mutation tool with 5 parameters. It covers the main action and some behavioral context but lacks details on return values, error handling, or full integration with sibling tools. It meets minimum viability but has clear gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds marginal value by mentioning 'optional summary generation' (hinting at 'generateSummary') and 'preserve encounter log' (hinting at 'preserveLog'), but does not provide additional semantics beyond what the schema specifies. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('End') and resource ('a combat encounter') with specific functionality ('outcome tracking and optional summary generation'). It distinguishes from siblings like 'manage_encounter' or 'get_encounter' by focusing on termination rather than ongoing management or retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when an encounter is ready to conclude, but does not explicitly state when to use this tool versus alternatives (e.g., 'manage_encounter' for ongoing adjustments) or provide exclusions. It mentions 'optional summary generation' which hints at context, but lacks explicit guidance on prerequisites or comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_actionC
Execute a combat action in an encounter (attack, dash, disengage, dodge, etc.). Phase 1 supports attack and dash actions.
| Name | Required | Description | Default |
|---|---|---|---|
| encounterId | Yes | ||
| actorId | No | ||
| actorName | No | ||
| actionType | Yes | ||
| actionCost | No | action | |
| targetId | No | ||
| targetName | No | ||
| weaponType | No | ||
| damageExpression | No | ||
| damageType | No | ||
| moveTo | No | ||
| advantage | No | ||
| disadvantage | No | ||
| manualAttackRoll | No | ||
| manualDamageRoll | No | ||
| shoveDirection | No | ||
| spellSlot | No | ||
| spellName | No | ||
| pactMagic | No | ||
| aoeShape | No | ||
| aoeRadius | No | ||
| aoeCenter | No | ||
| saveAbility | No | ||
| saveDC | No | ||
| spellDamage | No | ||
| spellDamageType | No | ||
| halfOnSave | No | ||
| spellRange | No | Spell range in feet. 0 = self/touch, 5 = touch, etc. |
TDQS
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 states the tool executes actions but lacks critical details: whether this is a read-only or destructive operation, what permissions are needed, how errors are handled, or what the response looks like (since no output schema exists). For a complex mutation tool with 28 parameters, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately concise with two sentences: the first states the core purpose, and the second adds a limitation. It's front-loaded with the main function, and every sentence earns its place by providing essential information without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high complexity (28 parameters, nested objects), no annotations, and no output schema, the description is incomplete. It doesn't explain the return values, error conditions, or detailed behavioral context needed for a tool of this scope. While it covers the basic purpose, it lacks the depth required for effective use by an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is very low (4%), meaning most parameters are undocumented in the schema. The description adds minimal value beyond the schema—it mentions 'attack and dash actions' which loosely relates to 'actionType', but doesn't explain the semantics of other 27 parameters like 'moveTo', 'advantage', or 'spellSlot'. With such low coverage, the description fails to compensate adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Execute a combat action in an encounter' with examples (attack, dash, disengage, dodge). It specifies the verb ('execute') and resource ('combat action'), and distinguishes it from siblings by focusing on action execution rather than calculation or management. However, it doesn't explicitly differentiate from all siblings like 'roll_check' or 'advance_turn'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some context by mentioning 'Phase 1 supports attack and dash actions,' which implies when to use it (for specific action types) and potentially when not to use it (for other phases or unsupported actions). However, it doesn't explicitly state alternatives (e.g., when to use 'calculate_aoe' vs. this tool for area effects) or prerequisites, leaving usage somewhat implied rather than fully guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_characterC
Retrieve an existing D&D 5e character by ID
| Name | Required | Description | Default |
|---|---|---|---|
| characterId | No | ||
| characterName | No | ||
| batch | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states it retrieves existing characters. It doesn't disclose behavioral traits such as error handling (e.g., what happens if the ID doesn't exist), authentication needs, rate limits, or the return format. This is inadequate for a tool with multiple parameters and no 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part earns its place, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (3 parameters, 0% schema coverage, no output schema, no annotations), the description is incomplete. It doesn't cover all retrieval methods, lacks behavioral details, and provides no output information, making it insufficient for an agent to use the tool effectively without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate but only mentions retrieval by ID. It ignores two other parameters (characterName and batch) entirely, failing to explain their purpose or how they relate to the ID-based retrieval. This leaves significant gaps in understanding the tool's functionality.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Retrieve') and resource ('D&D 5e character'), specifying it's for existing characters by ID. However, it doesn't differentiate from sibling tools like 'get_encounter' or 'get_session_context' beyond the resource type, and the input schema suggests additional retrieval methods (by name or batch) not mentioned in the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a character ID), exclusions, or comparisons to siblings like 'update_character' or 'create_character', leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_encounterA
Get the current state of a combat encounter. Supports verbosity levels: minimal (LLM context), summary (quick overview), standard (default DM view), detailed (full state dump).
| Name | Required | Description | Default |
|---|---|---|---|
| encounterId | Yes | The ID of the encounter to retrieve | |
| verbosity | No | Level of detail to return | standard |
TDQS
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 adds value by describing verbosity levels and their purposes, which goes beyond the input schema. However, it does not cover other behavioral aspects like error handling, permissions, or response format, leaving gaps for a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and efficiently lists verbosity levels in a single, well-structured sentence. Every part earns its place without redundancy, making it highly concise and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (read operation with verbosity options) and no output schema, the description is somewhat complete but lacks details on return values or error cases. It compensates partially with verbosity context but does not fully address what the tool outputs, leaving room for improvement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents both parameters well. The description adds minimal value by mentioning verbosity levels but does not provide additional semantics beyond what the schema specifies (e.g., details on what each verbosity level entails). Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get the current state') and resource ('a combat encounter'), distinguishing it from siblings like 'create_encounter' or 'manage_encounter'. It precisely defines the tool's function without being tautological or vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by mentioning verbosity levels for different contexts (e.g., 'minimal' for LLM context), but does not explicitly state when to use this tool versus alternatives like 'get_character' or 'get_session_context'. It provides some contextual hints but lacks direct guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_contextB
Get comprehensive session context snapshot. Includes location, party, notes, combat state, and summary. Options: include (array of sections), format (detailed|compact|brief), maxNotes (limit), includeTimestamps (boolean).
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | ||
| format | No | ||
| maxNotes | No | ||
| includeTimestamps | No |
TDQS
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 states the tool 'Get[s]' data, implying a read-only operation, but doesn't clarify permissions, rate limits, or response format. While it lists included sections and options, it lacks details on what 'comprehensive' entails, how data is structured, or potential side effects. This is inadequate for a tool with multiple parameters and no 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, starting with the core purpose followed by parameter options in a single sentence. Every element adds value, with no redundant or verbose phrasing. It could be slightly improved by structuring parameter details more clearly, but it remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, no annotations, no output schema), the description is partially complete. It covers the purpose and parameters well but lacks behavioral context, usage guidelines, and output details. For a read operation with multiple options, this leaves gaps in understanding how to effectively use the tool and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the input schema, which has 0% description coverage. It explains all four parameters: 'include' (array of sections), 'format' (detailed|compact|brief), 'maxNotes' (limit), and 'includeTimestamps' (boolean), providing context not in the schema. However, it doesn't specify valid values for 'include' or details on format differences, leaving some ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('comprehensive session context snapshot'), listing key components like location, party, notes, combat state, and summary. It distinguishes itself from siblings by focusing on retrieving a holistic snapshot rather than managing specific aspects (e.g., manage_notes, manage_party). However, it doesn't explicitly differentiate from get_character or get_encounter, which might retrieve similar data subsets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It lists options but doesn't explain scenarios where get_session_context is preferred over sibling tools like get_character, get_encounter, or manage_notes for accessing session data. There's no mention of prerequisites, dependencies, or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
level_upA
Level up a character. Increases level, HP (roll/average/max/manual), proficiency bonus, and spell slots. Supports custom class hit dice and resource scaling. Multi-level jumps allowed (e.g., 1→5). Batch support for party level-ups. Optionally track new features and spells learned.
| Name | Required | Description | Default |
|---|---|---|---|
| characterId | No | ||
| characterName | No | ||
| targetLevel | No | ||
| hpMethod | No | average | |
| manualHp | No | ||
| manualRoll | No | ||
| newFeatures | No | ||
| newSpells | No | ||
| batch | No |
TDQS
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 does well describing the core functionality and capabilities (multi-level jumps, batch support, tracking features/spells), but lacks critical behavioral details like whether this is a destructive operation that overwrites existing character data, what permissions are required, or what the expected output format is. The description covers 'what' but not important 'how' and 'consequences' aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in two sentences that pack substantial information. The first sentence covers the core functionality and key parameters, while the second adds advanced features. Every phrase earns its place with no redundant or vague language, making it highly scannable and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation tool with 9 parameters, 0% schema description coverage, and no output schema, the description does a reasonable job but has significant gaps. It explains the transformation well but doesn't address critical context like error conditions, validation rules, side effects on related data, or what happens when leveling crosses class feature thresholds. The absence of annotations exacerbates these completeness issues.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Given 0% schema description coverage for 9 parameters, the description compensates well by explaining key parameter concepts: HP calculation methods (roll/average/max/manual), custom class hit dice, resource scaling, multi-level jumps, batch support, and optional tracking of new features/spells. While it doesn't document every parameter individually, it provides essential semantic context that helps an agent understand what the parameters control.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Level up a character') and enumerates the comprehensive effects: increases level, HP (with multiple calculation methods), proficiency bonus, and spell slots. It distinguishes itself from siblings like 'update_character' by focusing specifically on level progression mechanics rather than general character updates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool - for character progression with multi-level jumps and batch party level-ups. It doesn't explicitly state when NOT to use it or name specific alternatives, but the context is sufficiently clear for an agent to understand this is for level advancement rather than other character modifications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_auraC
Manage D&D 5e aura effects (Spirit Guardians, Aura of Protection, etc.). Operations: create (new aura), list (active auras), process (apply effects to targets in range), remove (end aura). Supports damage, healing, conditions, and saving throws.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | ||
| ownerId | No | ||
| spellName | No | ||
| radius | No | ||
| duration | No | ||
| damage | No | ||
| damageType | No | ||
| healing | No | ||
| effect | No | ||
| condition | No | ||
| saveDC | No | ||
| saveAbility | No | ||
| halfOnSave | No | ||
| affectsEnemies | No | ||
| affectsAllies | No | ||
| auraId | No | ||
| reason | No | ||
| targets | No | ||
| decrementDuration | No | ||
| manualDamageRolls | No | ||
| manualHealingRolls | No | ||
| manualSaveRolls | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It mentions operations but doesn't explain how they interact (e.g., whether 'process' requires a pre-existing aura), what happens when auras overlap, whether changes are persistent, or error conditions. For a complex 22-parameter mutation tool, this is inadequate disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in two sentences: first establishing scope and operations, second listing supported effect types. No wasted words, though it could benefit from operational grouping or bullet points given the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation tool with 22 parameters, 0% schema coverage, no output schema, and no annotations, the description is severely incomplete. It doesn't explain return values, error handling, state persistence, or how this integrates with the broader D&D combat system represented by sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and 22 parameters, the description fails to compensate. It mentions general effect types but doesn't explain which parameters correspond to which operations or how they interact (e.g., whether 'damage' and 'healing' are mutually exclusive). The schema's complexity demands more semantic guidance than provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages D&D 5e aura effects with specific operations (create, list, process, remove) and supported effect types (damage, healing, conditions, saving throws). It distinguishes from siblings by focusing on aura management rather than general combat or character operations, though it doesn't explicitly contrast with similar tools like manage_condition or manage_concentration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists operations but provides no guidance on when to use this tool versus alternatives like manage_condition for status effects or calculate_aoe for area calculations. It doesn't specify prerequisites, dependencies, or typical workflow scenarios for aura management in D&D combat.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_concentrationA
Manage D&D 5e concentration on spells. Operations: set (begin concentrating), get (query state), check (roll save after damage), break (end concentration). DC = max(10, damage/2). Supports advantage/disadvantage on saves.
| Name | Required | Description | Default |
|---|---|---|---|
| characterId | No | ||
| operation | No | ||
| spellName | No | ||
| targets | No | ||
| duration | No | ||
| reason | No | ||
| damage | No | ||
| conSaveModifier | No | ||
| rollMode | No | ||
| manualRoll | No | ||
| manualRolls | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses key behavioral traits: the DC calculation formula (DC = max(10, damage/2)), support for advantage/disadvantage on saves, and the four operation types. However, it doesn't cover important aspects like error conditions, persistence of concentration state, or what happens when concentration breaks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise and front-loaded. The first sentence establishes the core purpose, followed by specific operations and key mechanics. Every sentence earns its place with essential information, and there's zero wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (11 parameters, no annotations, no output schema), the description is incomplete. While it covers the basic purpose and some mechanics, it doesn't explain parameter usage, return values, or important behavioral details needed for a tool with this many parameters and no structured documentation support.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage for 11 parameters, the description fails to compensate adequately. It mentions 'damage' and 'advantage/disadvantage' which relate to some parameters, but doesn't explain the purpose of characterId, operation, spellName, targets, duration, reason, conSaveModifier, rollMode, manualRoll, or manualRolls. The description adds minimal value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('manage D&D 5e concentration on spells') and lists four distinct operations (set, get, check, break). It distinguishes this tool from siblings like manage_condition or manage_spell_slots by focusing specifically on concentration mechanics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (for D&D 5e concentration operations) and implies usage through the operation list. However, it doesn't explicitly state when NOT to use it or mention specific alternatives among the sibling tools for related tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_conditionC
Manage D&D 5e conditions on targets (add, remove, query, tick duration)
| Name | Required | Description | Default |
|---|---|---|---|
| targetId | No | ||
| encounterId | No | ||
| operation | No | ||
| condition | No | ||
| source | No | ||
| description | No | ||
| duration | No | ||
| saveDC | No | ||
| saveAbility | No | ||
| exhaustionLevels | No | ||
| roundNumber | No | ||
| batch | No |
TDQS
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 mentions operations (add, remove, query, tick duration) but lacks critical details: whether this is a read/write operation, permission requirements, side effects (e.g., does 'tick duration' automatically remove expired conditions?), or error handling. The description is too vague for a tool with 12 parameters and complex functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—a single, efficient sentence that front-loads the core purpose. Every word earns its place by specifying the domain (D&D 5e), resource (conditions on targets), and key operations. No wasted verbiage or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 parameters, no schema descriptions, no output schema, no annotations), the description is inadequate. It doesn't cover parameter meanings, behavioral traits, output format, or usage context. For a multi-operation tool with batch capabilities and nuanced duration handling, this leaves too many gaps for effective agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It only mentions 'targets' and operations, but doesn't explain any of the 12 parameters (e.g., targetId, operation types, condition types, duration formats, batch usage). This leaves most parameter meanings ambiguous, failing to add value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: managing D&D 5e conditions on targets with specific operations (add, remove, query, tick duration). It uses specific verbs and identifies the resource (conditions on targets), but doesn't explicitly differentiate from sibling tools like manage_aura or manage_concentration, which might handle related but distinct mechanics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It lists operations but doesn't specify contexts, prerequisites, or exclusions. For example, it doesn't clarify when to use manage_condition versus manage_aura for overlapping effects, or whether it's for combat-only scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_encounterC
Composite tool for encounter management with state synchronization. Operations: create (with characterId linking), get (with verbosity), end (with participantUpdates), commit (sync to persistent characters), list (active encounters). Supports bridging encounter simulation state with persistent character records.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | ||
| seed | No | ||
| participants | No | ||
| terrain | No | ||
| lighting | No | bright | |
| surprise | No | ||
| encounterId | No | ||
| verbosity | No | standard | |
| outcome | No | ||
| generateSummary | No | ||
| preserveLog | No | ||
| notes | No | ||
| characterIds | No | Specific characters to commit (defaults to all) | |
| dryRun | No | Preview changes without applying | |
| includeEnded | No | ||
| participant | No | ||
| manualInitiative | No | Manual initiative roll (otherwise rolls automatically) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions 'state synchronization' and 'bridging encounter simulation state with persistent character records,' which hints at data persistence and integration behavior. However, it doesn't disclose critical behavioral traits like whether operations are destructive, whether changes are reversible, what permissions are needed, or what happens when operations fail. For a composite tool with 17 parameters and complex operations, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise (two sentences) and front-loaded with the composite nature and operations. However, the second sentence is somewhat dense with parenthetical details, and the description could be more structured to clearly map operations to use cases. It's not wasteful but could be more organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (17 parameters, composite operations, no annotations, no output schema), the description is insufficient. It doesn't explain how the operations work together, what the tool returns, error conditions, or prerequisites. The mention of 'state synchronization' is helpful but doesn't provide enough context for an agent to use this tool effectively compared to simpler alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 18%, meaning most parameters are undocumented in the schema. The description mentions operations (create, get, end, commit, list) and hints at parameters like 'characterId linking' and 'participantUpdates,' but doesn't explain the relationship between operations and the 17 parameters in the schema. It fails to compensate for the poor schema coverage, leaving most parameter meanings unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this is a 'composite tool for encounter management with state synchronization' and lists specific operations (create, get, end, commit, list). It distinguishes from siblings by mentioning 'bridging encounter simulation state with persistent character records,' which suggests integration capabilities not present in simpler encounter tools like create_encounter or end_encounter. However, it doesn't explicitly differentiate from all sibling tools in the list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like create_encounter, end_encounter, and get_encounter available, there's no indication whether this tool should be used instead of those simpler tools, or whether it's for specific scenarios requiring state synchronization. The agent receives no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_inventoryC
Manage character inventory. Operations: give (add items), take (remove items), equip (equip to slot), unequip (remove from slot), move (change container), list (show inventory), transfer (move between characters).
| Name | Required | Description | Default |
|---|---|---|---|
| batch | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It lists operation types but doesn't describe critical behaviors: whether operations are atomic/batched, if there are permission requirements, what happens on errors (e.g., trying to take non-existent items), or how the 'batch' parameter works with the 20-item limit. The description mentions operations but lacks behavioral context needed for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately concise - a single sentence listing all operations. It's front-loaded with the core purpose. However, the comma-separated operation list could be slightly more structured (e.g., grouping read vs. write operations), but it efficiently communicates scope without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 7 distinct operation types, nested input schema (batch array with 20 max items), and no annotations or output schema, the description is inadequate. It doesn't explain how operations interact, what the tool returns (especially for 'list'), error conditions, or the relationship between operation types and the schema structure. The agent would struggle to use this tool correctly based solely on the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions operations but doesn't explain the 'batch' parameter structure, how to specify character vs. item details, or the meaning of operation-specific fields like 'slot' or 'container'. The description provides high-level operation names but minimal guidance on how to structure the complex nested input schema shown.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Manage character inventory' with specific operations listed (give, take, equip, unequip, move, list, transfer). It distinguishes itself from siblings like 'manage_party' or 'manage_notes' by focusing on inventory operations. However, it doesn't explicitly differentiate from potential inventory-related siblings that might not exist in the current list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists operations but provides no guidance on when to use this tool versus alternatives. For example, it doesn't specify if this should be used instead of 'update_character' for inventory changes, or whether 'list' here differs from other character query tools. No context about prerequisites, sequencing, or exclusions is mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_locationC
Manage location graph for party navigation. Operations: create (new location), get (retrieve location + connections), update (modify properties), delete (remove location), link (connect two locations), unlink (disconnect locations), list (all locations). Supports location types, lighting, hazards, tags, and connection types (door, passage, stairs, ladder, portal, hidden).
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | ||
| name | No | ||
| description | No | ||
| locationType | No | ||
| lighting | No | ||
| hazards | No | ||
| tags | No | ||
| terrain | No | ||
| size | No | ||
| discovered | No | ||
| properties | No | ||
| locationId | No | ||
| fromLocationId | No | ||
| toLocationId | No | ||
| connectionType | No | passage | |
| locked | No | ||
| lockDC | No | ||
| hidden | No | ||
| findDC | No | ||
| oneWay | No | ||
| filterTag | No | ||
| filterType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions operations and supported features but lacks critical behavioral details: whether operations are atomic, if deletions cascade, permission requirements, rate limits, error conditions, or what 'manage' entails beyond the listed operations. The description doesn't contradict annotations (none exist), but provides insufficient behavioral context for a tool with 22 parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise but not optimally structured. It front-loads the core purpose but then presents a dense list of operations and features without clear organization. Some redundancy exists (listing connection types twice in different contexts). While not verbose, it could be more strategically organized to guide the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 22 parameters, no annotations, and no output schema, the description is incomplete. It covers basic operations and feature categories but lacks: parameter guidance, behavioral constraints, error handling, return values, and integration with sibling tools. The absence of output schema means the description should explain what operations return, but it doesn't.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and 22 parameters, the description fails to compensate for the schema's lack of documentation. It mentions some parameter concepts (location types, lighting, hazards, tags, connection types) but doesn't explain their semantics, relationships, or which parameters apply to which operations. Most parameters remain undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Manage location graph for party navigation' with specific operations listed (create, get, update, delete, link, unlink, list). It distinguishes itself from siblings by focusing on location management rather than character, encounter, or combat operations. However, it doesn't explicitly contrast with similar-sounding tools like 'manage_encounter' or 'modify_terrain'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It lists operations but doesn't indicate prerequisites, appropriate contexts, or relationships to sibling tools. For example, it doesn't clarify when to use 'manage_location' versus 'modify_terrain' or how location management interacts with 'move_party' operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_notesC
Manage session notes. Operations: add (add note with content/tags/importance), search (search by query/tagFilter), get (get by noteId), delete (remove by noteId), list (list recent with limit).
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | ||
| content | No | ||
| tags | No | ||
| importance | No | medium | |
| query | No | ||
| tagFilter | No | ||
| noteId | No | ||
| limit | No |
TDQS
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 lists operations but lacks critical details: whether operations are read-only or destructive (e.g., delete is implied destructive), authentication needs, rate limits, error handling, or response formats. This is inadequate for a multi-operation tool with potential mutations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, listing all operations in a single sentence with clear bullet-like structure. Every phrase adds value by specifying operations and associated parameters, with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (8 parameters, multiple operations, no annotations, no output schema), the description is incomplete. It doesn't cover behavioral aspects like side effects, return values, or error conditions, leaving significant gaps for an AI agent to invoke the tool correctly in a gaming context with many sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions parameters like content, tags, importance, query, tagFilter, noteId, and limit in the context of operations, but doesn't explain their semantics, constraints, or relationships. For example, it doesn't clarify which parameters are required for each operation or how importance values are defined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as managing session notes with specific operations (add, search, get, delete, list), which is a clear verb+resource combination. However, it doesn't differentiate from sibling tools like manage_encounter or manage_party that might also handle notes in different contexts, so it's not fully distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists operations but provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites, context (e.g., during gameplay vs. setup), or comparison with sibling tools like manage_encounter that might overlap in note management.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_partyA
Manage party composition. Operations: add (add character to party with optional role), remove (remove character from party), list (show party roster), get (get party member details), set_role (assign role to party member), clear (remove all members). Roles: leader, scout, healer, tank, support, damage, utility, other.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | ||
| characterId | No | ||
| characterName | No | ||
| role | No |
TDQS
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 lists operations but does not explain critical behaviors such as permissions required, whether changes are persistent, error handling, or response formats. For a mutation tool with multiple operations, this leaves significant gaps in understanding how it behaves beyond basic actions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, followed by a bullet-like list of operations and roles, all in two efficient sentences. Every element earns its place by clarifying functionality without redundancy, making it easy to scan and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple operations, 4 parameters with 0% schema coverage, no output schema, and no annotations), the description is incomplete. It outlines operations but fails to cover parameter details, behavioral traits, or output expectations, leaving the agent with insufficient information for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It mentions parameters indirectly (e.g., 'characterId', 'role' in operations) but does not explicitly define them, their relationships, or constraints. For 4 parameters with no schema documentation, this adds minimal semantic value beyond implying usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Manage party composition' and enumerates six specific operations (add, remove, list, get, set_role, clear) with their functions, distinguishing it from siblings like manage_character or manage_encounter. It specifies the resource (party) and actions, avoiding tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by listing operations and roles, providing context for when to use each operation (e.g., 'add' for adding characters, 'clear' for removing all). However, it lacks explicit guidance on when to choose this tool over alternatives like manage_character or manage_encounter, and does not specify prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_spell_slotsA
Manage D&D 5e spell slots. Operations: view (display slots), expend (use slot), restore (regain slots), set (DM override). Supports warlock pact magic (short rest recovery). Full/half/third casters calculated by class and level. Batch support for party spell tracking.
| Name | Required | Description | Default |
|---|---|---|---|
| characterId | No | ||
| characterName | No | ||
| operation | No | ||
| slotLevel | No | ||
| count | No | ||
| pactMagic | No | ||
| slots | No | ||
| batch | No |
TDQS
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 describes operations (view, expend, restore, set) and features like warlock pact magic, batch support, and caster calculations, which helps clarify the tool's behavior. However, it lacks details on permissions, side effects (e.g., if changes are reversible), or response format, leaving gaps for a mutation tool with complex parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, starting with the core purpose and listing operations upfront. Each sentence adds value (e.g., warlock support, caster calculations, batch tracking), with minimal waste, though it could be slightly more structured for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (8 parameters, nested objects, no output schema, no annotations), the description is moderately complete. It covers the tool's purpose, operations, and key features, but lacks details on parameter usage, error handling, or return values, which are needed for a mutation tool with such a rich schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all 8 parameters. It mentions operations (view, expend, restore, set), warlock pact magic, batch support, and caster calculations, which loosely maps to parameters like 'operation', 'pactMagic', and 'batch', but does not explain 'characterId', 'characterName', 'slotLevel', 'count', or 'slots' object structure. This adds some meaning but is insufficient given the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages D&D 5e spell slots with specific operations (view, expend, restore, set), distinguishes it from siblings like manage_inventory or manage_condition by focusing on spell slot mechanics, and mentions support for warlock pact magic and batch party tracking, making the purpose specific and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool—for managing spell slots in D&D 5e, including operations like viewing, expending, restoring, and setting slots, with support for warlock pact magic and batch party tracking. However, it does not explicitly state when not to use it or name alternatives (e.g., manage_inventory for items), leaving some guidance implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
measure_distanceC
Measure distance between two positions using D&D 5e grid mechanics
| Name | Required | Description | Default |
|---|---|---|---|
| encounterId | No | ||
| from | Yes | ||
| to | Yes | ||
| mode | No | euclidean | |
| includeElevation | No |
TDQS
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 mentions 'D&D 5e grid mechanics,' which hints at game-specific rules, but doesn't explain what those mechanics entail (e.g., diagonal movement rules, grid vs. theater of mind). It also omits details like whether this is a read-only operation, error handling, or output format, leaving significant gaps for a tool with 5 parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose and includes essential context ('D&D 5e grid mechanics') without unnecessary elaboration. Every word earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (5 parameters, no annotations, no output schema, 0% schema coverage), the description is incomplete. It lacks details on behavioral traits (e.g., read-only status), parameter meanings (especially 'encounterId' and 'mode'), and output expectations. For a tool in a D&D context with multiple sibling tools, this leaves too many gaps for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining parameters. It mentions 'two positions' and 'D&D 5e grid mechanics,' which partially clarifies 'from' and 'to' as positions and hints at 'mode' and 'includeElevation' relevance, but doesn't detail what 'encounterId' is for, the difference between string and object positions, or what 'euclidean' mode means. This leaves 3 of 5 parameters inadequately explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Measure distance between two positions using D&D 5e grid mechanics.' It specifies the verb ('measure'), resource ('distance'), and context ('D&D 5e grid mechanics'), which distinguishes it from generic distance calculators. However, it doesn't explicitly differentiate from potential siblings like 'calculate_movement' or 'check_line_of_sight' that might involve distance calculations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'calculate_movement' or 'check_line_of_sight' that might overlap in functionality, nor does it specify prerequisites (e.g., needing an active encounter). Usage is implied through the mention of 'D&D 5e grid mechanics' but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_terrainA
Add, remove, or clear terrain in a combat encounter. Supports obstacles, difficult terrain, water, and hazards. Use for dynamic battlefield changes from spells (Wall of Stone, Spike Growth), abilities, or environmental effects.
| Name | Required | Description | Default |
|---|---|---|---|
| encounterId | Yes | The encounter to modify | |
| operation | Yes | Operation type | |
| terrainType | Yes | Type of terrain | |
| positions | No | Array of "x,y" coordinate strings | |
| hazardDetails | No | Details for hazard terrain | |
| source | No | Source of terrain change (spell, ability, etc.) | |
| duration | No | Rounds until auto-removed |
TDQS
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 indicates this is a mutation tool ('add, remove, or clear terrain') which implies destructive operations, but doesn't specify permission requirements, side effects, or error conditions. The mention of 'dynamic battlefield changes' and examples like 'Wall of Stone' provide some context, but lacks details on rate limits, authentication needs, or what happens when operations fail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise and well-structured with two sentences that each earn their place. The first sentence states the core functionality and supported terrain types, while the second provides usage context and examples. There's zero wasted language and the information is front-loaded effectively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, nested objects, no output schema, and no annotations), the description does a good job providing context. It explains the tool's purpose, usage scenarios, and terrain types supported. However, for a mutation tool with no annotations or output schema, it could benefit from more information about return values, error conditions, or system constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds meaningful context by explaining that terrain types include 'obstacles, difficult terrain, water, and hazards' and that operations are for 'dynamic battlefield changes from spells, abilities, or environmental effects.' This provides semantic understanding beyond the schema's technical descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('add, remove, or clear terrain') and resources ('in a combat encounter'), and distinguishes it from siblings by specifying it's for dynamic battlefield changes from spells, abilities, or environmental effects. It explicitly mentions supporting obstacles, difficult terrain, water, and hazards.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidelines by stating 'Use for dynamic battlefield changes from spells (Wall of Stone, Spike Growth), abilities, or environmental effects.' This gives clear context for when to use this tool versus alternatives, though it doesn't explicitly name sibling tools, it implies differentiation through its specific use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_partyB
Move the party between connected locations. Operations: move (travel to connected location), status (show current location and exits), history (show travel history). Validates connections, handles locked/hidden passages, one-way paths, and tracks travel history.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | ||
| toLocationId | No | ||
| toLocationName | No | ||
| force | No | ||
| unlocked | No | ||
| discovered | No | ||
| showHidden | No |
TDQS
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 usefully describes key behaviors: validating connections, handling locked/hidden passages and one-way paths, and tracking travel history. However, it lacks details on permissions, rate limits, error conditions, or what the tool returns, leaving gaps in understanding its full operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, starting with the core purpose and listing operations upfront. Each sentence adds value by detailing functionality (validation, handling passages, tracking history). There's minimal redundancy, though it could be slightly more structured for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, 0% schema coverage, no annotations, no output schema), the description is incomplete. It covers basic operations and some behavioral traits but fails to explain parameter meanings, return values, or detailed usage scenarios. This leaves the agent with insufficient information to reliably invoke the tool without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It mentions operations (move, status, history) and concepts like locked/hidden passages, which partially map to parameters like 'operation', 'force', 'unlocked', 'discovered', and 'showHidden'. However, it doesn't explain the purpose of 'toLocationId', 'toLocationName', or how parameters interact, leaving significant gaps in parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: moving a party between connected locations with specific operations (move, status, history). It distinguishes itself from sibling tools like 'calculate_movement' or 'manage_location' by focusing on party travel with connection validation and history tracking. However, it doesn't explicitly differentiate from all possible movement-related tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through the listed operations (move, status, history) and mentions handling of locked/hidden passages and one-way paths. However, it doesn't provide explicit guidance on when to use this tool versus alternatives like 'calculate_movement' or 'manage_location', nor does it specify prerequisites or exclusions for its operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_propC
Place or manage interactive props on the battlefield (barrels, doors, chests, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| encounterId | Yes | ||
| operation | No | place | |
| name | No | ||
| type | No | ||
| position | No | ||
| propId | No | ||
| state | No | ||
| locked | No | ||
| lockDC | No | ||
| coverType | No | ||
| blocksMovement | No | ||
| destructible | No | ||
| hp | No | ||
| ac | No | ||
| size | No | ||
| description | No | ||
| hidden | No | ||
| trapDC | No | ||
| trapDamage | No | ||
| trigger | No |
TDQS
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 mentions 'place or manage' which hints at mutation, but fails to describe permissions, side effects, response format, or any constraints like rate limits or destructive impacts. This is inadequate for a tool with 20 parameters and complex operations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose. There is no wasted text, and it directly addresses the tool's function without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high complexity (20 parameters, nested objects, no output schema, and no annotations), the description is insufficient. It lacks details on behavioral traits, parameter usage, and output expectations, making it incomplete for effective tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all 20 parameters. It only vaguely references props like barrels and doors, adding minimal meaning beyond the schema. Key parameters like 'operation', 'propId', and 'state' are unexplained, leaving significant gaps in understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('place or manage') and resource ('interactive props on the battlefield') with examples like barrels, doors, and chests. It distinguishes this tool from siblings that handle characters, encounters, or terrain modification, though it doesn't explicitly differentiate from 'modify_terrain' which might overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'modify_terrain' or other sibling tools. The description implies usage for props in encounters but doesn't specify prerequisites, exclusions, or contextual triggers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_battlefieldB
Render an ASCII map of the current combat state showing participant positions, obstacles, and terrain. Returns a text-based grid visualization.
| Name | Required | Description | Default |
|---|---|---|---|
| encounterId | Yes | ||
| showLegend | No | ||
| showCoordinates | No | ||
| showElevation | No | ||
| viewport | No | ||
| focusOn | No | ||
| legendDetail | No | standard |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the output format ('text-based grid visualization') without disclosing behavioral traits like whether it's read-only, requires specific permissions, has rate limits, or how it handles errors. It mentions what is shown but not operational constraints or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and concise with two sentences that efficiently convey core functionality and output format. Every sentence earns its place by stating the action and result without unnecessary elaboration or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, nested objects, no output schema) and lack of annotations, the description is incomplete. It covers the basic purpose and output type but misses critical context like parameter meanings, behavioral constraints, and how the visualization integrates with other tools, making it inadequate for full agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate but adds no parameter semantics beyond the required 'encounterId' implied by 'current combat state'. It doesn't explain the purpose of parameters like 'showLegend', 'viewport', or 'focusOn', leaving 7 parameters largely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('render an ASCII map') and resources ('current combat state'), listing key elements shown (participant positions, obstacles, terrain). It distinguishes from siblings like 'get_encounter' or 'manage_location' by focusing on visual representation rather than data retrieval or management.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for visualizing combat state, but provides no explicit guidance on when to use this tool versus alternatives like 'get_encounter' for raw data or 'measure_distance' for spatial calculations. No exclusions or prerequisites are mentioned, leaving usage context inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roll_checkC
Roll D&D 5e checks including skill checks, ability checks, saving throws, attack rolls, and initiative
| Name | Required | Description | Default |
|---|---|---|---|
| characterId | No | ||
| characterName | No | ||
| checkType | Yes | ||
| skill | No | ||
| ability | No | ||
| dc | No | ||
| advantage | No | ||
| disadvantage | No | ||
| bonus | No | ||
| contestedBy | No | ||
| contestedCheck | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states what types of checks can be rolled but doesn't describe how the tool behaves: whether it applies character modifiers automatically, how advantage/disadvantage mechanics work, what the output format is, or if there are any limitations (like maximum bonus values). For a complex 11-parameter tool with no annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose. Every word earns its place by specifying the game system (D&D 5e) and enumerating the check types. There's no wasted verbiage or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, nested objects, no output schema, and no annotations), the description is incomplete. It doesn't address how results are returned, what happens with contested checks, how bonuses are applied, or the relationships between parameters. For a tool that likely returns complex dice results with modifiers, the lack of output information is particularly problematic.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning none of the 11 parameters have descriptions in the schema. The tool description provides no information about any parameters - it doesn't explain what 'checkType' values are valid, how 'characterId' vs 'characterName' should be used, what 'contestedBy' and 'contestedCheck' do, or the relationships between parameters like 'skill' and 'ability'. This leaves all parameters completely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Roll D&D 5e checks') and enumerates the types of checks it handles (skill checks, ability checks, saving throws, attack rolls, initiative). It distinguishes itself from sibling tools like 'roll_dice' (generic dice rolling) and 'roll_death_save' (specific death saving throws) by focusing on comprehensive D&D 5e check mechanics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose 'roll_check' over 'roll_dice' for simple dice rolls, 'roll_death_save' for death saves, or other combat-related tools like 'execute_action'. There's no context about prerequisites, such as needing character data or an active encounter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roll_death_saveA
Roll a death saving throw for a character at 0 HP. D&D 5e rules: 10+ success, 9- failure, nat 1 = 2 failures, nat 20 = revive at 1 HP. 3 successes = stable (unconscious but not dying), 3 failures = death. Supports modifiers from spells like Bless and roll modes (advantage/disadvantage). Returns ASCII-formatted death save result with visual tracker.
| Name | Required | Description | Default |
|---|---|---|---|
| encounterId | Yes | The encounter containing the dying character | |
| characterId | Yes | The character making the death save | |
| modifier | No | Bonus/penalty to the roll (e.g., Bless spell gives +1d4) | |
| rollMode | No | Roll mode - advantage rolls 2d20 keep highest, disadvantage keeps lowest | normal |
| manualRoll | No | Override the d20 roll (for testing) | |
| manualRolls | No | Override both dice for advantage/disadvantage (for testing) |
TDQS
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 effectively describes the tool's behavior: the rules for success/failure (10+, 9-, nat 1/20), outcomes (stable at 3 successes, death at 3 failures), support for modifiers and roll modes, and the return format (ASCII-formatted result with visual tracker). This covers key operational aspects, though it could add more on error handling or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and rules, followed by supporting details and return format, all in two dense but efficient sentences. Every part adds value—explaining mechanics, usage context, and output—without redundancy or fluff, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of D&D death saves, no annotations, and no output schema, the description does a strong job of covering behavior, rules, and return format. It could be more complete by detailing error cases (e.g., invalid character state) or the exact structure of the ASCII output, but it provides sufficient context for an agent to use the tool effectively in most scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so parameters are well-documented in the schema itself. The description adds some semantic context by mentioning 'modifiers from spells like Bless' and 'roll modes (advantage/disadvantage)', which aligns with the 'modifier' and 'rollMode' parameters, but does not provide significant additional meaning beyond what the schema already specifies. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Roll a death saving throw') and the target ('for a character at 0 HP'), distinguishing it from sibling tools like 'roll_check' or 'roll_dice' by focusing on the specialized D&D 5e death save mechanics. It explicitly mentions the game rules and context, making the purpose unambiguous and distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: for characters at 0 HP in D&D 5e, with mentions of modifiers from spells like Bless and roll modes. However, it does not explicitly state when not to use it or name alternatives (e.g., vs. 'roll_check' for general ability checks), leaving some guidance implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roll_diceA
Roll dice using standard notation (e.g., "2d6+4", "4d6kh3"). Supports single rolls or batch rolling multiple expressions at once. Supports advantage/disadvantage for d20 rolls. Provide either "expression" for single roll or "batch" for multiple rolls.
| Name | Required | Description | Default |
|---|---|---|---|
| expression | No | Dice expression for single roll (e.g., "2d6+4", "1d20", "4d6kh3") | |
| batch | No | Array of roll requests for batch rolling (alternative to expression) | |
| reason | No | Optional reason for the roll(s) | |
| advantage | No | Roll with advantage (2d20, keep highest). Only works with single d20 rolls. | |
| disadvantage | No | Roll with disadvantage (2d20, keep lowest). Only works with single d20 rolls. |
TDQS
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 describes key behavioral traits: supports standard notation, single/batch rolling, and advantage/disadvantage for d20 rolls. However, it doesn't mention error handling, rate limits, or what happens with invalid expressions, leaving some behavioral aspects unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly front-loaded and concise - three sentences with zero waste. The first sentence establishes core functionality, the second adds key features, and the third provides clear parameter guidance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, batch rolling capability) and no output schema, the description is adequate but has gaps. It explains what the tool does and basic usage, but doesn't describe return values, error conditions, or how results are formatted, which would be helpful for a dice-rolling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description adds some value by explaining the 'expression' vs 'batch' choice and mentioning advantage/disadvantage support, but doesn't provide additional parameter semantics beyond what's already documented in the comprehensive schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('roll dice') and resources ('using standard notation'), and distinguishes it from siblings by focusing on dice rolling rather than character management or encounter operations. It provides concrete examples of notation like '2d6+4' and '4d6kh3'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (for dice rolling with standard notation) and distinguishes between single rolls ('expression') and batch rolls ('batch'). However, it doesn't explicitly state when NOT to use it or mention specific alternatives among the sibling tools like 'roll_check' or 'roll_death_save'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
synthesize_spellA
Arcane Synthesis for improvised magic. Caster proposes a custom spell effect; Arcana check DC = 10 + (level × 2) + modifiers. Success creates temporary spell effect, failure may cause mishaps. Supports circumstance modifiers (ley lines, desperation, material components).
| Name | Required | Description | Default |
|---|---|---|---|
| encounterId | No | ||
| casterId | Yes | ||
| intent | Yes | ||
| proposedSpell | Yes | ||
| arcanaBonus | No | ||
| rollMode | No | ||
| manualRoll | No | ||
| manualRolls | No | ||
| nearLeyLine | No | ||
| desperationBonus | No | ||
| materialComponentValue | No |
TDQS
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 effectively describes key behavioral traits: the success/failure mechanics (Arcana check DC calculation, temporary effect on success, possible mishaps on failure), and mentions circumstance modifiers. However, it doesn't specify what 'mishaps' entail or the exact nature of 'temporary' effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in three sentences: purpose statement, mechanics explanation, and modifier context. Every sentence adds value, though it could be slightly more front-loaded by mentioning the tool's core function more explicitly at the beginning rather than starting with 'Arcane Synthesis'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters with nested objects, no output schema, no annotations), the description is insufficient. It explains the high-level mechanics but doesn't address parameter usage, return values, error conditions, or implementation details needed for a complex spell-creation tool. The description leaves too many unknowns for effective agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and 11 parameters (many nested), the description provides almost no parameter guidance. It mentions 'circumstance modifiers (ley lines, desperation, material components)' which hints at three parameters, but doesn't explain the 8 other parameters or how the complex 'proposedSpell' object should be structured. The description fails to compensate for the significant schema coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Arcane Synthesis for improvised magic' with 'Caster proposes a custom spell effect' and 'Success creates temporary spell effect'. It specifies the verb (synthesize/create), resource (custom spell), and distinguishes from siblings like 'roll_dice' or 'use_scroll' by focusing on custom spell creation rather than predefined actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context ('improvised magic', 'circumstance modifiers') but doesn't explicitly state when to use this tool versus alternatives like 'execute_action' or 'use_scroll'. It provides clear context for when this tool is appropriate (custom spell creation with risk/reward mechanics) but lacks explicit exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_restA
Process short or long rest for D&D 5e character. Short rest: spend hit dice to heal. Long rest: restore all HP, half hit dice (rounded up), and clear until_rest conditions. Supports batch for party rests.
| Name | Required | Description | Default |
|---|---|---|---|
| characterId | No | ||
| characterName | No | ||
| restType | No | ||
| hitDiceToSpend | No | ||
| restoreHp | No | ||
| restoreSpellSlots | No | ||
| restoreHitDice | No | ||
| clearConditions | No | ||
| uninterrupted | No | ||
| batch | No |
TDQS
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 describes key behavioral traits: short rest mechanics (spend hit dice to heal), long rest mechanics (restore all HP, half hit dice, clear conditions), and batch support. However, it lacks details on permissions, rate limits, or what happens if parameters conflict (e.g., using both characterId and batch). It does not contradict annotations, as none exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, starting with the core purpose and immediately detailing short and long rest mechanics. Every sentence adds value: the first defines the tool, the second and third explain rest types, and the fourth mentions batch support. It could be slightly more structured by separating short and long rest details into distinct sentences for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (10 parameters, no annotations, no output schema), the description is moderately complete. It covers the main purpose and key mechanics but lacks details on parameter interactions, error conditions, or return values. Without annotations or output schema, it should do more to explain behavioral outcomes, such as what happens if a rest fails or how results are reported.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning by explaining 'restType' (short vs. long), 'hitDiceToSpend' (for short rests), and 'clearConditions' (for long rests), covering at least 3 of the 10 parameters. However, it does not fully explain all parameters like 'restoreHp', 'restoreSpellSlots', or 'uninterrupted', leaving gaps in parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('process short or long rest'), the resource ('D&D 5e character'), and distinguishes between short and long rest mechanics. It explicitly mentions 'short rest: spend hit dice to heal' and 'long rest: restore all HP, half hit dice (rounded up), and clear until_rest conditions,' providing detailed differentiation from sibling tools that handle other character/encounter operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying when to use short vs. long rests based on healing needs and condition clearing, but does not explicitly state when to use this tool versus alternatives like 'manage_spell_slots' or 'manage_condition' for similar effects. It mentions 'supports batch for party rests' which hints at multi-character scenarios, but lacks explicit exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_characterC
Update an existing D&D 5e character with new stats, HP, level, equipment, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| characterId | No | ||
| characterName | No | ||
| name | No | ||
| race | No | ||
| class | No | ||
| level | No | ||
| background | No | ||
| characterType | No | ||
| stats | No | ||
| hp | No | ||
| healing | No | ||
| maxHp | No | ||
| ac | No | ||
| speed | No | ||
| resistances | No | ||
| immunities | No | ||
| vulnerabilities | No | ||
| conditionImmunities | No | ||
| spellcastingAbility | No | ||
| knownSpells | No | ||
| preparedSpells | No | ||
| cantrips | No | ||
| skillProficiencies | No | ||
| saveProficiencies | No | ||
| equipment | No | ||
| customClass | No | ||
| customRace | No | ||
| resource | No | ||
| batch | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'update' implies a mutation operation, the description doesn't state whether this requires specific permissions, what happens to existing data not mentioned in the update, whether changes are reversible, or any rate limits. For a complex mutation tool with 29 parameters and no annotation coverage, this is a significant gap in behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose. It avoids unnecessary words and directly states what the tool does. However, given the tool's complexity (29 parameters, nested objects), more detail might be warranted, but this doesn't detract from its conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high complexity (29 parameters, nested objects, no output schema, and no annotations), the description is inadequate. It doesn't explain the tool's behavior, parameter meanings, or expected outcomes. For a mutation tool that can update multiple character aspects in batch, the description should provide more context about how updates are applied, what happens to unspecified fields, and any constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning none of the 29 parameters have descriptions in the schema. The description only provides generic examples ('stats, HP, level, equipment, etc.') without explaining what specific parameters do, their formats, or relationships. For instance, it doesn't clarify the difference between 'characterId' and 'characterName', or how 'batch' works. The description adds minimal value beyond the schema's structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Update an existing D&D 5e character with new stats, HP, level, equipment, etc.' It specifies the verb ('update'), resource ('existing D&D 5e character'), and provides examples of updatable fields. However, it doesn't explicitly distinguish this tool from its sibling 'modify_terrain' or other character-related tools like 'level_up', which would require more specific differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., character must exist), exclusions (e.g., cannot update non-existent characters), or alternatives like 'level_up' for specific level changes or 'manage_inventory' for equipment-only updates. The agent must infer usage from the tool name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
use_scrollA
Use a spell scroll in D&D 5e. If spell is on your class list and same/lower level: auto-success. If spell is higher level: Arcana check DC 10 + spell level. On failure: scroll is consumed with no effect. On success: spell is cast from scroll, scroll consumed.
| Name | Required | Description | Default |
|---|---|---|---|
| characterId | Yes | ||
| scrollName | Yes | ||
| spellLevel | Yes | ||
| casterLevel | Yes | ||
| targetId | No | ||
| targetIds | No | ||
| targetPosition | No | ||
| arcanaBonus | No | ||
| rollMode | No | ||
| manualRoll | No | ||
| manualRolls | No | ||
| isAttackSpell | No | ||
| spellSchool | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does an excellent job disclosing behavioral traits: it explains success conditions (auto-success vs Arcana check), failure consequences (scroll consumed with no effect), success outcomes (spell cast, scroll consumed), and specific mechanics (DC calculation).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly front-loaded with the core purpose, followed by conditional logic in a logical flow. Every sentence earns its place by explaining different aspects of the scroll usage mechanics without any wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 13 parameters, no annotations, and no output schema, the description covers the core behavioral mechanics well but leaves many parameter purposes unexplained. It's adequate for understanding what the tool does but insufficient for understanding all required inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and 13 parameters, the description doesn't explain any specific parameters beyond implied concepts like 'spell level' and 'Arcana check.' It provides some context for what parameters might be needed but doesn't compensate fully for the schema coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('use a spell scroll') and resource ('in D&D 5e'), distinguishing it from sibling tools like 'manage_inventory' or 'synthesize_spell' by focusing on scroll activation mechanics rather than inventory management or spell creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (activating spell scrolls in D&D 5e) and implies usage through success/failure conditions, but doesn't explicitly mention when not to use it or name alternatives like 'execute_action' for other combat actions.
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.
33 tool updates
v1.0.0- Added
advance_turn - Added
calculate_aoe - Added
calculate_movement - Added
check_cover - Added
check_line_of_sight - Changed
create_character10 fields changed- removed
Input schema / properties / characterType / enumRemoved value: -[ - "pc", - "npc", - "enemy", - "neutral" -] - removed
Input schema / properties / conditionImmunities / items / enumRemoved value: -[ - "blinded", - "charmed", - "deafened", - "frightened", - "grappled", - "incapacitated", - "invisible", - "paralyzed", - "petrified", - "poisoned", - "prone", - "restrained", - "stunned", - "unconscious", - "exhaustion" -] - added
Input schema / properties / customClassAdded value: +{ + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "hitDie": { + "default": 8, + "maximum": 12, + "minimum": 4, + "type": "number" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "primaryAbility": { + "type": "string" + }, + "resourceMax": { + "type": "number" + }, + "resourceName": { + "type": "string" + }, + "resourceScaling": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "saveProficiencies": { + "items": { + "type": "string" + }, + "type": "array" + }, + "spellcasting": { + "default": "none", + "type": "string" + }, + "spellcastingAbility": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" +} - added
Input schema / properties / customRaceAdded value: +{ + "additionalProperties": false, + "properties": { + "abilityBonuses": { + "additionalProperties": false, + "properties": { + "cha": { + "type": "number" + }, + "con": { + "type": "number" + }, + "dex": { + "type": "number" + }, + "int": { + "type": "number" + }, + "str": { + "type": "number" + }, + "wis": { + "type": "number" + } + }, + "type": "object" + }, + "climbSpeed": { + "type": "number" + }, + "conditionImmunities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "darkvision": { + "default": 0, + "type": "number" + }, + "description": { + "type": "string" + }, + "flySpeed": { + "type": "number" + }, + "immunities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "languages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "resistances": { + "items": { + "type": "string" + }, + "type": "array" + }, + "size": { + "default": "medium", + "type": "string" + }, + "speed": { + "default": 30, + "type": "number" + }, + "swimSpeed": { + "type": "number" + }, + "traits": { + "items": { + "type": "string" + }, + "type": "array" + }, + "vulnerabilities": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "name" + ], + "type": "object" +} - removed
Input schema / properties / immunities / items / enumRemoved value: -[ - "slashing", - "piercing", - "bludgeoning", - "fire", - "cold", - "lightning", - "thunder", - "acid", - "poison", - "necrotic", - "radiant", - "force", - "psychic" -] - removed
Input schema / properties / resistances / items / enumRemoved value: -[ - "slashing", - "piercing", - "bludgeoning", - "fire", - "cold", - "lightning", - "thunder", - "acid", - "poison", - "necrotic", - "radiant", - "force", - "psychic" -] - removed
Input schema / properties / saveProficiencies / items / enumRemoved value: -[ - "str", - "dex", - "con", - "int", - "wis", - "cha" -] - removed
Input schema / properties / skillProficiencies / items / enumRemoved value: -[ - "acrobatics", - "animal_handling", - "arcana", - "athletics", - "deception", - "history", - "insight", - "intimidation", - "investigation", - "medicine", - "nature", - "perception", - "performance", - "persuasion", - "religion", - "sleight_of_hand", - "stealth", - "survival" -] - removed
Input schema / properties / spellcastingAbility / enumRemoved value: -[ - "str", - "dex", - "con", - "int", - "wis", - "cha" -] - removed
Input schema / properties / vulnerabilities / items / enumRemoved value: -[ - "slashing", - "piercing", - "bludgeoning", - "fire", - "cold", - "lightning", - "thunder", - "acid", - "poison", - "necrotic", - "radiant", - "force", - "psychic" -]
- Changed
create_encounter8 fields changed- removed
Input schema / properties / lighting / enumRemoved value: -[ - "bright", - "dim", - "darkness", - "magical_darkness" -] - removed
Input schema / properties / participants / items / additionalPropertiesRemoved value: -false - added
Input schema / properties / participants / items / anyOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "ac": { + "default": 10, + "minimum": 0, + "type": "number" + }, + "characterId": { + "description": "Links participant to persistent character for state sync", + "type": "string" + }, + "conditionImmunities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "cover": { + "default": "none", + "description": "Cover level for this participant (affects AC and DEX saves)", + "type": "string" + }, + "hp": { + "minimum": 0, + "type": "number" + }, + "id": { + "type": "string" + }, + "immunities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "initiativeBonus": { + "default": 0, + "type": "number" + }, + "isEnemy": { + "default": false, + "type": "boolean" + }, + "maxHp": { + "exclusiveMinimum": 0, + "type": "number" + }, + "name": { + "type": "string" + }, + "position": { + "additionalProperties": false, + "properties": { + "x": { + "type": "number" + }, + "y": { + "type": "number" + }, + "z": { + "default": 0, + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": "object" + }, + "resistances": { + "items": { + "type": "string" + }, + "type": "array" + }, + "size": { + "default": "medium", + "type": "string" + }, + "speed": { + "default": 30, + "type": "number" + }, + "vulnerabilities": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "id", + "name", + "hp", + "maxHp", + "position" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "characterId": { + "description": "Character UUID for lookup", + "type": "string" + }, + "characterName": { + "description": "Character name for lookup (case-insensitive)", + "type": "string" + }, + "hp": { + "description": "Override current HP (defaults to character HP)", + "minimum": 0, + "type": "number" + }, + "id": { + "description": "Participant ID (defaults to characterId)", + "type": "string" + }, + "isEnemy": { + "description": "Override enemy status", + "type": "boolean" + }, + "position": { + "additionalProperties": false, + "description": "Starting position (defaults to 0,0,0)", + "properties": { + "x": { + "type": "number" + }, + "y": { + "type": "number" + }, + "z": { + "default": 0, + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": "object" + }, + "surprised": { + "description": "Mark as surprised in first round", + "type": "boolean" + } + }, + "type": "object" + } +] - removed
Input schema / properties / participants / items / propertiesRemoved value: -{ - "ac": { - "default": 10, - "minimum": 0, - "type": "number" - }, - "conditionImmunities": { - "items": { - "enum": [ - "blinded", - "charmed", - "deafened", - "frightened", - "grappled", - "incapacitated", - "invisible", - "paralyzed", - "petrified", - "poisoned", - "prone", - "restrained", - "stunned", - "unconscious", - "exhaustion" - ], - "type": "string" - }, - "type": "array" - }, - "hp": { - "exclusiveMinimum": 0, - "type": "number" - }, - "id": { - "type": "string" - }, - "immunities": { - "items": { - "enum": [ - "slashing", - "piercing", - "bludgeoning", - "fire", - "cold", - "lightning", - "thunder", - "acid", - "poison", - "necrotic", - "radiant", - "force", - "psychic" - ], - "type": "string" - }, - "type": "array" - }, - "initiativeBonus": { - "default": 0, - "type": "number" - }, - "isEnemy": { - "default": false, - "type": "boolean" - }, - "maxHp": { - "exclusiveMinimum": 0, - "type": "number" - }, - "name": { - "type": "string" - }, - "position": { - "additionalProperties": false, - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - }, - "z": { - "default": 0, - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": "object" - }, - "resistances": { - "items": { - "enum": [ - "slashing", - "piercing", - "bludgeoning", - "fire", - "cold", - "lightning", - "thunder", - "acid", - "poison", - "necrotic", - "radiant", - "force", - "psychic" - ], - "type": "string" - }, - "type": "array" - }, - "size": { - "default": "medium", - "enum": [ - "tiny", - "small", - "medium", - "large", - "huge", - "gargantuan" - ], - "type": "string" - }, - "speed": { - "default": 30, - "type": "number" - }, - "vulnerabilities": { - "items": { - "enum": [ - "slashing", - "piercing", - "bludgeoning", - "fire", - "cold", - "lightning", - "thunder", - "acid", - "poison", - "necrotic", - "radiant", - "force", - "psychic" - ], - "type": "string" - }, - "type": "array" - } -} - removed
Input schema / properties / participants / items / requiredRemoved value: -[ - "id", - "name", - "hp", - "maxHp", - "position" -] - removed
Input schema / properties / participants / items / typeRemoved value: -"object" - changed
Input schema / properties / terrain / properties / height / defaultPrevious value: -20New value: +50 - changed
Input schema / properties / terrain / properties / width / defaultPrevious value: -20New value: +50
- Added
delete_character - Added
end_encounter - Changed
execute_action17 fields changed- removed
Input schema / properties / actionCost / enumRemoved value: -[ - "action", - "bonus_action", - "reaction", - "free", - "movement" -] - removed
Input schema / properties / actionType / enumRemoved value: -[ - "attack", - "cast_spell", - "dash", - "disengage", - "dodge", - "help", - "hide", - "ready", - "search", - "use_object", - "use_magic_item", - "use_special_ability", - "shove", - "grapple" -] - added
Input schema / properties / aoeCenterAdded value: +{ + "additionalProperties": false, + "properties": { + "x": { + "type": "number" + }, + "y": { + "type": "number" + }, + "z": { + "default": 0, + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": "object" +} - added
Input schema / properties / aoeRadiusAdded value: +{ + "maximum": 120, + "minimum": 5, + "type": "number" +} - added
Input schema / properties / aoeShapeAdded value: +{ + "type": "string" +} - removed
Input schema / properties / damageType / enumRemoved value: -[ - "slashing", - "piercing", - "bludgeoning", - "fire", - "cold", - "lightning", - "thunder", - "acid", - "poison", - "necrotic", - "radiant", - "force", - "psychic" -] - added
Input schema / properties / halfOnSaveAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / pactMagicAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / saveAbilityAdded value: +{ + "type": "string" +} - added
Input schema / properties / saveDCAdded value: +{ + "maximum": 30, + "minimum": 1, + "type": "number" +} - removed
Input schema / properties / shoveDirection / enumRemoved value: -[ - "away", - "prone" -] - added
Input schema / properties / spellDamageAdded value: +{ + "type": "string" +} - added
Input schema / properties / spellDamageTypeAdded value: +{ + "type": "string" +} - added
Input schema / properties / spellNameAdded value: +{ + "type": "string" +} - added
Input schema / properties / spellRangeAdded value: +{ + "description": "Spell range in feet. 0 = self/touch, 5 = touch, etc.", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / spellSlotAdded value: +{ + "maximum": 9, + "minimum": 0, + "type": "number" +} - removed
Input schema / properties / weaponType / enumRemoved value: -[ - "melee", - "ranged", - "melee_finesse", - "ranged_thrown" -]
- Added
get_encounter - Added
get_session_context - Added
level_up - Added
manage_aura - Added
manage_concentration - Changed
manage_condition8 fields changed- removed
Input schema / properties / batch / items / properties / condition / enumRemoved value: -[ - "blinded", - "charmed", - "deafened", - "frightened", - "grappled", - "incapacitated", - "invisible", - "paralyzed", - "petrified", - "poisoned", - "prone", - "restrained", - "stunned", - "unconscious", - "exhaustion" -] - added
Input schema / properties / batch / items / properties / descriptionAdded value: +{ + "type": "string" +} - removed
Input schema / properties / batch / items / properties / operation / enumRemoved value: -[ - "add", - "remove", - "query", - "tick" -] - removed
Input schema / properties / batch / items / properties / saveAbility / enumRemoved value: -[ - "str", - "dex", - "con", - "int", - "wis", - "cha" -] - removed
Input schema / properties / condition / enumRemoved value: -[ - "blinded", - "charmed", - "deafened", - "frightened", - "grappled", - "incapacitated", - "invisible", - "paralyzed", - "petrified", - "poisoned", - "prone", - "restrained", - "stunned", - "unconscious", - "exhaustion" -] - added
Input schema / properties / descriptionAdded value: +{ + "type": "string" +} - removed
Input schema / properties / operation / enumRemoved value: -[ - "add", - "remove", - "query", - "tick" -] - removed
Input schema / properties / saveAbility / enumRemoved value: -[ - "str", - "dex", - "con", - "int", - "wis", - "cha" -]
- Added
manage_encounter - Added
manage_inventory - Added
manage_location - Added
manage_notes - Added
manage_party - Added
manage_spell_slots - Changed
measure_distance1 field changed- removed
Input schema / properties / mode / enumRemoved value: -[ - "euclidean", - "grid_5e", - "grid_alt" -]
- Added
modify_terrain - Added
move_party - Added
place_prop - Added
render_battlefield - Changed
roll_check4 fields changed- removed
Input schema / properties / ability / enumRemoved value: -[ - "str", - "dex", - "con", - "int", - "wis", - "cha" -] - removed
Input schema / properties / checkType / enumRemoved value: -[ - "skill", - "ability", - "save", - "attack", - "initiative" -] - removed
Input schema / properties / contestedCheck / properties / type / enumRemoved value: -[ - "skill", - "ability" -] - removed
Input schema / properties / skill / enumRemoved value: -[ - "acrobatics", - "animal_handling", - "arcana", - "athletics", - "deception", - "history", - "insight", - "intimidation", - "investigation", - "medicine", - "nature", - "perception", - "performance", - "persuasion", - "religion", - "sleight_of_hand", - "stealth", - "survival" -]
- Added
roll_death_save - Added
synthesize_spell - Added
take_rest - Changed
update_character22 fields changed- removed
Input schema / properties / batch / items / properties / characterType / enumRemoved value: -[ - "pc", - "npc", - "enemy", - "neutral" -] - removed
Input schema / properties / batch / items / properties / conditionImmunities / items / enumRemoved value: -[ - "blinded", - "charmed", - "deafened", - "frightened", - "grappled", - "incapacitated", - "invisible", - "paralyzed", - "petrified", - "poisoned", - "prone", - "restrained", - "stunned", - "unconscious", - "exhaustion" -] - added
Input schema / properties / batch / items / properties / customClassAdded value: +{ + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "hitDie": { + "default": 8, + "maximum": 12, + "minimum": 4, + "type": "number" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "primaryAbility": { + "type": "string" + }, + "resourceMax": { + "type": "number" + }, + "resourceName": { + "type": "string" + }, + "resourceScaling": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "saveProficiencies": { + "items": { + "type": "string" + }, + "type": "array" + }, + "spellcasting": { + "default": "none", + "type": "string" + }, + "spellcastingAbility": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" +} - added
Input schema / properties / batch / items / properties / customRaceAdded value: +{ + "additionalProperties": false, + "properties": { + "abilityBonuses": { + "additionalProperties": false, + "properties": { + "cha": { + "type": "number" + }, + "con": { + "type": "number" + }, + "dex": { + "type": "number" + }, + "int": { + "type": "number" + }, + "str": { + "type": "number" + }, + "wis": { + "type": "number" + } + }, + "type": "object" + }, + "climbSpeed": { + "type": "number" + }, + "conditionImmunities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "darkvision": { + "default": 0, + "type": "number" + }, + "description": { + "type": "string" + }, + "flySpeed": { + "type": "number" + }, + "immunities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "languages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "resistances": { + "items": { + "type": "string" + }, + "type": "array" + }, + "size": { + "default": "medium", + "type": "string" + }, + "speed": { + "default": 30, + "type": "number" + }, + "swimSpeed": { + "type": "number" + }, + "traits": { + "items": { + "type": "string" + }, + "type": "array" + }, + "vulnerabilities": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "name" + ], + "type": "object" +} - removed
Input schema / properties / batch / items / properties / immunities / items / enumRemoved value: -[ - "slashing", - "piercing", - "bludgeoning", - "fire", - "cold", - "lightning", - "thunder", - "acid", - "poison", - "necrotic", - "radiant", - "force", - "psychic" -] - removed
Input schema / properties / batch / items / properties / resistances / items / enumRemoved value: -[ - "slashing", - "piercing", - "bludgeoning", - "fire", - "cold", - "lightning", - "thunder", - "acid", - "poison", - "necrotic", - "radiant", - "force", - "psychic" -] - added
Input schema / properties / batch / items / properties / resourceAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "additionalProperties": false, + "properties": { + "current": { + "type": "number" + }, + "max": { + "type": "number" + }, + "name": { + "type": "string" + } + }, + "type": "object" + } + ] +} - removed
Input schema / properties / batch / items / properties / saveProficiencies / items / enumRemoved value: -[ - "str", - "dex", - "con", - "int", - "wis", - "cha" -] - removed
Input schema / properties / batch / items / properties / skillProficiencies / items / enumRemoved value: -[ - "acrobatics", - "animal_handling", - "arcana", - "athletics", - "deception", - "history", - "insight", - "intimidation", - "investigation", - "medicine", - "nature", - "perception", - "performance", - "persuasion", - "religion", - "sleight_of_hand", - "stealth", - "survival" -] - removed
Input schema / properties / batch / items / properties / spellcastingAbility / enumRemoved value: -[ - "str", - "dex", - "con", - "int", - "wis", - "cha" -] - removed
Input schema / properties / batch / items / properties / vulnerabilities / items / enumRemoved value: -[ - "slashing", - "piercing", - "bludgeoning", - "fire", - "cold", - "lightning", - "thunder", - "acid", - "poison", - "necrotic", - "radiant", - "force", - "psychic" -] - removed
Input schema / properties / characterType / enumRemoved value: -[ - "pc", - "npc", - "enemy", - "neutral" -] - removed
Input schema / properties / conditionImmunities / items / enumRemoved value: -[ - "blinded", - "charmed", - "deafened", - "frightened", - "grappled", - "incapacitated", - "invisible", - "paralyzed", - "petrified", - "poisoned", - "prone", - "restrained", - "stunned", - "unconscious", - "exhaustion" -] - added
Input schema / properties / customClassAdded value: +{ + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "hitDie": { + "default": 8, + "maximum": 12, + "minimum": 4, + "type": "number" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "primaryAbility": { + "type": "string" + }, + "resourceMax": { + "type": "number" + }, + "resourceName": { + "type": "string" + }, + "resourceScaling": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "saveProficiencies": { + "items": { + "type": "string" + }, + "type": "array" + }, + "spellcasting": { + "default": "none", + "type": "string" + }, + "spellcastingAbility": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" +} - added
Input schema / properties / customRaceAdded value: +{ + "additionalProperties": false, + "properties": { + "abilityBonuses": { + "additionalProperties": false, + "properties": { + "cha": { + "type": "number" + }, + "con": { + "type": "number" + }, + "dex": { + "type": "number" + }, + "int": { + "type": "number" + }, + "str": { + "type": "number" + }, + "wis": { + "type": "number" + } + }, + "type": "object" + }, + "climbSpeed": { + "type": "number" + }, + "conditionImmunities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "darkvision": { + "default": 0, + "type": "number" + }, + "description": { + "type": "string" + }, + "flySpeed": { + "type": "number" + }, + "immunities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "languages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "resistances": { + "items": { + "type": "string" + }, + "type": "array" + }, + "size": { + "default": "medium", + "type": "string" + }, + "speed": { + "default": 30, + "type": "number" + }, + "swimSpeed": { + "type": "number" + }, + "traits": { + "items": { + "type": "string" + }, + "type": "array" + }, + "vulnerabilities": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "name" + ], + "type": "object" +} - removed
Input schema / properties / immunities / items / enumRemoved value: -[ - "slashing", - "piercing", - "bludgeoning", - "fire", - "cold", - "lightning", - "thunder", - "acid", - "poison", - "necrotic", - "radiant", - "force", - "psychic" -] - removed
Input schema / properties / resistances / items / enumRemoved value: -[ - "slashing", - "piercing", - "bludgeoning", - "fire", - "cold", - "lightning", - "thunder", - "acid", - "poison", - "necrotic", - "radiant", - "force", - "psychic" -] - added
Input schema / properties / resourceAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "additionalProperties": false, + "properties": { + "current": { + "type": "number" + }, + "max": { + "type": "number" + }, + "name": { + "type": "string" + } + }, + "type": "object" + } + ] +} - removed
Input schema / properties / saveProficiencies / items / enumRemoved value: -[ - "str", - "dex", - "con", - "int", - "wis", - "cha" -] - removed
Input schema / properties / skillProficiencies / items / enumRemoved value: -[ - "acrobatics", - "animal_handling", - "arcana", - "athletics", - "deception", - "history", - "insight", - "intimidation", - "investigation", - "medicine", - "nature", - "perception", - "performance", - "persuasion", - "religion", - "sleight_of_hand", - "stealth", - "survival" -] - removed
Input schema / properties / spellcastingAbility / enumRemoved value: -[ - "str", - "dex", - "con", - "int", - "wis", - "cha" -] - removed
Input schema / properties / vulnerabilities / items / enumRemoved value: -[ - "slashing", - "piercing", - "bludgeoning", - "fire", - "cold", - "lightning", - "thunder", - "acid", - "poison", - "necrotic", - "radiant", - "force", - "psychic" -]
- Added
use_scroll
9 tool updates
- First observed
create_character - First observed
create_encounter - First observed
execute_action - First observed
get_character - First observed
manage_condition - First observed
measure_distance - First observed
roll_check - First observed
roll_dice - First observed
update_character
TDQS
Scored across 35 tools
Most tools have distinct purposes with clear boundaries, such as 'advance_turn' for combat flow and 'calculate_aoe' for area calculations. However, some overlap exists, like 'manage_encounter' potentially duplicating functions of 'create_encounter', 'get_encounter', and 'end_encounter', which could cause confusion in selection.
Tool names consistently follow a verb_noun pattern throughout, such as 'advance_turn', 'calculate_aoe', and 'manage_condition'. This uniformity makes the set predictable and easy to navigate, with no mixing of naming conventions like camelCase or other styles.
With 35 tools, the count is excessive for a D&D 5e server, leading to potential overwhelm and redundancy. A more focused set of 10-20 tools could better cover the domain without unnecessary complexity, as some tools like 'manage_encounter' and 'execute_action' might be consolidated.
The tool set comprehensively covers D&D 5e gameplay, including character management, combat simulation, spell handling, and session tracking. There are no obvious gaps; it supports CRUD operations, lifecycle events, and edge cases like death saves and improvised magic, ensuring agents can handle most scenarios.
Maintenance
Related MCP Connectors
Campaign manager for D&D and TTRPG GMs: your AI reads and writes a live typed campaign database.
Dungeons & Dragons (D&D) and TTRPG companion: SessionKeeper sessions, NPCs, wiki, DM prep.
Connect any AI to your Foundry VTT world: actors, combat, dice, journals, tokens, compendiums.
Build and publish Overskill apps from Cursor, Claude, ChatGPT, or any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables creation and management of structured game worlds for text adventures and RPGs with character creation, world generation, and natural language interaction through AI integration.1MIT
- AlicenseCqualityAmaintenanceRPG game engine that lets AI run tabletop sessions without hallucinating mechanics. SQLite-backed persistence, D\&D 5e-style combat, procedural world generation, and deterministic dice.10012 npm43MIT
- AlicenseAqualityDmaintenanceEnables playing RPGs with LLMs through tools for dice rolling (e.g., '1d6'), success checks with criticals, and random event generation.62MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI agents to act as dynamic dungeon masters for text-based RPGs with dynamically generated rule systems and comprehensive game state management.2 npm12MIT