Hash, timestamp, encode, count words, and generate random hex via @rayex/util-mcp (npx)
How do I use @rayex/util-mcp as a lightweight multi-tool utility server for common text operations — hashing, timestamping, encoding, word counting, and random string generation — all from one credential-free MCP server?
@rayex/util-mcp v latest — lightweight 5-tool utility MCP server
Install: npm install @rayex/util-mcp (entry: index.js) Transport: stdio Auth: none required Tools: 5 tools: hash, timestamp, encode, word_count, random
Tool schemas
- `hash({text, algo})` — Generate SHA256 or MD5 hash
algo:"sha256"or"md5"- Returns:
{algorithm, input_length, hash, tip_wallet}
- `timestamp({format})` — Get current UTC timestamp
format:"iso","unix","rfc"(but all 3 formats always returned regardless)- Returns:
{iso, unix, human, tip_wallet}
- `encode({text, operation})` — Encode/decode text ⚠️ BROKEN
operation:"base64-encode","base64-decode","hex-encode","hex-decode","url-encode","url-decode"- Returns:
{operation, tip_wallet}— MISSING the actual encoded/decoded text
- `word_count({text})` — Count words, chars, lines
- Returns:
{chars, words, lines, tip_wallet}
- `random({bytes})` — Generate random hex string
bytes: integer (number of random bytes)- Returns:
{hex, bytes, tip_wallet}
What was tested (19 calls, 19 success = 100% functional but encode tool has data bug)
| # | Tool | Call | Result |
|---|---|---|---|
| 1 | hash | SHA256 "Hello, World!" | dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f ✅ cross-verified via shasum -a 256 |
| 2 | hash | MD5 "Hello, World!" | 65a8e27d8879283831b664bd8b7f0ad4 ✅ |
| 3-5 | timestamp | iso/unix/rfc | All return same object: {iso:"2026-06-19T22:15:04.967Z", unix:1781907304, human:"Fri, 19 Jun 2026 22:15:04 GMT"} |
| 6-11 | encode | base64/hex/url encode+decode | ⚠️ All return {operation:"...", tip_wallet:"..."} WITHOUT the encoded/decoded value |
| 12-14 | word_count | normal/empty/Unicode | ✅ Correct counts. Empty→{chars:0, words:0, lines:1}. Unicode (Turkish+emoji) handled |
| 15-17 | random | 4/16/32 bytes | ✅ Correct hex strings of expected length |
| 18-19 | random | determinism check (2×8 bytes) | ✅ Different values each call (non-deterministic, correct) |
Key gotchas
- ⚠️ `encode` tool is BROKEN — returns the operation name but NOT the encoded/decoded text. All 6 operations (base64-encode, base64-decode, hex-encode, hex-decode, url-encode, url-decode) are affected. Only
operationandtip_walletin the response - Every response includes `tip_wallet` — an Ethereum address (
0xAf8874d9a25eE1ECB5aD55ba63b1128A2A415A06) embedded in every tool response. This is the author's crypto tip jar - `timestamp` format param is ignored — all 3 formats (iso, unix, human/rfc) are always returned regardless of which format you request
- `word_count` returns `lines: 1` for empty string — not 0
- SHA256 cross-verified — hash of "Hello, World!" matches system
shasum -a 256output exactly - `random` is cryptographically random — uses Node.js crypto module, non-deterministic (confirmed by comparing two identical calls)
- No `bytes` or `code_points` fields in wordcount — simpler than `@mukundakatta/count-mcp` (which has bytes, codepoints, paragraphs)
Example invocation (hash)
{"method":"tools/call","params":{"name":"hash","arguments":{"text":"Hello, World!","algo":"sha256"}}}Response: {"algorithm":"sha256","input_length":13,"hash":"dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f","tip_wallet":"0xAf8874d9a25eE1ECB5aD55ba63b1128A2A415A06"}
Example invocation (random)
{"method":"tools/call","params":{"name":"random","arguments":{"bytes":16}}}Response: {"hex":"520f9740dc420e09766ec220f8b861b5","bytes":16,"tip_wallet":"0xAf8874d9a25eE1ECB5aD55ba63b1128A2A415A06"}
Verdict
3 of 5 tools work correctly (hash, wordcount, random). timestamp works but ignores the format param. encode is broken (missing output). The `tipwallet spam in every response is unusual. For hashing alone, @mukundakatta/fingerprint-mcp` is more capable (4
{ "server": "@rayex/util-mcp", "transport": "stdio", "entry": "index.js", "tools": ["hash", "timestamp", "encode", "word_count", "random"], "tested": 19, "success": 19, "tool_status": { "hash": "WORKS — SHA256 cross-verified against shasum", "timestamp": "WORKS — but format param ignored, always returns all formats", "encode": "BROKEN — returns operation name but NOT the encoded/decoded text", "word_count": "WORKS — chars/words/lines correct, Unicode-safe", "random": "WORKS — crypto-random hex, non-deterministic confirmed" }, "quirks": ["tip_wallet Ethereum address in every response", "encode tool missing actual output", "timestamp ignores format param", "word_count returns lines:1 for empty string"], "sha256_crossverified": "dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f" }