Security

Security & privacy

Two ways to use every tool, with very different data flows. This page says exactly what each one does, what is stored, and how to check it yourself.

Summary

Tool pages (local) HTTP API, MCP and A2A
Computation JavaScript in your browser tab Cloudflare Pages Function at the nearest Cloudflare data centre
Your input leaves the device No; blocked by the browser via CSP Yes, that is what an API call is
Inputs and results stored or logged No No, except a tool request, which is stored so it can be read
What is stored Nothing on our side. In your browser: no cookies, and one display preference (see below) Your client record and one metadata row per call (below)
Secrets Some tools (key generation, HMAC) handle secrets, locally only Never asked for or created, except your own client secret, stored only as a hash
Third parties None (the credentials page loads Cloudflare Turnstile) None, apart from Cloudflare as host

Tool pages: what “local” means, precisely

Every tool page ships its logic as JavaScript from this site. When you type, paste or open a file, the computation happens in your tab (file hashing runs in a Web Worker, also in your tab). Opening a file reads it from disk with the browser File API; it is never uploaded.

This is enforced, not just promised. Tool pages are served with this Content-Security-Policy:

default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self'; font-src 'self';
connect-src 'none'; worker-src 'self'; manifest-src 'self'; form-action 'none';
frame-ancestors 'none'; base-uri 'none'; object-src 'none'

Four groups of pages relax exactly one thing, because they need to make a request:

Pages Policy change Why
/reference/*, /tools/tls/ connect-src 'self' “Try it” sends your request (and the credentials you type) to this site's API, and nowhere else.
/tools/time/ connect-src 'self' One HEAD request to the page's own address, to read the server's clock from the Date header. It carries nothing you type.
/credentials/, /tools/request/ connect-src 'self'; script and frame from https://challenges.cloudflare.com Cloudflare Turnstile checks you are human, then the form posts to this site.

CSP does not cover top-level navigation (clicking a link). The tools never build links that contain your input. Downloads (for example “Download private.pem”) are created in memory as blob: URLs and saved by your browser. Browser storage holds only what you choose, and nothing in it is sent anywhere except as described here:

Verify it yourself

  1. Open developer tools → Network, then use a tool page. After the page has loaded (including the file-hash page's Web Worker script, which loads with the page) there are no further requests. The Time page shows exactly one more: its HEAD request for the server clock.
  2. Check the page's response headers for content-security-policy.
  3. Or disconnect from the network after a tool page loads: it keeps working.

The API, MCP server and A2A endpoint

A call sends your input to https://util.caruana.me. Each endpoint's reference states exactly what the server receives.

What is stored (Cloudflare D1)

What is never stored or logged

No secrets, server-side

No endpoint, MCP tool or A2A skill asks for passwords, private keys, HMAC keys or other secrets, and none creates them. Key generation and HMAC exist only on the pages, which run locally. Inputs that contain a private key are refused without being parsed. The one secret the service creates is your own client_secret: generated from 256 random bits, shown once, and stored only as a SHA-256 hash.

Two tools take input that can be sensitive by nature, and say so in their reference: jwt_decode (an unexpired token is a bearer credential) and url_parse (a URL can embed a password; it is never echoed back). For live credentials, use those tools' pages, which run locally.

Outbound requests

What Cloudflare sees

As the host, Cloudflare terminates TLS and processes request metadata (IP address, the full URL including the query string, headers) under its own policies, and the account owner can view live request metadata. Request bodies are not part of that metadata, so put inputs in POST bodies: a query string is also kept in shell history, proxy logs and browser history.

Credentials and limits

For agents

The A2A agent card carries these commitments in machine-readable form (extension data-policy/v1). When a signing key is configured, the card is signed (JWS, Ed25519, over its RFC 8785 canonical form), with the public key at /.well-known/jwks.json . See A2A.

Cryptography used

What these tools do not do