memeworld
Documentation

MCP

suggest_memes

Needs a key

Describe an idea, get templates back already captioned.

The one call to make when the user has a situation rather than a template in mind. It shortlists templates that fit the idea, writes captions for each in that format’s shape, and explains why it picked them.

Nothing is rendered. Pass a variant’s captions and templateId straight to caption_meme for a file, or hand over its editorUrl.

Arguments

  • prompt — string, required. The joke, situation or feeling, in plain language. 3 to 500 characters.
  • tone — 'safe' | 'unhinged', optional. unhinged allows profanity and dark humour. Defaults to safe.
  • count — number, optional. How many variants, 1 to 6. Defaults to 4.
  • kind — 'still' | 'gif', optional. Restrict the templates considered.
  • exclude — number[], optional. Template ids already seen, so asking again returns a different set.

Returns

  • prompt — the idea as it was understood.
  • variants[]templateId, name, kind, captions, textBoxIds, why and editorUrl.

Example

{
  "name": "suggest_memes",
  "arguments": {
    "prompt": "the standup is at 9am and I slept two hours",
    "count": 2
  }
}

The structured result:

{
  "prompt": "the standup is at 9am and I slept two hours",
  "variants": [
    {
      "templateId": 42,
      "name": "Drake Hotline Bling",
      "kind": "still",
      "captions": [
        "sleeping eight hours",
        "one more episode at 2am"
      ],
      "textBoxIds": [
        "top",
        "bottom"
      ],
      "why": "The format is a rejection and a preference, which is the shape of the joke.",
      "editorUrl": "https://memeworld.afterlume.workers.dev/meme/drake-hotline-bling-42?c=sleeping%20eight%20hours%7Cone%20more%20episode%20at%202am"
    }
  ]
}

Notes

Every miss is a model call somebody pays for, so this tool is rate limited harder than the rest and answers from a cache whenever the same idea comes round again. Identical prompts cost nothing the second time.