MCP
suggest_memes
Needs a keyDescribe 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.unhingedallows profanity and dark humour. Defaults tosafe.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,whyandeditorUrl.
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.