MCP server that provides cryptographically secure random number generation tools
Four tools with consistent structure, proper schemas, and tool annotations. Naming follows verb_noun convention (random_*). Descriptions are present and reasonably clear (15-74 chars each), though could be more LLM-optimized and include examples of when to use each. All tools have complete input schemas with types and descriptions. Output schemas are defined (randomIntResponse, etc.). Error handling is basic but present. Main gaps: descriptions lack actionable context ('Returns a...' is passive); no parameter-level guidance on ranges or constraints; no explanation of use cases or precedence between tools.
Returns a cryptographically secure random ASCII string. Required argument: length.
Returns a cryptographically secure random floating-point number. Optional arguments: min, max, includeMin, includeMax.
Returns a cryptographically secure random integer. Optional arguments: min, max, includeMin, includeMax.
Returns a cryptographically secure random string using a specific character set. Required arguments: length, charset.
Descriptions lack actionable context and LLM-optimization. All four descriptions are passive ('Returns a...') and do not explain WHEN to use each tool or how they differ. The 'random_int' vs 'random_float' distinction is unstated; an LLM must infer from type hints rather than being told explicitly.
Parameter descriptions lack constraint guidance. For 'min' and 'max' parameters, no min/max bounds are stated (e.g., 'min: integer, no limits stated, what if someone passes -1e18?'). For 'length' parameters, no guidance on practical limits or minimum values (length=0 is caught at runtime, not documented upfront). For 'charset', no examples of valid character sets or constraints on what's allowed.
No guidance on error recovery or edge cases in descriptions. The code handles ZeroLengthError and MaxInt64/MinInt64 edge cases, but these error paths are not documented in tool descriptions. An LLM encountering 'length cannot be zero' has no guidance on what to do next.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 67 | 2025-06-18+ | v2 |
| 2026-03-09 | D | 58 | - | v1 |
No distinguishing guidance between random_ascii and random_string. Both generate random strings; the difference (ASCII vs custom charset) is not explained in a way that helps an LLM decide which to call. Description should clarify: 'Use random_ascii for standard ASCII (0-127); use random_string for custom character sets.'