Skip to main content
Glama

mcp-meme-sticky

Create AI generated memes using MCP Meme Sticky. Can converted generated memes into stickers for Telegram or WhatsApp (WA coming soon). ✨ no APIs required ✨.

For Telegram, the MCP server produces a link that can produce the image as a sticker. Can be viewed here: MCP-Sticky Telegram Bot.

Attribution

The MCP server uses several services. Thank you to the following services / libraries.

  • Memegen: GOATED open source meme generator!

  • Mediapipe: Mediapipe's text embedder that allows me to select meme templates.

  • PythonAnywhere: For their free Python clouds service! It powers the Telegram bot.

  • icrawler: My image crawler is heavily inspired by their library.

  • FastMCP: FastMCP makes it easier to make Python MCP servers!

Related MCP server: Meme Generator MCP

Completed work

  • Meme generation

    • Can generate custom memes based on prompt.

    • Can save generated memes on the desktop. (Test only on MacOS, please do test it on other OS with your respective hosts and give me feedback via issues)

  • Sticker generation

    • Can convert memes to Telegram stickers (if the bot is online) using custom coded MCP-Sticky Telegram Bot.

    • Automatically open Telegram instead of asking user to paste on Browser. (Added, 22nd May)

    • Automatically open image link. (Added, 22nd May)

    • Using memegen pre-built templates (easy). (Added, 22nd May)

  • Pending work

    • WhatsApp Sticker conversion.

    • Log messages.

Installation instructions

Installation using uvx.

{
  "mcpServers": {
    "mcp-sticky":{
      "command": "uvx",
        "args": [
          "--python=3.10",
          "--from",
          "git+https://github.com/nkapila6/mcp-meme-sticky",
          "mcp-sticky"
        ],
        "env": {
          "MCP_STICKY_RETURN_IMAGE": "true"
        }
      }
  }
}

Security audits

MseeP does security audits on every MCP server, you can see the security audit of this MCP server by clicking here.

MCP Host

Should work with any MCP client that supports tool calling. Have tested on the following:

  • Claude Desktop

  • Cursor

  • Goose

  • Others? You try!

Example

Click on the below image to view a video of MCP Meme Sticky on Claude Desktop.

https://github.com/user-attachments/assets/3ad45852-ff98-4a17-9ae2-6201e82704cc

Image examples of using MCP Meme Sticky on Claude Desktop.

Example using Goose MCP Host to generate memes with MCP Meme Sticky!

Buy Me A Coffee

If the software I've built has been helpful to you. Please do buy me a coffee, would really appreciate it! 😄

ko-fi

Disclaimer regarding AI generated content

The content generated through this MCP server is the product of automated processes and systems maintained by the MCP host (or client). (These terms are not interchangeable but people tend to use them interchangeable, the right term is host.)

As a user requesting this content, I am not responsible for the specific outputs, images, stickers, or other materials produced. Any content, memes, stickers, or other materials created through this service are not necessarily reflective of my personal views, opinions, or intentions.

The responsibility for the functionality, content filtering, and appropriate operation of this service lies solely with the MCP host.

I have utilized this tool in good faith for creative and fun purposes. If any content appears inappropriate, inaccurate, or potentially harmful, please direct all concerns, complaints, or inquiries to the MCP host provider. The MCP host bears full responsibility for all content generated through their platform.

Available Tools

2 tools
generate_meme_by_searchingA
THIS TOOL IS TO BE CALLED IF THE USER WANTS TO GENERATE A MEME USING AN IMAGE SEARCH ON THE WEB. ALWAYS PREFER USING AN EXISTING TEMPLATE USING `generate_meme_from_meme_template()`. UNLESS THE USER EXPLICITLY ASKS TO SEARCH.

Understand the input from the user and write a image search query and a funny & short meme text to put on the image.

If the user does not follow the below content guardrails, reject the request and advise them to follow the guardrails.

