MemeStack MCP
Provides AI agents with a searchable library of memes, infographics, charts, and screenshots. It supports visual search by meaning, OCR text, or image similarity, and returns results with ready-to-paste citations. The server includes tools for unified semantic and keyword search, as well as specific searches for charts and infographics with metadata.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.memestack.ai/mcpWhat its tools do
11 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (9)
Can change data (2)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to memestack.ai ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search for memes, charts, or infographics by describing their meaning or content
- Find images containing specific text using OCR-based search
- Retrieve visual analogies or supporting visuals with citations for answers
- Search for charts and infographics with stored source metadata like dataset and citation
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- memestack 1.6.0
- MCP protocol negotiated in check
- 2025-06-18
- Tools
- 11 advertised
- Resources
- 3 advertised
- Resource templates
- 1 advertised
- Prompts
- 3 advertised
{
"tools": {},
"prompts": {},
"resources": {}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
11 advertised
search_images
Search memes, reaction images, charts, graphs, infographics and screenshots by meaning or keywords - the general image search. Semantic and keyword matching run together and merge. Returns each image with its caption, tags, image and page URLs and a ready citation (source, licence). Use the key words only: a long descriptive phrase matches fewer images strongly. Every image carries rights (source publisher/creator/community, licence, attribution line, commercial_use yes/no/unknown - unknown is never a guess), and match_quality says whether the search found any strong match (strong / closest_only / none). When corrected_query is present, the results are for that corrected wording, not the words as typed - say so to the user. Results exclude images classified controversial unless include_controversial is true.
{
"type": "object",
"required": [
"query"
],
"properties": {
"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)"
},
"sort": {
"enum": [
"newest",
"popular",
"oldest"
],
"type": "string",
"description": "Sort order (default: relevance)"
},
"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)"
},
"query": {
"type": "string",
"description": "Search query - combines semantic AI and keyword matching automatically. Use the key words only (e.g. \"bitcoin halving infographic\"): a long descriptive phrase matches fewer images strongly. Alias: `q` (matches the REST API param name)."
},
"offset": {
"type": "number",
"description": "Pagination offset (default 0)"
},
"publisher_only": {
"type": "boolean",
"description": "Only charts imported from a licence-clean publisher: Our World in Data (CC BY 4.0), the USDA Economic Research Service (US public domain), Eurostat or the European Environment Agency (both CC BY 4.0). Community uploads, including copies of publisher charts, are left out. Default false."
},
"include_controversial": {
"type": "boolean",
"description": "Include images classified controversial (excluded by default)."
}
}
}{
"type": "object",
"required": [
"images",
"total"
],
"properties": {
"note": {
"type": "string",
"description": "Leads the answer when there is something to say: no image matched (an empty result - try different words), the search was auto-corrected, or the first page has no strong result and shows the closest available."
},
"total": {
"type": "number",
"description": "Total number of matching images."
},
"images": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"thumbnail_url",
"canonical_url",
"page_url",
"citation"
],
"properties": {
"id": {
"type": "string",
"description": "Image UUID."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Topic tag slugs."
},
"chart": {
"type": [
"object",
"null"
],
"properties": {
"unit": {
"type": [
"string",
"null"
],
"description": "Measurement unit, when the underlying indicators agree on one. For an extracted row, the unit as printed on the image."
},
"title": {
"type": [
"string",
"null"
],
"description": "Chart title as published upstream, or as printed on the image when provenance is \"extracted\"."
},
"series": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Image id of the edition."
},
"published_at": {
"type": [
"string",
"null"
],
"description": "Release date."
},
"rendered_period": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": "number",
"description": "Last year shown."
},
"start": {
"type": "number",
"description": "First year shown."
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"description": "Every visible edition of this chart, newest first (get_image only)."
},
"source": {
"type": "string",
"description": "Source key: \"owid\", \"usda_ers\", \"eurostat\", \"eea\", or \"extracted\" (read from the image)."
},
"regions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Entities plotted, exactly as the chart names them (e.g. \"World\", \"Germany\")."
},
"provenance": {
"enum": [
"authoritative",
"extracted"
],
"type": "string",
"description": "How this metadata was captured: read from the source's own structured feed ('authoritative'), or read off the chart image itself ('extracted')."
},
"series_key": {
"type": [
"string",
"null"
],
"description": "Editions of one chart share this key; null when the chart is not part of a series."
},
"source_url": {
"type": [
"string",
"null"
],
"description": "Canonical URL for the chart at its upstream source. Null for an extracted row."
},
"superseded": {
"type": "boolean",
"description": "True when the upstream source has published data newer than this snapshot."
},
"published_at": {
"type": [
"string",
"null"
],
"description": "The publisher's release date for this edition (YYYY-MM-DD)."
},
"citation_long": {
"type": [
"string",
"null"
],
"description": "Full academic citation for the upstream dataset. Null for an extracted row."
},
"citation_short": {
"type": [
"string",
"null"
],
"description": "Short attribution line for the upstream dataset, or the source line as printed on the image when provenance is \"extracted\"."
},
"rendered_period": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": "number",
"description": "Last year the chart displays."
},
"start": {
"type": "number",
"description": "First year the chart displays."
},
"evidence": {
"type": "string",
"description": "OCR substring the period was grounded on."
}
},
"description": "The period the chart PROVABLY displays, grounded in its own OCR text - null when no period could be proven. Never a guess, and never the wider history in dataset_timespan.",
"additionalProperties": true
},
"dataset_timespan": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": [
"number",
"null"
],
"description": "Latest year in the dataset, when known."
},
"raw": {
"type": [
"string",
"null"
],
"description": "The dataset timespan as published upstream, verbatim."
},
"start": {
"type": [
"number",
"null"
],
"description": "Earliest year in the dataset, when known."
}
},
"description": "The underlying dataset's own history - display-only context, NOT the period this chart shows (see rendered_period). Never usable as a date filter.",
"additionalProperties": true
}
},
"description": "Structured source metadata for a chart, map or infographic, present only when MemeStack holds a record for this image (an image_chart_meta row). Absent or null means no stored metadata - never a signal that the image is not a chart.",
"additionalProperties": true
},
"match": {
"enum": [
"strong",
"closest"
],
"type": "string",
"description": "Honest search: strong = a real answer, closest = the nearest miss. Present only when the API labelled the result."
},
"width": {
"type": "number",
"description": "Original width in pixels."
},
"height": {
"type": "number",
"description": "Original height in pixels."
},
"rights": {
"type": "object",
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "The one condition or caveat that changes what you may do, or null."
},
"source": {
"enum": [
"publisher",
"creator",
"community"
],
"type": "string",
"description": "publisher = imported from a licence-clean publisher (Our World in Data, USDA ERS, Eurostat, EEA); creator = a Verified Creator's own upload (all rights reserved); community = everything else (uploads, bot saves, imports, AI images) - MemeStack grants no licence to it."
},
"license": {
"enum": [
"CC-BY-4.0",
"US-PD",
"all-rights-reserved",
null
],
"type": [
"string",
"null"
],
"description": "Licence id (\"US-PD\" = U.S. federal public domain); null = no licence known."
},
"publisher": {
"type": [
"object",
"null"
],
"properties": {
"key": {
"type": "string",
"description": "Publisher key: \"owid\", \"usda_ers\", \"eurostat\" or \"eea\"."
},
"name": {
"type": "string",
"description": "Publisher name."
}
},
"description": "The publisher of a publisher image; null otherwise.",
"additionalProperties": true
},
"attribution": {
"type": "string",
"description": "The credit line to show beside the image (the line a publisher licence asks for; otherwise where the image came from, never who owns it)."
},
"license_url": {
"type": [
"string",
"null"
],
"description": "The licence text, or the creator terms."
},
"license_name": {
"type": [
"string",
"null"
],
"description": "Human licence label, e.g. \"CC BY 4.0\"."
},
"commercial_use": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "yes only for USDA ERS, Eurostat and EEA charts; no for creator work; unknown for Our World in Data (a chart may plot third-party data under its own terms) and every community image."
},
"attribution_required": {
"type": "boolean",
"description": "True for publisher charts and creator work."
}
},
"description": "What you may do with the image, as far as MemeStack knows - 'unknown' wherever it knows nothing, never a guess. The citation says how to credit an image; this says whether it may be reused.",
"additionalProperties": true
},
"caption": {
"type": "string",
"description": "AI-generated caption."
},
"citation": {
"type": "object",
"required": [
"site",
"page_url",
"markdown",
"html",
"plain"
],
"properties": {
"html": {
"type": "string",
"description": "Attribution as HTML."
},
"site": {
"type": "string",
"description": "Always \"MemeStack\"."
},
"plain": {
"type": "string",
"description": "Attribution as plain text."
},
"markdown": {
"type": "string",
"description": "Attribution as Markdown."
},
"original": {
"type": "object",
"required": [
"title",
"credit",
"source_url"
],
"properties": {
"year": {
"type": [
"number",
"null"
],
"description": "Year the original was made or first posted; null when the source gives none."
},
"title": {
"type": "string",
"description": "The meme as usually named."
},
"credit": {
"type": "string",
"description": "Who or what the original is, e.g. \"by KC Green, from his webcomic Gunshow (\\\"On Fire\\\")\"."
},
"source_url": {
"type": "string",
"description": "The page the credit was checked against."
}
},
"description": "Who made the ORIGINAL of the recognised meme (e.g. This Is Fine by KC Green), from a hand-checked list with sources. Present only when that list knows the meme; it credits the meme's origin, not this image's uploader, and grants no rights.",
"additionalProperties": true
},
"page_url": {
"type": "string",
"description": "Canonical MemeStack gallery page for the image."
},
"site_url": {
"type": "string",
"description": "The MemeStack site URL."
},
"canonical_url": {
"type": "string",
"description": "Full-resolution image URL."
},
"source_origin": {
"type": [
"string",
"null"
],
"description": "Origin: 'owid' | 'usda_ers' | 'eurostat' | 'eea' | 'imgflip' | '4chan' | 'telegram' | 'generated' | 'mcp' | 'x' | 'web' | 'reverse' | 'unknown' | null (null = a direct upload)."
},
"thumbnail_url": {
"type": "string",
"description": "Thumbnail URL sized for display (?w=384: a lighter rendition about 384 px wide where one exists)."
},
"academic_citation": {
"type": "string",
"description": "Full upstream academic citation, present only when the image has stored chart metadata with one."
},
"source_external_url": {
"type": [
"string",
"null"
],
"description": "External source URL — the Our World in Data chart, the chart publisher's page, or the X post; null otherwise."
},
"attribution_required": {
"type": "boolean",
"description": "True when the licence or the rights holder requires attribution: Our World in Data, the chart publishers (USDA ERS, Eurostat, EEA), and a verified creator's own work."
},
"uploader_display_name": {
"type": [
"string",
"null"
],
"description": "Uploader name, or null when absent/withheld."
},
"attribution_recommended": {
"type": "boolean",
"description": "Always true — attribution is recommended."
}
},
"description": "Ready-to-paste attribution for this image in three formats, plus source metadata.",
"additionalProperties": true
},
"page_url": {
"type": "string",
"description": "MemeStack gallery page URL."
},
"free_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free-form tag slugs."
},
"zap_count": {
"type": "number",
"description": "Number of Lightning zaps."
},
"created_at": {
"type": "string",
"description": "ISO 8601 creation timestamp."
},
"like_count": {
"type": "number",
"description": "Number of likes."
},
"save_count": {
"type": "number",
"description": "Number of saves."
},
"canonical_url": {
"type": "string",
"description": "Full-resolution image URL."
},
"controversial": {
"type": "boolean",
"description": "True when MemeStack classifies the image as controversial (likely to offend or divide a general audience). The list tools exclude such images unless include_controversial is true; by-id tools always answer and carry this flag. Absent when the API answer predates the flag."
},
"thumbnail_url": {
"type": "string",
"description": "Thumbnail URL sized for display (?w=384: a lighter rendition about 384 px wide where one exists)."
},
"zap_total_sats": {
"type": "number",
"description": "Total sats zapped."
},
"meme_template_name": {
"type": [
"string",
"null"
],
"description": "Recognised meme template, if any."
},
"uploader_display_name": {
"type": [
"string",
"null"
],
"description": "Uploader name, or null."
}
},
"description": "A gallery image (lean list fields) with attribution.",
"additionalProperties": true
},
"description": "Matching images, best-first."
},
"has_more": {
"type": "boolean",
"description": "Present when the API labelled the results: true when more results follow this page."
},
"match_quality": {
"enum": [
"strong",
"closest_only",
"none"
],
"type": "string",
"description": "Present when the API labelled the results: strong = the search has at least one strong match (they lead the first page); closest_only = no strong match anywhere, every result is the nearest guess - do not present it as the answer; none = nothing on this page and no strong match."
},
"query_language": {
"type": "string",
"description": "Present with translated_query: the ISO 639-1 code of the query language, e.g. \"fr\"."
},
"corrected_query": {
"type": "string",
"description": "Present when the search found no strong match for the words as typed and ran again with this corrected wording: the results are for it. Tell the user."
},
"translated_query": {
"type": "string",
"description": "Present only when the query was not English: the English text it was also searched as (those results are merged in)."
},
"citations_combined": {
"type": "object",
"required": [
"markdown",
"html",
"plain"
],
"properties": {
"html": {
"type": "string",
"description": "Numbered attribution list as HTML."
},
"plain": {
"type": "string",
"description": "Numbered attribution list as plain text."
},
"markdown": {
"type": "string",
"description": "Numbered attribution list as Markdown."
}
},
"description": "Combined attribution for all images in this response, in three formats.",
"additionalProperties": false
}
},
"additionalProperties": true
}{
"tier": "free",
"title": "Search Images",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}search_charts
Search charts, graphs, maps and infographics with their source data: the dataset and its citation, the unit, the regions plotted and the period the chart actually shows. Two kinds of stored metadata: charts from Our World in Data and three statistical publishers (provenance 'authoritative') carry the publishing dataset and its citation, the period the chart displays (never the dataset's wider history), and whether the source has published newer data since the image was captured; community-uploaded charts (provenance 'extracted') carry a title, source line, unit and period read from the image itself and not checked against the original data. This tool covers only images that HAVE stored metadata, so use search_images for the widest chart coverage; search_images, get_image and cite_image carry the same metadata whenever a row exists. Set publisher_only to keep only the publishers' own charts (licence-clean, citable). Every image carries rights (source publisher/creator/community, licence, attribution line, commercial_use yes/no/unknown - unknown is never a guess), and match_quality says whether the search found any strong match (strong / closest_only / none). When corrected_query is present, the results are for that corrected wording, not the words as typed - say so to the user. Results exclude images classified controversial unless include_controversial is true.
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "number",
"description": "Results per page (1-50, default 10)"
},
"query": {
"type": "string",
"description": "What the chart should show, in plain words - e.g. \"global cereal yields\" or \"life expectancy by country\"."
},
"offset": {
"type": "number",
"description": "Pagination offset (default 0)"
},
"region": {
"type": "string",
"description": "Restrict to charts that plot this entity exactly as the chart names it, e.g. \"World\", \"Germany\"."
},
"data_to": {
"type": "number",
"description": "Latest year of interest. See data_from."
},
"data_from": {
"type": "number",
"description": "Earliest year of interest. Matches charts whose DISPLAYED period overlaps [data_from, data_to]. Charts with no provable displayed period are excluded, and the underlying dataset's wider history is never used for this test."
},
"chart_source": {
"type": "string",
"description": "Restrict to one upstream source key: \"owid\" (Our World in Data), \"usda_ers\" (USDA Economic Research Service), \"eurostat\" or \"eea\" (European Environment Agency), or \"extracted\" (community charts whose details were read from the image)."
},
"publisher_only": {
"type": "boolean",
"description": "Only charts imported from a licence-clean publisher: Our World in Data (CC BY 4.0), the USDA Economic Research Service (US public domain), Eurostat or the European Environment Agency (both CC BY 4.0). Community uploads, including copies of publisher charts, are left out. Default false."
},
"include_controversial": {
"type": "boolean",
"description": "Include images classified controversial (excluded by default)."
}
}
}{
"type": "object",
"required": [
"images",
"total"
],
"properties": {
"note": {
"type": "string",
"description": "Leads the answer when there is something to say: no image matched (an empty result - try different words), the search was auto-corrected, or the first page has no strong result and shows the closest available."
},
"total": {
"type": "number",
"description": "Total number of matching images."
},
"images": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"thumbnail_url",
"canonical_url",
"page_url",
"citation"
],
"properties": {
"id": {
"type": "string",
"description": "Image UUID."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Topic tag slugs."
},
"chart": {
"type": [
"object",
"null"
],
"properties": {
"unit": {
"type": [
"string",
"null"
],
"description": "Measurement unit, when the underlying indicators agree on one. For an extracted row, the unit as printed on the image."
},
"title": {
"type": [
"string",
"null"
],
"description": "Chart title as published upstream, or as printed on the image when provenance is \"extracted\"."
},
"series": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Image id of the edition."
},
"published_at": {
"type": [
"string",
"null"
],
"description": "Release date."
},
"rendered_period": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": "number",
"description": "Last year shown."
},
"start": {
"type": "number",
"description": "First year shown."
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"description": "Every visible edition of this chart, newest first (get_image only)."
},
"source": {
"type": "string",
"description": "Source key: \"owid\", \"usda_ers\", \"eurostat\", \"eea\", or \"extracted\" (read from the image)."
},
"regions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Entities plotted, exactly as the chart names them (e.g. \"World\", \"Germany\")."
},
"provenance": {
"enum": [
"authoritative",
"extracted"
],
"type": "string",
"description": "How this metadata was captured: read from the source's own structured feed ('authoritative'), or read off the chart image itself ('extracted')."
},
"series_key": {
"type": [
"string",
"null"
],
"description": "Editions of one chart share this key; null when the chart is not part of a series."
},
"source_url": {
"type": [
"string",
"null"
],
"description": "Canonical URL for the chart at its upstream source. Null for an extracted row."
},
"superseded": {
"type": "boolean",
"description": "True when the upstream source has published data newer than this snapshot."
},
"published_at": {
"type": [
"string",
"null"
],
"description": "The publisher's release date for this edition (YYYY-MM-DD)."
},
"citation_long": {
"type": [
"string",
"null"
],
"description": "Full academic citation for the upstream dataset. Null for an extracted row."
},
"citation_short": {
"type": [
"string",
"null"
],
"description": "Short attribution line for the upstream dataset, or the source line as printed on the image when provenance is \"extracted\"."
},
"rendered_period": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": "number",
"description": "Last year the chart displays."
},
"start": {
"type": "number",
"description": "First year the chart displays."
},
"evidence": {
"type": "string",
"description": "OCR substring the period was grounded on."
}
},
"description": "The period the chart PROVABLY displays, grounded in its own OCR text - null when no period could be proven. Never a guess, and never the wider history in dataset_timespan.",
"additionalProperties": true
},
"dataset_timespan": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": [
"number",
"null"
],
"description": "Latest year in the dataset, when known."
},
"raw": {
"type": [
"string",
"null"
],
"description": "The dataset timespan as published upstream, verbatim."
},
"start": {
"type": [
"number",
"null"
],
"description": "Earliest year in the dataset, when known."
}
},
"description": "The underlying dataset's own history - display-only context, NOT the period this chart shows (see rendered_period). Never usable as a date filter.",
"additionalProperties": true
}
},
"description": "Structured source metadata for a chart, map or infographic, present only when MemeStack holds a record for this image (an image_chart_meta row). Absent or null means no stored metadata - never a signal that the image is not a chart.",
"additionalProperties": true
},
"match": {
"enum": [
"strong",
"closest"
],
"type": "string",
"description": "Honest search: strong = a real answer, closest = the nearest miss. Present only when the API labelled the result."
},
"width": {
"type": "number",
"description": "Original width in pixels."
},
"height": {
"type": "number",
"description": "Original height in pixels."
},
"rights": {
"type": "object",
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "The one condition or caveat that changes what you may do, or null."
},
"source": {
"enum": [
"publisher",
"creator",
"community"
],
"type": "string",
"description": "publisher = imported from a licence-clean publisher (Our World in Data, USDA ERS, Eurostat, EEA); creator = a Verified Creator's own upload (all rights reserved); community = everything else (uploads, bot saves, imports, AI images) - MemeStack grants no licence to it."
},
"license": {
"enum": [
"CC-BY-4.0",
"US-PD",
"all-rights-reserved",
null
],
"type": [
"string",
"null"
],
"description": "Licence id (\"US-PD\" = U.S. federal public domain); null = no licence known."
},
"publisher": {
"type": [
"object",
"null"
],
"properties": {
"key": {
"type": "string",
"description": "Publisher key: \"owid\", \"usda_ers\", \"eurostat\" or \"eea\"."
},
"name": {
"type": "string",
"description": "Publisher name."
}
},
"description": "The publisher of a publisher image; null otherwise.",
"additionalProperties": true
},
"attribution": {
"type": "string",
"description": "The credit line to show beside the image (the line a publisher licence asks for; otherwise where the image came from, never who owns it)."
},
"license_url": {
"type": [
"string",
"null"
],
"description": "The licence text, or the creator terms."
},
"license_name": {
"type": [
"string",
"null"
],
"description": "Human licence label, e.g. \"CC BY 4.0\"."
},
"commercial_use": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "yes only for USDA ERS, Eurostat and EEA charts; no for creator work; unknown for Our World in Data (a chart may plot third-party data under its own terms) and every community image."
},
"attribution_required": {
"type": "boolean",
"description": "True for publisher charts and creator work."
}
},
"description": "What you may do with the image, as far as MemeStack knows - 'unknown' wherever it knows nothing, never a guess. The citation says how to credit an image; this says whether it may be reused.",
"additionalProperties": true
},
"caption": {
"type": "string",
"description": "AI-generated caption."
},
"citation": {
"type": "object",
"required": [
"site",
"page_url",
"markdown",
"html",
"plain"
],
"properties": {
"html": {
"type": "string",
"description": "Attribution as HTML."
},
"site": {
"type": "string",
"description": "Always \"MemeStack\"."
},
"plain": {
"type": "string",
"description": "Attribution as plain text."
},
"markdown": {
"type": "string",
"description": "Attribution as Markdown."
},
"original": {
"type": "object",
"required": [
"title",
"credit",
"source_url"
],
"properties": {
"year": {
"type": [
"number",
"null"
],
"description": "Year the original was made or first posted; null when the source gives none."
},
"title": {
"type": "string",
"description": "The meme as usually named."
},
"credit": {
"type": "string",
"description": "Who or what the original is, e.g. \"by KC Green, from his webcomic Gunshow (\\\"On Fire\\\")\"."
},
"source_url": {
"type": "string",
"description": "The page the credit was checked against."
}
},
"description": "Who made the ORIGINAL of the recognised meme (e.g. This Is Fine by KC Green), from a hand-checked list with sources. Present only when that list knows the meme; it credits the meme's origin, not this image's uploader, and grants no rights.",
"additionalProperties": true
},
"page_url": {
"type": "string",
"description": "Canonical MemeStack gallery page for the image."
},
"site_url": {
"type": "string",
"description": "The MemeStack site URL."
},
"canonical_url": {
"type": "string",
"description": "Full-resolution image URL."
},
"source_origin": {
"type": [
"string",
"null"
],
"description": "Origin: 'owid' | 'usda_ers' | 'eurostat' | 'eea' | 'imgflip' | '4chan' | 'telegram' | 'generated' | 'mcp' | 'x' | 'web' | 'reverse' | 'unknown' | null (null = a direct upload)."
},
"thumbnail_url": {
"type": "string",
"description": "Thumbnail URL sized for display (?w=384: a lighter rendition about 384 px wide where one exists)."
},
"academic_citation": {
"type": "string",
"description": "Full upstream academic citation, present only when the image has stored chart metadata with one."
},
"source_external_url": {
"type": [
"string",
"null"
],
"description": "External source URL — the Our World in Data chart, the chart publisher's page, or the X post; null otherwise."
},
"attribution_required": {
"type": "boolean",
"description": "True when the licence or the rights holder requires attribution: Our World in Data, the chart publishers (USDA ERS, Eurostat, EEA), and a verified creator's own work."
},
"uploader_display_name": {
"type": [
"string",
"null"
],
"description": "Uploader name, or null when absent/withheld."
},
"attribution_recommended": {
"type": "boolean",
"description": "Always true — attribution is recommended."
}
},
"description": "Ready-to-paste attribution for this image in three formats, plus source metadata.",
"additionalProperties": true
},
"page_url": {
"type": "string",
"description": "MemeStack gallery page URL."
},
"free_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free-form tag slugs."
},
"zap_count": {
"type": "number",
"description": "Number of Lightning zaps."
},
"created_at": {
"type": "string",
"description": "ISO 8601 creation timestamp."
},
"like_count": {
"type": "number",
"description": "Number of likes."
},
"save_count": {
"type": "number",
"description": "Number of saves."
},
"canonical_url": {
"type": "string",
"description": "Full-resolution image URL."
},
"controversial": {
"type": "boolean",
"description": "True when MemeStack classifies the image as controversial (likely to offend or divide a general audience). The list tools exclude such images unless include_controversial is true; by-id tools always answer and carry this flag. Absent when the API answer predates the flag."
},
"thumbnail_url": {
"type": "string",
"description": "Thumbnail URL sized for display (?w=384: a lighter rendition about 384 px wide where one exists)."
},
"zap_total_sats": {
"type": "number",
"description": "Total sats zapped."
},
"meme_template_name": {
"type": [
"string",
"null"
],
"description": "Recognised meme template, if any."
},
"uploader_display_name": {
"type": [
"string",
"null"
],
"description": "Uploader name, or null."
}
},
"description": "A gallery image (lean list fields) with attribution.",
"additionalProperties": true
},
"description": "Images that HAVE stored chart metadata, best-first. Every item carries a populated chart block (source, citation, unit, regions, displayed period)."
},
"has_more": {
"type": "boolean",
"description": "Present when the API labelled the results: true when more results follow this page."
},
"match_quality": {
"enum": [
"strong",
"closest_only",
"none"
],
"type": "string",
"description": "Present when the API labelled the results: strong = the search has at least one strong match (they lead the first page); closest_only = no strong match anywhere, every result is the nearest guess - do not present it as the answer; none = nothing on this page and no strong match."
},
"query_language": {
"type": "string",
"description": "Present with translated_query: the ISO 639-1 code of the query language, e.g. \"fr\"."
},
"corrected_query": {
"type": "string",
"description": "Present when the search found no strong match for the words as typed and ran again with this corrected wording: the results are for it. Tell the user."
},
"translated_query": {
"type": "string",
"description": "Present only when the query was not English: the English text it was also searched as (those results are merged in)."
},
"citations_combined": {
"type": "object",
"required": [
"markdown",
"html",
"plain"
],
"properties": {
"html": {
"type": "string",
"description": "Numbered attribution list as HTML."
},
"plain": {
"type": "string",
"description": "Numbered attribution list as plain text."
},
"markdown": {
"type": "string",
"description": "Numbered attribution list as Markdown."
}
},
"description": "Combined attribution for all images in this response, in three formats.",
"additionalProperties": false
}
},
"additionalProperties": true
}{
"tier": "free",
"title": "Search Charts",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}get_image
Get one image's full record by ID - a meme, chart, infographic or screenshot: caption, alt text, tags, the words printed in it (OCR text), its source and licence (rights), a ready citation and URLs. For a chart that is part of a series, chart.series lists every edition (other years) by id. When the image's receipts were already read, they ride along as receipts (see get_receipts).
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Image UUID"
}
}
}{
"type": "object",
"required": [
"id",
"thumbnail_url",
"canonical_url",
"page_url",
"citation"
],
"properties": {
"id": {
"type": "string",
"description": "Image UUID."
},
"size": {
"type": "number",
"description": "File size in bytes."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Topic tag slugs."
},
"chart": {
"type": [
"object",
"null"
],
"properties": {
"unit": {
"type": [
"string",
"null"
],
"description": "Measurement unit, when the underlying indicators agree on one. For an extracted row, the unit as printed on the image."
},
"title": {
"type": [
"string",
"null"
],
"description": "Chart title as published upstream, or as printed on the image when provenance is \"extracted\"."
},
"series": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Image id of the edition."
},
"published_at": {
"type": [
"string",
"null"
],
"description": "Release date."
},
"rendered_period": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": "number",
"description": "Last year shown."
},
"start": {
"type": "number",
"description": "First year shown."
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"description": "Every visible edition of this chart, newest first (get_image only)."
},
"source": {
"type": "string",
"description": "Source key: \"owid\", \"usda_ers\", \"eurostat\", \"eea\", or \"extracted\" (read from the image)."
},
"regions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Entities plotted, exactly as the chart names them (e.g. \"World\", \"Germany\")."
},
"provenance": {
"enum": [
"authoritative",
"extracted"
],
"type": "string",
"description": "How this metadata was captured: read from the source's own structured feed ('authoritative'), or read off the chart image itself ('extracted')."
},
"series_key": {
"type": [
"string",
"null"
],
"description": "Editions of one chart share this key; null when the chart is not part of a series."
},
"source_url": {
"type": [
"string",
"null"
],
"description": "Canonical URL for the chart at its upstream source. Null for an extracted row."
},
"superseded": {
"type": "boolean",
"description": "True when the upstream source has published data newer than this snapshot."
},
"published_at": {
"type": [
"string",
"null"
],
"description": "The publisher's release date for this edition (YYYY-MM-DD)."
},
"citation_long": {
"type": [
"string",
"null"
],
"description": "Full academic citation for the upstream dataset. Null for an extracted row."
},
"citation_short": {
"type": [
"string",
"null"
],
"description": "Short attribution line for the upstream dataset, or the source line as printed on the image when provenance is \"extracted\"."
},
"rendered_period": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": "number",
"description": "Last year the chart displays."
},
"start": {
"type": "number",
"description": "First year the chart displays."
},
"evidence": {
"type": "string",
"description": "OCR substring the period was grounded on."
}
},
"description": "The period the chart PROVABLY displays, grounded in its own OCR text - null when no period could be proven. Never a guess, and never the wider history in dataset_timespan.",
"additionalProperties": true
},
"dataset_timespan": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": [
"number",
"null"
],
"description": "Latest year in the dataset, when known."
},
"raw": {
"type": [
"string",
"null"
],
"description": "The dataset timespan as published upstream, verbatim."
},
"start": {
"type": [
"number",
"null"
],
"description": "Earliest year in the dataset, when known."
}
},
"description": "The underlying dataset's own history - display-only context, NOT the period this chart shows (see rendered_period). Never usable as a date filter.",
"additionalProperties": true
}
},
"description": "Structured source metadata for a chart, map or infographic, present only when MemeStack holds a record for this image (an image_chart_meta row). Absent or null means no stored metadata - never a signal that the image is not a chart.",
"additionalProperties": true
},
"match": {
"enum": [
"strong",
"closest"
],
"type": "string",
"description": "Honest search: strong = a real answer, closest = the nearest miss. Present only when the API labelled the result."
},
"width": {
"type": "number",
"description": "Original width in pixels."
},
"height": {
"type": "number",
"description": "Original height in pixels."
},
"rights": {
"type": "object",
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "The one condition or caveat that changes what you may do, or null."
},
"source": {
"enum": [
"publisher",
"creator",
"community"
],
"type": "string",
"description": "publisher = imported from a licence-clean publisher (Our World in Data, USDA ERS, Eurostat, EEA); creator = a Verified Creator's own upload (all rights reserved); community = everything else (uploads, bot saves, imports, AI images) - MemeStack grants no licence to it."
},
"license": {
"enum": [
"CC-BY-4.0",
"US-PD",
"all-rights-reserved",
null
],
"type": [
"string",
"null"
],
"description": "Licence id (\"US-PD\" = U.S. federal public domain); null = no licence known."
},
"publisher": {
"type": [
"object",
"null"
],
"properties": {
"key": {
"type": "string",
"description": "Publisher key: \"owid\", \"usda_ers\", \"eurostat\" or \"eea\"."
},
"name": {
"type": "string",
"description": "Publisher name."
}
},
"description": "The publisher of a publisher image; null otherwise.",
"additionalProperties": true
},
"attribution": {
"type": "string",
"description": "The credit line to show beside the image (the line a publisher licence asks for; otherwise where the image came from, never who owns it)."
},
"license_url": {
"type": [
"string",
"null"
],
"description": "The licence text, or the creator terms."
},
"license_name": {
"type": [
"string",
"null"
],
"description": "Human licence label, e.g. \"CC BY 4.0\"."
},
"commercial_use": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "yes only for USDA ERS, Eurostat and EEA charts; no for creator work; unknown for Our World in Data (a chart may plot third-party data under its own terms) and every community image."
},
"attribution_required": {
"type": "boolean",
"description": "True for publisher charts and creator work."
}
},
"description": "What you may do with the image, as far as MemeStack knows - 'unknown' wherever it knows nothing, never a guess. The citation says how to credit an image; this says whether it may be reused.",
"additionalProperties": true
},
"caption": {
"type": "string",
"description": "AI-generated caption."
},
"alt_text": {
"type": "string",
"description": "Accessible alt text."
},
"citation": {
"type": "object",
"required": [
"site",
"page_url",
"markdown",
"html",
"plain"
],
"properties": {
"html": {
"type": "string",
"description": "Attribution as HTML."
},
"site": {
"type": "string",
"description": "Always \"MemeStack\"."
},
"plain": {
"type": "string",
"description": "Attribution as plain text."
},
"markdown": {
"type": "string",
"description": "Attribution as Markdown."
},
"original": {
"type": "object",
"required": [
"title",
"credit",
"source_url"
],
"properties": {
"year": {
"type": [
"number",
"null"
],
"description": "Year the original was made or first posted; null when the source gives none."
},
"title": {
"type": "string",
"description": "The meme as usually named."
},
"credit": {
"type": "string",
"description": "Who or what the original is, e.g. \"by KC Green, from his webcomic Gunshow (\\\"On Fire\\\")\"."
},
"source_url": {
"type": "string",
"description": "The page the credit was checked against."
}
},
"description": "Who made the ORIGINAL of the recognised meme (e.g. This Is Fine by KC Green), from a hand-checked list with sources. Present only when that list knows the meme; it credits the meme's origin, not this image's uploader, and grants no rights.",
"additionalProperties": true
},
"page_url": {
"type": "string",
"description": "Canonical MemeStack gallery page for the image."
},
"site_url": {
"type": "string",
"description": "The MemeStack site URL."
},
"canonical_url": {
"type": "string",
"description": "Full-resolution image URL."
},
"source_origin": {
"type": [
"string",
"null"
],
"description": "Origin: 'owid' | 'usda_ers' | 'eurostat' | 'eea' | 'imgflip' | '4chan' | 'telegram' | 'generated' | 'mcp' | 'x' | 'web' | 'reverse' | 'unknown' | null (null = a direct upload)."
},
"thumbnail_url": {
"type": "string",
"description": "Thumbnail URL sized for display (?w=384: a lighter rendition about 384 px wide where one exists)."
},
"academic_citation": {
"type": "string",
"description": "Full upstream academic citation, present only when the image has stored chart metadata with one."
},
"source_external_url": {
"type": [
"string",
"null"
],
"description": "External source URL — the Our World in Data chart, the chart publisher's page, or the X post; null otherwise."
},
"attribution_required": {
"type": "boolean",
"description": "True when the licence or the rights holder requires attribution: Our World in Data, the chart publishers (USDA ERS, Eurostat, EEA), and a verified creator's own work."
},
"uploader_display_name": {
"type": [
"string",
"null"
],
"description": "Uploader name, or null when absent/withheld."
},
"attribution_recommended": {
"type": "boolean",
"description": "Always true — attribution is recommended."
}
},
"description": "Ready-to-paste attribution for this image in three formats, plus source metadata.",
"additionalProperties": true
},
"page_url": {
"type": "string",
"description": "MemeStack gallery page URL."
},
"receipts": {
"type": "object",
"required": [
"image_id",
"origin",
"claims"
],
"properties": {
"note": {
"type": "string",
"description": "How to present the receipts: evidence for the user to weigh, never a verdict."
},
"claims": {
"type": "object",
"required": [
"status"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"claim"
],
"properties": {
"data": {
"type": [
"array",
"null"
],
"items": {
"type": "object",
"required": [
"id",
"title",
"publisher"
],
"properties": {
"id": {
"type": "string",
"description": "Image UUID of the chart on MemeStack (get_image reads it)."
},
"unit": {
"type": [
"string",
"null"
],
"description": "The unit of the measure."
},
"title": {
"type": "string",
"description": "The chart title."
},
"period": {
"type": [
"string",
"null"
],
"description": "The period the chart shows, e.g. \"2000-2020\"."
},
"regions": {
"type": "array",
"items": {
"type": "string"
},
"description": "The regions the chart plots."
},
"citation": {
"type": [
"string",
"null"
],
"description": "The publisher's own short citation for the data, when the chart has one."
},
"publisher": {
"type": "string",
"description": "The publisher, e.g. \"Our World in Data\", \"Eurostat\"."
},
"source_url": {
"type": [
"string",
"null"
],
"description": "The chart's page at the publisher."
}
},
"description": "A chart from an original publisher that measures what the claim is about. MemeStack's own record of the publisher's chart - not a judgment of the claim.",
"additionalProperties": true
},
"description": "Publisher charts that measure the same thing ([] = none in the collection); null = not checked this time."
},
"cites": {
"type": [
"string",
"null"
],
"description": "The source the image itself names for this claim, as printed."
},
"claim": {
"type": "string",
"description": "What the image says, restated neutrally (\"The image says ...\")."
}
},
"additionalProperties": true
},
"description": "At most four claims."
},
"status": {
"type": "string",
"description": "ok = claims below; none = the image makes no checkable claim; unavailable = not read this time (ask again later)."
},
"sources_named": {
"type": "array",
"items": {
"type": "string"
},
"description": "Every source printed on the image."
}
},
"description": "The checkable claims the image makes about the world.",
"additionalProperties": true
},
"origin": {
"type": "object",
"required": [
"kind",
"label"
],
"properties": {
"kind": {
"type": "string",
"description": "upload, publisher, web, 4chan, telegram, x, reverse, generated, agent, imgflip or unknown."
},
"link": {
"type": [
"object",
"null"
],
"description": "The publisher's page or the original post, when there is one.",
"additionalProperties": true
},
"label": {
"type": "string",
"description": "One plain line, e.g. \"Imported from Our World in Data\"."
},
"credit": {
"type": [
"string",
"null"
],
"description": "The credit or signature printed on the image, as printed; null until the image is read."
},
"added_at": {
"type": "string",
"description": "ISO 8601 time the image was added."
},
"versions": {
"type": [
"object",
"null"
],
"description": "Two or more visible versions of the image: count, earliest_id, earliest_added_at.",
"additionalProperties": true
},
"publisher": {
"type": [
"object",
"null"
],
"description": "A publisher chart's own record: name, citation, period, unit.",
"additionalProperties": true
}
},
"description": "How the image reached MemeStack.",
"additionalProperties": true
},
"read_at": {
"type": [
"string",
"null"
],
"description": "When the image was read, or null when it was not."
},
"image_id": {
"type": "string",
"description": "Image UUID."
}
},
"description": "Present only when the receipts were already read (get_receipts reads them).",
"additionalProperties": true
},
"free_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free-form tag slugs."
},
"mime_type": {
"type": "string",
"description": "Image MIME type."
},
"zap_count": {
"type": "number",
"description": "Number of Lightning zaps."
},
"created_at": {
"type": "string",
"description": "ISO 8601 creation timestamp."
},
"like_count": {
"type": "number",
"description": "Number of likes."
},
"save_count": {
"type": "number",
"description": "Number of saves."
},
"updated_at": {
"type": "string",
"description": "ISO 8601 last-updated timestamp."
},
"thumb_width": {
"type": "number",
"description": "Thumbnail width in pixels."
},
"thumb_height": {
"type": "number",
"description": "Thumbnail height in pixels."
},
"canonical_url": {
"type": "string",
"description": "Full-resolution image URL."
},
"controversial": {
"type": "boolean",
"description": "True when MemeStack classifies the image as controversial (likely to offend or divide a general audience). The list tools exclude such images unless include_controversial is true; by-id tools always answer and carry this flag. Absent when the API answer predates the flag."
},
"quality_score": {
"type": "number",
"description": "AI quality score (1-10)."
},
"text_in_image": {
"type": [
"string",
"null"
],
"description": "OCR transcription of any text in the image."
},
"thumbnail_url": {
"type": "string",
"description": "Thumbnail URL sized for display (?w=384: a lighter rendition about 384 px wide where one exists)."
},
"zap_total_sats": {
"type": "number",
"description": "Total sats zapped."
},
"meme_template_name": {
"type": [
"string",
"null"
],
"description": "Recognised meme template, if any."
},
"uploader_display_name": {
"type": [
"string",
"null"
],
"description": "Uploader name, or null."
}
},
"description": "A gallery image (full detail) with OCR text, dimensions, and attribution.",
"additionalProperties": true
}{
"tier": "free",
"title": "Get Image Details",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}get_receipts
Get the receipts for one image by ID - where it came from (who added it and when, the credit printed on it, its publisher and versions), what it claims about the world (each checkable claim restated neutrally, with the source the image itself names), and what the data says (charts from the original publishers - Our World in Data, Eurostat, USDA ERS, EEA - that measure the same thing, with period, unit and a link). Use it when the user asks whether an image is true, where it comes from or what backs it. No verdict: the claims are the image's own, and an empty data list means MemeStack holds no publisher chart for that measure. The first ask for an image reads it and can take several seconds.
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Image UUID (from search_images, get_image or any result)"
}
}
}{
"type": "object",
"required": [
"image_id",
"origin",
"claims"
],
"properties": {
"note": {
"type": "string",
"description": "How to present the receipts: evidence for the user to weigh, never a verdict."
},
"claims": {
"type": "object",
"required": [
"status"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"claim"
],
"properties": {
"data": {
"type": [
"array",
"null"
],
"items": {
"type": "object",
"required": [
"id",
"title",
"publisher"
],
"properties": {
"id": {
"type": "string",
"description": "Image UUID of the chart on MemeStack (get_image reads it)."
},
"unit": {
"type": [
"string",
"null"
],
"description": "The unit of the measure."
},
"title": {
"type": "string",
"description": "The chart title."
},
"period": {
"type": [
"string",
"null"
],
"description": "The period the chart shows, e.g. \"2000-2020\"."
},
"regions": {
"type": "array",
"items": {
"type": "string"
},
"description": "The regions the chart plots."
},
"citation": {
"type": [
"string",
"null"
],
"description": "The publisher's own short citation for the data, when the chart has one."
},
"publisher": {
"type": "string",
"description": "The publisher, e.g. \"Our World in Data\", \"Eurostat\"."
},
"source_url": {
"type": [
"string",
"null"
],
"description": "The chart's page at the publisher."
}
},
"description": "A chart from an original publisher that measures what the claim is about. MemeStack's own record of the publisher's chart - not a judgment of the claim.",
"additionalProperties": true
},
"description": "Publisher charts that measure the same thing ([] = none in the collection); null = not checked this time."
},
"cites": {
"type": [
"string",
"null"
],
"description": "The source the image itself names for this claim, as printed."
},
"claim": {
"type": "string",
"description": "What the image says, restated neutrally (\"The image says ...\")."
}
},
"additionalProperties": true
},
"description": "At most four claims."
},
"status": {
"type": "string",
"description": "ok = claims below; none = the image makes no checkable claim; unavailable = not read this time (ask again later)."
},
"sources_named": {
"type": "array",
"items": {
"type": "string"
},
"description": "Every source printed on the image."
}
},
"description": "The checkable claims the image makes about the world.",
"additionalProperties": true
},
"origin": {
"type": "object",
"required": [
"kind",
"label"
],
"properties": {
"kind": {
"type": "string",
"description": "upload, publisher, web, 4chan, telegram, x, reverse, generated, agent, imgflip or unknown."
},
"link": {
"type": [
"object",
"null"
],
"description": "The publisher's page or the original post, when there is one.",
"additionalProperties": true
},
"label": {
"type": "string",
"description": "One plain line, e.g. \"Imported from Our World in Data\"."
},
"credit": {
"type": [
"string",
"null"
],
"description": "The credit or signature printed on the image, as printed; null until the image is read."
},
"added_at": {
"type": "string",
"description": "ISO 8601 time the image was added."
},
"versions": {
"type": [
"object",
"null"
],
"description": "Two or more visible versions of the image: count, earliest_id, earliest_added_at.",
"additionalProperties": true
},
"publisher": {
"type": [
"object",
"null"
],
"description": "A publisher chart's own record: name, citation, period, unit.",
"additionalProperties": true
}
},
"description": "How the image reached MemeStack.",
"additionalProperties": true
},
"read_at": {
"type": [
"string",
"null"
],
"description": "When the image was read, or null when it was not."
},
"image_id": {
"type": "string",
"description": "Image UUID."
}
},
"description": "Where the image came from, what it claims and what the publishers' data says. No verdict.",
"additionalProperties": true
}{
"tier": "free",
"title": "Get Receipts",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}find_similar
Find images that look like a MemeStack image, by its ID - the same meme, chart or screenshot, its crops and edits (perceptual-hash matching), each with a ready citation. For an image that is not on MemeStack, use reverse_image_search. Results exclude images classified controversial unless include_controversial is true.
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Source image UUID"
},
"limit": {
"type": "number",
"description": "Max results (1-20, default 10)"
},
"include_controversial": {
"type": "boolean",
"description": "Include images classified controversial (excluded by default)."
}
}
}{
"type": "object",
"required": [
"images",
"count"
],
"properties": {
"note": {
"type": "string",
"description": "Present only when the answer is empty: says no image matched."
},
"count": {
"type": "number",
"description": "Total number of matching images."
},
"images": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"thumbnail_url",
"canonical_url",
"page_url",
"citation"
],
"properties": {
"id": {
"type": "string",
"description": "Image UUID."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Topic tag slugs."
},
"chart": {
"type": [
"object",
"null"
],
"properties": {
"unit": {
"type": [
"string",
"null"
],
"description": "Measurement unit, when the underlying indicators agree on one. For an extracted row, the unit as printed on the image."
},
"title": {
"type": [
"string",
"null"
],
"description": "Chart title as published upstream, or as printed on the image when provenance is \"extracted\"."
},
"series": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Image id of the edition."
},
"published_at": {
"type": [
"string",
"null"
],
"description": "Release date."
},
"rendered_period": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": "number",
"description": "Last year shown."
},
"start": {
"type": "number",
"description": "First year shown."
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"description": "Every visible edition of this chart, newest first (get_image only)."
},
"source": {
"type": "string",
"description": "Source key: \"owid\", \"usda_ers\", \"eurostat\", \"eea\", or \"extracted\" (read from the image)."
},
"regions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Entities plotted, exactly as the chart names them (e.g. \"World\", \"Germany\")."
},
"provenance": {
"enum": [
"authoritative",
"extracted"
],
"type": "string",
"description": "How this metadata was captured: read from the source's own structured feed ('authoritative'), or read off the chart image itself ('extracted')."
},
"series_key": {
"type": [
"string",
"null"
],
"description": "Editions of one chart share this key; null when the chart is not part of a series."
},
"source_url": {
"type": [
"string",
"null"
],
"description": "Canonical URL for the chart at its upstream source. Null for an extracted row."
},
"superseded": {
"type": "boolean",
"description": "True when the upstream source has published data newer than this snapshot."
},
"published_at": {
"type": [
"string",
"null"
],
"description": "The publisher's release date for this edition (YYYY-MM-DD)."
},
"citation_long": {
"type": [
"string",
"null"
],
"description": "Full academic citation for the upstream dataset. Null for an extracted row."
},
"citation_short": {
"type": [
"string",
"null"
],
"description": "Short attribution line for the upstream dataset, or the source line as printed on the image when provenance is \"extracted\"."
},
"rendered_period": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": "number",
"description": "Last year the chart displays."
},
"start": {
"type": "number",
"description": "First year the chart displays."
},
"evidence": {
"type": "string",
"description": "OCR substring the period was grounded on."
}
},
"description": "The period the chart PROVABLY displays, grounded in its own OCR text - null when no period could be proven. Never a guess, and never the wider history in dataset_timespan.",
"additionalProperties": true
},
"dataset_timespan": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": [
"number",
"null"
],
"description": "Latest year in the dataset, when known."
},
"raw": {
"type": [
"string",
"null"
],
"description": "The dataset timespan as published upstream, verbatim."
},
"start": {
"type": [
"number",
"null"
],
"description": "Earliest year in the dataset, when known."
}
},
"description": "The underlying dataset's own history - display-only context, NOT the period this chart shows (see rendered_period). Never usable as a date filter.",
"additionalProperties": true
}
},
"description": "Structured source metadata for a chart, map or infographic, present only when MemeStack holds a record for this image (an image_chart_meta row). Absent or null means no stored metadata - never a signal that the image is not a chart.",
"additionalProperties": true
},
"match": {
"enum": [
"strong",
"closest"
],
"type": "string",
"description": "Honest search: strong = a real answer, closest = the nearest miss. Present only when the API labelled the result."
},
"width": {
"type": "number",
"description": "Original width in pixels."
},
"height": {
"type": "number",
"description": "Original height in pixels."
},
"rights": {
"type": "object",
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "The one condition or caveat that changes what you may do, or null."
},
"source": {
"enum": [
"publisher",
"creator",
"community"
],
"type": "string",
"description": "publisher = imported from a licence-clean publisher (Our World in Data, USDA ERS, Eurostat, EEA); creator = a Verified Creator's own upload (all rights reserved); community = everything else (uploads, bot saves, imports, AI images) - MemeStack grants no licence to it."
},
"license": {
"enum": [
"CC-BY-4.0",
"US-PD",
"all-rights-reserved",
null
],
"type": [
"string",
"null"
],
"description": "Licence id (\"US-PD\" = U.S. federal public domain); null = no licence known."
},
"publisher": {
"type": [
"object",
"null"
],
"properties": {
"key": {
"type": "string",
"description": "Publisher key: \"owid\", \"usda_ers\", \"eurostat\" or \"eea\"."
},
"name": {
"type": "string",
"description": "Publisher name."
}
},
"description": "The publisher of a publisher image; null otherwise.",
"additionalProperties": true
},
"attribution": {
"type": "string",
"description": "The credit line to show beside the image (the line a publisher licence asks for; otherwise where the image came from, never who owns it)."
},
"license_url": {
"type": [
"string",
"null"
],
"description": "The licence text, or the creator terms."
},
"license_name": {
"type": [
"string",
"null"
],
"description": "Human licence label, e.g. \"CC BY 4.0\"."
},
"commercial_use": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "yes only for USDA ERS, Eurostat and EEA charts; no for creator work; unknown for Our World in Data (a chart may plot third-party data under its own terms) and every community image."
},
"attribution_required": {
"type": "boolean",
"description": "True for publisher charts and creator work."
}
},
"description": "What you may do with the image, as far as MemeStack knows - 'unknown' wherever it knows nothing, never a guess. The citation says how to credit an image; this says whether it may be reused.",
"additionalProperties": true
},
"caption": {
"type": "string",
"description": "AI-generated caption."
},
"citation": {
"type": "object",
"required": [
"site",
"page_url",
"markdown",
"html",
"plain"
],
"properties": {
"html": {
"type": "string",
"description": "Attribution as HTML."
},
"site": {
"type": "string",
"description": "Always \"MemeStack\"."
},
"plain": {
"type": "string",
"description": "Attribution as plain text."
},
"markdown": {
"type": "string",
"description": "Attribution as Markdown."
},
"original": {
"type": "object",
"required": [
"title",
"credit",
"source_url"
],
"properties": {
"year": {
"type": [
"number",
"null"
],
"description": "Year the original was made or first posted; null when the source gives none."
},
"title": {
"type": "string",
"description": "The meme as usually named."
},
"credit": {
"type": "string",
"description": "Who or what the original is, e.g. \"by KC Green, from his webcomic Gunshow (\\\"On Fire\\\")\"."
},
"source_url": {
"type": "string",
"description": "The page the credit was checked against."
}
},
"description": "Who made the ORIGINAL of the recognised meme (e.g. This Is Fine by KC Green), from a hand-checked list with sources. Present only when that list knows the meme; it credits the meme's origin, not this image's uploader, and grants no rights.",
"additionalProperties": true
},
"page_url": {
"type": "string",
"description": "Canonical MemeStack gallery page for the image."
},
"site_url": {
"type": "string",
"description": "The MemeStack site URL."
},
"canonical_url": {
"type": "string",
"description": "Full-resolution image URL."
},
"source_origin": {
"type": [
"string",
"null"
],
"description": "Origin: 'owid' | 'usda_ers' | 'eurostat' | 'eea' | 'imgflip' | '4chan' | 'telegram' | 'generated' | 'mcp' | 'x' | 'web' | 'reverse' | 'unknown' | null (null = a direct upload)."
},
"thumbnail_url": {
"type": "string",
"description": "Thumbnail URL sized for display (?w=384: a lighter rendition about 384 px wide where one exists)."
},
"academic_citation": {
"type": "string",
"description": "Full upstream academic citation, present only when the image has stored chart metadata with one."
},
"source_external_url": {
"type": [
"string",
"null"
],
"description": "External source URL — the Our World in Data chart, the chart publisher's page, or the X post; null otherwise."
},
"attribution_required": {
"type": "boolean",
"description": "True when the licence or the rights holder requires attribution: Our World in Data, the chart publishers (USDA ERS, Eurostat, EEA), and a verified creator's own work."
},
"uploader_display_name": {
"type": [
"string",
"null"
],
"description": "Uploader name, or null when absent/withheld."
},
"attribution_recommended": {
"type": "boolean",
"description": "Always true — attribution is recommended."
}
},
"description": "Ready-to-paste attribution for this image in three formats, plus source metadata.",
"additionalProperties": true
},
"page_url": {
"type": "string",
"description": "MemeStack gallery page URL."
},
"free_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free-form tag slugs."
},
"zap_count": {
"type": "number",
"description": "Number of Lightning zaps."
},
"created_at": {
"type": "string",
"description": "ISO 8601 creation timestamp."
},
"like_count": {
"type": "number",
"description": "Number of likes."
},
"save_count": {
"type": "number",
"description": "Number of saves."
},
"similarity": {
"type": "number",
"description": "Visual-similarity score (find_similar / reverse_image_search)."
},
"canonical_url": {
"type": "string",
"description": "Full-resolution image URL."
},
"controversial": {
"type": "boolean",
"description": "True when MemeStack classifies the image as controversial (likely to offend or divide a general audience). The list tools exclude such images unless include_controversial is true; by-id tools always answer and carry this flag. Absent when the API answer predates the flag."
},
"thumbnail_url": {
"type": "string",
"description": "Thumbnail URL sized for display (?w=384: a lighter rendition about 384 px wide where one exists)."
},
"zap_total_sats": {
"type": "number",
"description": "Total sats zapped."
},
"relevance_score": {
"type": "number",
"description": "Semantic-relevance score (find_related)."
},
"meme_template_name": {
"type": [
"string",
"null"
],
"description": "Recognised meme template, if any."
},
"uploader_display_name": {
"type": [
"string",
"null"
],
"description": "Uploader name, or null."
}
},
"description": "A gallery image (compact fields) with a ranking score and attribution.",
"additionalProperties": true
},
"description": "Visually similar images."
},
"citations_combined": {
"type": "object",
"required": [
"markdown",
"html",
"plain"
],
"properties": {
"html": {
"type": "string",
"description": "Numbered attribution list as HTML."
},
"plain": {
"type": "string",
"description": "Numbered attribution list as plain text."
},
"markdown": {
"type": "string",
"description": "Numbered attribution list as Markdown."
}
},
"description": "Combined attribution for all images in this response, in three formats.",
"additionalProperties": false
}
},
"additionalProperties": true
}{
"tier": "free",
"title": "Find Similar Images",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}search_text_in_image
Find screenshots, memes and other images by the exact words printed in them (OCR text): a quote, a caption, a sign, a watermark. Matches only the text in the image (the text_in_image field), not captions or tags, and returns strong matches only, each with a ready citation. Results exclude images classified controversial unless include_controversial is true.
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "number",
"description": "Results per page (1-50, default 10)"
},
"query": {
"type": "string",
"description": "Text to search for in image OCR"
},
"offset": {
"type": "number",
"description": "Pagination offset"
},
"include_controversial": {
"type": "boolean",
"description": "Include images classified controversial (excluded by default)."
}
}
}{
"type": "object",
"required": [
"images",
"total"
],
"properties": {
"note": {
"type": "string",
"description": "Leads the answer when there is something to say: no image matched (an empty result - try different words), the search was auto-corrected, or the first page has no strong result and shows the closest available."
},
"total": {
"type": "number",
"description": "Total number of matching images."
},
"images": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"thumbnail_url",
"canonical_url",
"page_url",
"citation"
],
"properties": {
"id": {
"type": "string",
"description": "Image UUID."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Topic tag slugs."
},
"chart": {
"type": [
"object",
"null"
],
"properties": {
"unit": {
"type": [
"string",
"null"
],
"description": "Measurement unit, when the underlying indicators agree on one. For an extracted row, the unit as printed on the image."
},
"title": {
"type": [
"string",
"null"
],
"description": "Chart title as published upstream, or as printed on the image when provenance is \"extracted\"."
},
"series": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Image id of the edition."
},
"published_at": {
"type": [
"string",
"null"
],
"description": "Release date."
},
"rendered_period": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": "number",
"description": "Last year shown."
},
"start": {
"type": "number",
"description": "First year shown."
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"description": "Every visible edition of this chart, newest first (get_image only)."
},
"source": {
"type": "string",
"description": "Source key: \"owid\", \"usda_ers\", \"eurostat\", \"eea\", or \"extracted\" (read from the image)."
},
"regions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Entities plotted, exactly as the chart names them (e.g. \"World\", \"Germany\")."
},
"provenance": {
"enum": [
"authoritative",
"extracted"
],
"type": "string",
"description": "How this metadata was captured: read from the source's own structured feed ('authoritative'), or read off the chart image itself ('extracted')."
},
"series_key": {
"type": [
"string",
"null"
],
"description": "Editions of one chart share this key; null when the chart is not part of a series."
},
"source_url": {
"type": [
"string",
"null"
],
"description": "Canonical URL for the chart at its upstream source. Null for an extracted row."
},
"superseded": {
"type": "boolean",
"description": "True when the upstream source has published data newer than this snapshot."
},
"published_at": {
"type": [
"string",
"null"
],
"description": "The publisher's release date for this edition (YYYY-MM-DD)."
},
"citation_long": {
"type": [
"string",
"null"
],
"description": "Full academic citation for the upstream dataset. Null for an extracted row."
},
"citation_short": {
"type": [
"string",
"null"
],
"description": "Short attribution line for the upstream dataset, or the source line as printed on the image when provenance is \"extracted\"."
},
"rendered_period": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": "number",
"description": "Last year the chart displays."
},
"start": {
"type": "number",
"description": "First year the chart displays."
},
"evidence": {
"type": "string",
"description": "OCR substring the period was grounded on."
}
},
"description": "The period the chart PROVABLY displays, grounded in its own OCR text - null when no period could be proven. Never a guess, and never the wider history in dataset_timespan.",
"additionalProperties": true
},
"dataset_timespan": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": [
"number",
"null"
],
"description": "Latest year in the dataset, when known."
},
"raw": {
"type": [
"string",
"null"
],
"description": "The dataset timespan as published upstream, verbatim."
},
"start": {
"type": [
"number",
"null"
],
"description": "Earliest year in the dataset, when known."
}
},
"description": "The underlying dataset's own history - display-only context, NOT the period this chart shows (see rendered_period). Never usable as a date filter.",
"additionalProperties": true
}
},
"description": "Structured source metadata for a chart, map or infographic, present only when MemeStack holds a record for this image (an image_chart_meta row). Absent or null means no stored metadata - never a signal that the image is not a chart.",
"additionalProperties": true
},
"match": {
"enum": [
"strong",
"closest"
],
"type": "string",
"description": "Honest search: strong = a real answer, closest = the nearest miss. Present only when the API labelled the result."
},
"width": {
"type": "number",
"description": "Original width in pixels."
},
"height": {
"type": "number",
"description": "Original height in pixels."
},
"rights": {
"type": "object",
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "The one condition or caveat that changes what you may do, or null."
},
"source": {
"enum": [
"publisher",
"creator",
"community"
],
"type": "string",
"description": "publisher = imported from a licence-clean publisher (Our World in Data, USDA ERS, Eurostat, EEA); creator = a Verified Creator's own upload (all rights reserved); community = everything else (uploads, bot saves, imports, AI images) - MemeStack grants no licence to it."
},
"license": {
"enum": [
"CC-BY-4.0",
"US-PD",
"all-rights-reserved",
null
],
"type": [
"string",
"null"
],
"description": "Licence id (\"US-PD\" = U.S. federal public domain); null = no licence known."
},
"publisher": {
"type": [
"object",
"null"
],
"properties": {
"key": {
"type": "string",
"description": "Publisher key: \"owid\", \"usda_ers\", \"eurostat\" or \"eea\"."
},
"name": {
"type": "string",
"description": "Publisher name."
}
},
"description": "The publisher of a publisher image; null otherwise.",
"additionalProperties": true
},
"attribution": {
"type": "string",
"description": "The credit line to show beside the image (the line a publisher licence asks for; otherwise where the image came from, never who owns it)."
},
"license_url": {
"type": [
"string",
"null"
],
"description": "The licence text, or the creator terms."
},
"license_name": {
"type": [
"string",
"null"
],
"description": "Human licence label, e.g. \"CC BY 4.0\"."
},
"commercial_use": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "yes only for USDA ERS, Eurostat and EEA charts; no for creator work; unknown for Our World in Data (a chart may plot third-party data under its own terms) and every community image."
},
"attribution_required": {
"type": "boolean",
"description": "True for publisher charts and creator work."
}
},
"description": "What you may do with the image, as far as MemeStack knows - 'unknown' wherever it knows nothing, never a guess. The citation says how to credit an image; this says whether it may be reused.",
"additionalProperties": true
},
"caption": {
"type": "string",
"description": "AI-generated caption."
},
"citation": {
"type": "object",
"required": [
"site",
"page_url",
"markdown",
"html",
"plain"
],
"properties": {
"html": {
"type": "string",
"description": "Attribution as HTML."
},
"site": {
"type": "string",
"description": "Always \"MemeStack\"."
},
"plain": {
"type": "string",
"description": "Attribution as plain text."
},
"markdown": {
"type": "string",
"description": "Attribution as Markdown."
},
"original": {
"type": "object",
"required": [
"title",
"credit",
"source_url"
],
"properties": {
"year": {
"type": [
"number",
"null"
],
"description": "Year the original was made or first posted; null when the source gives none."
},
"title": {
"type": "string",
"description": "The meme as usually named."
},
"credit": {
"type": "string",
"description": "Who or what the original is, e.g. \"by KC Green, from his webcomic Gunshow (\\\"On Fire\\\")\"."
},
"source_url": {
"type": "string",
"description": "The page the credit was checked against."
}
},
"description": "Who made the ORIGINAL of the recognised meme (e.g. This Is Fine by KC Green), from a hand-checked list with sources. Present only when that list knows the meme; it credits the meme's origin, not this image's uploader, and grants no rights.",
"additionalProperties": true
},
"page_url": {
"type": "string",
"description": "Canonical MemeStack gallery page for the image."
},
"site_url": {
"type": "string",
"description": "The MemeStack site URL."
},
"canonical_url": {
"type": "string",
"description": "Full-resolution image URL."
},
"source_origin": {
"type": [
"string",
"null"
],
"description": "Origin: 'owid' | 'usda_ers' | 'eurostat' | 'eea' | 'imgflip' | '4chan' | 'telegram' | 'generated' | 'mcp' | 'x' | 'web' | 'reverse' | 'unknown' | null (null = a direct upload)."
},
"thumbnail_url": {
"type": "string",
"description": "Thumbnail URL sized for display (?w=384: a lighter rendition about 384 px wide where one exists)."
},
"academic_citation": {
"type": "string",
"description": "Full upstream academic citation, present only when the image has stored chart metadata with one."
},
"source_external_url": {
"type": [
"string",
"null"
],
"description": "External source URL — the Our World in Data chart, the chart publisher's page, or the X post; null otherwise."
},
"attribution_required": {
"type": "boolean",
"description": "True when the licence or the rights holder requires attribution: Our World in Data, the chart publishers (USDA ERS, Eurostat, EEA), and a verified creator's own work."
},
"uploader_display_name": {
"type": [
"string",
"null"
],
"description": "Uploader name, or null when absent/withheld."
},
"attribution_recommended": {
"type": "boolean",
"description": "Always true — attribution is recommended."
}
},
"description": "Ready-to-paste attribution for this image in three formats, plus source metadata.",
"additionalProperties": true
},
"page_url": {
"type": "string",
"description": "MemeStack gallery page URL."
},
"free_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free-form tag slugs."
},
"zap_count": {
"type": "number",
"description": "Number of Lightning zaps."
},
"created_at": {
"type": "string",
"description": "ISO 8601 creation timestamp."
},
"like_count": {
"type": "number",
"description": "Number of likes."
},
"save_count": {
"type": "number",
"description": "Number of saves."
},
"canonical_url": {
"type": "string",
"description": "Full-resolution image URL."
},
"controversial": {
"type": "boolean",
"description": "True when MemeStack classifies the image as controversial (likely to offend or divide a general audience). The list tools exclude such images unless include_controversial is true; by-id tools always answer and carry this flag. Absent when the API answer predates the flag."
},
"thumbnail_url": {
"type": "string",
"description": "Thumbnail URL sized for display (?w=384: a lighter rendition about 384 px wide where one exists)."
},
"zap_total_sats": {
"type": "number",
"description": "Total sats zapped."
},
"meme_template_name": {
"type": [
"string",
"null"
],
"description": "Recognised meme template, if any."
},
"uploader_display_name": {
"type": [
"string",
"null"
],
"description": "Uploader name, or null."
}
},
"description": "A gallery image (lean list fields) with attribution.",
"additionalProperties": true
},
"description": "Images whose OCR text matched."
},
"has_more": {
"type": "boolean",
"description": "Present when the API labelled the results: true when more results follow this page."
},
"match_quality": {
"enum": [
"strong",
"closest_only",
"none"
],
"type": "string",
"description": "Present when the API labelled the results: strong = the search has at least one strong match (they lead the first page); closest_only = no strong match anywhere, every result is the nearest guess - do not present it as the answer; none = nothing on this page and no strong match."
},
"corrected_query": {
"type": "string",
"description": "Present when the search found no strong match for the words as typed and ran again with this corrected wording: the results are for it. Tell the user."
},
"citations_combined": {
"type": "object",
"required": [
"markdown",
"html",
"plain"
],
"properties": {
"html": {
"type": "string",
"description": "Numbered attribution list as HTML."
},
"plain": {
"type": "string",
"description": "Numbered attribution list as plain text."
},
"markdown": {
"type": "string",
"description": "Numbered attribution list as Markdown."
}
},
"description": "Combined attribution for all images in this response, in three formats.",
"additionalProperties": false
}
},
"additionalProperties": true
}{
"tier": "free",
"title": "Search OCR Text",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}find_meme_for_text
Find a meme or reaction image for an idea, a mood or a sentence, ready to paste with its citation. Use it when writing a post, an article or a reply and you need a meme to make the point. Returns only images tagged as memes (the gallery's Memes filter), so it may come back empty when no meme fits. To search every kind of image, use search_images. When corrected_query is present, the results are for that corrected wording, not the words as typed - say so to the user. Results exclude images classified controversial unless include_controversial is true.
{
"type": "object",
"required": [
"vibe"
],
"properties": {
"vibe": {
"type": "string",
"description": "The core idea in one to three words, e.g. \"procrastination\", \"burnout\" or \"imposter syndrome\". Every extra word narrows the match: a long descriptive phrase finds only weaker \"closest\" results, so leave out synonyms and words like \"funny\" or \"relatable\"."
},
"limit": {
"type": "number",
"description": "How many memes to return (1-20, default 5)"
},
"include_controversial": {
"type": "boolean",
"description": "Include images classified controversial (excluded by default)."
}
}
}{
"type": "object",
"required": [
"images"
],
"properties": {
"note": {
"type": "string",
"description": "Leads the answer when there is something to say: no image matched (an empty result - try different words), the search was auto-corrected, or the first page has no strong result and shows the closest available."
},
"images": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"thumbnail_url",
"canonical_url",
"page_url",
"citation"
],
"properties": {
"id": {
"type": "string",
"description": "Image UUID."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Topic tag slugs."
},
"chart": {
"type": [
"object",
"null"
],
"properties": {
"unit": {
"type": [
"string",
"null"
],
"description": "Measurement unit, when the underlying indicators agree on one. For an extracted row, the unit as printed on the image."
},
"title": {
"type": [
"string",
"null"
],
"description": "Chart title as published upstream, or as printed on the image when provenance is \"extracted\"."
},
"series": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Image id of the edition."
},
"published_at": {
"type": [
"string",
"null"
],
"description": "Release date."
},
"rendered_period": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": "number",
"description": "Last year shown."
},
"start": {
"type": "number",
"description": "First year shown."
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"description": "Every visible edition of this chart, newest first (get_image only)."
},
"source": {
"type": "string",
"description": "Source key: \"owid\", \"usda_ers\", \"eurostat\", \"eea\", or \"extracted\" (read from the image)."
},
"regions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Entities plotted, exactly as the chart names them (e.g. \"World\", \"Germany\")."
},
"provenance": {
"enum": [
"authoritative",
"extracted"
],
"type": "string",
"description": "How this metadata was captured: read from the source's own structured feed ('authoritative'), or read off the chart image itself ('extracted')."
},
"series_key": {
"type": [
"string",
"null"
],
"description": "Editions of one chart share this key; null when the chart is not part of a series."
},
"source_url": {
"type": [
"string",
"null"
],
"description": "Canonical URL for the chart at its upstream source. Null for an extracted row."
},
"superseded": {
"type": "boolean",
"description": "True when the upstream source has published data newer than this snapshot."
},
"published_at": {
"type": [
"string",
"null"
],
"description": "The publisher's release date for this edition (YYYY-MM-DD)."
},
"citation_long": {
"type": [
"string",
"null"
],
"description": "Full academic citation for the upstream dataset. Null for an extracted row."
},
"citation_short": {
"type": [
"string",
"null"
],
"description": "Short attribution line for the upstream dataset, or the source line as printed on the image when provenance is \"extracted\"."
},
"rendered_period": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": "number",
"description": "Last year the chart displays."
},
"start": {
"type": "number",
"description": "First year the chart displays."
},
"evidence": {
"type": "string",
"description": "OCR substring the period was grounded on."
}
},
"description": "The period the chart PROVABLY displays, grounded in its own OCR text - null when no period could be proven. Never a guess, and never the wider history in dataset_timespan.",
"additionalProperties": true
},
"dataset_timespan": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": [
"number",
"null"
],
"description": "Latest year in the dataset, when known."
},
"raw": {
"type": [
"string",
"null"
],
"description": "The dataset timespan as published upstream, verbatim."
},
"start": {
"type": [
"number",
"null"
],
"description": "Earliest year in the dataset, when known."
}
},
"description": "The underlying dataset's own history - display-only context, NOT the period this chart shows (see rendered_period). Never usable as a date filter.",
"additionalProperties": true
}
},
"description": "Structured source metadata for a chart, map or infographic, present only when MemeStack holds a record for this image (an image_chart_meta row). Absent or null means no stored metadata - never a signal that the image is not a chart.",
"additionalProperties": true
},
"match": {
"enum": [
"strong",
"closest"
],
"type": "string",
"description": "Honest search: strong = a real answer, closest = the nearest miss. Present only when the API labelled the result."
},
"width": {
"type": "number",
"description": "Original width in pixels."
},
"height": {
"type": "number",
"description": "Original height in pixels."
},
"rights": {
"type": "object",
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "The one condition or caveat that changes what you may do, or null."
},
"source": {
"enum": [
"publisher",
"creator",
"community"
],
"type": "string",
"description": "publisher = imported from a licence-clean publisher (Our World in Data, USDA ERS, Eurostat, EEA); creator = a Verified Creator's own upload (all rights reserved); community = everything else (uploads, bot saves, imports, AI images) - MemeStack grants no licence to it."
},
"license": {
"enum": [
"CC-BY-4.0",
"US-PD",
"all-rights-reserved",
null
],
"type": [
"string",
"null"
],
"description": "Licence id (\"US-PD\" = U.S. federal public domain); null = no licence known."
},
"publisher": {
"type": [
"object",
"null"
],
"properties": {
"key": {
"type": "string",
"description": "Publisher key: \"owid\", \"usda_ers\", \"eurostat\" or \"eea\"."
},
"name": {
"type": "string",
"description": "Publisher name."
}
},
"description": "The publisher of a publisher image; null otherwise.",
"additionalProperties": true
},
"attribution": {
"type": "string",
"description": "The credit line to show beside the image (the line a publisher licence asks for; otherwise where the image came from, never who owns it)."
},
"license_url": {
"type": [
"string",
"null"
],
"description": "The licence text, or the creator terms."
},
"license_name": {
"type": [
"string",
"null"
],
"description": "Human licence label, e.g. \"CC BY 4.0\"."
},
"commercial_use": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "yes only for USDA ERS, Eurostat and EEA charts; no for creator work; unknown for Our World in Data (a chart may plot third-party data under its own terms) and every community image."
},
"attribution_required": {
"type": "boolean",
"description": "True for publisher charts and creator work."
}
},
"description": "What you may do with the image, as far as MemeStack knows - 'unknown' wherever it knows nothing, never a guess. The citation says how to credit an image; this says whether it may be reused.",
"additionalProperties": true
},
"caption": {
"type": "string",
"description": "AI-generated caption."
},
"citation": {
"type": "object",
"required": [
"site",
"page_url",
"markdown",
"html",
"plain"
],
"properties": {
"html": {
"type": "string",
"description": "Attribution as HTML."
},
"site": {
"type": "string",
"description": "Always \"MemeStack\"."
},
"plain": {
"type": "string",
"description": "Attribution as plain text."
},
"markdown": {
"type": "string",
"description": "Attribution as Markdown."
},
"original": {
"type": "object",
"required": [
"title",
"credit",
"source_url"
],
"properties": {
"year": {
"type": [
"number",
"null"
],
"description": "Year the original was made or first posted; null when the source gives none."
},
"title": {
"type": "string",
"description": "The meme as usually named."
},
"credit": {
"type": "string",
"description": "Who or what the original is, e.g. \"by KC Green, from his webcomic Gunshow (\\\"On Fire\\\")\"."
},
"source_url": {
"type": "string",
"description": "The page the credit was checked against."
}
},
"description": "Who made the ORIGINAL of the recognised meme (e.g. This Is Fine by KC Green), from a hand-checked list with sources. Present only when that list knows the meme; it credits the meme's origin, not this image's uploader, and grants no rights.",
"additionalProperties": true
},
"page_url": {
"type": "string",
"description": "Canonical MemeStack gallery page for the image."
},
"site_url": {
"type": "string",
"description": "The MemeStack site URL."
},
"canonical_url": {
"type": "string",
"description": "Full-resolution image URL."
},
"source_origin": {
"type": [
"string",
"null"
],
"description": "Origin: 'owid' | 'usda_ers' | 'eurostat' | 'eea' | 'imgflip' | '4chan' | 'telegram' | 'generated' | 'mcp' | 'x' | 'web' | 'reverse' | 'unknown' | null (null = a direct upload)."
},
"thumbnail_url": {
"type": "string",
"description": "Thumbnail URL sized for display (?w=384: a lighter rendition about 384 px wide where one exists)."
},
"academic_citation": {
"type": "string",
"description": "Full upstream academic citation, present only when the image has stored chart metadata with one."
},
"source_external_url": {
"type": [
"string",
"null"
],
"description": "External source URL — the Our World in Data chart, the chart publisher's page, or the X post; null otherwise."
},
"attribution_required": {
"type": "boolean",
"description": "True when the licence or the rights holder requires attribution: Our World in Data, the chart publishers (USDA ERS, Eurostat, EEA), and a verified creator's own work."
},
"uploader_display_name": {
"type": [
"string",
"null"
],
"description": "Uploader name, or null when absent/withheld."
},
"attribution_recommended": {
"type": "boolean",
"description": "Always true — attribution is recommended."
}
},
"description": "Ready-to-paste attribution for this image in three formats, plus source metadata.",
"additionalProperties": true
},
"page_url": {
"type": "string",
"description": "MemeStack gallery page URL."
},
"free_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free-form tag slugs."
},
"zap_count": {
"type": "number",
"description": "Number of Lightning zaps."
},
"created_at": {
"type": "string",
"description": "ISO 8601 creation timestamp."
},
"like_count": {
"type": "number",
"description": "Number of likes."
},
"save_count": {
"type": "number",
"description": "Number of saves."
},
"canonical_url": {
"type": "string",
"description": "Full-resolution image URL."
},
"controversial": {
"type": "boolean",
"description": "True when MemeStack classifies the image as controversial (likely to offend or divide a general audience). The list tools exclude such images unless include_controversial is true; by-id tools always answer and carry this flag. Absent when the API answer predates the flag."
},
"thumbnail_url": {
"type": "string",
"description": "Thumbnail URL sized for display (?w=384: a lighter rendition about 384 px wide where one exists)."
},
"zap_total_sats": {
"type": "number",
"description": "Total sats zapped."
},
"meme_template_name": {
"type": [
"string",
"null"
],
"description": "Recognised meme template, if any."
},
"uploader_display_name": {
"type": [
"string",
"null"
],
"description": "Uploader name, or null."
}
},
"description": "A gallery image (lean list fields) with attribution.",
"additionalProperties": true
},
"description": "Memes that capture the requested vibe, best-first: only images tagged as memes (the gallery's Memes filter). May come back empty when no meme fits."
},
"has_more": {
"type": "boolean",
"description": "Present when the API labelled the results: true when more results follow this page."
},
"match_quality": {
"enum": [
"strong",
"closest_only",
"none"
],
"type": "string",
"description": "Present when the API labelled the results: strong = the search has at least one strong match (they lead the first page); closest_only = no strong match anywhere, every result is the nearest guess - do not present it as the answer; none = nothing on this page and no strong match."
},
"query_language": {
"type": "string",
"description": "Present with translated_query: the ISO 639-1 code of the query language, e.g. \"fr\"."
},
"corrected_query": {
"type": "string",
"description": "Present when the search found no strong match for the words as typed and ran again with this corrected wording: the results are for it. Tell the user."
},
"translated_query": {
"type": "string",
"description": "Present only when the query was not English: the English text it was also searched as (those results are merged in)."
},
"citations_combined": {
"type": "object",
"required": [
"markdown",
"html",
"plain"
],
"properties": {
"html": {
"type": "string",
"description": "Numbered attribution list as HTML."
},
"plain": {
"type": "string",
"description": "Numbered attribution list as plain text."
},
"markdown": {
"type": "string",
"description": "Numbered attribution list as Markdown."
}
},
"description": "Combined attribution for all images in this response, in three formats.",
"additionalProperties": false
}
},
"additionalProperties": true
}{
"tier": "free",
"title": "Find Meme For Text",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}cite_image
Get ready-to-paste citations for one or more MemeStack images (memes, charts, screenshots): markdown, HTML and plain text naming the source and licence, plus a combined block for citing several images at once. Up to 50 ids per call.
{
"type": "object",
"required": [
"image_ids"
],
"properties": {
"image_ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"description": "Up to 50 image UUIDs"
}
}
}{
"type": "object",
"required": [
"citations",
"combined",
"missing_ids"
],
"properties": {
"combined": {
"type": "object",
"required": [
"markdown",
"html",
"plain"
],
"properties": {
"html": {
"type": "string",
"description": "Numbered attribution list as HTML."
},
"plain": {
"type": "string",
"description": "Numbered attribution list as plain text."
},
"markdown": {
"type": "string",
"description": "Numbered attribution list as Markdown."
}
},
"description": "Combined attribution for all images in this response, in three formats.",
"additionalProperties": false
},
"citations": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"markdown",
"html",
"plain"
],
"properties": {
"id": {
"type": "string",
"description": "Image UUID."
},
"html": {
"type": "string",
"description": "Attribution as HTML."
},
"plain": {
"type": "string",
"description": "Attribution as plain text."
},
"rights": {
"type": "object",
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "The one condition or caveat that changes what you may do, or null."
},
"source": {
"enum": [
"publisher",
"creator",
"community"
],
"type": "string",
"description": "publisher = imported from a licence-clean publisher (Our World in Data, USDA ERS, Eurostat, EEA); creator = a Verified Creator's own upload (all rights reserved); community = everything else (uploads, bot saves, imports, AI images) - MemeStack grants no licence to it."
},
"license": {
"enum": [
"CC-BY-4.0",
"US-PD",
"all-rights-reserved",
null
],
"type": [
"string",
"null"
],
"description": "Licence id (\"US-PD\" = U.S. federal public domain); null = no licence known."
},
"publisher": {
"type": [
"object",
"null"
],
"properties": {
"key": {
"type": "string",
"description": "Publisher key: \"owid\", \"usda_ers\", \"eurostat\" or \"eea\"."
},
"name": {
"type": "string",
"description": "Publisher name."
}
},
"description": "The publisher of a publisher image; null otherwise.",
"additionalProperties": true
},
"attribution": {
"type": "string",
"description": "The credit line to show beside the image (the line a publisher licence asks for; otherwise where the image came from, never who owns it)."
},
"license_url": {
"type": [
"string",
"null"
],
"description": "The licence text, or the creator terms."
},
"license_name": {
"type": [
"string",
"null"
],
"description": "Human licence label, e.g. \"CC BY 4.0\"."
},
"commercial_use": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "yes only for USDA ERS, Eurostat and EEA charts; no for creator work; unknown for Our World in Data (a chart may plot third-party data under its own terms) and every community image."
},
"attribution_required": {
"type": "boolean",
"description": "True for publisher charts and creator work."
}
},
"description": "What you may do with the image, as far as MemeStack knows - 'unknown' wherever it knows nothing, never a guess. The citation says how to credit an image; this says whether it may be reused.",
"additionalProperties": true
},
"markdown": {
"type": "string",
"description": "Attribution as Markdown."
},
"original": {
"type": "object",
"required": [
"title",
"credit",
"source_url"
],
"properties": {
"year": {
"type": [
"number",
"null"
],
"description": "Year the original was made or first posted; null when the source gives none."
},
"title": {
"type": "string",
"description": "The meme as usually named."
},
"credit": {
"type": "string",
"description": "Who or what the original is, e.g. \"by KC Green, from his webcomic Gunshow (\\\"On Fire\\\")\"."
},
"source_url": {
"type": "string",
"description": "The page the credit was checked against."
}
},
"description": "Who made the ORIGINAL of the recognised meme (e.g. This Is Fine by KC Green), from a hand-checked list with sources. Present only when that list knows the meme; it credits the meme's origin, not this image's uploader, and grants no rights.",
"additionalProperties": true
},
"controversial": {
"type": "boolean",
"description": "True when MemeStack classifies the image as controversial (likely to offend or divide a general audience). The list tools exclude such images unless include_controversial is true; by-id tools always answer and carry this flag. Absent when the API answer predates the flag."
}
},
"additionalProperties": true
},
"description": "One citation per resolved image ID."
},
"missing_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Requested IDs that could not be resolved."
}
},
"description": "Per-image and combined citations for the requested image IDs.",
"additionalProperties": true
}{
"tier": "free",
"title": "Cite Image",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}reverse_image_search
Find a meme, chart or screenshot on MemeStack from a copy of the image - to name a meme or find where an image came from: give an HTTPS image URL, or a `data:image/...;base64,...` URL for bytes pasted into the conversation, and get the same or visually similar images with their source and citation. Matches by perceptual hash (dHash hamming distance), so it finds copies and edits, not images about the same topic. Heavily rate-limited (10/min/IP) since each call hashes the input. Results exclude images classified controversial unless include_controversial is true.
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "HTTPS image URL, or data:image/(jpeg|png|webp);base64,... URL"
},
"limit": {
"type": "number",
"description": "Max results (1-20, default 10)"
},
"include_controversial": {
"type": "boolean",
"description": "Include images classified controversial (excluded by default)."
}
}
}{
"type": "object",
"required": [
"similar"
],
"properties": {
"note": {
"type": "string",
"description": "Present only when the answer is empty: says no image on MemeStack looks like the input."
},
"similar": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"thumbnail_url",
"canonical_url",
"page_url",
"citation"
],
"properties": {
"id": {
"type": "string",
"description": "Image UUID."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Topic tag slugs."
},
"chart": {
"type": [
"object",
"null"
],
"properties": {
"unit": {
"type": [
"string",
"null"
],
"description": "Measurement unit, when the underlying indicators agree on one. For an extracted row, the unit as printed on the image."
},
"title": {
"type": [
"string",
"null"
],
"description": "Chart title as published upstream, or as printed on the image when provenance is \"extracted\"."
},
"series": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Image id of the edition."
},
"published_at": {
"type": [
"string",
"null"
],
"description": "Release date."
},
"rendered_period": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": "number",
"description": "Last year shown."
},
"start": {
"type": "number",
"description": "First year shown."
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"description": "Every visible edition of this chart, newest first (get_image only)."
},
"source": {
"type": "string",
"description": "Source key: \"owid\", \"usda_ers\", \"eurostat\", \"eea\", or \"extracted\" (read from the image)."
},
"regions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Entities plotted, exactly as the chart names them (e.g. \"World\", \"Germany\")."
},
"provenance": {
"enum": [
"authoritative",
"extracted"
],
"type": "string",
"description": "How this metadata was captured: read from the source's own structured feed ('authoritative'), or read off the chart image itself ('extracted')."
},
"series_key": {
"type": [
"string",
"null"
],
"description": "Editions of one chart share this key; null when the chart is not part of a series."
},
"source_url": {
"type": [
"string",
"null"
],
"description": "Canonical URL for the chart at its upstream source. Null for an extracted row."
},
"superseded": {
"type": "boolean",
"description": "True when the upstream source has published data newer than this snapshot."
},
"published_at": {
"type": [
"string",
"null"
],
"description": "The publisher's release date for this edition (YYYY-MM-DD)."
},
"citation_long": {
"type": [
"string",
"null"
],
"description": "Full academic citation for the upstream dataset. Null for an extracted row."
},
"citation_short": {
"type": [
"string",
"null"
],
"description": "Short attribution line for the upstream dataset, or the source line as printed on the image when provenance is \"extracted\"."
},
"rendered_period": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": "number",
"description": "Last year the chart displays."
},
"start": {
"type": "number",
"description": "First year the chart displays."
},
"evidence": {
"type": "string",
"description": "OCR substring the period was grounded on."
}
},
"description": "The period the chart PROVABLY displays, grounded in its own OCR text - null when no period could be proven. Never a guess, and never the wider history in dataset_timespan.",
"additionalProperties": true
},
"dataset_timespan": {
"type": [
"object",
"null"
],
"properties": {
"end": {
"type": [
"number",
"null"
],
"description": "Latest year in the dataset, when known."
},
"raw": {
"type": [
"string",
"null"
],
"description": "The dataset timespan as published upstream, verbatim."
},
"start": {
"type": [
"number",
"null"
],
"description": "Earliest year in the dataset, when known."
}
},
"description": "The underlying dataset's own history - display-only context, NOT the period this chart shows (see rendered_period). Never usable as a date filter.",
"additionalProperties": true
}
},
"description": "Structured source metadata for a chart, map or infographic, present only when MemeStack holds a record for this image (an image_chart_meta row). Absent or null means no stored metadata - never a signal that the image is not a chart.",
"additionalProperties": true
},
"match": {
"enum": [
"strong",
"closest"
],
"type": "string",
"description": "Honest search: strong = a real answer, closest = the nearest miss. Present only when the API labelled the result."
},
"width": {
"type": "number",
"description": "Original width in pixels."
},
"height": {
"type": "number",
"description": "Original height in pixels."
},
"rights": {
"type": "object",
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "The one condition or caveat that changes what you may do, or null."
},
"source": {
"enum": [
"publisher",
"creator",
"community"
],
"type": "string",
"description": "publisher = imported from a licence-clean publisher (Our World in Data, USDA ERS, Eurostat, EEA); creator = a Verified Creator's own upload (all rights reserved); community = everything else (uploads, bot saves, imports, AI images) - MemeStack grants no licence to it."
},
"license": {
"enum": [
"CC-BY-4.0",
"US-PD",
"all-rights-reserved",
null
],
"type": [
"string",
"null"
],
"description": "Licence id (\"US-PD\" = U.S. federal public domain); null = no licence known."
},
"publisher": {
"type": [
"object",
"null"
],
"properties": {
"key": {
"type": "string",
"description": "Publisher key: \"owid\", \"usda_ers\", \"eurostat\" or \"eea\"."
},
"name": {
"type": "string",
"description": "Publisher name."
}
},
"description": "The publisher of a publisher image; null otherwise.",
"additionalProperties": true
},
"attribution": {
"type": "string",
"description": "The credit line to show beside the image (the line a publisher licence asks for; otherwise where the image came from, never who owns it)."
},
"license_url": {
"type": [
"string",
"null"
],
"description": "The licence text, or the creator terms."
},
"license_name": {
"type": [
"string",
"null"
],
"description": "Human licence label, e.g. \"CC BY 4.0\"."
},
"commercial_use": {
"enum": [
"yes",
"no",
"unknown"
],
"type": "string",
"description": "yes only for USDA ERS, Eurostat and EEA charts; no for creator work; unknown for Our World in Data (a chart may plot third-party data under its own terms) and every community image."
},
"attribution_required": {
"type": "boolean",
"description": "True for publisher charts and creator work."
}
},
"description": "What you may do with the image, as far as MemeStack knows - 'unknown' wherever it knows nothing, never a guess. The citation says how to credit an image; this says whether it may be reused.",
"additionalProperties": true
},
"caption": {
"type": "string",
"description": "AI-generated caption."
},
"citation": {
"type": "object",
"required": [
"site",
"page_url",
"markdown",
"html",
"plain"
],
"properties": {
"html": {
"type": "string",
"description": "Attribution as HTML."
},
"site": {
"type": "string",
"description": "Always \"MemeStack\"."
},
"plain": {
"type": "string",
"description": "Attribution as plain text."
},
"markdown": {
"type": "string",
"description": "Attribution as Markdown."
},
"original": {
"type": "object",
"required": [
"title",
"credit",
"source_url"
],
"properties": {
"year": {
"type": [
"number",
"null"
],
"description": "Year the original was made or first posted; null when the source gives none."
},
"title": {
"type": "string",
"description": "The meme as usually named."
},
"credit": {
"type": "string",
"description": "Who or what the original is, e.g. \"by KC Green, from his webcomic Gunshow (\\\"On Fire\\\")\"."
},
"source_url": {
"type": "string",
"description": "The page the credit was checked against."
}
},
"description": "Who made the ORIGINAL of the recognised meme (e.g. This Is Fine by KC Green), from a hand-checked list with sources. Present only when that list knows the meme; it credits the meme's origin, not this image's uploader, and grants no rights.",
"additionalProperties": true
},
"page_url": {
"type": "string",
"description": "Canonical MemeStack gallery page for the image."
},
"site_url": {
"type": "string",
"description": "The MemeStack site URL."
},
"canonical_url": {
"type": "string",
"description": "Full-resolution image URL."
},
"source_origin": {
"type": [
"string",
"null"
],
"description": "Origin: 'owid' | 'usda_ers' | 'eurostat' | 'eea' | 'imgflip' | '4chan' | 'telegram' | 'generated' | 'mcp' | 'x' | 'web' | 'reverse' | 'unknown' | null (null = a direct upload)."
},
"thumbnail_url": {
"type": "string",
"description": "Thumbnail URL sized for display (?w=384: a lighter rendition about 384 px wide where one exists)."
},
"academic_citation": {
"type": "string",
"description": "Full upstream academic citation, present only when the image has stored chart metadata with one."
},
"source_external_url": {
"type": [
"string",
"null"
],
"description": "External source URL — the Our World in Data chart, the chart publisher's page, or the X post; null otherwise."
},
"attribution_required": {
"type": "boolean",
"description": "True when the licence or the rights holder requires attribution: Our World in Data, the chart publishers (USDA ERS, Eurostat, EEA), and a verified creator's own work."
},
"uploader_display_name": {
"type": [
"string",
"null"
],
"description": "Uploader name, or null when absent/withheld."
},
"attribution_recommended": {
"type": "boolean",
"description": "Always true — attribution is recommended."
}
},
"description": "Ready-to-paste attribution for this image in three formats, plus source metadata.",
"additionalProperties": true
},
"page_url": {
"type": "string",
"description": "MemeStack gallery page URL."
},
"free_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free-form tag slugs."
},
"zap_count": {
"type": "number",
"description": "Number of Lightning zaps."
},
"created_at": {
"type": "string",
"description": "ISO 8601 creation timestamp."
},
"like_count": {
"type": "number",
"description": "Number of likes."
},
"save_count": {
"type": "number",
"description": "Number of saves."
},
"similarity": {
"type": "number",
"description": "Visual-similarity score (find_similar / reverse_image_search)."
},
"canonical_url": {
"type": "string",
"description": "Full-resolution image URL."
},
"controversial": {
"type": "boolean",
"description": "True when MemeStack classifies the image as controversial (likely to offend or divide a general audience). The list tools exclude such images unless include_controversial is true; by-id tools always answer and carry this flag. Absent when the API answer predates the flag."
},
"thumbnail_url": {
"type": "string",
"description": "Thumbnail URL sized for display (?w=384: a lighter rendition about 384 px wide where one exists)."
},
"zap_total_sats": {
"type": "number",
"description": "Total sats zapped."
},
"relevance_score": {
"type": "number",
"description": "Semantic-relevance score (find_related)."
},
"meme_template_name": {
"type": [
"string",
"null"
],
"description": "Recognised meme template, if any."
},
"uploader_display_name": {
"type": [
"string",
"null"
],
"description": "Uploader name, or null."
}
},
"description": "A gallery image (compact fields) with a ranking score and attribution.",
"additionalProperties": true
},
"description": "Visually similar images."
},
"input_meta": {
"type": "object",
"properties": {
"phash": {
"type": "string",
"description": "Perceptual hash of the input."
},
"mime_type": {
"type": "string",
"description": "Input MIME type."
},
"size_bytes": {
"type": "number",
"description": "Input size in bytes."
}
},
"description": "Computed metadata for the input image.",
"additionalProperties": true
},
"citations_combined": {
"type": "object",
"required": [
"markdown",
"html",
"plain"
],
"properties": {
"html": {
"type": "string",
"description": "Numbered attribution list as HTML."
},
"plain": {
"type": "string",
"description": "Numbered attribution list as plain text."
},
"markdown": {
"type": "string",
"description": "Numbered attribution list as Markdown."
}
},
"description": "Combined attribution for all images in this response, in three formats.",
"additionalProperties": false
}
},
"description": "Visually similar gallery images for the input image, plus input metadata.",
"additionalProperties": true
}{
"tier": "free",
"title": "Reverse Image Search",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}submit_image
Submit an image to the MemeStack review queue. Paid tool - $0.10 per submission, paid in sats over Lightning at the current BTC/USD rate or in USDC on Base 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).
{
"type": "object",
"required": [
"image_url"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 10,
"description": "Optional tag hints (max 10)."
},
"caption": {
"type": "string",
"maxLength": 200,
"description": "Optional caption hint for the AI tagger (admin-visible, never published verbatim)."
},
"image_url": {
"type": "string",
"description": "HTTPS image URL, or data:image/(jpeg|png|webp);base64,... URL. Max 8MB."
},
"attribution": {
"type": "string",
"maxLength": 200,
"description": "Optional credit line for the original creator/source (shown to moderators, not published)."
}
}
}{
"type": "object",
"required": [
"image_id",
"status"
],
"properties": {
"status": {
"type": "string",
"description": "Always 'pending_review' on success — accepted, awaiting human moderation."
},
"image_id": {
"type": "string",
"description": "UUID of the submitted image."
},
"page_url": {
"type": "string",
"description": "Gallery URL where the image will be published if approved."
}
},
"description": "Outcome of a paid submit_image call: accepted into the human review queue.",
"additionalProperties": true
}{
"tier": "free",
"title": "Submit Image",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}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. Price: $0.08 standard or $0.20 quality, paid in sats over Lightning at the current BTC/USD rate or in USDC on Base. Note for x402 clients: "quality" mode exceeds the agents-SDK default per-call cap of $0.10 - raise maxPaymentValue in withX402Client to use it.
{
"type": "object",
"required": [
"prompt"
],
"properties": {
"mode": {
"enum": [
"standard",
"quality"
],
"type": "string",
"description": "Generation quality tier - \"standard\" (default, cheaper) or \"quality\" (higher fidelity, costs more)."
},
"prompt": {
"type": "string",
"maxLength": 2000,
"description": "Text description of the image to generate (max 2000 characters)."
},
"aspect_ratio": {
"enum": [
"1:1",
"3:4",
"16:9"
],
"type": "string",
"description": "Output image aspect ratio (default \"1:1\")."
}
}
}{
"type": "object",
"required": [
"image_id",
"url",
"image_url",
"thumbnail_url"
],
"properties": {
"url": {
"type": "string",
"description": "MemeStack gallery page URL for the generated image."
},
"tags": {
"type": "array",
"items": {
"type": "object"
},
"description": "Scored tags assigned to the generated image."
},
"caption": {
"type": [
"string",
"null"
],
"description": "AI-generated caption for the image."
},
"image_id": {
"type": "string",
"description": "UUID of the generated image."
},
"image_url": {
"type": "string",
"description": "Direct serve URL for the full generated image bytes."
},
"thumbnail_url": {
"type": "string",
"description": "Thumbnail URL for the generated image (?w=384)."
}
},
"description": "The AI-generated image produced by a paid generate_meme call.",
"additionalProperties": true
}{
"tier": "free",
"title": "Generate Meme",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}Prompts
3 advertised
search_memes
Search MemeStack for memes, infographics, or visual content on any topic.
- topic
- What to search for (e.g., "Bitcoin inflation", "Pepe frog") (required)
cite_this_meme
Generate canonical attribution markdown for a MemeStack image.
- image_id
- Image UUID (required)
find_a_meme_for_vibe
Find memes that capture a vibe/idea, ready to embed with attribution.
- vibe
- The vibe, idea, or concept (required)
- count
- How many to return (default 3)
Resources
3 advertised
MemeStack Attribution Guide
How to cite MemeStack images: license model, recommended formats, per-source rules. Read this once at session start.
memestack://attribution-guideMemeStack Tag Taxonomy
Full category → tag tree with image counts. Cached 1 hour.
memestack://taxonomyRecently Added Images
Last 50 approved images with citation blocks, newest first. Cached 60s.
memestack://recentTop Zapped Images
Top 50 zapped images for the period. period ∈ {day, week, month, all}. Cached 5 min.
memestack://top/{period}90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 657 ms
- 95th percentile latency
- 657 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 657 ms · metadata changed · 11 tool(s), 3 resource(s), 1 resource template(s), 3 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http memestack-mcp https://mcp.memestack.ai/mcpCodex
codex mcp add memestack-mcp --url https://mcp.memestack.ai/mcpCursor
{
"mcpServers": {
"memestack-mcp": {
"url": "https://mcp.memestack.ai/mcp"
}
}
}Cline
{
"mcpServers": {
"memestack-mcp": {
"type": "streamableHttp",
"url": "https://mcp.memestack.ai/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"memestack-mcp": {
"type": "http",
"url": "https://mcp.memestack.ai/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http memestack-mcp https://mcp.memestack.ai/mcpClaude Desktop
https://mcp.memestack.ai/mcpWindsurf
{
"mcpServers": {
"memestack-mcp": {
"serverUrl": "https://mcp.memestack.ai/mcp"
}
}
}Let your agent find its tools
Find servers like MemeStack MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other ai and machine learning servers
Do you run MemeStack MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.