Server endpoint
The MCP server speaks JSON-RPC 2.0 over HTTP at:
https://cleverutils.com/mcp
It implements the Streamable HTTP transport (POST for JSON-RPC requests). No session state, no authentication, IP-rate-limited at 1000 requests per day.
Connect from Claude Desktop
Claude Desktop macOS · Windows
Claude Desktop currently launches MCP servers as local processes, so for remote HTTP servers like CleverUtils you proxy through the official mcp-remote bridge (one line of npx, no install).
Edit your claude_desktop_config.json:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"cleverutils": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://cleverutils.com/mcp"]
}
}
}
Restart Claude Desktop. The 15 tools will appear in the tool picker (the hammer icon). Node.js must be installed — mcp-remote is a small npm package that forwards stdio↔HTTP.
Cursor VS Code fork
Cursor supports Streamable HTTP MCP servers natively. In Cursor settings → MCP Servers, add:
{
"mcpServers": {
"cleverutils": {
"url": "https://cleverutils.com/mcp"
}
}
}
If your version of Cursor doesn't yet support the native url shape, use the mcp-remote proxy snippet from the Claude Desktop section above.
Cline / Continue / Zed VS Code, JetBrains, Zed
Each editor has its own MCP config UI. Where a native remote URL shape is supported, use:
{
"mcpServers": {
"cleverutils": {
"url": "https://cleverutils.com/mcp"
}
}
}
Otherwise fall back to the npx mcp-remote snippet above — it works in any MCP client that can launch a local process.
Custom client (any language) SDK
Use the MCP SDK for Python or TypeScript. Point the client at https://cleverutils.com/mcp with StreamableHTTPTransport.
Available tools
The server exposes 15 tools. All tool inputs accept either an HTTPS URL (the server fetches with SSRF protection) or a base64-encoded file. Outputs are returned as MCP resource_link blocks pointing to a 2-hour-valid download URL.
| Tool name | Description | Key params |
|---|---|---|
convert_file | Universal file converter (200+ format pairs) | file, to_format, img_quality, img_resize_w/h |
upscale_image | AI 2x/3x/4x upscale (Real-ESRGAN) | file, scale, model |
remove_background | Remove image background → transparent PNG | file |
colorize_photo | Colorize black-and-white photo | file |
restore_old_photo | Multi-stage restoration (colorize + enhance) | file |
enhance_photo | Auto-enhance (sharpen, color balance) | file |
vocal_remover | Separate vocals from instrumental (Demucs) | file |
speech_to_text | Transcribe audio to text/SRT/VTT (Whisper) | file, format, language |
noise_reduction | Audio noise reduction (DeepFilterNet3) | file |
resize_image | Resize image to dimensions | file, width, height |
compress_image | Compress JPG/PNG/WebP/GIF with quality control | file, quality |
compress_pdf | Reduce PDF file size (Ghostscript) | file, quality |
merge_pdfs | Merge multiple PDFs into one | files[] (2–20) |
get_job_status | Check status of a previous job by ID | job_id |
list_supported_formats | List all supported formats and tools (no quota cost) | — |
Example prompts
Once connected, you can ask the LLM things like:
- "Convert
https://example.com/photo.heicto JPG." - "Upscale this image 4x:
https://example.com/icon.png" - "Remove the background from
https://example.com/portrait.jpgand give me the transparent PNG." - "Transcribe this podcast as SRT subtitles in English:
https://example.com/episode.mp3" - "Compress this PDF to roughly 50% of original size:
https://example.com/report.pdf" - "Merge these three PDFs into one:
https://…/a.pdf,https://…/b.pdf,https://…/c.pdf"
How it works
- LLM picks a tool. Based on your request, the LLM looks at the tool list and chooses (e.g.,
upscale_image) with the right arguments. - Server fetches the file. If you passed a URL, the server downloads it server-side — behind a strict SSRF blocklist (no private IPs, no
file://, no DNS rebinding). - Conversion runs. The same engine as our website and REST API: ImageMagick, FFmpeg, Real-ESRGAN, Demucs, Whisper, Ghostscript, LibreOffice.
- Result is returned as a resource link. The LLM gets a structured response containing both human-readable text ("File converted: photo.jpg, 180 KB") and a machine-readable
resource_linkwith a download URL valid for 2 hours.
Test it from your terminal
If you just want to verify the server works without setting up a full MCP client, try this curl:
curl -X POST https://cleverutils.com/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"capabilities": {},
"clientInfo": {"name": "curl", "version": "1.0"}
}
}'
curl -X POST https://cleverutils.com/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
curl -X POST https://cleverutils.com/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "convert_file",
"arguments": {
"file": "https://example.com/photo.heic",
"to_format": "jpg"
}
}
}'
Limits and quotas
- 1000 tool calls per day per IP
- 150 calls per hour per IP
- 1 second cooldown between consecutive calls
- Max 200 MB per file (smaller for some heavy AI tools)
- Max 20 files in one batch (e.g.
merge_pdfs) - 2 hours retention for converted output URLs
- Heavy AI tools (upscale, vocal-remover, colorize, etc.) have a tighter 50/day cap
Same model as the REST API. See /api/rate-limits for full details.
Security & safety
The server is exposed publicly without authentication, so we take security seriously:
- SSRF protection: file URLs are fetched server-side with a strict blocklist of private IP ranges (RFC1918, link-local, AWS metadata, IPv6 ULA). DNS rebinding is mitigated by pinning the resolved IP. Only
http(s)://schemes are allowed. - Size limits: hard cap at 200 MB per fetch, enforced during streaming download (we abort mid-transfer).
- No persistence: all input files and converted outputs are deleted after 2 hours.
- Anonymous logging: we hash caller IPs (salted SHA-256) for rate limiting and abuse detection. Plaintext IPs are never stored.
- Rate limiting: identical 5-tier limiter as our REST API.
What if I'm the LLM, not the human?
If you (the model) are reading this page because the user pasted the URL, you can:
- Suggest the user add the server to their MCP config (snippets above).
- Or, if you have HTTP access already, call
POST https://cleverutils.com/mcpwith the JSON-RPC body shown in the curl examples — this works without MCP client integration. - Always start with
tools/listto discover the current tool catalog and parameter schemas.
See also
- CleverUtils API home — the underlying REST API
- REST API quickstart — for non-LLM use
- REST endpoint reference
- Rate limits
- modelcontextprotocol.io — the MCP spec