Skip to main content
Glama
slenderongithub

fix-protocol-mcp

README.md
# fix-protocol-mcp

MCP server for parsing, validating, building, and explaining [FIX protocol](https://www.fixtrading.org/) 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

```bash
pip install .
```

This installs the `fix-protocol-mcp` console script (stdio MCP server).

### MCP client config

```json
{
  "mcpServers": {
    "fix-protocol": {
      "command": "fix-protocol-mcp"
    }
  }
}
```

Running from source instead of installing:

```json
{
  "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

```bash
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:

```python
from fix_protocol_mcp import parse, validate, build, describe_tag
```

## License

MIT - see [LICENSE](LICENSE).

TDQS

A3.9/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a distinct FIX operation: building, explaining tags, parsing, and validating. No functional overlap exists.

Naming Consistency5/5

All tool names follow a clear verb_noun pattern with underscores (build_fix_message, explain_fix_tag, etc.), ensuring predictability.

Tool Count5/5

Four tools is well-scoped for a FIX protocol assistant, covering core tasks without excess or deficiency.

Completeness5/5

The set covers the full lifecycle of FIX message handling: construction, parsing, validation, and tag lookup. No obvious gaps for the intended purpose.

Maintenance

ActivityStale
ResponsivenessNo issues