An MCP (Model Context Protocol) server for managing and rolling on random-table assets used in tabletop RPGs. Create, update, and roll on random tables with support for nested tables, weighted entries, and range-based results.
Random Tables MCP Server demonstrates solid tool definition quality with consistent schema coverage and reasonable descriptions. All 11 tools have explicit input/output schemas defined via Zod, which is well above baseline. Tool naming follows clear verb_noun patterns (create_table, roll_on_table, list_templates, etc.). Descriptions are present for all tools and most parameters, though some are repetitive template references and could be more action-focused. Output schemas are documented. Key weaknesses: (1) Several parameter descriptions are duplicated across tools without clarifying when to use one vs another (e.g., create_table vs update_table both describe the same template reference format); (2) Error handling is not visible in the sample code, no error classification, recovery guidance, or actionable error messages shown; (3) No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications (create_table=WRITE, delete_template=DESTRUCTIVE); (4) Descriptions lack context about when to use each tool, e.g., when should an agent call roll_on_table vs evaluate_template?; (5) Parameter descriptions for optional fields don't state consequences of omission. Average tool description length ~120 chars (below the 194 baseline), which limits contextual guidance for LLM selection.
Create a new random table. Table entries can include templates to reference other tables using the format {{reference-title::table-id::table-name::roll-number::separator}}.
Create a new roll template. Templates can include references to tables using the format {{reference-title::table-id::table-name::roll-number::separator}}.
Delete a roll template by ID.
Evaluate a roll template by resolving all references to tables.
Get a specific random table by ID
Get a roll template by ID.
List available random tables
List all available roll templates.
List tools lack actionable descriptions. 'List available random tables' does not explain when to call list_tables vs get_table, what structure is returned, or whether pagination is supported.
No tool annotations despite explicit risk classifications in metadata. Destructive operations like delete_template and state-modifying operations like create_table should declare readOnlyHint=false and destructiveHint=true in the MCP tool definition to help agents understand operation costs.
Template reference format {{reference-title::table-id::table-name::roll-number::separator}} is described identically in create_table, update_table, and create_template descriptions. This repetition wastes tokens and doesn't help LLMs distinguish when to use each tool or what happens if the format is wrong.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 37 | - | v1 |
Roll on a specific table
Update an existing random table. Table entries can include templates to reference other tables using the format {{reference-title::table-id::table-name::roll-number::separator}}.
Update an existing roll template.
No error handling guidance visible. What happens if an agent rolls on a non-existent table? If template evaluation fails? If a circular reference is detected? Error responses should tell the LLM what to do next (retry, fix input, try a different tool).
list_tables accepts a 'filter' parameter but its schema is empty (type object, no properties). Agents cannot know what fields to filter on. Either populate the filter schema with supported fields or remove the parameter and offer separate search tools.
No pagination support visible in list_tables or list_templates. If the user has 1000 tables, returning all of them blows the context window. Descriptions don't mention limits or how to handle large result sets.
Description for 'entries' parameter in create_table and update_table says 'Optional initial entries' / 'Entries to add' but doesn't explain what the agent gets back. Are entry IDs returned? Are they auto-generated? Can they be referenced in other tables immediately after creation?