beyond-mcp
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., "@beyond-mcpget the statblock for a young red dragon"
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.
beyond-mcp
D&D Beyond MCP server: character sheets, monster statblocks, campaign rosters, a live game-log roll feed, and opt-in sheet writes. Extracted from roll20-dm-mcp per its issue #171 so DDB rides behind its own MCP seam — the dm-whisper gem and Claude Code select it by config, next to interchangeable VTT-primitive servers (roll20-dm-mcp today, forge-mcp/ddb-maps-mcp later).
This server knows nothing about Roll20 or any VTT, and it never opens a browser. Reads
are always on; writes are opt-in (DDB_WRITES=enabled).
Formerly
ddb-mcp; renamed to avoid a collision with the unrelated public ddb-mcp/ddb-mcp. Old repo URLs redirect.
Tools
Tool | Does |
| Handshake: |
| Character sheet by numeric id — compact HP/AC/conditions snapshot; |
| Compendium monster by name or id — compact HP/AC/CR snapshot; |
| Every campaign the account is in, with ids. |
|
|
| Subscribe to a campaign's game-log WebSocket; capture fulfilled dice rolls into a bounded buffer. Skips Beyond20-bridged rolls by default (gap-fill mode). |
| Cursor-based drain of captured rolls (raw message + one-line summary). Consumers mirror the actual dice values — never re-roll. |
| Stop the pump / report connection health (CONNECTED vs RETRYING, failure count, last error). |
Tool names and default output shapes match what roll20-dm-mcp served, so existing callers
migrate by pointing at this server. The roll pump differs by design: it buffers instead
of posting to Roll20 — the gem drains it and bridges rolls via roll20-dm-mcp's
post_roll_as_character.
Write tools (opt-in — DDB_WRITES=enabled)
Reads are always available; these mutation tools register only when the deployment sets
DDB_WRITES=enabled, so prep-time and default installs stay read-only. They are primitives —
they effect exactly the change asked on whatever character id they're given, with no policy
about who owns the sheet. Because DDB PC HP is also driven by Beyond20 and the player's own
edits, writes race those (last-writer-wins) and are meant as the DM's deliberate acts.
Tool | Does |
| Set current and/or temp HP by absolute value (clamped to |
| Add/remove a 5e condition by name (exhaustion takes a level). |
Related MCP server: D&D Beyond MCP Server
Auth
Reads authenticate with the D&D Beyond CobaltSession cookie (exchanged for a short-lived
JWT; see docs/ddb-browserless-protocol.md). The cookie
is consumed, never harvested: supply DDB_COBALT in the env, or point DDB_DATA_DIR
at the directory where the gem writes ddb-cobalt.json. Absent or expired cookie ⇒ every
read fails loudly with re-harvest instructions.
Config
Env | Meaning |
| CobaltSession cookie value (overrides the data file). |
| Directory holding |
| Default campaign for |
| Set to |
| HTTP entry only (defaults 39210 / 127.0.0.1 / auto-generated into |
Running
npm install
npm run build
npm start # stdio MCP server (Claude Code .mcp.json, gem supervised spawn)
npm run serve # HTTP MCP server on /mcp + rolls SSE on /events (bearer-authed)Claude Code .mcp.json:
{
"mcpServers": {
"ddb": { "command": "node", "args": ["E:/personalProjects/beyond-mcp/dist/index.js"] }
}
}Development
npm test # vitest run
npx vitest run src/bridge/ddb-gamelog.test.ts # one file
npm run lint
npm run dev # tsx watch, stdioNode 20+, TypeScript (NodeNext ESM), vitest — same conventions as roll20-dm-mcp.
Available Tools
10 toolsddb_get_characterA
Fetch a character sheet from D&D Beyond by numeric ID. Default: a compact HP/AC/conditions snapshot. full:true adds the parsed sheet (ability scores/mods, saves, skills, initiative, speed).
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Include the full parsed stat sheet (default false — compact snapshot only). | |
| ddbCharId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It explains the two output modes (compact vs. full), which is useful, but it does not disclose read-only nature, error behavior, authentication requirements, or side effects. This is a gap, though partially mitigated by the simple read-like nature of the 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?
Two focused sentences that front-load the primary purpose and then clarify the optional full mode. No filler or redundant phrasing; every word contributes to understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two parameters and no output schema, the description adequately describes what the agent will receive (HP/AC/conditions snapshot, or full sheet). It could mention error handling or prerequisites (e.g., character access), but these are minor gaps given the simplicity and clear parameter explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: the `full` parameter already has a description, and the description adds a bit more detail (listing the parsed fields). The `ddbCharId` parameter lacks schema description but is self-explanatory (numeric ID) and the description reiterates it. The description adds marginal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Fetch') and resource ('character sheet') with a clear scope (by numeric ID). It naturally distinguishes from siblings like ddb_get_monster (monster data) and ddb_list_campaign_characters (list of characters) by focusing on a single character sheet.
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 when to use the tool (when you need a character sheet by ID) and clarifies the full parameter, but it does not explicitly mention alternatives or when not to use this tool in favor of siblings. Guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddb_get_monsterA
Get monster stats from the D&D Beyond compendium by name or numeric id. Default: a compact HP/AC/CR snapshot. full:true returns the whole statblock (ability scores, speed, traits/actions/reactions, resistances/immunities, art URL).
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return the full statblock (default false — compact snapshot only). | |
| nameOrId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It explains the two output modes (compact vs full) and lists what the full statblock includes, which is useful. However, it does not disclose what happens on lookup failure (e.g., monster not found), any authentication/rate-limit considerations, or explicitly confirm that this is a read-only operation. The description gives good detail on output but omits error handling and side-effect guarantees.
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 two sentences with no filler. The purpose and default behavior are front-loaded, and the optional expansion is explained in the second sentence. Every word adds value, and it is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup tool with only two parameters and no output schema, the description is largely complete. It tells the agent exactly what it returns in both modes and how to specify the target. It does not cover error cases or edge behavior, but these are minor for a straightforward get operation. The absence of an output schema increases the need to describe return contents, which the description does well.
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 50% (nameOrId has no schema description). The description compensates by clarifying that nameOrId can be a name or numeric id. It also explains the default behavior of the 'full' parameter and what 'full' returns. This adds meaningful context beyond the schema's minimal info.
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 a specific verb ('Get') and resource ('monster stats from the D&D Beyond compendium'), and specifies the lookup mechanism ('by name or numeric id'). It unambiguously distinguishes itself from sibling tools like ddb_get_character or ddb_get_party_snapshot by focusing on monsters.
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 when to use it: whenever you need monster stats. It provides clear context (monster lookup) but does not explicitly name alternatives or state when not to use it. The distinction from siblings is implicit but strong enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddb_get_party_snapshotA
Precomputed combat snapshot for a whole party in one call, via D&D Beyond's SCDS service. Returns each character's COMPUTED armor class and max/current/temp HP (which the plain character sheet does not carry pre-derived), plus named conditions, death saves, initiative, passives and level. This is the authoritative AC/maxHP source — prefer it over ddb_get_character for live party status. full:true adds resolved attacks (to-hit + damage dice), casting info, abilities, skills, senses, resistances/immunities. Pass characterIds, or a campaignId (defaults to DDB_CAMPAIGN_ID) to snapshot its whole roster.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Include resolved attacks, casting, abilities, skills, senses, resistances (default false — combat vitals only). | |
| campaignId | No | Snapshot every character in this campaign. Defaults to DDB_CAMPAIGN_ID. | |
| characterIds | No | Explicit DDB character ids. Overrides campaignId. |
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 implies a read-only operation via 'snapshot' and lists return data, but it does not explicitly state that the tool makes no modifications, nor does it disclose any failure modes, rate limits, or authentication needs. It does add context about being the 'authoritative' source, but for a read tool this is a marginal improvement. A 3 is appropriate given the clear but implicit safety profile.
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 three tightly packed sentences with zero filler. It front-loads the core purpose, explains the key differentiator, and then details parameter behavior. Every sentence earns its place and avoids redundancy with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only snapshot tool with 3 parameters, no output schema, and no nested objects, the description fully covers the return values, the two call modes, defaults, and the optional full expansion. An agent has everything needed to invoke it correctly without additional inference. No gaps that would cause mis-calls.
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%, with each parameter already described (full, campaignId, characterIds) including defaults and override behavior. The description reiterates these points but does not add meaning beyond what the schema provides; it does weave the params into a usage narrative, but that is overlap, not augmentation. Baseline 3 is correct.
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: 'Precomputed combat snapshot for a whole party in one call' and enumerates the exact computed fields returned (AC, max/current/temp HP, conditions, death saves, etc.). It explicitly differentiates from the sibling ddb_get_character by declaring itself 'the authoritative AC/maxHP source' and directing the agent to prefer it for live party status. This is a specific verb+resource with strong sibling 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 gives explicit guidance on when to use this tool over an alternative: 'prefer it over ddb_get_character for live party status.' It also explains the two invocation modes (characterIds or campaignId with default to DDB_CAMPAIGN_ID) and the effect of the full parameter. No explicit 'when not to use' is given, but the directive plus the mode explanations are sufficient for an agent to choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddb_list_campaign_charactersA
List all player characters in a DDB campaign. campaignId defaults to the DDB_CAMPAIGN_ID env var.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | 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. It adds a useful behavioral detail (campaignId default), but does not explicitly indicate that this is a read-only operation (though 'list' implies it), nor does it disclose error handling, response format, or authentication. This is a minor gap for a simple list 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 two concise sentences, front-loaded with the action. The default behavior is stated succinctly, with no unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description provides the core behavior and the parameter default. It does not mention the return format or error cases, but these are not essential for an agent to successfully invoke the tool. It is minimally complete.
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 explain the parameter. It mentions the default value of campaignId, adding context, but does not explicitly state what campaignId refers to (though the tool name and context make it obvious). The description partially compensates for the missing schema guidance.
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 states a specific action ('List') and resource ('player characters in a DDB campaign'). It clearly differentiates from siblings like ddb_get_character (single character) and ddb_list_campaigns (campaigns) by specifying 'all' characters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides usage context by noting the campaignId default to the DDB_CAMPAIGN_ID env var, but does not explicitly mention when to use this tool versus alternatives or any exclusion conditions. The use case is implied by 'all player characters' but not contrasted with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddb_list_campaignsA
List all DnD Beyond campaigns the account is in (as DM or player), with IDs and player counts
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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. While the verb 'List' implies a read-only operation, the description does not explicitly state that it is non-destructive, whether authentication is required, or any error/rate-limit behavior. It adds scope (as DM/player) but fails to disclose other relevant traits for a no-annotation 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 a single, front-loaded sentence with no redundancy. It immediately states the action and resource, and the qualifying details ('as DM or player', 'with IDs and player counts') are packed efficiently. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool with no output schema, the description provides the essential information: what it lists, the scope, and the returned fields. It does not mention pagination or error handling, but these are less critical for a simple read operation. The description is sufficient for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the baseline is 4 per the rubric. The description does not need to explain parameter meanings since there are none. Schema coverage is 100% implicitly, and no parameter documentation is required.
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 states a specific action ('List'), a specific resource ('DnD Beyond campaigns'), and the exact scope ('the account is in (as DM or player)') plus what is returned ('IDs and player counts'). It clearly distinguishes itself from sibling ddb_list_campaign_characters, which lists characters rather than campaigns.
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 when to use this tool (when you need campaign listings), but does not explicitly state alternatives or exclusions. It does not say 'use this before calling ddb_list_campaign_characters' or any other routing guidance. The use case is reasonably obvious but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddb_pingA
Handshake: returns this server's name, semver version, and capability flags. Call it on connect and assert version meets your expected minimum (semver) before relying on newer tools; read capabilities to see whether writes are enabled and which optional surfaces (rollPump, partySnapshot) exist. Fields are additive-only across versions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does well: it discloses that this is a stateless handshake (no write side effects implied), explains the version-assertion semantics, the meaning of the capabilities flags (writes enabled, optional rollPump/partySnapshot surfaces), and the additive-only field guarantee across versions. It could spell out the exact return shape, but the behavior is substantially transparent for a zero-parameter ping.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each earning its place: the core purpose is front-loaded in the first sentence, usage instructions follow, and the additive-only behavioral guarantee closes. There is zero filler or repetition of schema content, and the most decision-relevant information (what it returns, when to call it) appears first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description is the sole source of runtime contract information, and it covers the essentials completely: return fields (name, version, capabilities), how to act on them (assert version, gate on capabilities), and version stability guarantees. For a zero-parameter handshake, nothing an agent needs to call it correctly and interpret results is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4 — there is nothing to document on the input side. The description correctly spends no space on parameters and instead clarifies the return-value semantics (version, capabilities), which is the appropriate focus. No information deficit exists here.
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 opens with a specific verb and resource ('Handshake: returns this server's name, semver version, and capability flags') and the purpose is unmistakable as a connection-status probe. It naturally distinguishes itself from all siblings — none of which perform a version/capability handshake, since the others fetch domain data (monsters, characters, campaigns) or drive the rollPump surface.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: 'Call it on connect' and instructs the agent to assert the version minimum before relying on newer tools, and to read capabilities to determine whether writes are enabled and which optional surfaces exist. It does not name specific sibling alternatives, but for a handshake this is inherent — the guidance clearly establishes it as the gating prerequisite to the other tool surfaces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddb_poll_rollsA
Drain dice rolls the pump has captured since a cursor. Returns each roll's seq (the cursor), a one-line summary, and the raw DDB game-log message (mirror its actual dice values when bridging — never re-roll). Pass the previous response's cursor as after; start with 0 (or omit) for everything buffered.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Return only rolls with seq > after. Use the `cursor` from the previous poll. Default 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and meets it well. It says the tool 'drains' rolls, implying it consumes the buffer (a state-changing behavior), and warns 'never re-roll' to prevent incorrect use of the returned dice values. It also specifies the return structure (seq, summary, raw message), giving the agent a clear expectation of the output without an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact—two sentences—with no filler. The core purpose is front-loaded, followed by the return format, then a usage guidance sentence that also carries the vital 'never re-roll' warning. Every sentence earns its place, and the structure is easy to parse.
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 one parameter, no output schema, and straightforward behavior, the description is fully complete. It covers the purpose, the return structure, the parameter semantics, and the critical behavioral constraint (never re-roll). There is no missing information an agent would need to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a thorough description of `after` (return rolls with seq > after, use the previous cursor, default 0) with 100% coverage. The description adds a small but useful nuance by clarifying that omitting `after` returns everything buffered, which reinforces the default behavior. This goes slightly beyond the schema without being redundant, so it merits a 4.
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 opens with a specific verb ('drain') and resource ('dice rolls the pump has captured'), and clarifies the scope ('since a cursor'). It also states what the tool returns, making the purpose unambiguous. It clearly differentiates from sibling tools like start/stop_ddb_roll_pump and ddb_roll_pump_status, which manage or report pump state rather than drain rolls.
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 gives explicit instructions on how to use the tool: pass the previous response's cursor as `after`, start with 0 (or omit) for everything buffered. It also provides a critical usage directive for the bridging scenario: 'mirror its actual dice values when bridging — never re-roll.' This directly tells the agent when and how to use it, leaving no ambiguity about the polling workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddb_roll_pump_statusA
Report the D&D Beyond roll pump's connection health (CONNECTED vs RETRYING, consecutive failures, last error) and how many rolls it has captured. RETRYING with a climbing failure count means the socket keeps dropping — usually an expired DDB session cookie; re-harvest and restart the pump.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the tool's behavior: it reports connection status, consecutive failures, last error, and roll count. It also interprets RETRYING state and suggests a remediation step. This is a read-only status tool, and the description implies no side effects. It goes beyond a bare 'status' statement by explaining what the status means and what to do.
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, well-structured sentence that front-loads the main action and then adds essential diagnostic context. Every clause adds value—status metrics, failure interpretation, and a recommended action—with no fluff. It is concise yet comprehensive.
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 status-reporting tool with no parameters and no output schema, the description is complete. It tells the agent what data will be reported, what the key status indicator means, and what course of action to take. The sibling tools are distinct in purpose, and this description fully covers the tool's role.
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 tool has zero parameters, so the schema covers 100% of them trivially. According to the rubric, a 0-parameter tool gets a baseline of 4. The description adds no parameter details because there are none, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Report the D&D Beyond roll pump's connection health ... and how many rolls it has captured.' It identifies the specific resource (roll pump) and the metrics reported. This distinguishes it from sibling tools like start/stop/poll, which perform actions rather than report status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides actionable guidance when RETRYING with climbing failure count indicates a dropped socket and suggests 're-harvest and restart the pump.' This implicitly refers to related tools (e.g., start_ddb_roll_pump) but does not explicitly name them or state when NOT to use this tool. It gives clear context but lacks explicit exclusion of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_ddb_roll_pumpA
Capture live D&D Beyond dice rolls from a campaign's game log. Subscribes (browserless) to the DDB game-log WebSocket and buffers each fulfilled roll — drain with ddb_poll_rolls and bridge into your VTT yourself (this server posts nothing anywhere; rolls MUST be mirrored, never re-rolled). By default it SKIPS rolls Beyond20 already bridged to the table (data.b20Override), so what you drain is exactly the gap a flaky Beyond20 left — safe to arm table-wide (omit characterNames) or per-player without double-posting downstream.
| Name | Required | Description | Default |
|---|---|---|---|
| gameId | No | D&D Beyond game/campaign id to read. Defaults to the DDB_CAMPAIGN_ID env var. | |
| characterNames | No | DDB character names to capture, e.g. ["Broo Zbaaner"]. Omit to cover EVERY character. | |
| includeBeyond20 | No | Default false. Leave false to skip rolls Beyond20 already bridged (the gap-fill behavior). Set true ONLY to capture EVERY roll regardless — bridging then double-posts anything Beyond20 also delivers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It discloses that the tool subscribes to a WebSocket, buffers rolls, posts nothing itself, and mandates mirroring (never re-rolling). It explains the skip behavior for Beyond20 overrides and the consequence of includeBeyond20=true. This is comprehensive behavioral 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 rich but every sentence adds value. It front-loads the core purpose, then explains the buffering, the no-posting policy, the default skip behavior, and safe usage patterns. It is well-structured and not wasteful despite length.
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 subscription-based tool with no output schema, this description explains the full workflow: how to start, what happens to rolls (buffered), how to retrieve them (via ddb_poll_rolls), and the integration implication (must mirror). It also addresses edge cases (Beyond20 override and includeBeyond20). An agent has everything needed to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Though schema coverage is 100%, the description adds substantial meaning beyond the schema: gameId defaults to env var, characterNames omitted covers every character, and includeBeyond20 explains the gap-fill vs. capture-all tradeoff. This clearly explains the intent and caveats of each parameter, exceeding the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool captures live D&D Beyond dice rolls, subscribes to the game-log WebSocket, and buffers rolls. It explicitly names the drain mechanism (ddb_poll_rolls) and distinguishes itself from siblings by noting it does not post anywhere. The verb 'capture' plus resource ('live dice rolls from a campaign game log') is 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?
Provides explicit guidance on when to use: to capture rolls that Beyond20 may have missed, safe to arm table-wide or per-player. It instructs to drain with ddb_poll_rolls and warns about includeBeyond20 causing double-posting. This gives clear context and implicit exclusions (e.g., don't use if you want to bridge directly, or if you need all rolls without gap-filling behavior).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_ddb_roll_pumpA
Stop the D&D Beyond roll pump (disconnect the game-log WebSocket). Buffered rolls remain drainable until the next start.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 clearly states the primary effect (disconnect WebSocket) and an important side effect (buffered rolls remain drainable until next start). This gives the agent a good sense of what happens and what persists. It does not mention return values or error handling, but for a 0-parameter stop action, this is adequate.
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 only two sentences, with the core action front-loaded ('Stop the D&D Beyond roll pump') followed by a clarifying explanation of the WebSocket disconnect and the buffered-roll behavior. Every sentence adds value, with no redundant or filler content.
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 simplicity (0 parameters, no output schema), the description provides sufficient context for correct invocation. It explains the action, the underlying mechanism, and the state that persists after stopping. It could mention that calling it repeatedly is idempotent or what happens if already stopped, but those are minor gaps for a low-complexity 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?
The tool has zero parameters, so the schema fully covers any input. The description doesn't need to explain parameters, and it doesn't. The baseline of 4 for 0-parameter tools is appropriate; the description adds nothing extra but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Stop') and resource ('D&D Beyond roll pump'), and clarifies the mechanism ('disconnects the game-log WebSocket'). This clearly differentiates it from sibling tools like start_ddb_roll_pump and ddb_roll_pump_status. An agent can immediately understand what the tool does and that it's the inverse of start_ddb_roll_pump.
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 when to use it (when you want to stop the pump) and provides essential context about buffered rolls remaining drainable until the next start, which hints at the start tool as the alternative. However, it does not explicitly state 'use start_ddb_roll_pump to resume' or mention any conditions for when not to use it. The guidance is clear but not exhaustive.
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.
10 tool updates
v0.4.1- First observed
ddb_get_character - First observed
ddb_get_monster - First observed
ddb_get_party_snapshot - First observed
ddb_list_campaign_characters - First observed
ddb_list_campaigns - First observed
ddb_ping - First observed
ddb_poll_rolls - First observed
ddb_roll_pump_status - First observed
start_ddb_roll_pump - First observed
stop_ddb_roll_pump
TDQS
Scored across 10 tools
Tools are generally distinct: monster lookup, character lookup, campaign listing, party snapshot, and roll pump management each serve clear purposes. Some overlap exists between ddb_get_character and ddb_get_party_snapshot, but the party snapshot is clearly positioned as the authoritative source for live combat stats, and the descriptions resolve ambiguity.
Most tools follow the ddb_verb_noun pattern (ddb_get_monster, ddb_list_campaigns, ddb_poll_rolls). Minor deviation: start_ddb_roll_pump and stop_ddb_roll_pump put the verb first, breaking the prefix convention. Still, the pattern is predictable overall.
With 10 tools, the server is well-scoped for its purpose: a few core read operations (monster, character, campaigns), a party snapshot, and a roll pump subsystem with start/stop/status/poll. Each tool has a clear role with no redundancy or bloat.
The surface covers the expected read-only operations for a D&D Beyond integration: retrieving monsters, characters, campaigns, and party combat data, plus the roll pump lifecycle. Missing write operations (e.g., updating characters) are not implied by the domain, and the roll pump is fully supported with start, stop, status, and polling.
Maintenance
Related MCP Connectors
D&D 5e MCP — wraps the D&D 5th Edition API (free, no auth)
Manage your tabletop RPG campaign from any MCP client: worlds, sessions, quests, lore, recaps.
Read and update your SekkeiFlow life boards, counters and AI coach from any MCP client.
Official remote MCP server for Archivist AI TTRPG campaign memory: characters, sessions, and more.
Related MCP Servers
- FlicenseNot gradedqualityAmaintenanceConnects Claude Desktop to Foundry VTT for AI-powered campaign management, enabling natural language interaction with game data including quest creation, character management, compendium searches, and dice rolling. Provides 20 MCP tools for seamless integration between Claude and your tabletop RPG sessions.69-
- FlicenseNot gradedqualityCmaintenanceAn MCP server that provides Claude direct access to D\&D Beyond accounts to manage characters, campaigns, and sourcebook content. It enables users to search for spells and monsters, retrieve character data, and read owned digital books through an authenticated session.6-
- AlicenseAqualityAmaintenanceA Model Context Protocol server that gives Claude direct access to your D\&D Beyond account for characters, campaigns, sourcebooks, spells, monsters, rules, encounters, and treasure.3513 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to manage D&D Beyond characters, access campaigns, and look up spells, monsters, items, and more through a reverse-engineered API.MIT