Skip to main content
Glama
AhmedAhmedEG

Math MCP

by AhmedAhmedEG

Math MCP

Python MCP FastAPI License

A comprehensive math utility server implementing the Model Context Protocol (MCP) over streamable HTTP. Designed primarily for reverse engineering workflows in tools like IDA Pro, Ghidra, x64dbg, and others — but equally useful as a general-purpose math sidekick for any LLM-powered coding assistant.


Features

  • Base conversion — decimal, hex, binary, octal, all at once

  • Bitwise operations — AND, OR, XOR, NOT, NAND, NOR

  • Bit shifts & rotates — logical, arithmetic, rotate left/right

  • Endianness — swap between little and big endian for 16/32/64-bit values

  • IEEE-754 floats — inspect float32/float64 sign, exponent, mantissa, bit layout

  • Struct packingstruct.pack / struct.unpack with arbitrary format strings

  • Bit fields — create masks, extract, set, clear, test arbitrary bit ranges

  • ASCII / Unicode — character to code point lookup, hex bytes to string

  • XOR cipher — XOR data with a repeating key (hex or string input)

  • GUID / UUID — parse mixed-endian GUID and RFC 4122 UUID from raw bytes

  • Timestamp conversion — FILETIME (NTFS), Unix, DOS timestamps

  • Hashing — MD5, SHA1, SHA256, SHA512

  • Hex dump — traditional format with ASCII sidebar

  • And more — CRC32, base64, sign extension, alignment, popcount, bit reverse, next power of 2


Related MCP server: MathServer

Tools Reference

Arithmetic

Tool

Description

Parameters

Returns

Example

calc

Basic arithmetic operations

op (enum: add, sub, mul, div, mod, pow, sqrt, log, abs, neg, gcd, lcm), a (string, first operand), b (string, second operand — omit for unary ops), base (number, log base, default: 2)

Formatted result in all bases (if integer) or decimal string

calc(op="add", a="0xFF", b="1")dec: 256\nhex: 0x100\nbin: 0b100000000\noct: 0o400

Number Conversion

Tool

Description

Parameters

Returns

Example

convert

Convert a number between bases

value (string, any base), to (enum: dec, hex, bin, oct, all, default: all)

Requested representation(s)

convert(value="0xFF", to="dec")255

compare

Compare two numbers with diff/ratio

a (string), b (string)

Difference, signed values, ratio, relationship

compare(a="0x100", b="0x80") → shows a > b by 128

Bitwise & Shift

Tool

Description

Parameters

Returns

Example

bitwise

Bitwise AND / OR / XOR / NOT / NAND / NOR

op (enum: and, or, xor, not, nand, nor), a (string), b (string, omit for not), width (int, default: 32)

Formatted result in all bases

bitwise(op="xor", a="0xAB", b="0xCD")dec: 102\nhex: 0x66\nbin: 0b1100110\noct: 0o146

shift

Bit shift / rotate

op (enum: shl, shr, sar, rol, ror), value (string), amount (int), width (int, default: 32)

Formatted result in all bases

shift(op="rol", value="0x80000000", amount=1)dec: 1\nhex: 0x1\n...

bitmask

Create / extract / set / clear / test bit fields

op (enum: mask, extract, set, clear, test), high_bit (int), low_bit (int, default: 0), value (string), set_value (string)

Mask value, extracted field, or modified value

bitmask(op="mask", high_bit=7)mask[7:0]:\ndec: 255\nhex: 0xFF\n...

popcount

Count set bits

value (string), width (int, default: 32)

Set/clear counts, density percentage

popcount(value="0xFF")set bits: 8\nclear bits: 24\ndensity: 25.0%

bit_reverse

Reverse bit order

value (string), width (int, default: 32)

Original and reversed binary

bit_reverse(value="0x00000001")reversed: 0x80000000

Data Layout

Tool

Description

Parameters

Returns

Example

endian

Swap byte order (little ↔ big endian)

value (string), width (int, enum: 16, 32, 64, default: 32)

Byte-swapped value in all bases

endian(value="0x12345678", width=32)0x78563412

sign_extend

Sign-extend from N to M bits

value (string), from_bits (int), to_bits (int, default: 64)

Extended value with signed interpretation

sign_extend(value="0x80", from_bits=8)sign bit set — negative\nunsigned extended: 0xFFFFFFFFFFFFFF80\nsigned decimal: -128

pack

Pack integer to bytes or unpack hex bytes

op (enum: pack, unpack), fmt (string, struct format), value (string)

Packed hex bytes or unpacked values

pack(op="pack", fmt="<I", value="0xDEADBEEF")bytes: EF BE AD DE

align

Align value up/down to a power-of-2 boundary

value (string), boundary (string, must be power of 2), direction (enum: up, down, default: up)

Aligned value and difference

