MCP server for historically accurate Enigma machine emulators
Single tool with comprehensive parameter schemas and detailed descriptions. The tool name 'encrypt_message' is clear and action-oriented, following verb_noun convention. The description is extensive (450+ chars) and explains the tool's purpose, requirements, and complex constraints. Input schema is fully defined with Pydantic models (RotorConfig, ReflectorConfig) including type definitions and field descriptions. However, the description is verbose and could be more concise (ideal range 50-200 chars per pattern:tool-description). Output schema is undocumented, no specification of what the encrypted/decrypted message looks like or what fields are returned. Error handling is missing, no guidance on what happens with invalid machine models, malformed configurations, or constraint violations. The tool handles complex domain logic (Enigma machines with multiple variants, rotors, reflectors) but expects exact parameter formatting without validation feedback.
Encrypt or decrypt a message using a specified Enigma machine configuration. Args: machine_model: Exact machine model name. MUST be one of: 'M3', 'M4', 'I', 'I_Norway', 'I_Sondermaschine', 'K', 'K_Swiss', 'D', 'Z', 'B_A133', 'T'. Do not add 'Enigma' prefix. Supported models and their explicitly required reflectors: - 'M3', 'I': UKWA, UKWB, UKWC - 'M4': UKWBThin, UKWCThin - 'I_Norway': UKW_EnigmaINorway - 'I_Sondermaschine': UKW_EnigmaISonder - 'K', 'K_Swiss', 'D': UKW_EnigmaCommercial - 'Z': UKW_EnigmaZ - 'B_A133': UKW_EnigmaB_A133 - 'T': UKW_EnigmaT message: The plaintext or ciphertext to process. - For Enigma Z: MUST contain ONLY digits (1234567890). - For Enigma B_A133: MUST contain ONLY Swedish letters (abcdefghijklmnopqrstuvxyzåäö). Note: 'w' is strictly forbidden. - For all other machines: MUST contain ONLY standard letters (A-Z). - Spaces, punctuation, and special characters are strictly forbidden in all machines. rotors: List of RotorConfig objects. MUST be ordered exactly as: [Fastest/Rightmost, Middle, Slowest/Leftmost, Greek (if M4)]. reflector: The ReflectorConfig object. plugboard_pairs: Optional dict for plugboard connections (e.g. {"A": "B", "C": "D"}). Ignored if the machine has no plugboard.
Output schema is completely undocumented. The tool description and parameters are detailed, but there is no specification of what fields the response contains, their types, or structure. LLMs cannot infer the output format or plan downstream operations.
No error handling guidance. Invalid machine models, reflectors, rotors, or constraint violations (e.g., Enigma Z with non-digits) are mentioned in parameter descriptions but the tool does not document what errors it returns or how the LLM should recover. Error messages are user-facing ValueError() strings, not structured recovery guidance.
Tool description is excessive (450+ chars) and verbose. The baseline for A+ tools is 50-200 chars. While the detail is valuable for complex domain logic, the description buries key information (WHAT does it return?) and wastes tokens. Refactor into: brief summary, then separate parameter constraint documentation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Input parameter 'message' accepts Union[str, int] but the type annotation is confusing and not aligned with the constraints. Enigma Z accepts digits (1234567890), but the schema marks it as 'string|integer'. LLMs may pass integers literally instead of digit strings, causing type confusion.
Rotor and Reflector configurations use nested Pydantic models, which is good for structure but the schema does not enforce the machine-model-specific constraints (e.g., M4 requires a Greek rotor, M3 does not). The constraint is documented in prose but not validated by schema or tool logic with actionable error messages.
Tool does not return any reference data needed for chaining or context. If an LLM uses encrypt_message and later needs to decrypt the same message, it has no way to store or reference the machine configuration. The response should include or summarize the configuration used.