StockCake
Search millions of CC0 public-domain AI images: previews, dimensions, provenance, license.
Should I use this
Quality & Safety
Findings (1)
- LOWin get_license_info
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"stockcake": {
"url": "https://stockcake.com/api/mcp"
}
}
}Remote endpoints
https://stockcake.com/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (12)
🟢search_images(query, orientation, type, color, mood, ...)
Natural-language search over StockCake's catalog. total_results is the total number of matches across the whole catalog, not just this page. refinements lists exact mood/style values available for this query. Start with a short query; when total_results is small or off-target, retry with fewer keywords or different phrasing.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Short subject, 2–5 words (e.g. 'red vintage rocket'). Long sentences hurt recall: start short, add one qualifier at a time; if results are thin, drop keywords or rephrase."
},
"orientation": {
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
]
},
"type": {
"type": "string",
"enum": [
"photos",
"illustrations",
"digital-art",
"3d"
]
},
"color": {
"description": "Dominant color, e.g. a hex value like #ff0000",
"type": "string",
"maxLength": 30
},
"mood": {
"description": "Exact facet value — pick one from refinements.mood of a previous search_images result",
"type": "string",
"maxLength": 50
},
"style": {
"description": "Exact facet value — pick one from refinements.style of a previous search_images result",
"type": "string",
"maxLength": 50
},
"page": {
"description": "Page number, 1-5",
"type": "integer",
"minimum": 1,
"maximum": 5
},
"limit": {
"description": "Results to return, 1-12 (default 12). Ask for fewer to save tokens.",
"type": "integer",
"minimum": 1,
"maximum": 12
},
"locale": {
"description": "Site locale for the user (default en). Titles and page links are localized; descriptions are English.",
"type": "string",
"enum": [
"en",
"de",
"es",
"fa",
"fr",
"it",
"ja",
"pt"
]
},
"context": {
"type": "string",
"description": "In one sentence, what is the user trying to make or find?"
},
"llm_model": {
"type": "string",
"description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
},
"conversation_id": {
"type": "string",
"description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
}
},
"required": [
"query",
"context",
"llm_model"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"preview_url": {
"type": "string"
},
"page_url": {
"type": "string"
},
"aspect_ratio": {
"type": "string",
"description": "e.g. \"16:9\", \"9:16\", \"1:1\""
},
"dimensions": {
"anyOf": [
{
"type": "object",
"properties": {
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"required": [
"width",
"height"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Full-resolution pixel size; null when unknown"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"id",
"title",
"preview_url",
"page_url",
"aspect_ratio",
"dimensions",
"tags"
],
"additionalProperties": false
}
},
"page": {
"type": "number"
},
"total_results": {
"type": "number"
},
"total_pages": {
"type": "number"
},
"has_more": {
"type": "boolean"
},
"license_note": {
"type": "string"
},
"refinements": {
"description": "Exact mood/style facet values available for this query — pass one back as `mood` / `style` to narrow",
"type": "object",
"properties": {
"mood": {
"type": "array",
"items": {
"type": "string"
}
},
"style": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"mood",
"style"
],
"additionalProperties": false
}
},
"required": [
"results",
"page",
"total_results",
"total_pages",
"has_more",
"license_note"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢find_similar_images(id, page, limit, locale, context, ...)
Find images visually similar to a given StockCake image id (from search_images results). total_results is the number of similar results returned on this page, not a catalog-wide count.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Numeric image id from a previous result"
},
"page": {
"description": "Page number, 1-5",
"type": "integer",
"minimum": 1,
"maximum": 5
},
"limit": {
"description": "Results to return, 1-12 (default 12). Ask for fewer to save tokens.",
"type": "integer",
"minimum": 1,
"maximum": 12
},
"locale": {
"description": "Site locale for the user (default en). Titles and page links are localized; descriptions are English.",
"type": "string",
"enum": [
"en",
"de",
"es",
"fa",
"fr",
"it",
"ja",
"pt"
]
},
"context": {
"type": "string",
"description": "In one sentence, what is the user trying to make or find?"
},
"llm_model": {
"type": "string",
"description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
},
"conversation_id": {
"type": "string",
"description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
}
},
"required": [
"id",
"context",
"llm_model"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"preview_url": {
"type": "string"
},
"page_url": {
"type": "string"
},
"aspect_ratio": {
"type": "string",
"description": "e.g. \"16:9\", \"9:16\", \"1:1\""
},
"dimensions": {
"anyOf": [
{
"type": "object",
"properties": {
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"required": [
"width",
"height"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Full-resolution pixel size; null when unknown"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"id",
"title",
"preview_url",
"page_url",
"aspect_ratio",
"dimensions",
"tags"
],
"additionalProperties": false
}
},
"page": {
"type": "number"
},
"total_results": {
"type": "number"
},
"total_pages": {
"type": "number"
},
"has_more": {
"type": "boolean"
},
"license_note": {
"type": "string"
},
"refinements": {
"description": "Exact mood/style facet values available for this query — pass one back as `mood` / `style` to narrow",
"type": "object",
"properties": {
"mood": {
"type": "array",
"items": {
"type": "string"
}
},
"style": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"mood",
"style"
],
"additionalProperties": false
}
},
"required": [
"results",
"page",
"total_results",
"total_pages",
"has_more",
"license_note"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_image(id, include_preview, locale, context, llm_model, ...)
Fetch one image with full metadata: an inline preview the model can see (unless include_preview is false), real pixel dimensions, AI-generation provenance (prompt, dates, style), license details, and attribution snippets.
Input Schema
{
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 2147483647
},
{
"type": "string",
"minLength": 4,
"maxLength": 64
}
],
"description": "Numeric image id (from search results) or the image's CDN uuid"
},
"include_preview": {
"description": "Default true. Set false to skip the inline preview image and save tokens.",
"type": "boolean"
},
"locale": {
"description": "Site locale for the user (default en). Titles and page links are localized; descriptions are English.",
"type": "string",
"enum": [
"en",
"de",
"es",
"fa",
"fr",
"it",
"ja",
"pt"
]
},
"context": {
"type": "string",
"description": "In one sentence, what is the user trying to make or find?"
},
"llm_model": {
"type": "string",
"description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
},
"conversation_id": {
"type": "string",
"description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
}
},
"required": [
"id",
"context",
"llm_model"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"title": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"dimensions": {
"anyOf": [
{
"type": "object",
"properties": {
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"required": [
"width",
"height"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Full-resolution pixel size; null when unknown"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"provenance": {
"type": "object",
"properties": {
"ai_generated": {
"type": "boolean",
"const": true
},
"prompt": {
"type": [
"string",
"null"
]
},
"style": {
"type": [
"string",
"null"
]
},
"generated_at": {
"type": [
"string",
"null"
]
},
"published_at": {
"type": [
"string",
"null"
]
},
"descriptive_attributes": {
"anyOf": [
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
{
"type": "null"
}
]
}
},
"required": [
"ai_generated",
"prompt",
"style",
"generated_at",
"published_at",
"descriptive_attributes"
],
"additionalProperties": false
},
"license": {
"type": "object",
"properties": {
"license": {
"type": "string"
},
"license_url": {
"type": "string"
},
"public_domain": {
"type": "boolean"
},
"commercial_use": {
"type": "boolean"
},
"attribution_required": {
"type": "boolean"
},
"restrictions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"license",
"license_url",
"public_domain",
"commercial_use",
"attribution_required",
"restrictions"
],
"additionalProperties": false
},
"page_url": {
"type": "string"
},
"preview_url": {
"type": "string"
},
"attribution": {
"type": "object",
"properties": {
"markdown": {
"type": "string"
},
"html": {
"type": "string"
},
"plain": {
"type": "string"
}
},
"required": [
"markdown",
"html",
"plain"
],
"additionalProperties": false
}
},
"required": [
"id",
"title",
"description",
"dimensions",
"tags",
"provenance",
"license",
"page_url",
"preview_url",
"attribution"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_license_info(context, llm_model, conversation_id)
License and usage terms for all StockCake images (site-wide CC0 / public domain).
Input Schema
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "In one sentence, what is the user trying to make or find?"
},
"llm_model": {
"type": "string",
"description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
},
"conversation_id": {
"type": "string",
"description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
}
},
"required": [
"context",
"llm_model"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_account(context, llm_model, conversation_id)
The signed-in user's plan, credit balance (free / subscription / purchased), next resets, download quality and output formats. Requires a free StockCake account (the host will prompt to sign in).
Input Schema
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "In one sentence, what is the user trying to make or find?"
},
"llm_model": {
"type": "string",
"description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
},
"conversation_id": {
"type": "string",
"description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
}
},
"required": [
"context",
"llm_model"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
{
"type": "object",
"properties": {
"plan": {
"type": "string"
},
"tier": {
"type": [
"string",
"null"
]
},
"is_entitled": {
"type": "boolean"
},
"balance": {
"type": "object",
"properties": {
"total": {
"type": "number"
},
"free": {
"type": "number"
},
"subscription": {
"type": "number"
},
"purchased": {
"type": "number"
}
},
"required": [
"total",
"free",
"subscription",
"purchased"
],
"additionalProperties": false
},
"next_reset": {
"type": "object",
"properties": {
"free": {
"type": [
"string",
"null"
]
},
"subscription": {
"type": [
"string",
"null"
]
}
},
"required": [
"free",
"subscription"
],
"additionalProperties": false
},
"max_download_multiplier": {
"type": "number"
},
"formats": {
"type": "array",
"items": {
"type": "string"
}
},
"upgrade_url": {
"type": "string"
}
},
"required": [
"plan",
"tier",
"is_entitled",
"balance",
"next_reset",
"max_download_multiplier",
"formats",
"upgrade_url"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
]
}🟢list_models(kind, context, llm_model, conversation_id)
Image and video models available to generate_image / create_video with the credit price of every tier. Free-credit models are flagged; video is priced per second. Requires a free StockCake account (the host will prompt to sign in).
Input Schema
{
"type": "object",
"properties": {
"kind": {
"description": "Return only one catalog",
"type": "string",
"enum": [
"image",
"video"
]
},
"context": {
"type": "string",
"description": "In one sentence, what is the user trying to make or find?"
},
"llm_model": {
"type": "string",
"description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
},
"conversation_id": {
"type": "string",
"description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
}
},
"required": [
"context",
"llm_model"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
{
"type": "object",
"properties": {
"image": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"provider": {
"type": "string"
},
"description": {
"type": "string"
},
"default": {
"type": "boolean"
},
"free": {
"type": "boolean"
},
"default_tier": {
"type": "string"
},
"tiers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"label": {
"type": "string"
},
"credits": {
"type": "number"
},
"resolution": {
"type": "string"
}
},
"required": [
"key",
"label",
"credits"
],
"additionalProperties": false
}
},
"supports_references": {
"type": "boolean"
},
"max_references": {
"type": "number"
}
},
"required": [
"id",
"name",
"provider",
"description",
"default",
"free",
"default_tier",
"tiers",
"supports_references",
"max_references"
],
"additionalProperties": false
}
},
"video": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"provider": {
"type": "string"
},
"description": {
"type": "string"
},
"default": {
"type": "boolean"
},
"default_tier": {
"type": "string"
},
"tiers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"resolution": {
"type": "string"
},
"audio": {
"type": "boolean"
},
"credits_per_second": {
"type": "number"
}
},
"required": [
"key",
"resolution",
"audio",
"credits_per_second"
],
"additionalProperties": false
}
},
"durations": {
"type": "array",
"items": {
"type": "number"
}
},
"default_duration": {
"type": "number"
},
"image_to_video": {
"type": "boolean"
},
"aspect_ratios": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"provider",
"description",
"default",
"default_tier",
"tiers",
"durations",
"default_duration",
"image_to_video",
"aspect_ratios"
],
"additionalProperties": false
}
}
},
"additionalProperties": false
},
{
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
]
}🟢generate_image(prompt, model, tier, aspect_ratio, reference_images, ...)
Generate a new image from a prompt with one of StockCake's AI models (list_models). Charges credits; free credits cover the free models. Waits up to 45 s — a pending result carries a job_id for get_job. Optional reference images guide the composition (plan-capped). Requires a free StockCake account (the host will prompt to sign in).
Input Schema
{
"type": "object",
"properties": {
"prompt": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"model": {
"description": "Model id from list_models. Default: the site default for subscribers, the free model otherwise.",
"type": "string",
"maxLength": 64
},
"tier": {
"description": "Tier key from list_models (e.g. 1k, 2k, standard). Default: the model's default tier.",
"type": "string",
"maxLength": 16
},
"aspect_ratio": {
"type": "string",
"enum": [
"9:16",
"4:5",
"3:4",
"2:3",
"1:1",
"3:2",
"4:3",
"5:4",
"16:9"
]
},
"reference_images": {
"description": "Stock image ids or your own edited image ids used as references",
"maxItems": 9,
"type": "array",
"items": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"minLength": 1,
"maxLength": 64
}
],
"description": "A StockCake image id (from search_images), one of your own edited image ids (from a previous result), or a job_id. Never a URL."
}
},
"context": {
"type": "string",
"description": "In one sentence, what is the user trying to make or find?"
},
"llm_model": {
"type": "string",
"description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
},
"conversation_id": {
"type": "string",
"description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
}
},
"required": [
"prompt",
"context",
"llm_model"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
{
"type": "object",
"properties": {
"job_id": {
"type": "string"
},
"status": {
"type": "string",
"const": "completed"
},
"image": {
"type": "object",
"properties": {
"id": {
"description": "Edited image id — pass it to download_image or as an image reference",
"type": [
"number",
"null"
]
},
"url": {
"type": "string"
}
},
"required": [
"id",
"url"
],
"additionalProperties": false
},
"credits_charged": {
"type": "number"
}
},
"required": [
"job_id",
"status",
"image",
"credits_charged"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"job_id": {
"type": "string"
},
"status": {
"type": "string",
"const": "pending"
},
"credits_charged": {
"type": "number"
},
"message": {
"type": "string"
}
},
"required": [
"job_id",
"status",
"credits_charged",
"message"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
]
}🟢upscale_image(image, scale, context, llm_model, conversation_id)
Upscale a StockCake image or one of your edited images 2x, 4x or 8x (lossless PNG output). Plan quality caps apply; charges credits otherwise. Waits up to 45 s, then returns a job_id for get_job. Requires a free StockCake account (the host will prompt to sign in).
Input Schema
{
"type": "object",
"properties": {
"image": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"minLength": 1,
"maxLength": 64
}
],
"description": "A StockCake image id (from search_images), one of your own edited image ids (from a previous result), or a job_id. Never a URL."
},
"scale": {
"anyOf": [
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 4
},
{
"type": "number",
"const": 8
}
]
},
"context": {
"type": "string",
"description": "In one sentence, what is the user trying to make or find?"
},
"llm_model": {
"type": "string",
"description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
},
"conversation_id": {
"type": "string",
"description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
}
},
"required": [
"image",
"scale",
"context",
"llm_model"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
{
"type": "object",
"properties": {
"job_id": {
"type": "string"
},
"status": {
"type": "string",
"const": "completed"
},
"image": {
"type": "object",
"properties": {
"id": {
"description": "Edited image id — pass it to download_image or as an image reference",
"type": [
"number",
"null"
]
},
"url": {
"type": "string"
}
},
"required": [
"id",
"url"
],
"additionalProperties": false
},
"credits_charged": {
"type": "number"
}
},
"required": [
"job_id",
"status",
"image",
"credits_charged"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"job_id": {
"type": "string"
},
"status": {
"type": "string",
"const": "pending"
},
"credits_charged": {
"type": "number"
},
"message": {
"type": "string"
}
},
"required": [
"job_id",
"status",
"credits_charged",
"message"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
]
}🟡resize_image(image, aspect_ratio, prompt, context, llm_model, ...)
Change an image's aspect ratio by extending the canvas with AI (GPT Image 2.5) — the subject is kept, new area is generated. Charges credits. Waits up to 45 s, then returns a job_id for get_job. Requires a free StockCake account (the host will prompt to sign in).
Input Schema
{
"type": "object",
"properties": {
"image": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"minLength": 1,
"maxLength": 64
}
],
"description": "A StockCake image id (from search_images), one of your own edited image ids (from a previous result), or a job_id. Never a URL."
},
"aspect_ratio": {
"type": "string",
"enum": [
"9:16",
"4:5",
"3:4",
"2:3",
"1:1",
"3:2",
"4:3",
"5:4",
"16:9"
],
"description": "Target ratio"
},
"prompt": {
"type": "string",
"minLength": 1,
"maxLength": 2000,
"description": "What should fill the extended canvas, e.g. 'extend the sandy beach and sky; keep the subject unchanged, do not crop or stretch'"
},
"context": {
"type": "string",
"description": "In one sentence, what is the user trying to make or find?"
},
"llm_model": {
"type": "string",
"description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
},
"conversation_id": {
"type": "string",
"description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
}
},
"required": [
"image",
"aspect_ratio",
"prompt",
"context",
"llm_model"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
{
"type": "object",
"properties": {
"job_id": {
"type": "string"
},
"status": {
"type": "string",
"const": "completed"
},
"image": {
"type": "object",
"properties": {
"id": {
"description": "Edited image id — pass it to download_image or as an image reference",
"type": [
"number",
"null"
]
},
"url": {
"type": "string"
}
},
"required": [
"id",
"url"
],
"additionalProperties": false
},
"credits_charged": {
"type": "number"
}
},
"required": [
"job_id",
"status",
"image",
"credits_charged"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"job_id": {
"type": "string"
},
"status": {
"type": "string",
"const": "pending"
},
"credits_charged": {
"type": "number"
},
"message": {
"type": "string"
}
},
"required": [
"job_id",
"status",
"credits_charged",
"message"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
]
}🟡create_video(prompt, model, tier, duration_seconds, aspect_ratio, ...)
Generate a short video from a prompt and/or a start image with one of StockCake's video models (list_models). Priced per second of output; needs a plan. Video usually takes longer than 45 s: expect a pending result and poll get_job. Requires a free StockCake account (the host will prompt to sign in).
Input Schema
{
"type": "object",
"properties": {
"prompt": {
"description": "Required unless start_image is given",
"type": "string",
"maxLength": 2000
},
"model": {
"description": "Video model id from list_models (default: Veo 3.1 Fast)",
"type": "string",
"maxLength": 64
},
"tier": {
"description": "Tier key from list_models (e.g. 720p, 1080p, 720p-audio)",
"type": "string",
"maxLength": 24
},
"duration_seconds": {
"description": "Clip length; must be one of the model's durations",
"type": "integer",
"minimum": 1,
"maximum": 30
},
"aspect_ratio": {
"description": "Text-to-video only; a start image sets the ratio",
"type": "string",
"enum": [
"9:16",
"4:5",
"3:4",
"2:3",
"1:1",
"3:2",
"4:3",
"5:4",
"16:9"
]
},
"start_image": {
"description": "Animate from this image (stock id or your edited image id)",
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"minLength": 1,
"maxLength": 64
}
]
},
"negative_prompt": {
"type": "string",
"maxLength": 1000
},
"context": {
"type": "string",
"description": "In one sentence, what is the user trying to make or find?"
},
"llm_model": {
"type": "string",
"description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
},
"conversation_id": {
"type": "string",
"description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
}
},
"required": [
"context",
"llm_model"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
{
"type": "object",
"properties": {
"job_id": {
"type": "string"
},
"status": {
"type": "string",
"const": "completed"
},
"video": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"duration_seconds": {
"type": [
"number",
"null"
]
}
},
"required": [
"url",
"duration_seconds"
],
"additionalProperties": false
},
"credits_charged": {
"type": "number"
}
},
"required": [
"job_id",
"status",
"video",
"credits_charged"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"job_id": {
"type": "string"
},
"status": {
"type": "string",
"const": "pending"
},
"credits_charged": {
"type": "number"
},
"message": {
"type": "string"
}
},
"required": [
"job_id",
"status",
"credits_charged",
"message"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
]
}🟢download_image(id, format, context, llm_model, conversation_id)
Full-resolution download link for a StockCake image (CC0) or one of your edited images. Unmetered — no credits. format "png" returns the lossless sibling when one exists (falls back to jpg). Requires a free StockCake account (the host will prompt to sign in).
Input Schema
{
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "Stock image id or your own edited image id"
},
"format": {
"description": "Default jpg (the original)",
"type": "string",
"enum": [
"jpg",
"png"
]
},
"context": {
"type": "string",
"description": "In one sentence, what is the user trying to make or find?"
},
"llm_model": {
"type": "string",
"description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
},
"conversation_id": {
"type": "string",
"description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
}
},
"required": [
"id",
"context",
"llm_model"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
},
"format": {
"type": "string"
},
"dimensions": {
"anyOf": [
{
"type": "object",
"properties": {
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"required": [
"width",
"height"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"license": {
"type": "object",
"properties": {
"license": {
"type": "string"
},
"license_url": {
"type": "string"
},
"public_domain": {
"type": "boolean"
},
"commercial_use": {
"type": "boolean"
},
"attribution_required": {
"type": "boolean"
},
"restrictions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"license",
"license_url",
"public_domain",
"commercial_use",
"attribution_required",
"restrictions"
],
"additionalProperties": false
},
"page_url": {
"type": "string"
}
},
"required": [
"id",
"title",
"url",
"format",
"dimensions",
"license",
"page_url"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
]
}🟢get_job(job_id, context, llm_model, conversation_id)
Status and result of a generate_image / upscale_image / resize_image / create_video job you started (pending, completed with URLs, or error with refund state). Requires a free StockCake account (the host will prompt to sign in).
Input Schema
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"minLength": 8,
"maxLength": 64
},
"context": {
"type": "string",
"description": "In one sentence, what is the user trying to make or find?"
},
"llm_model": {
"type": "string",
"description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
},
"conversation_id": {
"type": "string",
"description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
}
},
"required": [
"job_id",
"context",
"llm_model"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
{
"type": "object",
"properties": {
"job_id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"pending",
"completed",
"error"
]
},
"result": {
"type": "object",
"properties": {
"image_url": {
"type": "string"
},
"video_url": {
"type": "string"
},
"edited_image_id": {
"type": "number"
}
},
"additionalProperties": false
},
"error": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"refunded": {
"type": "boolean"
},
"code": {
"type": "string"
}
},
"required": [
"message",
"refunded"
],
"additionalProperties": false
}
},
"required": [
"job_id",
"status"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
]
}Community
Evidence