mcp-bytesmith
# mcp-bytesmith
[](https://github.com/laszlopere/mcp-bytesmith/actions/workflows/ci.yml)
[](https://pypi.org/project/mcp-bytesmith/)
[](https://www.python.org/)
[](LICENSE)
[](https://github.com/sponsors/laszlopere)
[](https://glama.ai/mcp/servers/laszlopere/mcp-bytesmith)
[](https://github.com/astral-sh/ruff)
[](https://mypy-lang.org/)
[](https://github.com/laszlopere/mcp-bytesmith/commits)
A pure-Python [Model Context Protocol](https://modelcontextprotocol.io) server,
built on the official MCP SDK (MCPServer), exposing a toolbox of byte-wrangling
utilities — encoding, hashing, number crunching, and Ethereum primitives — all
computed locally and for real, with no network calls or remote APIs.
Distribution name: `mcp-bytesmith` · import package: `mcp_bytesmith`.
## Tools
mcp-bytesmith ships an always-on **core toolset** built entirely on the Python
standard library, so it works out of the box with no extra dependencies. This
covers the everyday primitives: `encode` and `decode` move data between a wide
set of schemes (hex, the Base64/Base32 family, Base58/Base58check, Base45, and
more), `hash` computes cryptographic, CRC, and fast non-cryptographic digests,
`hash_file` checksums a file on disk and soft-verifies it against an expected
digest, `hmac` computes and verifies keyed-hash authentication tags, and
`num_convert` translates integers between bases. Rounding out the core are
`bytes_edit` (pad/trim/slice/concat byte glue), `data_uri` (build and parse
`data:` URIs), `otpauth_uri` (build and parse `otpauth://` authenticator
provisioning URIs), `unicode_normalize` and `charset_transcode` for text and
character-set work, `string_escape`/`string_unescape` for JSON/JS/Python/C
escaping, `codepoints` for per-scalar Unicode inspection, `random` for
CSPRNG-backed bytes, tokens, and passphrases, and `id_generate` for UUIDs
(v1/v4/v5/v7), ULIDs, and nanoids. `password_hash` turns a password
into a verifiable storage string and checks one back — scrypt and PBKDF2 out of
the box, bcrypt and the argon2 variants with the `crypto` extra — while
`derive_key` derives raw key bytes from a password or secret via PBKDF2, scrypt,
or HKDF.
An opt-in **Ethereum/EVM toolset** (enabled via the `ethereum` extra) adds the
primitives you reach for when working on-chain: `eth_hash` for keccak-256,
EIP-191, EIP-712 typed-data, and EIP-7702 authorization hashing,
`eth_userop_hash` for the ERC-4337 userOpHash (EntryPoint 0.6/0.7/0.8),
`abi_codec` and `rlp_codec` for ABI and
RLP encode/decode, `eth_selector` for function and event selectors,
`abi_inspect` for converting a contract ABI between its JSON and human-readable
forms and listing every selector and topic0 it declares,
`eth_calldata` for splitting a call's calldata into named, typed arguments (and
building it back), `eth_log_decode` for turning a receipt log's topics and data
into named event arguments, `eth_revert_decode` for turning a failed call's
revert data into a reason (`Error(string)`, `Panic(uint256)`, or a custom error),
`eth_bytecode` for disassembling deployed bytecode, scraping the selectors out of
its dispatcher, and reading its trailing solc metadata,
`eth_tx_codec` for transactions and the hash their sender signs,
`eth_storage_slot`
for storage layout — mapping and array slots, plus the well-known constant ones
(EIP-1967 proxy, UUPS, ERC-7201 namespaced, diamond) — `eth_address_case` for
EIP-55 checksums, `ens_namehash` for
EIP-137 ENS namehash/labelhash, `bip39` for BIP-39 mnemonic generation,
validation, and seed derivation, `bip32_derive` for BIP-32/44 HD key and address
derivation from a seed, `eth_eoa_address` for the address and public key behind a
private key (passed inline, or read from a file so the key stays out of the
conversation), `eth_contract_address` for CREATE and CREATE2 deployment
addresses, and `eth_sign` for secp256k1 signatures over a 32-byte hash — signing
with a key the server reads from a file (there is no inline key argument), plus
verifying, recovering the signer, and converting between r/s/v, 65-byte, and
EIP-2098 compact forms. An always-available `info` tool reports which toolsets are active
along with version information.
An opt-in **serialization toolset** (enabled via the `serialize` extra) adds
`serialize_codec`, a single tool multiplexed by `format`. It encodes and decodes
schemaless structured data across CBOR, MessagePack, bencode, and ASN.1 DER/BER
(a tag-length-value tree; the `crypto` extra's asn1crypto is needed for ASN.1);
it encodes and decodes SSZ (Simple Serialize) driven by an `options.schema`,
also returning the `hash_tree_root`; and it decodes raw protobuf wire format
(protobuf is decode-only — without a `.proto` schema it surfaces field numbers,
wire types, and values rather than field names).
Further toolsets (the rest of crypto, IDs, validation) are on the roadmap — see
[`TODO`](./TODO).
## Development
```sh
uv sync # create venv + install (incl. dev extras)
uv run mcp-bytesmith # start the server over stdio
uv run pytest # run the test suite
```
## Sponsoring
mcp-bytesmith is free, open-source software developed in my spare time.
Sponsorships are what keep the project alive and actively maintained — they fund
new toolsets, bug fixes, and ongoing support, and they're a direct signal that
the work is worth continuing.
If the project is useful to you, please consider sponsoring it through
**[GitHub Sponsors](https://github.com/sponsors/laszlopere)**. Click the
**Sponsor** button at the top of the repository, or visit the link directly, and
pick a one-time or recurring tier. Every contribution, large or small, is hugely
appreciated and goes straight back into keeping mcp-bytesmith healthy.
## License
GPLv3 — see [`LICENSE`](./LICENSE).
The bundled passphrase wordlist
([`src/mcp_bytesmith/wordlists/eff_large.txt`](./src/mcp_bytesmith/wordlists/eff_large.txt),
used by the `random` tool's `passphrase` kind) is the EFF "large" wordlist by the
[Electronic Frontier Foundation](https://www.eff.org/dice), licensed
[CC BY 3.0 US](https://creativecommons.org/licenses/by/3.0/us/).
The bundled BIP-39 wordlist
([`src/mcp_bytesmith/wordlists/bip39_english.txt`](./src/mcp_bytesmith/wordlists/bip39_english.txt),
used by the `bip39` tool) is the canonical English wordlist from
[BIP-39](https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt), which
falls under the [MIT License](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki#copyright).
Its SHA-256 is `2f5eed53a4727b4bf8880d8f3f199efc90e58503646d9ff8eff3a2ed3b24dbda`.
TDQS
Scored across 40 tools
Most tools target clearly different operations, and descriptions cross-reference likely alternatives, e.g. encode vs. string_escape, hash vs. hash_file/hmac, and password_hash vs. derive_key. Some overlaps remain, notably abi_codec vs. eth_calldata for ABI encoding/decoding and the broader hash/eth_hash/hmac cluster, but context in the descriptions usually resolves them.
Names are uniformly snake_case and use good domain prefixes such as eth_*, bip*, and abi_*, plus clear inverse pairs like encode/decode and string_escape/string_unescape. Minor deviations are single-word or noun-phrase names such as random, hash, info, codepoints, and bip39 rather than a strict verb_noun pattern throughout.
At 40 tools, this is well above the practical 3-15 range and crosses the 25-tool threshold that typically signals an overloaded surface. The broad domain partly justifies the breadth, but the selection burden for an agent is high and the server would benefit from consolidation or clearer grouping into toolsets.
The surface covers an unusually wide range: encoding/decoding, hashing/HMAC, KDFs/password hashing, Ethereum ABI/calldata/logs/tx/signing/storage/addresses, BIP-32/39, ENS, time, IDs, and Unicode. A few minor gaps exist, such as no explicit private-key generation and no OTP code computation, but core workflows are covered end-to-end.