MCP server
Connect Claude, Cursor, or any MCP client to ChangeThisFile — 1,000+ supported conversion routes, public discovery, shared developer quotas, and one-time file jobs.
ChangeThisFile ships a remote Model Context Protocol server, listed in the official Claude connectors directory. Discovery and paid-preview jobs are public. General format conversion (convert_file) gives every anonymous caller 25 free conversions per month per network; after that a free verified API key is required (25/month shared across REST + MCP, sent as Authorization: Bearer ctf_sk_...). Each result reports how much of the allowance is used, and the key-required response spells out the two-step signup (POST /v1/keys/free → verification email → key on the dashboard).
| Endpoint | https://changethisfile.com/mcp |
| Transport | Streamable HTTP (POST); negotiates MCP spec 2025-11-25, 2025-06-18 or 2025-03-26 on initialize, and answers server/discover |
| Authentication | Anonymous: 25 conversions/month per network, then a free key is required. Authorization: Bearer ctf_sk_... switches to the per-account developer meter (get a key: POST /v1/keys/free or /dashboard) |
| Claude directory | ChangeThisFile connector (one-click for Claude users) |
| Source (stdio bridge) | github.com/aadilr/changethisfile-mcp |
Connect #
Claude.ai (web) — easiest: install from the Claude connectors directory with one click. Or manually: Settings → Connectors → Add custom connector → paste https://changethisfile.com/mcp.
Claude Code:
claude mcp add --transport http changethisfile https://changethisfile.com/mcpClaude Desktop / Cursor (stdio clients) — add to your MCP config:
{
"mcpServers": {
"changethisfile": {
"command": "npx",
"args": ["-y", "github:aadilr/changethisfile-mcp"],
"env": { "CTF_API_KEY": "ctf_sk_your_key_here" }
}
}
}CTF_API_KEY is read by the external GitHub stdio bridge and forwarded as an Authorization header; it is not a Worker environment binding. It is optional: omit the env block to use the anonymous allowance (25 conversions/month per network); add a verified Free key once that runs out, or to get a per-account allowance that follows you across networks.
Anything else — it is plain JSON-RPC 2.0 over HTTPS:
curl -X POST https://changethisfile.com/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'Tools #
convert_file #
Convert a file and get back a temporary download URL. Pass either source_url or base64_content (+ source_format).
| Argument | Required | Description |
|---|---|---|
target_format | Yes | Target extension, e.g. pdf, mp3, json |
source_url | One of | Publicly accessible URL of the file (preferred for large files) |
base64_content | One of | Base64-encoded file content (≤ 25 MB decoded) |
source_format | With base64 | Source extension; auto-detected from URL/filename otherwise |
filename | No | Filename hint for auto-detection |
curl -X POST https://changethisfile.com/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ctf_sk_your_key_here" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"convert_file","arguments":{"source_url":"https://example.com/report.docx","target_format":"pdf"}}}'The result text contains a signed download URL (valid 1 hour); the converted file itself is deleted within 24 hours.
list_conversions #
List every supported route, optionally filtered by source format:
curl -X POST https://changethisfile.com/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_conversions","arguments":{"source_format":"docx"}}}'File job tools #
Beyond format conversion, the server runs instruction-driven file jobs. Paid jobs execute immediately and return a free preview plus a Stripe checkout link — the full output unlocks after a one-time payment, no account needed. All job tools take source_url or base64_content, plus a filename with extension.
| Tool | Price | What it does |
|---|---|---|
do_file_job | — | Natural-language entry point: describe what you want ("translate this to German", "shrink this under 25MB") and it routes to the right job — or answers honestly when something isn't supported yet. |
translate_file | $4.99 | Translate DOCX / PPTX / XLSX / PDF / TXT / MD / SRT / VTT into any language with layout and formatting preserved (target_language required). Preview: first output pages, free. |
extract_tables | $3.99 | Extract every table from a PDF or image (PNG/JPG/WebP) into a multi-sheet Excel file. Preview: first table, free. |
compress_file | Free | Compress PDF / images / video to an exact target size (target_size_kb required). Fails honestly with the smallest reachable size if the target is impossible. Daily limit applies. |
check_job | Free | Re-check a job by job_id — returns status, preview, payment link, or download URL. |
Long-running jobs return a job_id before completion — poll with check_job. Paid outputs stay downloadable for 7 days; everything else is deleted within 24 hours.
Limits #
| Limit | Value |
|---|---|
Authenticated convert_file | Developer plan account limit (Free: 10/minute and 25/month shared with REST) |
Anonymous convert_file | 25 / calendar month (UTC) per network, then a free key is required; 5 / minute per IP |
| Expensive job tools (anonymous) | 5 / minute per IP |
| Discovery and status calls | 30 / minute per IP |
| Per-type daily job caps | Translation: 10; table extraction: 10; compression: 3 |
| Max input size | 25 MB |
| Download URL validity | 1 hour |
| File retention | Deleted within 24 hours |
Get a verified free API key for 25 conversions/month shared across MCP and REST, or see pricing for production tiers.
Use as an Agent Skill #
For skills-capable agents (Claude Code, Codex CLI, Cursor, Gemini CLI, Copilot, and others), install the file-conversion skill — it uses the MCP tools when connected and falls back to a bundled script over plain HTTPS otherwise:
npx skills add aadilr/changethisfile-mcpClaude Code users can alternatively install the plugin (bundles the MCP server + skill): /plugin marketplace add aadilr/changethisfile-mcp then /plugin install changethisfile@changethisfile.
Troubleshooting #
"Rate limit exceeded" — wait 60 seconds. Authenticated conversion uses your developer plan's shared per-account rate limit.
"Unsupported conversion: X→Y" — the error lists valid targets for your source format; call list_conversions to browse all routes, or see supported formats.
"File too large" — MCP inputs are currently capped at 25 MB even on paid plans. Use the authenticated REST API for larger files.
Download URL returns 410/expired — signed URLs last 1 hour. Re-run the conversion to get a fresh URL.
GET /mcp returns 405 — expected. The server is POST-only (no SSE stream); MCP clients fall back to POST mode automatically.
Tools don't appear in your client — remove and re-add the server (Claude.ai: Settings → Connectors; Claude Code: claude mcp remove changethisfile then re-add). Verify the endpoint responds with the curl tools/list example above.
Conversion fails with a 5xx — transient backend issue; retry once, then check system status or email support@changethisfile.com.