Back to the catalog

tools.clean/mcp

Read-only developer, date, finance, and text utilities. Authless remote MCP server by Clean.tools.

Open source Open in the app JSON README (API)

About

Read-only developer, date, finance, and text utilities. Authless remote MCP server by Clean.tools.

Details

Kind
MCP servers
Topic
No topic detected
Publisher
tools.clean
Origin
official
Category
ferramentas
Transport
http
Version
0.1.1
Added
2026-08-29 04:01:55
Updated
2026-08-29 04:01:55
Origin id
tools.clean/mcp

README

# @clean-tools/mcp

A tiny stdio bridge to the [Clean.tools](https://clean.tools) remote MCP server.

Clean.tools runs an authless remote MCP server (Streamable HTTP) that exposes a
set of **read-only, deterministic** developer, finance, and date/time
utilities: cron parsing, RRULE expansion, timezone and strftime formatting, loan
amortization, TVM, compound interest, APR, hashing, UUIDs, JWT decoding, regex
testing, data-format conversion, unit conversion, QR encoding, and more. These
are the same engines that power the site's tools, so a model can compute exact
answers instead of guessing.

Most desktop MCP clients (Claude Desktop, Cursor, Windsurf, etc.) launch MCP
servers as local subprocesses and talk to them over **stdio**. This package is a
zero-dependency shim that speaks stdio to your client and proxies every JSON-RPC
message to the remote HTTP endpoint.

- **Zero dependencies.** Pure Node built-ins (`fetch`, `readline`). Requires
  Node.js 18+.
- **Nothing to trust it with.** The server is authless and every tool is
  read-only, so there are no credentials and no writes.
- **Configurable endpoint** via an environment variable.

## Usage

You do not need to install anything. Point your MCP client at `npx`:

```json
{
  "mcpServers": {
    "clean-tools": {
      "command": "npx",
      "args": ["-y", "@clean-tools/mcp"]
    }
  }
}
```

- **Claude Desktop:** add the block above to `claude_desktop_config.json`
  (Settings -> Developer -> Edit Config), then restart Claude Desktop.
- **Cursor / Windsurf / other clients:** add the same block to that client's MCP
  config file (`~/.cursor/mcp.json` for Cursor).

### Pointing at a different endpoint

By default the shim proxies to `https://mcp.clean.tools/mcp`. Override it with an
environment variable, for example to target a local `wrangler dev` instance:

```json
{
  "mcpServers": {
    "clean-tools": {
      "command": "npx",
      "args": ["-y", "@clean-tools/mcp"],
      "env": {
        "CLEAN_TOOLS_MCP_URL": "http://127.0.0.1:8787/mcp"
      }
    }
  }
}
```

`MCP_REMOTE_URL` is accepted as an alias for `CLEAN_TOOLS_MCP_URL`.

### Global install (optional)

```bash
npm install -g @clean-tools/mcp
clean-tools-mcp   # reads JSON-RPC on stdin, writes JSON-RPC on stdout
```

## How it works

The shim reads newline-delimited JSON-RPC 2.0 messages from stdin, `POST`s each
one to the configured Streamable-HTTP MCP endpoint (advertising both
`application/json` and `text/event-stream` in `Accept`), and writes the
resulting JSON-RPC message(s) back to stdout. It tracks the `Mcp-Session-Id`
header and the protocol version negotiated during `initialize` so the remote
session stays coherent. Notifications (messages without an `id`) that the server
answers with `202 No Content` produce no stdout, as required by the protocol. If
the remote is unreachable, the shim returns a JSON-RPC error for the pending
request rather than hanging.

Diagnostics are written to **stderr**; **stdout** carries only protocol traffic.

## Talking to the server directly

If your client supports remote/HTTP MCP servers natively, you can skip this shim
entirely and connect straight to:

```
https://mcp.clean.tools/mcp
```

There is also a plain REST API for non-MCP callers:

```
GET  https://mcp.clean.tools/api/tools          # list tools
POST https://mcp.clean.tools/api/tools/:name    # run a tool with a JSON body
```

## License

MIT

More