About String Utility Belt
String Utility Belt is an MCP server that lets AI agents run string transformations and pipelines without a browser. It provides utility discovery and documentation alongside execution, with validation and isolated child-process runners.
Key features
- 01Discover and document utilities
- 02Run string transformations
- 03Compose multi-step pipelines
- 04Detect input formats
- 05Validate utility parameters
- 06Isolated process execution
Use cases
- 01Decoding and formatting data
- 02Transforming text through a pipeline
- 03Finding a suitable transformation utility
MCP support
The server exposes transformation tools such as `list_utilities`, `describe_utility`, `run_utility`, `run_pipeline` and `detect_format`, plus catalog and utility-documentation resources.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
5Saved tool list · updated 5d ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | integer | No | Maximum number of results to return (default 50, max 500). |
| query | string | No | Search words, matched case-insensitively against id, name, tags, aliases and description; every word must match somewhere, in any order (e.g. "encode url", "sha256", "uppercase"). |
| category | string | No | Category to filter to (case-insensitive), e.g. "Encoding" or "Hashing". |
Details
From the project README@string-utility-belt/mcp
An MCP server that exposes String Utility Belt's 247 string-transformation utilities — and its pipeline engine — as tools an AI agent can call directly, with no browser involved.
Install
Nothing to clone or build: clients run it from npm with npx (Node.js 20 or later).
Claude Code
claude mcp add subelt -- npx -y @string-utility-belt/mcp
Or install it as a plugin, which pins the server to the release the plugin ships with (plugin README):
/plugin install string-utility-belt --marketplace String-Utility-Belt/string-utility-belt
Claude Desktop, Cursor and other MCP clients: add this to the client's MCP configuration
(for Claude Desktop, claude_desktop_config.json), then restart the client:
{
"mcpServers": {
"subelt": {
"command": "npx",
"args": ["-y", "@string-utility-belt/mcp"]
}
}
}
It is also on Smithery and in the
official MCP Registry as com.stringutilitybelt/mcp. Then ask your agent for something like "base64-decode this
and pretty-print the JSON": it finds the utilities with list_utilities and runs them with run_utility or
run_pipeline.
Tools
list_utilities—{ category?, query?, limit? }→{ items: [{ id, name, category, description }], total, categories }, best matches first.queryis a set of words that must all match (in any order) somewhere in the id, name, tags, aliases or description. Start here.describe_utility—{ id }→ a utility's full doc: params (kind, default, options/bounds, description), what it accepts/produces, tags, aliases, worked examples, and the runtime capabilities it needs.run_utility—{ id, input, inputEncoding?, params? }→{ output, outputEncoding? }. Text output is returned as-is; JSON output is pretty-printed text; byte output is base64 withoutputEncoding: "base64". Params are validated against the utility's spec. A failing utility comes back asisError: truewith the message, never a thrown exception.run_pipeline—{ steps?, share?, input, inputEncoding? }→{ output, outputEncoding?, errors, timings, skipped, halted }for a whole pipeline (the v3 schema: utility steps, branches, macros, "run on each" steps, conditions, per-step error policy). Pass exactly one ofsteps([]is the identity pipeline) orshare(a#/p/<payload>link, a URL containing one, or the bare payload). Unknown utility ids and invalid params on enabled steps are rejected up front.detect_format—{ input, inputEncoding? }→{ candidates: [{ format, confidence, note }] }, best first (JSON, YAML, base64, JWT, gzip, …).
inputEncoding is "text" (default), "base64" (standard or URL-safe, padding optional),
"hex" (both decode to raw bytes first) or "json" (parse first); detect_format takes
"text", "base64" or "hex".
Resources
subelt://utilities— the full catalog as JSON (id, name, category, description, tags, aliases for every utility).subelt://utility/{id}— one utility's full documentation (same shape asdescribe_utility), via a resource template with id completion.
Limits and isolation
- Input is capped at 1 MB per call (a
sharelink at 1M characters). - Output past 1M characters is cut off and flagged
truncated: truewith the untruncatedfullLength. - A pipeline is capped at 100 steps (nested steps counted).
- Every call is stopped after 20 s — set
SUBELT_MCP_TIMEOUT_MSto change that. - Utility code runs in pooled child processes (up to 4, 512 MB heap each), not in the server: a call that blocks (a catastrophic regex, bcrypt at cost 31) is killed at the deadline, one that exhausts memory fails with "ran out of memory", and either way the server keeps answering. Runners exit with the server, and kill themselves if it dies abruptly.
- Utilities that run arbitrary user JavaScript (
custom_js) are always refused — LLM-driven code execution is out of scope for this server. The two utilities that need a browserDOMParser(xml_to_json,html_table_to_csv) fail with an explanatory error.
Privacy Policy
The server runs entirely on your computer. Our full privacy policy is at stringutilitybelt.com/privacy/; for this server it comes down to:
- Data collection. It receives only the arguments your MCP client sends in each tool call (the input text, utility ids, parameters, pipeline steps) and returns results only to that client. It contains no analytics, telemetry or ads.
- Use and storage. Inputs are processed in memory, by the server and its child processes, to produce the result you asked for. Nothing is written to disk. Diagnostics, such as a failed start or a runner that ran out of memory, go to standard error, which your MCP client may keep in its own logs.
- Third-party sharing. None. The server makes no network requests, so nothing you give it reaches us or anyone else. (Your MCP client may download the icon listed in the server's metadata from stringutilitybelt.com to display it; the server itself does not.)
- Retention. Nothing is kept once a call returns.
- Contact. [email protected].
Building
From the repo root (no separate install needed — it reuses the root node_modules):
npm run build:mcp
This produces a single standalone file at packages/mcp/dist/server.mjs (Node 20+, every
dependency bundled in — only Node's own built-ins are external). It is an SSR build, so
dependencies resolve to their Node variants; the same file doubles as the job-runner entry
(--job-runner).
Running a local build
To try changes from a checkout, point the client at the built file instead of the npm package:
claude mcp add subelt -- node /absolute/path/to/string-utility-belt/packages/mcp/dist/server.mjs
Development
# Unit + integration tests (in-process via InMemoryTransport, plus the process pool)
npx vitest run packages/mcp/src --maxWorkers=2
# Build, then also run the stdio smoke tests against the real binary
npm run build:mcp
npx vitest run packages/mcp/src/bin.smoke.test.ts --maxWorkers=1
Source and issues
@string-utility-belt/mcp is developed in the String Utility Belt repository on GitHub, alongside the web app and the other integrations. Report bugs or request features in its issue tracker. MIT licensed.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.