fitfilesize-mcp
This server lets you compress PDFs and images to fit upload limits or official form presets and save the results locally.
Compress a single file or up to 10 files at once to fit a size limit like "200KB" or "1.5MB".
Use form presets (e.g., visa photos, Indian exam/bank forms, IRCC, Discord) that define limit, minimum size, and exact pixel dimensions.
Resize images to exact width/height using crop or pad.
Set a minimum size (e.g., "10KB") to pad small JPEGs.
Optionally convert PNG/WebP/TIFF/BMP to JPEG when
jpeg_okis true.Save output beside the original as
<name>.fit.<ext>or to a custom path for a single file.List available form presets and their official rules via
list_forms.Supports PDF, JPEG, PNG, WebP, TIFF, BMP, and HEIC (returns JPEG), up to 50 MB.
Provides form presets for Discord uploads — emoji, profile banners and message attachments — so files can be resized and compressed to meet Discord's size limits and exact pixel dimensions.
FitFileSize MCP server
Let your AI assistant make a PDF or image fit an upload limit, or a form's exact rules, with FitFileSize.
"Make ~/Downloads/signature.jpg fit the IBPS signature rules"
Saved ~/Downloads/signature.fit.jpg for IBPS signature (JPEG, 140 × 60 pixels, 10 KB to 20 KB): 10,240 bytes (10.0 KB), under the 20,000 bytes limit.
Any limit: "get this scan under 300 KB", "this photo under 50 KB".
Form presets: US visa photo (DS-160), Indian e-Visa passport page and photo, IBPS, SBI, RRB, SSC, NEET, JEE Main, CUET and GATE uploads, IRCC documents, and Discord emoji, profile banners and message uploads. The preset sets the size limit, the minimum size and the exact pixels. Ask for
list_formsto see them all.Several files at once: "fit these five documents under 2 MB each".
Keeps as much quality as the limit allows, and saves the result next to the original as
<name>.fit.<ext>. Every file keeps its format (a PNG stays a PNG) unless you say a JPEG is fine; iPhone HEIC photos come back as JPEG.Free, no account, no API key. Files up to 50 MB.
Setup
Needs Node.js 20.10 or newer. Step-by-step setup with copy buttons: fitfilesize.com/claude.html.
Claude Code
claude mcp add fitfilesize -- npx -y fitfilesize-mcpClaude Desktop, Cursor, Windsurf and other clients that use an mcpServers config file:
{
"mcpServers": {
"fitfilesize": {
"command": "npx",
"args": ["-y", "fitfilesize-mcp"]
}
}
}(Claude Desktop: Settings → Developer → Edit Config. Cursor: ~/.cursor/mcp.json.)
VS Code (.vscode/mcp.json):
{
"servers": {
"fitfilesize": { "command": "npx", "args": ["-y", "fitfilesize-mcp"] }
}
}Related MCP server: Formatika MCP
Tools
fit_file
Argument | |
| Full path to the file ( |
| Instead of |
| The upload limit, like |
| Instead of |
| Optional exact pixel size, images only. |
|
|
| Optional smallest size, like |
| Optional. |
| Optional path for the result, with |
list_forms
The form presets, each with its rules and the official source they come from. The list is read from fitfilesize.com/forms.json, so new forms appear without an update; a copy is bundled for when the site cannot be reached.
Privacy
The file is sent to FitFileSize's server over HTTPS, compressed there, and deleted as soon as the result is saved on your computer. Requests name the package and its version (fitfilesize-mcp/0.2.1), nothing about you. Nothing else leaves your machine. See the privacy page. Uploads count against the site's free limit of 30 an hour.
Development
npm install
npm test # the tools through an MCP client, against a stand-in API
npm run build # bundles the form presets from the website's dataFITFILESIZE_API points the server at another API, such as a local one (http://127.0.0.1:8000).
Licence
MIT, see LICENSE. This covers the MCP server in this folder; the rest of the FitFileSize repository is not open source.
Available Tools
2 toolsfit_fileFit files under an upload limitA
Compress a PDF or image (JPEG, PNG, WebP, TIFF, BMP, or an iPhone HEIC photo, which comes back as a JPEG) on this computer so it fits an upload limit, keeping as much quality as the limit allows, and save the result next to the original as ".fit.". Give path for one file or paths for up to 10 that share the same limit. Give either limit (like "200KB" or "1.5MB"; KB and MB are 1000-based, so the file passes a check done either way) or form (a form preset from list_forms, like "ibps-signature" or "us-visa-photo-ds160", which sets the limit, minimum size and exact pixels that form requires). Every file keeps its format unless jpeg_ok is true. Files up to 50 MB are uploaded to fitfilesize.com over HTTPS, compressed there, and deleted from the server as soon as each result is saved. Free, no account.
| Name | Required | Description | Default |
|---|---|---|---|
| fit | No | When width and height change the shape: "crop" to fill (default) or "pad" with white. | |
| form | No | A form preset id or name from list_forms, like "ibps-photo". Use this or `limit`. | |
| path | No | Full path to the file on this computer ("~/" is allowed). Use this or `paths`. | |
| limit | No | Upload limit, like "200KB", "50 KB" or "1.5MB". Use this or `form`. | |
| paths | No | Full paths to several files that share the same limit, up to 10. Use this or `path`. | |
| width | No | Exact width in pixels (images only). | |
| height | No | Exact height in pixels (images only). | |
| output | No | Where to save the result, with `path` only. Defaults to "<name>.fit.<ext>" beside the original. | |
| jpeg_ok | No | Let a PNG, WebP, TIFF or BMP come back as a JPEG when that is what fits. Only if the upload accepts JPEG; by default every file keeps its format. | |
| minimum | No | Smallest allowed size, like "10KB", for forms that set one. A small JPEG is padded up to it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavior: files up to 50 MB are uploaded over HTTPS to fitfilesize.com, compressed remotely, and deleted as soon as each result is saved. It also states that results are saved beside the original as `<name>.fit.<ext>` and that formats are preserved unless `jpeg_ok` is true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and key constraint are front-loaded, followed by parameter-selection guidance and upload behavior. The text is dense but contains no filler, and each clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with no output schema, the description covers the operation, save location, upload handling, format behavior, and parameter alternatives. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning: KB/MB are 1000-based, form presets set limit/minimum/exact pixels, HEIC returns as JPEG, and `jpeg_ok` controls format conversion. It does not document every parameter in depth, but it adds useful semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (compress) and resource (PDF or image), states the goal (fit an upload limit), and identifies the output naming pattern. It also distinguishes itself from the sibling list_forms by pointing there for form presets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly covers the main usage choices: `path` for one file or `paths` for up to 10 sharing a limit, and `limit` versus `form`, with list_forms named for preset discovery. The constraints and alternatives are clear enough that an agent can select the right inputs without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_formsList form presetsARead-only
The upload forms FitFileSize has presets for (visa photos, Indian exam and bank applications, and more), each with its size limit, minimum and pixel size, and the official source of those rules. Pass an id to fit_file as form.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description usefully adds what each returned entry contains (size limit, minimum and pixel size, official source of rules), which goes beyond the annotations. It says nothing about pagination, result count, or how the preset set is maintained, so it is a modest rather than rich addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The content of the listing is stated first and the handoff instruction last, so the most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description carries the burden of describing results, and it does so by enumerating the fields each preset exposes plus the official source. The one omission is that the `id` field itself is only implied by the handoff sentence rather than named as part of each entry.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description still adds cross-tool semantic value by identifying that an id from these results maps to fit_file's `form` parameter, giving the agent a reason to read the output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear resource and scope: the upload form presets FitFileSize supports, with examples (visa photos, Indian exam and bank applications). It also distinguishes this catalog tool from its only sibling by explaining that an id from the results is passed to fit_file as `form`. The verb 'list' is only implied by the title rather than stated in the description, which keeps it just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence 'Pass an id to fit_file as `form`' implies the workflow — call this first to discover a valid form id, then pass it to fit_file — but never states that directly. There is no explicit when-to-use/when-not framing or mention of any alternative beyond fit_file. Adequate but inferential.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.2.0- First observed
fit_file - First observed
list_forms
TDQS
Scored across 2 tools
The two tools have completely distinct purposes: fit_file performs the compression and list_forms only enumerates presets. There is no plausible scenario where an agent would confuse which one to call, and the descriptions even state the relationship (pass a form id from list_forms into fit_file).
Both names use the same snake_case verb_noun convention (fit_file, list_forms) with no mixed styles or casing deviations. The pattern is predictable and readable even for only two tools.
Two tools is minimal, but this is a deliberately narrow single-purpose server (compress a file to a size limit), and each tool clearly earns its place. It is slightly thin in that a size-estimate or verification operation could reasonably exist, but nothing feels padded or missing for the core job.
The core lifecycle is covered: enumerate presets, then compress one or many files by limit or form, with format and output-location behavior documented. Minor gaps exist, such as no way to preview an estimated result size before compressing, no control over the output path, and no programmatic format list.
Maintenance
Related MCP Connectors
- MochifyOAuthapp.mochify
Image and PDF toolkit: convert to AVIF/WebP/JXL, resize, crop, remove backgrounds, optimize PDFs.
Compress PDFs to exact target sizes (82-93% smaller). Tools: compress_pdf, optimize_pdf, inspect_pdf
Split, merge and compress PDF files locally - private by design, no uploads.
125+ browser tools for PDF, Image, Video, Audio, AI, Scanner. Files never leave your device.
Related MCP Servers
- AlicenseAqualityBmaintenanceA local-first PDF tool for merging, splitting, rotating, watermarking, Bates-numbering, cleaning metadata, and counting pages — all operations happen on your machine with no network transmission.1546 npm1MIT

Formatika MCPofficial
AlicenseAqualityBmaintenanceProvides tools to convert, resize, compress, crop, and rotate files (images, audio, video, PDF, archives, and more) through formatika.app, processing files locally and preserving existing files.3836 npmMIT- AlicenseNot gradedqualityBmaintenanceEnables AI agents to analyze, compress, and verify PDFs while preserving text, vectors, and document structure, with configurable presets and target-size limits.1MIT
- AlicenseBqualityCmaintenanceEnables AI agents to convert documents, images, and data files across 50+ format pairs and to run PDF/image operations such as merge, split, compress, rotate, protect, unlock, extract text, and resize or compress images. Files are passed URL-in and returned URL-out (or saved locally in stdio mode), with tools for checking credits and generating Stripe checkout or billing-portal links.1834 PyPIMIT