1. TypeScript
Plain fetch with the key in the Authorization header. Keep the key in an environment variable.
const response = await fetch(
'https://api.findutils.com/api/tools/json-format/execute',
{
method: 'POST',
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${process.env.FINDUTILS_API_KEY}` },
body: JSON.stringify({ json: '{"a":1,"b":2}' }),
},
);
const data = await response.json();
console.log(data.result); 2. Python
The same call with requests.
import os
import requests
r = requests.post(
"https://api.findutils.com/api/tools/json-format/execute",
headers={"Authorization": f"Bearer {os.environ['FINDUTILS_API_KEY']}"},
json={"json": '{"a":1,"b":2}'},
)
print(r.json()["result"]) 3. MCP — Claude Desktop / agents
Add the MCP server with the key. initialize and tools/list work without it; tools/call needs it.
claude mcp add findutils --transport http https://mcp.findutils.com/ --header "Authorization: Bearer YOUR_API_KEY"
Or put the server and the header in your client's config file:
{
"mcpServers": {
"findutils": {
"type": "http",
"url": "https://mcp.findutils.com/",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
} Bare cURL — with and without a key
# With your key: the tool runs.
curl -X POST https://api.findutils.com/api/tools/base64/execute \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"hi","action":"encode"}'
# Without a key: HTTP 402 Payment Required, error code PAYMENT_REQUIRED.
curl -i -X POST https://api.findutils.com/api/tools/base64/execute \
-H "Content-Type: application/json" \
-d '{"text":"hi","action":"encode"}' Discovery
Tool catalog: /api/openapi.json and GET https://api.findutils.com/api/tools, open without a key.
The x402 manifest lists per-call prices; per-call payments are not open yet.