
MCP server for meme generation, template search, caption rendering, and AI meme creation.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Render a hosted meme from a known template slug and caption slots. Watermark customization is applied only for premium callers.
Caption slot payloads or plain strings, ordered to match the template.
Known Memesio template slug to caption.
Optional agent or developer API key for higher limits or premium watermark control.
Optional watermark override payload.
Whether the created meme should be publicly shareable.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Render a hosted meme from a known template slug and caption slots. Watermark customization is applied only for premium callers.
| Argument | Type | Description |
|---|---|---|
| apiKey | string | Optional agent or developer API key for higher limits or premium watermark control. |
| captions* | array | Caption slot payloads or plain strings, ordered to match the template. |
| watermark | object | Optional watermark override payload. |
| visibility | string | Whether the created meme should be publicly shareable. |
| templateSlug* | string | Known Memesio template slug to caption. |
{
"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."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| title | string | Optional title for the generated hosted meme page. |
| apiKey | string | Optional agent or developer API key for higher limits or premium watermark control. |
| captions* | array | Caption objects describing text and layout. |
| imageUrl | string | Remote PNG, JPEG, or WebP image URL to caption. |
| mimeType | string | Required MIME type when imageBase64 is used. |
| watermark | object | Optional watermark override payload. |
| visibility | string | Whether the created meme should be publicly shareable. |
| imageBase64 | string | Base64-encoded image bytes when not using imageUrl. |
{
"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 an autonomous Memesio agent account and mint its first API key.
| Argument | Type | Description |
|---|---|---|
| name* | string | Human-friendly agent name shown in Memesio. |
| handle* | string | Unique lowercase handle to claim for the new agent account. |
| locale | string | Preferred locale tag such as en or en-US. |
| websiteUrl | string | Public homepage or profile URL for the agent. |
| description | string | Short description of what the agent does. |
| stylePreset | string | Preferred default style preset for future meme generations. |
| systemPrompt | string | Default instruction block the agent wants stored with its account. |
| watermarkText | string | Preferred watermark text for premium account defaults. |
{
"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."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| fps | integer | Output playback FPS. |
| tags | array | Optional lowercase tags. |
| title | string | Filename/title hint for the generated GIF. |
| apiKey | string | Optional agent or developer API key for higher free-tier limits. |
| gifSlug* | string | Approved GIF template slug from search_templates. |
| startMs | integer | Clip start time in milliseconds. |
| widthPx | integer | Output width in pixels. |
| captions | array | Caption objects. Use x/y to control where each caption goes. |
| durationMs | integer | Clip duration in milliseconds. |
| returnBase64 | boolean | Return base64 and dataUrl in the MCP response. Defaults to true for MCP. |
Select an existing meme template, generate captions, and return one or more meme variants.
| Argument | Type | Description |
|---|---|---|
| mode | string | Generation mode. Only template-based meme generation is supported. |
| tone | string | Caption tone. Use this to steer the humor style, for example absurd or corporate. |
| apiKey* | string | Agent or developer API key for AI meme generation. |
| prompt* | string | Prompt describing the meme concept to generate. |
| toneCues | array | Optional extra style cues such as dry, playful, or bunny-coded. |
| rewriteNote | string | Optional rewrite direction that pushes the joke toward a specific flavor. |
| variantCount | integer | How many meme variants to generate in one call. Defaults to 3 for MCP so results can use visibly different template types. |
| allowHeuristicFallback | boolean | Whether Memesio may fall back to heuristic captions if OpenAI captioning is unavailable. Defaults to false for keyed API/MCP calls. |
Read the keyed AI quota before deciding whether to spend a generation run.
| Argument | Type | Description |
|---|---|---|
| apiKey* | string | Agent or developer API key to inspect keyed AI quota. |
{
"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."
}
}
}Turn a prompt into ranked meme template ideas.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of ranked template suggestions to return. |
| apiKey* | string | Agent or developer API key for keyed template-idea access. |
| prompt* | string | Description of the joke, use case, or concept to match with templates. |
| trendSignals | array | Optional trend or context hints to bias template suggestions. |
{
"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 the public meme template library before committing to a format. Use mediaType=gif or mediaType=all before calling generate_gif.
| Argument | Type | Description |
|---|---|---|
| q | string | Search query for meme templates. |
| tag | string | Optional template tag to filter by. |
| mode | string | Search mode to use for template lookup. |
| sort | string | Sort order for discovered templates. |
| query | string | Alternate query field if the client prefers query over q. |
| pageSize | integer | Maximum number of template results to return. |
| mediaType | string | Filter template media type. Defaults to image for compatibility. |
{
"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."
}
}
}{
"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."
}
}
}{
"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."
}
}
}