Koskamo

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.

MemeStack MCP logo, by MemeStackVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by MemeStack
MCP endpoint (Streamable HTTP)
https://mcp.memestack.ai/mcp
Vendor documentation

What its tools do

11 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Can change data (2)

11 of 11 have a description · 11 of 11 declare behavior hints · 11 of 11 with parameters document them all

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

Vendor evidenceRegistry 1.6.0
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
Server-advertised capabilities
{
  "tools": {},
  "prompts": {},
  "resources": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Find existing images: memes, reaction images, charts, graphs, infographics and screenshots — by what they show, by the words printed in them, or from a similar image. Every result has its source, licence and a ready citation. Use this server when the user wants an image that already exists: a meme or reaction image to make a point, a chart or graph that backs a claim, a screenshot of what someone said, or the name and source of an image they have. Not for stock photos, personal photos or a whole-web reverse image search. Which tool: - search_images: any image, by meaning or keywords. - find_meme_for_text: a meme or reaction image for an idea, a mood or a sentence. - search_text_in_image: the exact words printed in an image (a quote, a caption, a sign, screenshot text). - search_charts: charts, graphs and maps with their source data (dataset, unit, regions, the period shown). - reverse_image_search: an image URL (https or data:) in; the same or similar images out, with their source. - find_similar: images that look like a result. - get_image: one image's full record, including the words in it and any chart data. - get_receipts: where an image came from, the claims it makes, and the publishers' charts that measure the same thing (no verdict). - cite_image: ready citations for up to 50 images. Write short queries: the key words, or the exact words on the image. Each result says whether it is a strong match or only the closest one; never present a closest match as the answer. When corrected_query is present, the results are for that corrected wording, not the words as typed. An empty result means MemeStack has nothing that matches: try other words. Read memestack://attribution-guide once per session, and keep each result's citation when you use the image.

Tools

11 advertised

search_images
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

search_images input schema
{
  "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)."
    }
  }
}
search_images output schema
{
  "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
}
search_images annotations
{
  "tier": "free",
  "title": "Search Images",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
search_charts
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

search_charts input schema
{
  "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)."
    }
  }
}
search_charts output schema
{
  "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
}
search_charts annotations
{
  "tier": "free",
  "title": "Search Charts",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_image
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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).

get_image input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Image UUID"
    }
  }
}
get_image output schema
{
  "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
}
get_image annotations
{
  "tier": "free",
  "title": "Get Image Details",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_receipts
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

get_receipts input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Image UUID (from search_images, get_image or any result)"
    }
  }
}
get_receipts output schema
{
  "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
}
get_receipts annotations
{
  "tier": "free",
  "title": "Get Receipts",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
find_similar
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

find_similar input schema
{
  "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)."
    }
  }
}
find_similar output schema
{
  "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
}
find_similar annotations
{
  "tier": "free",
  "title": "Find Similar Images",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
search_text_in_image
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

search_text_in_image input schema
{
  "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)."
    }
  }
}
search_text_in_image output schema
{
  "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
}
search_text_in_image annotations
{
  "tier": "free",
  "title": "Search OCR Text",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
find_meme_for_text
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

find_meme_for_text input schema
{
  "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)."
    }
  }
}
find_meme_for_text output schema
{
  "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
}
find_meme_for_text annotations
{
  "tier": "free",
  "title": "Find Meme For Text",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
cite_image
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

cite_image input schema
{
  "type": "object",
  "required": [
    "image_ids"
  ],
  "properties": {
    "image_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 50,
      "minItems": 1,
      "description": "Up to 50 image UUIDs"
    }
  }
}
cite_image output schema
{
  "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
}
cite_image annotations
{
  "tier": "free",
  "title": "Cite Image",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
reverse_image_search
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

reverse_image_search input schema
{
  "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)."
    }
  }
}
reverse_image_search output schema
{
  "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
}
reverse_image_search annotations
{
  "tier": "free",
  "title": "Reverse Image Search",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
submit_image
Advertised by the server during the last successful anonymous check.
Open-world

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).

submit_image input schema
{
  "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)."
    }
  }
}
submit_image output schema
{
  "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
}
submit_image annotations
{
  "tier": "free",
  "title": "Submit Image",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
generate_meme
Advertised by the server during the last successful anonymous check.
Open-world

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.

generate_meme input schema
{
  "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\")."
    }
  }
}
generate_meme output schema
{
  "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
}
generate_meme annotations
{
  "tier": "free",
  "title": "Generate Meme",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

3 advertised

search_memes

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

Generate canonical attribution markdown for a MemeStack image.

image_id
Image UUID (required)
find_a_meme_for_vibe

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

How to cite MemeStack images: license model, recommended formats, per-source rules. Read this once at session start.

MemeStack Attribution Guide URI
memestack://attribution-guide

MIME type: text/markdown

MemeStack Tag Taxonomy

Advertised by the server during the last successful anonymous check.

Full category → tag tree with image counts. Cached 1 hour.

MemeStack Tag Taxonomy URI
memestack://taxonomy

MIME type: application/json

Recently Added Images

Advertised by the server during the last successful anonymous check.

Last 50 approved images with citation blocks, newest first. Cached 60s.

Recently Added Images URI
memestack://recent

MIME type: application/json

Top Zapped Images

Advertised by the server during the last successful anonymous check.

Top 50 zapped images for the period. period ∈ {day, week, month, all}. Cached 5 min.

Top Zapped Images URI template
memestack://top/{period}

MIME type: application/json

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.

Too few checks for a percentage yet (1 of 1 answered).

  1. 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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http memestack-mcp https://mcp.memestack.ai/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add memestack-mcp --url https://mcp.memestack.ai/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable memestack-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "memestack-mcp": {
      "url": "https://mcp.memestack.ai/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "memestack-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.memestack.ai/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start memestack-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "memestack-mcp": {
      "type": "http",
      "url": "https://mcp.memestack.ai/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http memestack-mcp https://mcp.memestack.ai/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.memestack.ai/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.

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.

Claim this listing