Skip to main content
Glama
t0ster
by t0ster

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+

  • uv

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 sync

MCP 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 generate

  • texts: 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

MEME_GENERATOR_MCP_TEMPLATES_PATH

Custom path to meme templates directory

~/.config/meme-generator-mcp/meme_templates

MEME_GENERATOR_MCP_OUTPUT_PATH

Custom path for generated memes

~/.config/meme-generator-mcp/generated_memes

MEME_GENERATOR_MCP_CONFIGS_PATH

Custom path to meme configs JSON

~/.config/meme-generator-mcp/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 images

  • app/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

x

int

required

X coordinate for text position

y

int

required

Y coordinate for text position

max_width

int

required

Maximum width before text wraps

align

string

"center"

Text alignment: "left", "center", or "right"

font_size

int

40

Font size in pixels

fill

string

"white"

Text color

stroke_fill

string

"black"

Outline color

stroke_width

int

2

Outline width in pixels

License

MIT

Available Tools

2 tools
generate_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
meme_nameYesThe type of meme to generate
textsYesDictionary like {"placeholder_name": "Your text here"}. To skip a placeholder, use an empty string explicitly.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
meme_nameNoOptional: Get info for a specific meme

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 2 tool updates
    • First observedgenerate_meme
    • First observedget_meme_info

TDQS

B3.4/5.0

Scored across 2 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count2/5

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.

Completeness3/5

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

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    A Model Context Protocol server that enables AI models and tools to generate meme images from user prompts using the ImgFlip API.
    17
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to create memes by selecting from a library of templates and rendering captions with proper typesetting.
    AGPL 3.0