Meme Generator MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Meme Generator MCPgenerate a drake pointing meme with 'homework' for disapprove and 'memes' for approve"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Meme Generator MCP
An MCP (Model Context Protocol) server that generates memes with custom text overlays. Built with FastMCP and Pillow.
https://github.com/user-attachments/assets/9b8b47f3-ec54-41ed-913c-a2807cbc93d4
Features
Generate memes from pre-configured templates
Customizable text overlays with automatic word wrapping
Extensible configuration for adding custom templates
Related MCP server: Memeboat MCP
Available Memes
See meme_configs.json for the list of available memes and their text placeholders, and meme_templates/ for the template images.
Requirements
Python 3.12+
MCP Configuration
Add the server to your MCP client configuration:
{
"mcpServers": {
"meme-generator": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/t0ster/meme-generator-mcp",
"meme-generator-mcp"
]
}
}
}Local Development
git clone https://github.com/t0ster/meme-generator-mcp.git
cd meme-generator-mcp
uv syncMCP configuration for local development:
{
"mcpServers": {
"meme-generator": {
"command": "uv",
"args": ["run", "meme-generator-mcp", "--dev"]
}
}
}The --dev flag uses local app/meme_templates/ and app/meme_configs.json instead of copying to the config directory.
Tools
get_meme_info
Get information about available memes and their placeholder requirements.
Parameters:
meme_name(optional): Get info for a specific meme
Example:
{
"meme_name": "drake_pointing"
}generate_meme
Generate a meme with custom text overlays.
Parameters:
meme_name: The type of meme to generatetexts: Dictionary mapping placeholder names to text values
Example:
{
"meme_name": "drake_pointing",
"texts": {
"disapprove": "Writing documentation",
"approve": "Generating memes"
}
}Generated memes are saved to ~/.config/meme-generator-mcp/generated_memes/ by default (customizable via MEME_GENERATOR_MCP_OUTPUT_PATH).
Environment Variables
Variable | Description | Default |
| Custom path to meme templates directory |
|
| Custom path for generated memes |
|
| Custom path to meme configs JSON |
|
On Windows, the default config directory is %LOCALAPPDATA%\meme-generator-mcp.
Adding Custom Memes
For personal use: Edit files in your config directory:
~/.config/meme-generator-mcp/meme_templates/- add template images~/.config/meme-generator-mcp/meme_configs.json- add meme configurations
For contributing (dev mode): Edit files in the repo:
app/meme_templates/- add template imagesapp/meme_configs.json- add meme configurations
Configuration example:
{
"my_custom_meme": {
"template_file": "my_template.jpg",
"placeholders": {
"top_text": {
"x": 300,
"y": 20,
"max_width": 500,
"align": "center",
"font_size": 40,
"fill": "white",
"stroke_fill": "black",
"stroke_width": 2
}
}
}
}Placeholder Options
Option | Type | Default | Description |
| int | required | X coordinate for text position |
| int | required | Y coordinate for text position |
| int | required | Maximum width before text wraps |
| string |
| Text alignment: |
| int |
| Font size in pixels |
| string |
| Text color |
| string |
| Outline color |
| int |
| Outline width in pixels |
License
MIT
Available Tools
2 toolsgenerate_memeA
Generate a meme with custom text overlays.
Each meme type has specific named text placeholders that must be filled. Use the 'get_meme_info' tool to see available memes and their placeholder requirements.
| Name | Required | Description | Default |
|---|---|---|---|
| meme_name | Yes | The type of meme to generate | |
| texts | Yes | Dictionary like {"placeholder_name": "Your text here"}. To skip a placeholder, use an empty string explicitly. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It explains that 'Each meme type has specific named text placeholders that must be filled,' which adds context about required inputs. However, it doesn't describe what the tool returns (e.g., image URL, binary data), error conditions, or performance characteristics like rate limits or processing time.
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 description is appropriately sized and front-loaded: the first sentence states the core purpose, and the second provides essential usage guidance. Every sentence earns its place by adding critical information without redundancy or fluff.
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?
Given the tool has an output schema (which handles return values), 100% schema coverage, and no annotations, the description is reasonably complete. It covers the purpose, workflow dependency, and input constraints. However, for a creation tool with no annotations, it could better address behavioral aspects like what happens on success/failure or response format hints.
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 description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds some value by explaining that 'texts' is a 'Dictionary like {"placeholder_name": "Your text here"}' and mentions placeholder requirements, but this largely reiterates schema information. It doesn't provide additional syntax or format details beyond what the schema specifies.
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 clearly states the tool's purpose: 'Generate a meme with custom text overlays.' It specifies the verb ('Generate') and resource ('meme'), and distinguishes it from its sibling 'get_meme_info' by focusing on creation rather than information retrieval. However, it doesn't explicitly differentiate beyond the functional contrast implied by the sibling tool name.
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 description provides explicit guidance on when to use this tool versus alternatives: it directs users to 'Use the 'get_meme_info' tool to see available memes and their placeholder requirements' before invoking this tool. This creates a clear workflow dependency and distinguishes it from the sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_meme_infoC
Get information about available memes and their text placeholder requirements.
| Name | Required | Description | Default |
|---|---|---|---|
| meme_name | No | Optional: Get info for a specific meme |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While it indicates this is a read operation ('Get information'), it doesn't address important behavioral aspects like whether this requires authentication, rate limits, pagination for multiple memes, error conditions, or what happens when meme_name is null. The description is minimal and leaves significant behavioral questions unanswered.
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 description is a single, clear sentence that efficiently communicates the core purpose. There's no wasted language or unnecessary elaboration. However, it could be slightly more front-loaded by explicitly stating this is for retrieving metadata rather than generating content, which would better distinguish it from the sibling tool.
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?
Given that there's an output schema (which handles return values), a single optional parameter with full schema coverage, and no annotations, the description is minimally adequate. However, for a tool that presumably returns structured information about memes (including their text placeholder requirements), the description could better explain the scope of information returned and how it relates to the sibling 'generate_meme' tool.
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 input schema has 100% description coverage, with the single parameter 'meme_name' documented as 'Optional: Get info for a specific meme'. The description adds no additional parameter semantics beyond what's already in the schema. It mentions 'text placeholder requirements' which relates to output rather than input parameters. With complete schema coverage, the baseline score of 3 is appropriate.
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 clearly states the tool's purpose: 'Get information about available memes and their text placeholder requirements.' It specifies the verb ('Get information') and resource ('memes'), and mentions the type of information returned (text placeholder requirements). However, it doesn't explicitly differentiate from its sibling tool 'generate_meme' beyond the general 'get info' vs 'generate' distinction.
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 description provides no guidance on when to use this tool versus its sibling 'generate_meme'. It doesn't mention prerequisites, alternative approaches, or contextual factors that would help an agent decide between retrieving meme information versus generating a meme. The only implied usage is when information about memes is needed, but this is too vague for effective tool selection.
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
- First observed
generate_meme - First observed
get_meme_info
TDQS
Scored across 2 tools
The two tools have completely distinct purposes: one generates memes while the other provides metadata about available memes. There is no overlap in functionality, and the descriptions clearly differentiate their roles.
Both tools follow a consistent verb_noun naming pattern (generate_meme, get_meme_info) with clear, descriptive names that indicate their specific actions. The naming convention is uniform across all tools.
With only 2 tools, the server feels under-scoped for a meme generation domain. While the tools cover the basic workflow (discover memes then generate), there are likely missing operations like listing meme categories, managing templates, or editing existing memes that would enhance completeness.
The tools cover the core discovery-to-generation workflow adequately, but there are notable gaps. Missing operations might include updating or deleting generated memes, searching/filtering memes by category, or managing user-created templates, which could limit agent capabilities in extended scenarios.
Maintenance
Related MCP Connectors
Search 25,000+ meme templates and create shareable memes on memebo.at. Free, anonymous, no API key.
Imgflip MCP — wraps Imgflip API (free, no auth for template listing)
Look up meme template images by name or description, with disambiguation for ambiguous names.
MCP server for meme generation, template search, caption rendering, and AI meme creation.
Related MCP Servers
- AlicenseBqualityCmaintenanceA Model Context Protocol server that enables AI models and tools to generate meme images from user prompts using the ImgFlip API.17Apache 2.0

Memeboat MCPofficial
AlicenseAqualityAmaintenanceSearch 25,000+ meme templates and create shareable memes directly from your AI assistant.372 npm1MIT- AlicenseNot gradedqualityBmaintenanceEnables AI agents to create memes by selecting from a library of templates and rendering captions with proper typesetting.AGPL 3.0
- AlicenseAqualityAmaintenanceMCP server for generating memes via the Imgflip API. It allows AI assistants to browse meme templates, caption them, and return the resulting image directly in the conversation.230 npm2MIT