- “Explain this message:
0100702405800...” - “Why was this transaction declined?”
- “Generate a Mastercard authorization for $25 and the matching approval response.”
- “What’s different between these two messages?”
Installation
Client Setup
Claude Code
.mcp.json at the project root:
Claude Desktop
Open Settings > Developer > Edit Config and add the server toclaude_desktop_config.json:
Cursor
Add the server to~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):
Running without installing
With uv, a client can run the server without a separate install step:Tools
Conventions shared by all tools:
- Messages are ASCII strings: MTI, hex bitmap, then field data.
- Field numbers in
fieldsare strings, for example{"2": "4111111111111111", "4": "000000001000"}. versionis"1987"(default),"1993"or"2003".networkis optional:VISA,MASTERCARD,AMEX,DISCOVER,JCBorUNIONPAY. Most tools detect it from the PAN when you leave it out.
Unknown network 'DINERS' or Invalid MTI format - must be numeric.
Allowed hosts for send_to_host
send_to_host only connects to hosts listed in the ISO8583SIM_ALLOWED_HOSTS environment variable of the MCP server, so an assistant can’t be used to reach arbitrary machines. The default is this machine only. Entries are a host (any port) or host:port, comma separated:
iso8583sim serve for a local mock issuer. See Networking.
Resources
Prompts
Example
A conversation with the server connected:You: Generate a Visa auth for $10 and explain the response if the issuer declines it for insufficient funds. Assistant callsgenerate_test_message, thencreate_responsewithresponse_code: "51", thenexplain_message: MTI 0110: authorization response from acquirer. Card network: VISA. Card: 411111******1111. Transaction type: Purchase. Amount: 10.00. Response code 51: Insufficient funds. Terminal: TERM0001. Merchant: MERCHANT123456.
Using the server from Python
The server is a regular MCP Python SDK server, so you can also call it in-process, for example in tests:Privacy
The server runs locally and makes no network calls. Messages you give the assistant are sent to your AI provider as part of the conversation, like any other text you paste, so use test data rather than real card numbers.explain_message masks the PAN in its summary.