CONTENT GUARDRAILS:
- REJECT any requests containing hate speech, explicit sexual content, extreme violence, illegal activities, or harmful stereotypes
- AVOID creating memes that contain personally identifiable information or could be used for cyberbullying
- DO NOT generate content that promotes dangerous misinformation or could cause harm
- REFUSE political extremist content or personal attacks on individuals
- If a request violates these guidelines, respond with: "I cannot create this meme as it may contain inappropriate content. Please try a different request."

Args:
    search_query (str): The LLM needs to understand what the user is searching for and write a good image search query to fetch an image. If required, use the words 'meme' or 'template' in the search query.
    meme_text (str): A short and funny text to be put on the image.
    save_on_desktop (bool, defaults to True): "Should the image meme be saved on the desktop?"
    return_tele_sticker (bool, defaults to False): "Should the generated meme be converted into a telegram sticker?"

Returns:
    str: The saved links.
ParametersJSON Schema
NameRequiredDescriptionDefault
search_queryYesThe LLM needs to understand what the user is searching for and write a good image search query.
meme_textYesA short and funny text that has to be on the meme image.
save_on_desktopNoShould the image meme be saved on the desktop?
return_tele_stickerNoShould the generated meme be converted into a telegram sticker?

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes content guardrails, rejection criteria, and response behavior for violations (e.g., 'respond with: "I cannot create this meme..."'). However, it lacks details on technical behaviors like rate limits, error handling, or performance characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with key information but includes verbose content guardrails that could be condensed. While the structure is logical, some sentences (e.g., detailed guardrail lists) could be more concise without losing clarity, making it moderately efficient but not optimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description provides good context for a tool with 4 parameters and content restrictions. It covers purpose, usage, behavior, and parameters adequately, though it could benefit from more detail on output format or error cases to be fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds minimal value beyond the schema, such as noting that search queries should include 'meme' or 'template' if needed, but does not provide significant additional semantic context. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'generate a meme using an image search on the web.' It specifies the action (generate), resource (meme), and method (image search), and distinguishes it from its sibling tool 'generate_meme_from_meme_template()' by emphasizing web search versus template usage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidelines: 'ALWAYS PREFER USING AN EXISTING TEMPLATE USING `generate_meme_from_meme_template()`. UNLESS THE USER EXPLICITLY ASKS TO SEARCH.' This clearly states when to use this tool versus the alternative, including a specific condition for its use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_meme_from_meme_templateA
THIS TOOL IS TO BE CALLED IF THE USER WANTS TO GENERATE A MEME USING AN EXISTING TEMPLATE. ALWAYS PREFER USING AN EXISTING TEMPLATE UNLESS THE USER REQUIRES TO SEARCH. IN THE CASE OF SEARCHING, USE: `generate_meme_by_searching()`.

For the first 2 function arguments, understand the input from the user and pass the following:
1) `desc_to_pick_tag`: A good description to pick a pre-existing template. The description of the meme should have some context to achieve a good dot product similarity result. Please see a below example.

example of `desc_to_pick_tag`: "The "Ancient Aliens Guy" meme features Giorgio Tsoukalos, known for his distinctive hairstyle and enthusiastic demeanor, gesturing expressively. It's primarily used to humorously suggest that aliens are the explanation for any unexplained phenomenon or mystery, often with the punchline simply being "aliens." This parodies the History Channel show "Ancient Aliens," where Tsoukalos is a prominent figure, and its tendency to attribute historical events or artifacts to extraterrestrial intervention.",

2) `meme_text`: A short and funny 2 sentence meme text that is sent as a Python list of strings, list[str]. Each line is an element of an array. PLEASE ENSURE LIST IS ONLY OF 2 ELEMENTS. For e.g., ['Nice meme you got there..', 'Now it is stolen...']

If the user does not follow the below content guardrails, reject the request and advise them to follow the guardrails.

