psst. it's free, and there's no API key
584 meme templates behind a free MCP server and HTTP API. Ask your agent for a meme, or build one with a URL.
$ claude mcp add --transport http memegen https://memegen.dev/mcp
the URL is the meme. paste it anywhere that shows images
Emoji shortcodes like :fire: work too.
A remote MCP server with no authentication. Every template comes with a description of what it means and what each line is for, so your agent picks the right one.
https://memegen.dev/mcpRun this once, then ask Claude for a meme.
claude mcp add --transport http memegen https://memegen.dev/mcp
Open Settings → Connectors, choose Add custom connector, and paste the endpoint. Memes then show up in an interactive view right in the chat.
https://memegen.dev/mcp
Add this to ~/.cursor/mcp.json.
{
"mcpServers": {
"memegen": { "url": "https://memegen.dev/mcp" }
}
}Add the server from your terminal.
code --add-mcp '{"name":"memegen","type":"http","url":"https://memegen.dev/mcp"}'Build the binary and run it over stdio. Memes are saved to a local cache, and a new one takes about half a millisecond.
# in a clone of github.com/edenstrom/memegen-rust
cargo build --release
claude mcp add memegen -- "$PWD/target/release/memegen" mcplist_templates0.00Ranked, typo-tolerant search, or page through all 584.
get_template0.00What a template means and what each line is for.
generate_meme0.00Render as PNG, JPG, GIF, WebP or MP4. Returns the image and its URL.
generate_memes0.00Up to 10 at once, so your agent can offer options.
list_fonts0.00From Impact to Comic-style handwriting.
*** THANK YOU, COME AGAIN ***
No SDK needed. Put the text in the path and you get an image back, cached at the edge.
← that's what comes back.
the whole API, honestly
| Route | What it does |
|---|---|
GET /images/{id}/{lines…}.{ext} | Render a meme. ?font= picks a font; ?animate_text=true types the text out (GIF/WebP/MP4) |
POST /images/ | Build a meme URL from JSON |
GET /templates/ | The catalog; ?filter= for ranked search |
GET /templates/{id} | One template, with its line meanings |
GET /fonts/ | Available fonts |
Special characters in the path:
# Download a meme
curl -o meme.png \
https://memegen.dev/images/fry/not_sure_if_bug/or_feature.png# Or let the API encode the text for you
curl https://memegen.dev/images/ \
-H 'Content-Type: application/json' \
-d '{"template_id": "pigeon",
"text": ["Me", "A JSON API", "Is this a meme?"]}'# Drop one into a README or PR
a blink: ~100 ms.
a new meme: about 1
Every chart below renders a new meme, never a cache hit, measured against upstream memegen and memegen-rs on the same machine.
Medians on an 18-core Apple M5 Pro; bars are scaled within each row. memegen-rs renders at the template's own size, so it draws fewer pixels. ¹ No color emoji: draws :fire: as text. ² No animated WebP: returns a single still frame. Run memegen bench --url <server> to reproduce, or read how it was measured.
(and a few you've
never heard of)
$ claude mcp add --transport http memegen https://memegen.dev/mcp