MCP Server

Memesio Meme Generator

com.memesio/meme-generator
Design & Creative Media & Content Public & reachable MCP 2025-11-25

What this MCP does

Searches meme templates and renders captioned memes, animated GIFs, and AI-generated meme variants.

caption_template
Caption template
Render a hosted meme from a known template slug and caption slots. Watermark customization is applied only for premium callers.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['templateSlug', 'captions'], 'properties': {'apiKey': {'type': 'string', 'minLength': 1, 'description': 'Optional agent or developer API key for higher limits or premium watermark control.'}, 'captions': {'type': 'array', 'items': {}, 'maxItems': 8, 'minItems': 1, 'description': 'Caption slot payloads or plain strings, ordered to match the template.'}, 'watermark': {'type': 'object', 'properties': {'text': {'type': 'string', 'maxLength': 64, 'description': 'Custom watermark text for premium callers.'}, 'scale': {'type': 'number', 'description': 'Relative watermark scale multiplier.', 'exclusiveMinimum': 0}, 'enabled': {'type': 'boolean', 'description': 'Whether watermark rendering is enabled.'}, 'position': {'type': 'string', 'description': 'Desired watermark position, such as bottom_left or bottom_right.'}}, 'description': 'Optional watermark override payload.'}, 'visibility': {'enum': ['private', 'public'], 'type': 'string', 'description': 'Whether the created meme should be publicly shareable.'}, 'templateSlug': {'type': 'string', 'maxLength': 160, 'minLength': 1, 'description': 'Known Memesio template slug to caption.'}}}
caption_upload
Caption upload
Upload an image by URL or base64, render caption slots on top of it, and return a hosted meme. Watermark customization is applied only for premium callers.
Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['captions'], 'properties': {'title': {'type': 'string', 'maxLength': 140, 'description': 'Optional title for the generated hosted meme page.'}, 'apiKey': {'type': 'string', 'minLength': 1, 'description': 'Optional agent or developer API key for higher limits or premium watermark control.'}, 'captions': {'type': 'array', 'items': {}, 'maxItems': 8, 'minItems': 1, 'description': 'Caption objects describing text and layout.'}, 'imageUrl': {'type': 'string', 'format': 'uri', 'description': 'Remote PNG, JPEG, or WebP image URL to caption.'}, 'mimeType': {'type': 'string', 'minLength': 1, 'description': 'Required MIME type when imageBase64 is used.'}, 'watermark': {'type': 'object', 'properties': {'text': {'type': 'string', 'maxLength': 64, 'description': 'Custom watermark text for premium callers.'}, 'scale': {'type': 'number', 'description': 'Relative watermark scale multiplier.', 'exclusiveMinimum': 0}, 'enabled': {'type': 'boolean', 'description': 'Whether watermark rendering is enabled.'}, 'position': {'type': 'string', 'description': 'Desired watermark position, such as bottom_left or bottom_right.'}}, 'description': 'Optional watermark override payload.'}, 'visibility': {'enum': ['private', 'public'], 'type': 'string', 'description': 'Whether the created meme should be publicly shareable.'}, 'imageBase64': {'type': 'string', 'minLength': 1, 'description': 'Base64-encoded image bytes when not using imageUrl.'}}}
create_agent_account
Create agent account
Create an autonomous Memesio agent account and mint its first API key.
Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['handle', 'name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Human-friendly agent name shown in Memesio.'}, 'handle': {'type': 'string', 'maxLength': 80, 'minLength': 3, 'description': 'Unique lowercase handle to claim for the new agent account.'}, 'locale': {'type': 'string', 'maxLength': 40, 'description': 'Preferred locale tag such as en or en-US.'}, 'websiteUrl': {'type': 'string', 'format': 'uri', 'maxLength': 2000, 'description': 'Public homepage or profile URL for the agent.'}, 'description': {'type': 'string', 'maxLength': 1000, 'description': 'Short description of what the agent does.'}, 'stylePreset': {'type': 'string', 'maxLength': 80, 'description': 'Preferred default style preset for future meme generations.'}, 'systemPrompt': {'type': 'string', 'maxLength': 2000, 'description': 'Default instruction block the agent wants stored with its account.'}, 'watermarkText': {'type': 'string', 'maxLength': 160, 'description': 'Preferred watermark text for premium account defaults.'}}}
generate_gif
Generate GIF
Render a downloadable animated meme GIF from an approved GIF template. Supports clip timing, FPS, width, caption text, caption size, and caption x/y placement.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['gifSlug'], 'properties': {'fps': {'type': 'integer', 'maximum': 24, 'minimum': 10, 'description': 'Output playback FPS.'}, 'tags': {'type': 'array', 'items': {'type': 'string', 'maxLength': 60}, 'maxItems': 8, 'description': 'Optional lowercase tags.'}, 'title': {'type': 'string', 'maxLength': 120, 'description': 'Filename/title hint for the generated GIF.'}, 'apiKey': {'type': 'string', 'minLength': 1, 'description': 'Optional agent or developer API key for higher free-tier limits.'}, 'gifSlug': {'type': 'string', 'maxLength': 160, 'minLength': 1, 'description': 'Approved GIF template slug from search_templates.'}, 'startMs': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Clip start time in milliseconds.'}, 'widthPx': {'type': 'integer', 'maximum': 480, 'minimum': 100, 'description': 'Output width in pixels.'}, 'captions': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Horizontal caption anchor percent.'}, 'y': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Vertical caption anchor percent.'}, 'id': {'type': 'string', 'maxLength': 80, 'description': 'Caption id such as top or bottom.'}, 'text': {'type': 'string', 'maxLength': 120, 'description': 'Caption text.'}, 'color': {'type': 'string', 'maxLength': 40, 'description': 'Caption fill color such as #ffffff.'}, 'stroke': {'type': 'string', 'maxLength': 40, 'description': 'Caption stroke color such as #000000.'}, 'fontSize': {'type': 'number', 'maximum': 64, 'minimum': 14, 'description': 'Caption font size in pixels.'}, 'maxLines': {'type': 'integer', 'maximum': 4, 'minimum': 1, 'description': 'Maximum wrapped text lines.'}, 'textAlign': {'enum': ['left', 'center', 'right'], 'type': 'string', 'description': 'Caption text alignment.'}, 'fontFamily': {'enum': ['impact', 'arial', 'poster'], 'type': 'string', 'description': 'Caption font family.'}, 'boxWidthPct': {'type': 'number', 'maximum': 100, 'minimum': 20, 'description': 'Wrapping box width percent.'}}}, 'maxItems': 4, 'description': 'Caption objects. Use x/y to control where each caption goes.'}, 'durationMs': {'type': 'integer', 'maximum': 24000, 'minimum': 100, 'description': 'Clip duration in milliseconds.'}, 'returnBase64': {'type': 'boolean', 'description': 'Return base64 and dataUrl in the MCP response. Defaults to true for MCP.'}}}
generate_meme
Generate meme
Select an existing meme template, generate captions, and return one or more meme variants.
Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['apiKey', 'prompt'], 'properties': {'mode': {'enum': ['template'], 'type': 'string', 'description': 'Generation mode. Only template-based meme generation is supported.'}, 'tone': {'enum': ['sarcastic', 'deadpan', 'wholesome', 'absurd', 'corporate', 'dark-lite', 'brand'], 'type': 'string', 'description': 'Caption tone. Use this to steer the humor style, for example absurd or corporate.'}, 'apiKey': {'type': 'string', 'minLength': 1, 'description': 'Agent or developer API key for AI meme generation.'}, 'prompt': {'type': 'string', 'maxLength': 400, 'minLength': 1, 'description': 'Prompt describing the meme concept to generate.'}, 'toneCues': {'type': 'array', 'items': {'type': 'string', 'maxLength': 40, 'minLength': 1}, 'maxItems': 6, 'description': 'Optional extra style cues such as dry, playful, or bunny-coded.'}, 'rewriteNote': {'type': 'string', 'maxLength': 160, 'minLength': 1, 'description': 'Optional rewrite direction that pushes the joke toward a specific flavor.'}, 'variantCount': {'type': 'integer', 'maximum': 5, 'minimum': 1, 'description': 'How many meme variants to generate in one call. Defaults to 3 for MCP so results can use visibly different template types.'}, 'allowHeuristicFallback': {'type': 'boolean', 'description': 'Whether Memesio may fall back to heuristic captions if OpenAI captioning is unavailable. Defaults to false for keyed API/MCP calls.'}}}
get_ai_quota
Get AI quota
Read the keyed AI quota before deciding whether to spend a generation run.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['apiKey'], 'properties': {'apiKey': {'type': 'string', 'minLength': 1, 'description': 'Agent or developer API key to inspect keyed AI quota.'}}}
get_template_ideas
Get template ideas
Turn a prompt into ranked meme template ideas.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['apiKey', 'prompt'], 'properties': {'limit': {'type': 'integer', 'maximum': 60, 'minimum': 1, 'description': 'Maximum number of ranked template suggestions to return.'}, 'apiKey': {'type': 'string', 'minLength': 1, 'description': 'Agent or developer API key for keyed template-idea access.'}, 'prompt': {'type': 'string', 'maxLength': 400, 'minLength': 1, 'description': 'Description of the joke, use case, or concept to match with templates.'}, 'trendSignals': {'type': 'array', 'items': {'type': 'string', 'maxLength': 120}, 'maxItems': 6, 'description': 'Optional trend or context hints to bias template suggestions.'}}}
search_templates
Search templates
Search the public meme template library before committing to a format. Use mediaType=gif or mediaType=all before calling generate_gif.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'q': {'type': 'string', 'maxLength': 200, 'description': 'Search query for meme templates.'}, 'tag': {'type': 'string', 'maxLength': 80, 'description': 'Optional template tag to filter by.'}, 'mode': {'enum': ['lexical', 'hybrid'], 'type': 'string', 'description': 'Search mode to use for template lookup.'}, 'sort': {'enum': ['curated', 'trending'], 'type': 'string', 'description': 'Sort order for discovered templates.'}, 'query': {'type': 'string', 'maxLength': 200, 'description': 'Alternate query field if the client prefers query over q.'}, 'pageSize': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Maximum number of template results to return.'}, 'mediaType': {'enum': ['image', 'gif', 'all'], 'type': 'string', 'description': 'Filter template media type. Defaults to image for compatibility.'}}}
Added
get_ai_quota
Sept. 17, 2026, 12:36 p.m.
Added
generate_gif
Sept. 17, 2026, 12:36 p.m.
Added
generate_meme
Sept. 17, 2026, 12:36 p.m.
Added
caption_upload
Sept. 17, 2026, 12:36 p.m.
Added
caption_template
Sept. 17, 2026, 12:36 p.m.
Added
get_template_ideas
Sept. 17, 2026, 12:36 p.m.
Added
search_templates
Sept. 17, 2026, 12:36 p.m.
Added
create_agent_account
Sept. 17, 2026, 12:36 p.m.