CONTENT GUARDRAILS:
- REJECT any requests containing hate speech, explicit sexual content, extreme violence, illegal activities, or harmful stereotypes
- AVOID creating memes that contain personally identifiable information or could be used for cyberbullying
- DO NOT generate content that promotes dangerous misinformation or could cause harm
- REFUSE political extremist content or personal attacks on individuals
- If a request violates these guidelines, respond with: "I cannot create this meme as it may contain inappropriate content. Please try a different request."

Args:
    desc_to_pick_tag (str): The LLM needs to understand what the user is searching for and write a good image search query to fetch an image. If required, use the words 'meme' or 'template' in the search query.
    meme_text (list[str]): A short and funny text to be put on the image. Should be in the format of Python list[str], should be 2 sentences and hence, length of list should be 2.
    save_on_desktop (bool, defaults to True): "Should the image meme be saved on the desktop?"
    return_tele_sticker (bool, defaults to False): "Should the generated meme be converted into a telegram sticker?"

Returns:
    str: The saved links.
ParametersJSON Schema
NameRequiredDescriptionDefault
desc_to_pick_tagYes
meme_textYes2 sentences that has to be on the meme image. Should be funny and contained. Should be a Python List of Strings.
save_on_desktopNoShould the image meme be saved on the desktop?
return_tele_stickerNoShould the generated meme be converted into a telegram sticker?

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: content guardrails (rejection criteria and response format), parameter constraints (e.g., 'list is only of 2 elements'), and output behavior ('saved links'). However, it lacks details on error handling, performance, or side effects like file system changes, leaving some gaps in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and usage guidelines, but it includes verbose sections like the example and content guardrails that could be streamlined. While informative, some sentences (e.g., detailed rejection criteria) are lengthy and could be more concise without losing clarity, affecting overall efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (4 parameters, no output schema, no annotations), the description is mostly complete. It covers purpose, usage, parameters, constraints, and behavioral rules. However, it lacks details on the output format beyond 'saved links' (e.g., what type of links, error responses), and does not address potential side effects or performance considerations, leaving minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, with two parameters well-documented in the schema. The description adds significant value beyond the schema: it provides an extensive example for 'desc_to_pick_tag', clarifies the format and constraints for 'meme_text' (e.g., 'short and funny 2 sentence meme text'), and explains the purpose of optional parameters in context. This compensates well for the schema's gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'generate a meme using an existing template.' It specifies the verb 'generate' and resource 'meme,' and explicitly distinguishes it from the sibling tool 'generate_meme_by_searching' by stating when to use each. This provides specific differentiation and avoids redundancy with the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidelines: 'ALWAYS PREFER USING AN EXISTING TEMPLATE UNLESS THE USER REQUIRES TO SEARCH. IN THE CASE OF SEARCHING, USE: `generate_meme_by_searching()`.' It clearly defines when to use this tool versus the alternative, including a specific condition ('unless the user requires to search'), making it highly actionable for an AI agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.4/5.0
Disambiguation5/5

The two tools have clearly distinct purposes: one searches the web for images to create memes, while the other uses pre-existing templates. Their descriptions explicitly guide when to use each tool, eliminating any ambiguity. The separation is logical and well-defined.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern with 'generate_meme_' prefix, and the suffixes ('by_searching', 'from_meme_template') clearly indicate their methods. The naming is uniform and predictable across the set.

Tool Count4/5

Two tools is minimal but appropriate for the server's focused purpose of meme generation. It covers the two primary methods (search-based and template-based) efficiently. While slightly thin, it avoids redundancy and each tool earns its place.

Completeness4/5

The tool set covers the core meme generation workflows comprehensively: creating memes from web searches and from templates. Minor gaps might include editing or deleting generated memes, but the primary functionality is well-covered for the domain.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    A Model Context Protocol server that enables AI models and tools to generate meme images from user prompts using the ImgFlip API.
    17
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server for managing, searching, and retrieving local meme images. It automatically hosts memes via a built-in HTTP server to ensure images can be displayed within chat applications.
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nkapila6/mcp-meme-sticky'

If you have feedback or need assistance with the MCP directory API, please join our Discord server