{
  "markdown": "# @clean-tools/mcp\n\nA tiny stdio bridge to the [Clean.tools](https://clean.tools) remote MCP server.\n\nClean.tools runs an authless remote MCP server (Streamable HTTP) that exposes a\nset of **read-only, deterministic** developer, finance, and date/time\nutilities: cron parsing, RRULE expansion, timezone and strftime formatting, loan\namortization, TVM, compound interest, APR, hashing, UUIDs, JWT decoding, regex\ntesting, data-format conversion, unit conversion, QR encoding, and more. These\nare the same engines that power the site's tools, so a model can compute exact\nanswers instead of guessing.\n\nMost desktop MCP clients (Claude Desktop, Cursor, Windsurf, etc.) launch MCP\nservers as local subprocesses and talk to them over **stdio**. This package is a\nzero-dependency shim that speaks stdio to your client and proxies every JSON-RPC\nmessage to the remote HTTP endpoint.\n\n- **Zero dependencies.** Pure Node built-ins (`fetch`, `readline`). Requires\n  Node.js 18+.\n- **Nothing to trust it with.** The server is authless and every tool is\n  read-only, so there are no credentials and no writes.\n- **Configurable endpoint** via an environment variable.\n\n## Usage\n\nYou do not need to install anything. Point your MCP client at `npx`:\n\n```json\n{\n  \"mcpServers\": {\n    \"clean-tools\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@clean-tools/mcp\"]\n    }\n  }\n}\n```\n\n- **Claude Desktop:** add the block above to `claude_desktop_config.json`\n  (Settings -> Developer -> Edit Config), then restart Claude Desktop.\n- **Cursor / Windsurf / other clients:** add the same block to that client's MCP\n  config file (`~/.cursor/mcp.json` for Cursor).\n\n### Pointing at a different endpoint\n\nBy default the shim proxies to `https://mcp.clean.tools/mcp`. Override it with an\nenvironment variable, for example to target a local `wrangler dev` instance:\n\n```json\n{\n  \"mcpServers\": {\n    \"clean-tools\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@clean-tools/mcp\"],\n      \"env\": {\n        \"CLEAN_TOOLS_MCP_URL\": \"http://127.0.0.1:8787/mcp\"\n      }\n    }\n  }\n}\n```\n\n`MCP_REMOTE_URL` is accepted as an alias for `CLEAN_TOOLS_MCP_URL`.\n\n### Global install (optional)\n\n```bash\nnpm install -g @clean-tools/mcp\nclean-tools-mcp   # reads JSON-RPC on stdin, writes JSON-RPC on stdout\n```\n\n## How it works\n\nThe shim reads newline-delimited JSON-RPC 2.0 messages from stdin, `POST`s each\none to the configured Streamable-HTTP MCP endpoint (advertising both\n`application/json` and `text/event-stream` in `Accept`), and writes the\nresulting JSON-RPC message(s) back to stdout. It tracks the `Mcp-Session-Id`\nheader and the protocol version negotiated during `initialize` so the remote\nsession stays coherent. Notifications (messages without an `id`) that the server\nanswers with `202 No Content` produce no stdout, as required by the protocol. If\nthe remote is unreachable, the shim returns a JSON-RPC error for the pending\nrequest rather than hanging.\n\nDiagnostics are written to **stderr**; **stdout** carries only protocol traffic.\n\n## Talking to the server directly\n\nIf your client supports remote/HTTP MCP servers natively, you can skip this shim\nentirely and connect straight to:\n\n```\nhttps://mcp.clean.tools/mcp\n```\n\nThere is also a plain REST API for non-MCP callers:\n\n```\nGET  https://mcp.clean.tools/api/tools          # list tools\nPOST https://mcp.clean.tools/api/tools/:name    # run a tool with a JSON body\n```\n\n## License\n\nMIT",
  "bytes": 3418,
  "sha": "3836f96b957ba9fe388c2364cc1dfb13c36c650dd3eb4bbfc8c9bfb9cc456d9d",
  "repo_slug": "",
  "fonte": "npm",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_tools_clean_mcp_5c1c8b62/readme"
}