> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.taktoria.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.taktoria.com/_mcp/server.

# Memegen tools

> Memegen's MCP tools and skills: read the feed, draw and post memes, and look after the workspace's template library.

Memegen's MCP server, `https://www.taktoria.com/mcp/<workspace>/memegen` (each workspace has its own), lets an assistant
read the feed, make memes, show them as pictures, and look after the template
library. Every tool acts as the person who connected it (see
[MCP servers](/ai-assistants/mcp-servers)): they make memes as themselves, delete
only their own, and change the shared library only if they are an app admin of
Memegen.

## Roles

What a connection may do follows the person's
[role in Memegen](/getting-started/authentication#app-roles):

* **An app admin** of Memegen (every workspace owner and admin is one) keeps
  the template library (adds, changes, orders, archives and restores
  templates, and sees archived ones and one-off backgrounds) and moderates:
  deletes anybody's meme with `moderate: true`.
* **A member** makes, votes on and deletes their own memes, and adds a
  background for the meme they are making.
* **A viewer** reads the feed and the library as a member would. Their
  connection lists and accepts only the read tools, whatever it was granted: a
  write tool called anyway is refused (`viewer_only`), and the consent page
  offers them only **Read only**. See
  [MCP servers](/ai-assistants/mcp-servers#scopes).

Read tools are listed to every connection; write tools only to one granted
`memegen:write`, and never to a Viewer of Memegen.

## Memes

| Tool             | Access | What it does                                                                                                                                     |
| ---------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `list_memes`     | read   | The feed: `sort: new` (Recent) or `top` (Popular, with a `window`), by words, your own, an author or a template; paged by `cursor`               |
| `get_meme`       | read   | One meme: captions, layout, template, author, score, whether you upvoted it, its page's `url`                                                    |
| `get_meme_image` | read   | The meme drawn as a PNG, returned as MCP image content (base64, at most 1MB; `small` is 512px, `large` up to 1024px), with its details and `url` |
| `preview_meme`   | read   | Draw a meme from a template and captions as a PNG, without posting it, by the same rules as `create_meme`                                        |
| `create_meme`    | write  | Post a meme as the person: a template and its captions                                                                                           |
| `vote_meme`      | write  | Upvote (`vote: true`) or take the upvote back; idempotent                                                                                        |
| `delete_meme`    | write  | Delete the person's own meme; an app admin deletes anybody's with `moderate: true`                                                               |

Captions go one per box, in the layout's order. Each is one line of up to 140
characters, drawn in capitals, and at least one needs words. Layouts:
`CAPTION` holds one caption, `TOP_BOTTOM` two (top, bottom), `THREE_PANEL`
three, `SPLIT` two side by side. `lines` (1 to 3) or `layout` changes the count
for one meme without touching the template. A template an app admin took out of the
picker (archived) cannot start a new meme, even by its id; memes already made
from it stay. A one-off background can be used by id.

## Templates

| Tool                     | Access | Who        | What it does                                                                                                  |
| ------------------------ | ------ | ---------- | ------------------------------------------------------------------------------------------------------------- |
| `list_templates`         | read   | anybody    | The library, in the picker's order; archived templates and one-off backgrounds for an app admin only          |
| `get_template`           | read   | anybody    | One template                                                                                                  |
| `search_template_images` | read   | anybody    | Search memegen.link's catalogue of well-known formats; adds nothing                                           |
| `add_template_from_url`  | write  | anybody    | A background from an http or https address; `curate: true` (into the library) is an app admin's               |
| `import_template`        | write  | anybody    | A `search_template_images` result as a template; `curate: true` is an app admin's                             |
| `upload_template`        | write  | anybody    | A picture as plain base64 with its type (PNG, JPEG, WebP or GIF, up to 8MB); `curate: true` is an app admin's |
| `create_template`        | write  | app admins | Add to the library by name and address; a picture already in the workspace is promoted and renamed            |
| `update_template`        | write  | app admins | Change a template's name, slug, layout, credit, source link, place, or whether it is in the library           |
| `remove_template`        | write  | app admins | Take a template out of the picker (archived, never deleted)                                                   |
| `restore_template`       | write  | app admins | Put it back                                                                                                   |
| `delete_template`        | write  | app admins | Delete for good: refused for a built-in and for one memes were made from                                      |
| `reorder_templates`      | write  | app admins | Set the picker's order                                                                                        |

`curate: false`, the default, adds a background for the meme being made, which
anybody may do; it stays out of the shared library. Adding the same address or
format again returns the template already there; if an app admin took it out of
the picker, only an app admin gets it back (it is restored), and anybody else is
refused ("not allowed": an admin removed this template). An upload is always a new
picture. Picture addresses and
source links are http or https only: `data:` and `javascript:` addresses are
refused, and an upload is sent as base64 bytes, never as a `data:` URL.

Every server also has `whoami`, `search`, `find_people` and `find_teams`
(see [MCP servers](/ai-assistants/mcp-servers)): `find_people` gives the user
id `list_memes` filters by author with (`authorId`).

## Skills

The server also offers skills (see [Skills](/ai-assistants/mcp-servers#skills)):
guides that tell an assistant how to do a whole job with these tools, read
through the Skills extension, as `skill://memegen/<name>/SKILL.md` resources,
or as prompts of the same name. A write skill is offered only to a connection
with `memegen:write`.

| Skill                | Access | Argument           | What it is for                                                                                                                                                              |
| -------------------- | ------ | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `find-anything`      | read   | `request`          | Searching Memegen well with `search`                                                                                                                                        |
| `whats-popular`      | read   | `window`           | Summarise the feed and Popular over a time window, showing the favourites as pictures                                                                                       |
| `make-a-meme`        | write  | `occasion`         | Pick a template, write captions that fit, preview it with `preview_meme`, and post only once the person agrees, keeping it work-friendly                                    |
| `curate-the-library` | write  | `goal`             | For app admins: review the library, suggest additions and removals, and make the agreed changes, including the picker's order                                               |
| `moderate-the-feed`  | write  | `since`, `concern` | For app admins: review recent memes, propose what to take down and why, and delete only what the admin confirms, with a moderation guide (`references/moderation-guide.md`) |

`make-a-meme` carries a caption guide beside its `SKILL.md`, at
`skill://memegen/make-a-meme/references/caption-guide.md`: the layouts and
what makes a caption land.

## Refusals

A tool that cannot do what was asked returns a tool error in plain English:
a meme or template that is not in the workspace is "not found", somebody else's
meme or a library change by somebody who is not an app admin is "not allowed",
captions with no words, a template taken out of the picker, or an address
that is not http or https are "not valid", and deleting a template memes were
made from "conflicts".