Reed-Solomon Algorithm MCP

Reed-Solomon assistant: encode, decode and correct data, syndromes, GF(256) math. Written in Rust.

Documentation

reed-solomon-mcp

An MCP server that encodes, decodes, and explains Reed-Solomon error-correcting codes.

CI Build Test Publish Action Code Conventions PR Labeler PR Welcome Made with Rust License: MIT MCP Registry Docker image PRs welcome

A small Model Context Protocol server written in Rust. It speaks JSON-RPC over stdio, has a single dependency (serde_json), and implements Reed-Solomon over GF(2^8) with primitive polynomial 0x11d, alpha = 2, and generator roots alpha^0 to alpha^(nsym-1).

Features

  • Systematic encoding with any number of parity bytes (codeword length up to 255)
  • Error location and correction with Berlekamp-Massey, Chien search and Forney
  • Syndrome checks, generator polynomials and GF(256) arithmetic
  • Test helpers that corrupt chosen bytes so you can watch decoding work

Tools

ToolPurpose
rs_encodeSystematic encode; returns codeword and parity
rs_decodeCorrects up to nsym/2 byte errors; reports positions and magnitudes
rs_syndromesComputes syndromes and tells you if a word is a valid codeword
rs_generator_polynomialGenerator polynomial coefficients for a parity count
rs_code_parametersRS(n,k) capacity, rate, overhead and minimum distance
rs_inject_errorsCorrupts bytes at given positions for testing
gf256_mathadd, mul, div, pow, inverse, log, exp in GF(256)

Quick start: use the published Docker image

The server is published in the MCP Registry as io.github.xkid1/reed-solomon-alg-mcp and ships as a public image on GHCR. You only need Docker.

docker pull ghcr.io/xkid1/reed-solomon-alg-mcp:0.1.0

VS Code (agent mode)

Add to .vscode/mcp.json (or your user MCP config):

{
  "servers": {
    "reed-solomon": {
      "type": "stdio",
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/xkid1/reed-solomon-alg-mcp:0.1.0"]
    }
  }
}

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "reed-solomon": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/xkid1/reed-solomon-alg-mcp:0.1.0"]
    }
  }
}

Use -i, not -t: the transport needs a clean stdin/stdout pipe.

MCP Inspector

npx @modelcontextprotocol/inspector docker run -i --rm ghcr.io/xkid1/reed-solomon-alg-mcp:0.1.0

Try it

Ask your assistant: "Encode 'hello' with 8 parity bytes, corrupt 3 bytes, then decode it."

Or talk to the server by hand:

printf '%s\n' \
  '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' \
  '{"jsonrpc":"2.0","method":"notifications/initialized"}' \
  '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"rs_encode","arguments":{"data":"Hello","parity_symbols":6}}}' \
  | docker run -i --rm ghcr.io/xkid1/reed-solomon-alg-mcp:0.1.0

The encoded codeword is 48656c6c6fc0886617750e.

Build from source

Requires a recent stable Rust toolchain.

git clone https://github.com/xkid1/reed-solomon-alg-mcp.git
cd reed-solomon-alg-mcp
cargo build --release
./target/release/reed-solomon-mcp

Point a client at the binary instead of Docker:

{ "mcpServers": { "reed-solomon": { "command": "/absolute/path/to/target/release/reed-solomon-mcp" } } }

Development

cargo fmt --check
cargo clippy --all-targets -- -D warnings
cargo test
cargo build --release && bash scripts/smoke-test.sh

Every pull request to main runs tests and builds first, then the code-convention checks. See CONTRIBUTING.md.

Limitations

  • Codeword length is at most 255 bytes (GF(256)).
  • Errors-only decoding: erasure decoding is not implemented.
  • Beyond parity/2 errors the decoder may return an error or silently produce a different valid codeword. This is inherent to Reed-Solomon, so add an outer checksum if you need to detect that.
  • Not a cryptographic tool: error correction gives no confidentiality or authenticity.

Project