psst. it's free, and there's no API key

Memes for your agent

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

Make one
right now

the URL is the meme. paste it anywhere that shows images

Drakeposting

Emoji shortcodes like :fire: work too.

Meme preview
Open

Give your agent
a sense of humor

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.

Endpointhttps://memegen.dev/mcp

Run this once, then ask Claude for a meme.

claude mcp add --transport http memegen https://memegen.dev/mcp
MCP Apps
Memes you can edit in the chat. In hosts that support MCP Apps, such as Claude, results open in a view where you can change the text, re-render, download, and pick a favorite from a batch.
memegen.devMCP server · tools

list_templates0.00

Ranked, typo-tolerant search, or page through all 584.

get_template0.00

What a template means and what each line is for.

generate_meme0.00

Render as PNG, JPG, GIF, WebP or MP4. Returns the image and its URL.

generate_memes0.00

Up to 10 at once, so your agent can offer options.

list_fonts0.00

From Impact to Comic-style handwriting.


Total$0.00
API keyNot required
Sign-upNope

*** THANK YOU, COME AGAIN ***

Every meme is a URL

No SDK needed. Put the text in the path and you get an image back, cached at the edge.

https://memegen.dev/images/rollsafe/cant_break_prod/if_you_only_ship_memes.png
template ID top line bottom line png, jpg, gif, webp or mp4
Roll Safe meme: can't break prod if you only ship memes

← that's what comes back.
the whole API, honestly

RouteWhat 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:

_space
___
---
~q?
~a&
~p%
~h#
~s/
~nnewline
''"
# 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
![](https://memegen.dev/images/buzz/tests/tests_everywhere.gif)

Done before
you blink

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.

0.5 msto render a new static meme
10,000/snew memes over HTTP from one machine
100×+faster than the Python original, in every case
1 µsto serve a meme that's already cached

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.

So let your
agent do it

$ claude mcp add --transport http memegen https://memegen.dev/mcp
One does not simply make a meme by hand