align(value="0x1235", boundary=16)aligned: 0x1240, difference: +11

Float Analysis

Tool

Description

Parameters

Returns

Example

float_bits

Inspect IEEE-754 float32 or float64 bit layout

value (string — decimal float, hex, or binary), width (int, enum: 32, 64, default: 32)

Sign, exponent, mantissa, hex, binary

float_bits(value="3.14159", width=32)sign=0 exp=128 mantissa=0x490FD0

String & Encoding

Tool

Description

Parameters

Returns

Example

ascii

Character ↔ code point lookup

value (string — single char, decimal, hex, binary)

Character info or code point info

ascii(value="A")'A' → dec=65, hex=0x41, bin=0b01000001

string

Convert hex bytes or comma-separated decimals to ASCII

value (string — hex or 12,34,56 format)

ASCII string and byte count

string(value="48 65 6C 6C 6F")ascii: Hello

base64

Encode to or decode from base64

op (enum: encode, decode, default: encode), value (string)

Encoded or decoded result

base64(op="encode", value="Hello")SGVsbG8=

crc32

Calculate CRC32 checksum

value (string — text or hex bytes)

CRC32 in hex and signed decimal

crc32(value="Hello")0xF7D18982

hash

Calculate hash digest

algo (enum: md5, sha1, sha256, sha512, default: md5), value (string — text or hex bytes)

Hash hex digest

hash(algo="sha256", value="Hello")SHA256: 185F8DB3...

Reverse Engineering Utilities

Tool

Description

Parameters

Returns

Example

xor

XOR cipher with repeating key

value (string — hex or text), key (string — hex or text)

XOR result in hex and ASCII

xor(value="48656C6C6F", key="FF")B79A939390

guid

Parse/format GUID/UUID from raw bytes

value (string — hex bytes or GUID string like xxxxxxxx-...)

Mixed-endian GUID, RFC 4122 UUID, raw bytes

guid(value="3B3E9B7A5C3D...") → GUID/UUID/bytes

timestamp

Convert FILETIME / Unix / DOS timestamps

value (string), type (enum: filetime, unix, dos, default: unix)

Human-readable UTC and local time

timestamp(value="0x1D2E3F4A", type="dos") → DOS parsed date/time

hexdump

Format hex bytes as traditional hex dump

value (string — hex or text), base (string, base address, default: 0)

Hex dump with ASCII sidebar

hexdump(value="48656C6C6F") → `00000000 48 65 6C 6C 6F ...

next_pow2

Find the next power of 2

value (string, must be positive)

Next and previous power of 2

next_pow2(value="0x500")next: 0x800 (2048)


Getting Started

Prerequisites

  • Docker (recommended) — any modern Docker installation

  • or Python >= 3.14 with uv installed

# Build the image
docker build -t math-mcp .

# Run in background, mapping host port 13338 to container port 3000
docker run -d -p 13338:3000 --name MathMCP --restart unless-stopped math-mcp

Native (Python 3.14+)

# Install uv (if not already installed)
pip install uv

# Sync dependencies
uv sync

# Run the server
uv run python server.py

Configuration

MCP Client Integration

Add to your MCP client configuration (e.g., ~/.config/opencode/opencode.json, claude_desktop_config.json, or Continue config):

{
  "mcpServers": {
    "math-mcp": {
      "type": "url",
      "url": "http://localhost:13338/mcp"
    }
  }
}

Environment / Arguments

The server listens on 0.0.0.0:3000 by default. To change the port, modify the uvicorn.run() call in server.py or the Docker port mapping.


API

The MCP endpoint uses the streamable HTTP transport (SSE + JSON-RPC).

Path

Method

Description

/mcp

POST

MCP JSON-RPC endpoint over SSE

Health check (FastAPI default):

curl http://localhost:13338/docs

Building from Source

git clone https://github.com/yourusername/math-mcp.git
cd math-mcp

# Development with hot reload
uv run uvicorn server:app --host 0.0.0.0 --port 3000 --reload

# Production via Docker
docker build -t math-mcp .
docker run -d -p 13338:3000 --name MathMCP math-mcp

Example: Tools in Action

Convert hex to all bases

Input:  convert(value="0xDEAD")
Output: dec: 57005
        hex: 0xDEAD
        bin: 0b1101111010101101
        oct: 0o157255

Inspect a float32

Input:  float_bits(value="3.14159", width=32)
Output: float32: 3.14159
        hex:  0x40490FD0
        bin:  0b01000000010010010000111111010000
        sign=0  exp=128 (unbiased 1)  mantissa=0x490FD0

XOR cipher

Input:  xor(value="48656C6C6F", key="FF")
Output: xor result (hex): B79A939390
        xor result (ascii): \xb7\x9a\x93\x93\x90

License

MIT — feel free to use, modify, and distribute.

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/AhmedAhmedEG/math-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server