The argument list is the product: model, rotors with their ring settings and start positions, reflector and plugboard mean a wartime setting can be written down and reproduced exactly, which is what makes this usable for checking a historical configuration rather than for producing a scrambled string. Two things will trip a first call — the model names are exact values, so 'I_Sondermaschine' and 'B_A133' have to be spelled as given, and the rotor list has to be ordered fastest to slowest, which is the reverse of how machine settings are usually written down.
A single-call cipher server built on the enigmapython emulator library: encrypt_message puts a message through an Enigma configuration you specify by machine_model, rotors, reflector and plugboard_pairs. It runs over stdio for a local client, or over SSE when you want it reachable on the network.
- encrypt_message covers encryption and decryption through one call, against the configuration you hand it — the machine is symmetric, so the same settings undo the result.
- machine_model is checked against a fixed set of names — 'M3', 'M4', 'I', 'I_Norway', 'I_Sondermaschine', 'K', 'K_Swiss', 'D', 'Z', 'B_A133' and 'T' — written without an 'Enigma' prefix.
- Each rotor carries its own rotor_type, ring_setting and initial_position, and the list is ordered fastest-first: rightmost, middle, leftmost, then the Greek wheel on an M4.
- Reflector is its own argument, with a ring setting and initial position of its own for the rotating reflectors, and the model decides which reflectors are legal.
- plugboard_pairs is a plain mapping of letter to letter, so a historical steckerbrett can be written down as given.
Nothing — no account, no key. It runs on Python 3.11 or newer, straight from your client with uvx enigmapython-mcp, or from a Docker image if you would rather not install Python. Claude Desktop bundles for both routes are on the releases page.
One command — uvx enigmapython-mcp --transport stdio
