Visual search for memes, infographics and charts — by meaning, OCR text, or image similarity.
ai.memestack/mcp — Model Context Protocol (MCP) Server
The ai.memestack/mcp MCP server provides tools to search and browse a curated gallery of memes, infographics, and visual content. It supports exploration of this visual catalog through MCP-integrated capabilities, with a toolset count of 20.
🛠️ Key Features
Search a curated gallery of memes, infographics, and visual content
Browse visual items from the curated collection
20 tools available in the server
🚀 Use Cases
Finding specific memes or infographic visuals in a curated gallery
Browsing visual content collections for reference or exploration
⚡ Developer Benefits
Access curated meme/infographic content via 20 MCP tools
Consistent integration through MCP for search and browsing workflows
⚠️ Limitations
Scope appears limited to the curated gallery of memes, infographics, and visual content (no other content types described)
Captured live from the server via tools/list.
search_images
Search the MemeStack image gallery. Runs semantic AI and keyword matching in parallel and merges results. Returns images with captions, tags, zap stats, and URLs.
Parameters7
query
string
required
Search query — combines semantic AI and keyword matching automatically. Alias: `q` (matches the REST API param name).
q
string
optional
Alias for `query`. Provided so REST-API muscle memory (?q=...) works on the MCP tool too. If both are set, `query` wins.
tag
string
optional
Filter results by a single tag slug (backward compat)
tags
string
optional
Filter results by multiple tag slugs (comma-separated, AND logic — e.g. "bitcoin,meme")
limit
number
optional
Results per page (1-50, default 10)
offset
number
optional
Pagination offset (default 0)
sort
string
optional
Sort order (default: relevance)
Raw schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query — combines semantic AI and keyword matching automatically. Alias: `q` (matches the REST API param name)."
},
"q": {
"type": "string",
"description": "Alias for `query`. Provided so REST-API muscle memory (?q=...) works on the MCP tool too. If both are set, `query` wins."
},
"tag": {
"type": "string",
"description": "Filter results by a single tag slug (backward compat)"
},
"tags": {
"type": "string",
"description": "Filter results by multiple tag slugs (comma-separated, AND logic — e.g. \"bitcoin,meme\")"
},
"limit": {
"type": "number",
"description": "Results per page (1-50, default 10)"
},
"offset": {
"type": "number",
"description": "Pagination offset (default 0)"
},
"sort": {
"type": "string",
"enum": [
"newest",
"popular",
"oldest"
],
"description": "Sort order (default: relevance)"
}
},
"required": [
"query"
]
}
get_image
Get full metadata for a specific image by ID, including caption, alt text, tags, OCR text, zap stats, and URLs.
Get all variants of a meme template tracked on MemeStack. Returns the dominant image plus every variant in the same mutation group, with citation blocks for each. Use this to research how a meme has evolved or to find variants of a known image.
Search for images by the text written or printed in them (OCR). Different from regular search — only matches the text_in_image field, not captions or tags. Use this to find screenshots of specific quotes, signs, watermarks, or memes with specific embedded text.
Find a meme that captures a vibe, idea, or concept. Returns ready-to-embed images with citation blocks. Use this when writing posts, articles, or social content and you need a meme to illustrate a point.
Parameters2
vibe
string
required
The vibe, topic, or idea you want a meme for
limit
number
optional
How many memes to return (1-20, default 5)
Raw schema
{
"type": "object",
"properties": {
"vibe": {
"type": "string",
"description": "The vibe, topic, or idea you want a meme for"
},
"limit": {
"type": "number",
"description": "How many memes to return (1-20, default 5)"
}
},
"required": [
"vibe"
]
}
popular_tags
List the most-used tags on MemeStack by all-time usage count. (Time-period filtering is not yet supported — tag usage is currently counted across the full lifetime of each tag.)
Suggest tag slugs matching a prefix. Use this to verify a tag exists before filtering by it, or to discover related tags. Prefix must be ≥ 2 characters.
Parameters2
prefix
string
required
Tag prefix to autocomplete (≥ 2 characters), e.g. "bit" → "bitcoin".
Generate canonical attribution blocks for one or more MemeStack images. Returns markdown, HTML, and plain-text citation strings ready to paste into your output, plus a combined block for citing multiple images at once.
Find MemeStack images that look visually similar to a given image. Accepts an HTTPS image URL or a `data:image/...;base64,...` URL for bytes pasted into agent context. Returns visually-similar matches via perceptual-hash (dHash) hamming distance, with citation blocks. Heavily rate-limited (10/min/IP) since each call hashes the input.
Parameters2
url
string
required
HTTPS image URL, or data:image/(jpeg|png|webp);base64,... URL
Submit an image to the MemeStack review queue. Paid tool — 100 sats (or USDC equivalent) per submission via the agent payment rails (x402/L402); no account or API key. IMPORTANT: there is NO refund if moderation rejects the submission (duplicate, nsfw/spam, low quality) — the fee is the anti-spam mechanism. Accepted images await human review before publication. Accepts an HTTPS image URL or a data:image/...;base64 URL (JPEG/PNG/WebP, max 8MB). Optional caption/tags/attribution are hints shown to the AI tagger and moderators — never published verbatim. If the call fails or times out, retry with the SAME payment proof to resume — one payment delivers at most one submission and is never charged twice (up to 10 delivery attempts per payment; a corrected image_url is allowed while no submission has been created yet). Note for x402 clients: 100 sats exceeds the agents-SDK default per-call cap of $0.10 whenever BTC trades above $100k — raise maxPaymentValue in withX402Client if payment is refused client-side.
Parameters4
image_url
string
required
HTTPS image URL, or data:image/(jpeg|png|webp);base64,... URL. Max 8MB.
caption
string
optional
Optional caption hint for the AI tagger (admin-visible, never published verbatim).
tags
array
optional
Optional tag hints (max 10).
attribution
string
optional
Optional credit line for the original creator/source (shown to moderators, not published).
Raw schema
{
"type": "object",
"properties": {
"image_url": {
"type": "string",
"description": "HTTPS image URL, or data:image/(jpeg|png|webp);base64,... URL. Max 8MB."
},
"caption": {
"type": "string",
"maxLength": 200,
"description": "Optional caption hint for the AI tagger (admin-visible, never published verbatim)."
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 10,
"description": "Optional tag hints (max 10)."
},
"attribution": {
"type": "string",
"maxLength": 200,
"description": "Optional credit line for the original creator/source (shown to moderators, not published)."
}
},
"required": [
"image_url"
]
}
generate_meme
Generate a new image from a text prompt using AI (Grok Imagine). Paid tool — billed per call via the agent payment rails (x402/L402); not covered by any free quota. Generation runs asynchronously on the server and this call polls until it completes, up to ~90 seconds. If you get a "still running" error, call the tool again with the SAME payment proof to resume polling — you will never be charged twice for one payment. Note for x402 clients: "quality" mode (~$0.15) exceeds the agents-SDK default per-call cap of $0.10 — raise maxPaymentValue in withX402Client to use it.
Parameters3
prompt
string
required
Text description of the image to generate (max 2000 characters).
Hosted Model Context Protocol server for MemeStack — a visual search engine for memes, infographics, charts, screenshots, and diagrams. Find images by meaning, by the OCR text printed inside them, or by visual similarity. AI-captioned, Lightning-ranked. Public, no auth, no signup — reads are free with daily quotas, generation is paid per call.
code
https://mcp.memestack.ai/mcp
Every list response returns citation blocks (markdown / HTML / plain) ready to paste with attribution. Image bytes are served from https://api.memestack.ai/v1/images/{id}/{thumbnail|canonical|social-card} — directly embeddable.
Install
This is a hosted server. No clone, no build, no local environment. Point any MCP-aware client at the endpoint. Every snippet below was checked against the client's own documentation on 2026-10-11; the current list, with a link to each client's docs, is on memestack.ai/mcp-server.
Claude Code
bash
claude mcp add --transport http memestack https://mcp.memestack.ai/mcp
Or in a project .mcp.json — a remote server needs "type": "http":
This repo is also a Claude Code plugin marketplace. The plugin installs the same server plus a
find-image skill that tells Claude which tool answers which request and to keep the citation:
From a shell: claude plugin marketplace add Ed-Relight/memestack-mcp then
claude plugin install memestack@memestack. If you also use the claude.ai connector, Claude Code
lists the tools twice (one copy per server); either one is enough.
Claude (claude.ai and Claude Desktop)
Add MemeStack from the Connectors Directory, or as a custom connector: Customize → Connectors → + Add → Add custom connector with the directory endpoint https://mcp.memestack.ai/mcp/directory (see Chat apps below). Every plan can; a Free account can add one custom connector.
Claude Desktop's claude_desktop_config.json takes local servers only. To use the full /mcp endpoint there, bridge it with mcp-remote:
One click opens Cursor's install prompt (Cursor's install links). This repo is also a Cursor plugin (.cursor-plugin/plugin.json + mcp.json, with the find-image skill). Or edit ~/.cursor/mcp.json (or per-project .cursor/mcp.json):
One click: the Add to VS Code link on memestack.ai/mcp-server (a vscode:mcp/install link, which GitHub does not render). Or .mcp.json at the workspace root, or ~/.copilot/mcp-config.json for every workspace (the older .vscode/mcp.json with "servers" still loads, but VS Code now calls it deprecated):
In Cline's MCP settings (cline_mcp_settings.json), add the server with the camelCase streamableHttp type — without it Cline falls back to SSE and the endpoint answers 405:
Same endpoint for initialize, tools/call, prompts/list, prompts/get, resources/list, resources/read. Protocol version: 2025-06-18.
Chat apps (directory endpoint)
Chat apps get a second endpoint built for their connector directories:
code
https://mcp.memestack.ai/mcp/directory
It serves the 19 read tools only — no paid tools, no payment offers, no daily quota — and its results never include images classified controversial (the include_controversial argument does not exist there; a by-id lookup of such an image answers "not found"). Prompts, resources and citations are the same as on /mcp. Add it by URL as a custom connector (Streamable HTTP, no authentication). Tool calls are rate-limited per minute; over the limit a call answers "Too many requests from this client" — wait a minute and retry. In ChatGPT (and other MCP Apps hosts) image results appear as a carousel of image cards.
Where each app keeps the setting (checked 2026-10-11):
ChatGPT (web) — Plugins → + → Add custom MCP server → Server URL → Create as a plugin. Business and Enterprise/Edu; Pro can connect with read/fetch permissions in developer mode.
Mistral Le Chat — Connectors → + Add Connector → Custom MCP Connector. Administrators (on Free, Pro and Student, the account owner).
Perplexity — Account settings → Connectors → + Custom connector → Remote, transport Streamable HTTP. Pro, Max and Enterprise.
Microsoft Copilot Studio — an agent's Tools page → Add a tool → New tool → Model Context Protocol, authentication None. Needs generative orchestration (not in the Copilot Studio for Teams plan).
What's exposed
21 tools — 19 free reads (8 of them with a daily quota, then a fraction of a cent per call — see Pricing & payments), 2 always paid (generate_meme, submit_image) — full catalog: docs/tools.md
6 prompts — pre-baked workflows (topic search, top zapped, cite a meme, find a meme for a vibe, research meme evolution, trending): docs/prompts.md
4 resources — attribution guide, tag taxonomy, recent uploads feed, and the memestack://top/{period} template (top zapped images): docs/resources.md
Tools at a glance
Discovery and search:
search_images — semantic + keyword merged
search_charts — charts/infographics with stored source metadata (dataset, citation, unit, regions, displayed period); not every chart — search_images has wider chart coverage. publisher_only: true (here and on search_images) keeps only charts imported from Our World in Data, USDA ERS, Eurostat or the EEA
search_text_in_image — OCR-only search (find screenshots of specific quotes/text)
find_meme_for_text — vibe-to-meme matcher for writing & social (only images tagged as memes, so it may come back empty; search_images covers every kind of image)
reverse_image_search — phash-based "find this image" (accepts HTTPS or data: URLs)
find_similar / find_related — neighbors of a known image (visual phash / semantic embedding)
Honest search results (rolling out — the server labels results only while its honest-search switch is on): when results carry match, search_images, search_charts, search_text_in_image and find_meme_for_text label each one "strong" (MemeStack has evidence it matches your query) or "closest" (the nearest thing it has). Strong results come first; closest ones are capped and marked [closest match] in the text view. The first page starts with a note when nothing matched strongly, and has_more says whether another page exists (total counts strong matches only). Without labels there is no match, note or has_more: a page shorter than limit is the last. With labels, match_quality sums the search up: strong (it has a strong match), closest_only (every result is only the nearest guess — do not present one as the answer) or none.
Reuse rights: every image carries rights — source (publisher / creator / community), the licence and its URL, the credit line (attribution), and commercial_use (yes / no / unknown; unknown is never a guess — Our World in Data charts can plot third-party data under its own terms, and MemeStack licenses no community upload). The citation says how to credit an image; rights says whether it may be reused. cite_image carries both.
Safe by default: every search and browse tool excludes images MemeStack classifies as controversial (partisan attack memes, slurs, dark humour — library content, but not a default result). Pass include_controversial: true on search_images, search_charts, search_text_in_image, find_meme_for_text, reverse_image_search, find_similar, find_related, browse_images or browse_by_tag to include them; each such result is marked [controversial] in the text view and carries controversial: true in the structured payload. By-id tools (get_image, get_meme_variants, cite_image) always answer and carry the flag. The REST equivalent is ?content=all on the browse endpoints (content=safe is the default; any other value is 400 INVALID_CONTENT).
Attribution:
cite_image — canonical markdown/HTML/plain attribution blocks for one or many image IDs
Paid (agent payment rails — pay per call, no account):
generate_meme — AI image generation via Grok Imagine. $0.08 standard / $0.20 quality, paid in sats or USDC. Returns a hosted, auto-tagged, CDN-served image URL.
submit_image — submit an image by URL into the moderation review queue. $0.10 per submission, paid in sats or USDC, always paid, no free quota. No refund on moderation rejection (duplicate/nsfw/spam/low-quality) — the fee is the anti-spam mechanism; accepted images await human review before publication.
Citations are baked in
Every list response includes a citations_combined block in three formats (markdown / HTML / plain) for the full set, plus a per-image citation on every individual image. Per-source rules differ — OWID images carry CC-BY 4.0 attribution to Our World in Data; Imgflip templates carry Imgflip attribution; direct uploads carry the uploader's display name and the MemeStack page URL — and Verified Creator uploads link the creator's name directly to their own website (mandatory attribution).
Read memestack://attribution-guide once per session for the license model and per-source rules. See docs/resources.md.
Pricing & payments
Reads are free with generous daily quotas; generation is paid per call. Every price is fixed in US dollars and paid at the current BTC/USD rate in sats, or in USDC. No account, no API key — payment itself is the auth, over two rails:
x402 (USDC on Base) — standard x402/error + x402/payment_meta flow; works out of the box with the Cloudflare Agents SDK's withX402Client. Heads-up: the SDK's default maxPaymentValue is $0.10 — submit_image ($0.10) fits it exactly; raise it to use generate_meme quality mode ($0.20).
L402 (Lightning sats, at the current BTC/USD rate) — on REST, standard WWW-Authenticate: L402 macaroon="…", invoice="…" challenge; retry with Authorization: L402 <macaroon>:<preimage>. Over MCP, an experimental l402/payment_meta extension carries the same proof.
The sats amount for each price right now: GET api.memestack.ai/v1/prices. Paid REST twins (same prices, standard dual-header 402): POST api.memestack.ai/v1/agent/generate, POST api.memestack.ai/v1/agent/reverse-search, and POST api.memestack.ai/v1/agent/submit — see the OpenAPI spec.
One payment delivers at most one result — if a call fails or times out mid-generation, retry with the same payment proof to resume; you are never charged twice for one payment.
submit_image submissions land in the moderation review queue, not directly in the public gallery — there is no refund if moderation rejects the submission (duplicate/nsfw/spam/low-quality), since the review attempt itself is what the fee buys.
Discovery surface
How MemeStack exposes itself to AI agents, beyond MCP:
Coinbase's x402 discovery catalog — the paid REST endpoints (/v1/agent/*) and the MCP tools generate_meme/submit_image, with body schemas, examples and prices
Sitemap index with image, page, and user sub-sitemaps
Source
The MCP server runs on Cloudflare Workers and proxies the public MemeStack REST API (api.memestack.ai). The server's source is part of the larger MemeStack codebase, which is not publicly mirrored at this time. This repository hosts the public-facing docs, install snippets, and tool catalog so directory submissions and integrators can link to a stable, browsable surface.
If you want to fork the protocol behavior and self-host a similar gallery, the REST API is documented and a sufficient backend for any MCP-style wrapper.
The Dockerfile in this repo is a thin proxy — it uses mcp-remote to bridge stdio MCP to the hosted HTTP endpoint, and exists only so MCP directories that require Dockerfile-based introspection (Glama, etc.) can validate the live tools/prompts/resources. End users should connect directly to mcp.memestack.ai/mcp per the Install section above; the Docker image holds no source.
License
MIT — covers the snippets and docs in this repo. The hosted MemeStack service is governed separately by memestack.ai/terms. Images keep their owners' rights: only the open-data publisher charts (CC BY 4.0 or US public domain) and Verified Creator work come with license terms, set out in memestack.ai/license. MemeStack grants no license to any other image, and a citation block is attribution, not permission to reuse.