Herofab MCP server
Herofab's MCP server gives AI assistants the published product-image rules of 98 marketplaces, shop platforms and ad platforms, each read from the platform's own help page and dated. The server is read-only and needs no account or key. The image itself is never sent: the assistant sends only a platform name and, for a check, the image's measurements.
- Server URL
https://app.herofab.app/mcp- Transport
- Streamable HTTP, stateless (POST only)
- Authentication
- None
- Tools
get_image_requirements,check_image_spec(both read-only)- Privacy
- Privacy notice: AI assistants
- Support
- support@herofab.app
What the server does
An assistant connected to the server can look up a platform's image requirements (image size, aspect ratio, file size, accepted formats, main-image background and product fill) and check an image's measurements against them. get_image_requirements names the official source page and the day Herofab read it, and both tools link to Herofab's guide for the platform.
The server does not generate, edit or receive images, and it does not write any data. A passing check means that no checked rule failed, not that a platform will accept a listing. Platforms change their rules; the official page each answer links to is authoritative.
Tools
Both tools are read-only (readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false). Each successful result is returned as structured content and as the same JSON in a text block.
get_image_requirements
Official product-image rules of a marketplace or ad platform, each read from the platform's own help page, with the source and the day it was read. Without a platform, it lists every platform.
| Argument | Type | Required | Meaning |
|---|---|---|---|
platform | string | no | Platform key, for example amazon, ebay, etsy, shopify, google-shopping, zalando. Omit it to list every platform. |
Without a platform the result is platforms: a list of key, name and kind (marketplace, or specs for ad platforms and other image specifications).
With a platform the result holds:
platform,name,kindandsummary, a one-line summary of the size rules.rules: the rules as pairs of rule name and text, as published in the guide.limits:min_side_px,min_long_side_px,max_side_px,min_width_px,min_height_px,exact_width_px,exact_height_px,aspect_ratio,max_megapixels,max_file_mb,formatsandzoom_min_side_px. Anullvalue means that the platform publishes no such limit, not that anything is allowed.main_image:background,fill_min,fill_max,fill_about,whole_product,no_shadow,square,crop_safe,recommended_only,applies_toandsource_url;nullwhen the platform publishes no main-image rule.guide_url(Herofab's guide),source_url(the platform's own page) andchecked(the day that page was read, YYYY-MM-DD).
check_image_spec
Checks an image's width, height, format and file size, and its declared main-image background and product fill, against a platform's published rules.
| Argument | Type | Required | Meaning |
|---|---|---|---|
platform | string | yes | Platform key (see get_image_requirements). |
width | integer | yes | Image width in pixels, 1 to 100,000. |
height | integer | yes | Image height in pixels, 1 to 100,000. |
format | string | yes | One of jpeg, jpg, png, gif, webp, tiff, tif, bmp, heic, avif, svg. |
file_size_bytes | integer | no | File size in bytes. Without it, the file size limit is not checked. |
background | string | no | Main-image background as seen in the photo: pure-white (RGB 255), white (off-white), light (light grey or neutral), coloured (plain colour), busy (scene or texture), transparent. |
product_fill | number | no | Share of the frame the product covers on its longest axis, 0 to 1 (0.85 = 85%). |
The result holds platform, name, pass (true when no checked rule fails), three lists of rule and message (fails, notes and not_checked), guide_url and fix_url. fix_url is null when nothing fails. When a main-image rule fails, it points to the Herofab app. When only measurements fail, it points to Herofab's free compressor for that platform (file size only) or its free resizer (size, aspect ratio or format), where the platform has one, and otherwise to the app.
What is not checked. The tool works from the values it receives, not from the photo, so:
- Rules that need the photo itself are listed under
not_checked: the whole product in the frame with nothing cut off, no shadow around the product, and room for square, portrait and landscape crops. - Background and product fill are checked only as declared. Without
backgroundorproduct_fill, those rules are listed undernot_checked; product fill is not checked on abusybackground. - Without
file_size_bytes, a platform's file size limit is listed undernot_checked. - For a platform that publishes no size, file or format limit,
not_checkedsays so instead of a size check. - Rules about what the image shows, such as text, logos or watermarks, are returned as text by
get_image_requirementsand are not checked.
Herofab links in results (guide_url, fix_url) carry utm_source=mcp, utm_medium=agent and the tool name as utm_campaign. Links to the platforms' own pages are not tagged.
Supported platforms
The server covers 98 platforms: 76 marketplaces and shop platforms, such as Amazon, eBay, Etsy, Walmart, Zalando, Shopify, Google Shopping and TikTok Shop, and 22 ad platforms and other image specifications, such as Google Ads, TikTok ads and Amazon A+ Content. get_image_requirements without arguments returns every key. The same rules are published on herofab.app:
- Marketplace image rules compared: the marketplaces side by side, with official sources, also as JSON and CSV.
- Marketplace guides: one page per platform, with the full rules and the official source.
- AI image rules by platform: what each platform says about AI-generated images.
Add it to an assistant
The server URL is the same in every client: https://app.herofab.app/mcp. No sign-in is needed.
Claude
- Open Customize → Connectors on claude.ai and choose Add custom connector.
- Enter
https://app.herofab.app/mcpas the URL and choose Add. - In a chat, turn the connector on from + → Connectors.
Claude Code
claude mcp add --transport http herofab https://app.herofab.app/mcp
Cursor
In ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):
{
"mcpServers": {
"herofab": {
"url": "https://app.herofab.app/mcp"
}
}
}
VS Code
In .vscode/mcp.json:
{
"servers": {
"herofab": {
"type": "http",
"url": "https://app.herofab.app/mcp"
}
}
}
ChatGPT
ChatGPT connects to remote MCP servers in developer mode, on the plans where OpenAI offers it. At the time of writing, developer mode is turned on under Settings → Apps & Connectors → Advanced settings → Developer mode; a connector is then created with the server URL above and no authentication. ChatGPT's menu names change from time to time, and OpenAI's help center describes the current steps.
Other MCP clients
Any client that supports Streamable HTTP connects with the same URL. Supported protocol versions: 2025-11-25, 2025-06-18 and 2025-03-26. To list the tools from a terminal with MCP Inspector:
npx @modelcontextprotocol/inspector --cli https://app.herofab.app/mcp --transport http --method tools/list
Example prompts
- "What are Amazon's main image requirements?"
get_image_requirementsreturns Amazon's rules with the source page and the day it was read. - "Is an 800 × 800 px JPEG fine for Amazon?"
check_image_specpasses the size rules, notes that zoom needs more than 1,000 px per side, and lists the background, product fill and whole-product rules as not checked. - "Is a 1200 × 1500 px JPEG OK for Zalando?"
check_image_specfails the image because its aspect ratio is not 1:1.44.
Limits and errors
- 60 requests per minute per client network. Requests from Anthropic's published outbound address range (160.79.104.0/21), through which Claude's connector calls arrive, share one limit of 300 requests per minute. Above the limit the server answers HTTP 429 with a
Retry-Afterheader in seconds. - Request bodies up to 16 KB; a larger body gets HTTP 413.
- One JSON-RPC message per POST: no batch requests, no sessions and no server-sent stream. GET and DELETE get HTTP 405.
- No image upload: the tools accept only the arguments listed above.
- An invalid argument returns a tool result marked
isErrorwith a sentence that says how to correct it, for exampleUnknown platform "amazn". Call get_image_requirements without arguments for the list of keys.An unknown tool name returns JSON-RPC error -32602.
Privacy
The server receives only the fields an assistant sends: a platform name and, for a check, an image's width, height, format and file size and a description of its background and product fill. Apart from the platform name, these values are not stored. Each call writes one anonymous log line with the tool name, the platform, the result and the response time, which contains no IP address and no personal data. Rate limits count requests per keyed hash of the network address, held in memory only. The general server logs described in the privacy notice apply to these requests as to any other. The conversation with the assistant is processed by the assistant's provider under its own privacy terms. Details: privacy notice, AI assistants.
For API customers: the studio server
A separate MCP server, https://app.herofab.app/mcp/studio, runs Herofab's image tools with a workspace's own API key and credits. It is not part of the public server described above: the public server at /mcp offers no image generation, even when a key is sent.
- Server URL
https://app.herofab.app/mcp/studio- Authentication
Authorization: Bearer hf_sk_live_…, an API key created in the Herofab app under Settings, API keys- Server name
herofab-studio- Credits
generate_imagespends the workspace's credits
| Tool | Key scope | What it does |
|---|---|---|
list_studio_tools | any key | Herofab's image tools with their credit cost, image inputs and settings. |
generate_image | jobs:write | Spends credits. Starts one image job from a product photo at a public http(s) address (JPEG, PNG or WebP, up to 25 MB) and reserves the tool's credit cost. idempotency_key is required: a new value for each new image, the same value when retrying the same request. A repeated key with the same request returns the first job and charges nothing again; the same key with a different image, tool or settings is refused with idempotency_key_reused. The credit balance is checked before the photo is fetched. Returns the job id at once. |
get_job | jobs:read | Status of a job. When it has succeeded, each image has a short-lived download link; while it is queued or running, poll_after_seconds says when to check again. |
get_credits | billing:read | Available and reserved credits and this period's usage. |
get_image_requirements, check_image_spec | any key | The two rule tools of the public server. |
A tool whose scope the key lacks is not listed; called anyway, it returns an error with a link to create a key with that scope. Rate limits apply per API key, as in the HTTP API. The studio server answers no browser cross-origin requests, so the key stays in desktop and server-side clients. Calls are handled like any other API call (see API and webhooks in the privacy notice); their log line also holds the first eight characters of the key's ID.
Claude Code:
claude mcp add --transport http herofab-studio https://app.herofab.app/mcp/studio --header "Authorization: Bearer hf_sk_live_..."
Cursor (mcp.json):
{
"mcpServers": {
"herofab-studio": {
"url": "https://app.herofab.app/mcp/studio",
"headers": { "Authorization": "Bearer hf_sk_live_..." }
}
}
}
The HTTP API behind these tools, with uploads, batches and signed webhooks, is described on the API page.
Support
Questions about the MCP servers, errors and corrections to rule data go to support@herofab.app. For a rule correction, include the platform and the official page.
- Support
- support@herofab.app
- Contact
- herofab.app/contact
- Privacy notice
- herofab.app/privacy
- Terms of service
- herofab.app/terms