slenderongithub/fix-protocol-mcp
🐍 🏠 - Parse, validate, build, and explain FIX protocol trading messages (Logon, NewOrderSingle, ExecutionReport, and the rest of the session/order workflow). Fully offline — bundled FIX 4.4 field dictionary, no API keys or network calls. Install pip install ., run fix-protocol-mcp.
Quick Install
{
"mcpServers": {
"slenderongithub-fix-protocol-mcp": {
"command": "npx",
"args": [
"-y",
"slenderongithub-fix-protocol-mcp"
]
}
}
}Using an AI coding agent (Claude Code, Cursor, etc.)? Copy a ready-made prompt that tells it to fetch the setup instructions and install this server for you.
Documentation Overview
fix-protocol-mcp
MCP server for parsing, validating, building, and explaining FIX protocol messages - the tag=value format used for orders and executions across equities, FX, and fixed-income trading.
Runs fully offline. Parsing, validation (BodyLength/CheckSum included), message construction, and the bundled FIX 4.4 field dictionary are all self-contained, no external API or network calls.
Tools
| Tool | What it does |
|---|---|
parse_fix_message | Decode a raw FIX string into tag, field name, value, and enum meaning. Accepts SOH-, |-, or ^-delimited input. |
validate_fix_message | Check field ordering, the standard header, BodyLength(9) and CheckSum(10) against computed values, and required/conditional fields per message type. Returns errors and warnings. |
build_fix_message | Construct a valid FIX message from field inputs. Accepts tag numbers or field names, and enum codes or labels ("Side": "Buy"). BeginString, BodyLength, and CheckSum are computed automatically. |
explain_fix_tag | Look up a tag's field name, data type, and enumerated values. |
Install
pip install .
This installs the fix-protocol-mcp console script (stdio MCP server).
MCP client config
{
"mcpServers": {
"fix-protocol": {
"command": "fix-protocol-mcp"
}
}
}
Running from source instead of installing:
{
"mcpServers": {
"fix-protocol": {
"command": "python",
"args": ["-m", "fix_protocol_mcp.server"],
"env": { "PYTHONPATH": "src" }
}
}
}
Examples
Parse a Logon message:
parse_fix_message("8=FIX.4.2|9=65|35=A|...|98=0|108=30|10=062|")
-> msg_type "A" (Logon), 10 fields, each decoded to name + value + enum meaning
Validate, catching a bad checksum:
validate_fix_message("8=FIX.4.2|9=65|35=A|...|10=000|")
-> { "valid": false, "checksum": {"present":"000","computed":"062","ok":false},
"errors": ["CheckSum(10)=000 does not match computed checksum 062."] }
Build an order from field names:
build_fix_message(
msg_type="NewOrderSingle",
fields={"Symbol":"AAPL","Side":"Buy","OrderQty":100,
"OrdType":"Limit","Price":"150.25","ClOrdID":"A1"})
-> 8=FIX.4.4|9=113|35=D|49=SENDER|56=TARGET|34=1|52=...|11=A1|38=100|
40=2|44=150.25|54=1|55=AAPL|60=...|10=061| (valid: true)
Explain a tag:
explain_fix_tag(40)
-> { "name": "OrdType", "type": "CHAR",
"values": [{"value":"1","meaning":"Market"}, {"value":"2","meaning":"Limit"}, ...] }
Coverage
The dictionary covers session-level messages and the order/execution workflow (Logon, Heartbeat, TestRequest, ResendRequest, Reject, SequenceReset, Logout, NewOrderSingle, OrderCancelRequest, OrderCancelReplaceRequest, ExecutionReport, OrderCancelReject), which accounts for most real FIX traffic. It's a curated subset rather than the full FIX repository - unrecognised tags and enum values surface as warnings, not hard failures.
Development
pip install -e ".[dev]"
pytest
server.py is a thin MCP wrapper around the core modules (parser,
validator, builder, dictionary, wire), which have no dependency on
the MCP SDK and can be used as a plain library:
from fix_protocol_mcp import parse, validate, build, describe_tag
License
MIT - see LICENSE.