memewright

memewright

Enables AI agents to create memes by selecting from a library of templates and rendering captions with proper typesetting.

Category
访问服务器

README

<div align="center">

Memewright

The open-source meme engine for AI agents.

Give it a template and a caption for each box. It renders a clean, correctly typeset image-macro — right font, proper outline, text that wraps and shrinks to fit. Drive it from a CLI, an MCP server, or three lines of code.

Memes are one of the highest-performing formats in marketing, and agents can write the jokes. They just can't render them. Memewright is the missing hands.

</div>


Why this exists

Ask an AI agent to "make a meme" and it hits a wall: it can write a killer caption, but it can't place text in the right spot, in the right font, outlined so it's legible, wrapped so it fits. So agents fall back to describing a meme in words, or generating a warped image where the text is gibberish.

Memewright is the rendering layer. The agent decides what the joke is; Memewright handles how it looks — pixel-correct, every time. The hard part is not drawing text on an image. It's the typesetting: fitting an unknown-length caption into a fixed box, wrapping it, and shrinking the font until it sits perfectly. That's what Memewright does, on a library of templates that each know what they mean.

Quick start

# no install needed
npx memewright list
npx memewright make waiting-skeleton \
  --top "me waiting for the cleaner to flag the damage" \
  --bottom "before the next guest checks in" \
  -o meme.png

That's a finished, shareable PNG. No watermark, no dragging text boxes.

Use it from an AI agent (MCP)

Memewright ships an MCP server so any agent (Claude, Cursor, your own) can make memes as tool calls:

// add to your MCP client config
{
  "mcpServers": {
    "memewright": { "command": "npx", "args": ["memewright-mcp"] }
  }
}

The agent gets three tools:

Tool What it does
list_templates Every template, its box ids, and what the meme means
get_template One template's boxes + when-to-use guidance
render_meme Render captions into a template; returns the PNG

The workflow an agent follows: list_templates to find a template that fits the joke → get_template to see the box ids → render_meme with a caption per box. The "meaning" metadata is what lets an agent pick the right template instead of forcing every joke into top/bottom text.

Use it from code

import { makeMeme } from 'memewright';
import fs from 'node:fs';

const { buffer } = await makeMeme('drake-hotline-bling', {
  reject: 'driving to every unit to inspect it',
  approve: 'reading the AI report from your phone',
});
fs.writeFileSync('drake.png', buffer);

The template library (the moat)

Every template carries structured metadata, not just an image:

{
  "name": "Woman Yelling at Cat",
  "meaning": "A furious accusation (left) met with total, smug indifference (right).",
  "when_to_use": "woman = the angry complaint; cat = the unbothered reply.",
  "boxes": [
    { "id": "woman", "x": 0.02, "y": 0.03, "w": 0.46, "h": 0.22 },
    { "id": "cat",   "x": 0.52, "y": 0.03, "w": 0.46, "h": 0.22 }
  ]
}

Box coordinates are fractions of the image, so a template renders identically at any resolution. The meaning and when_to_use fields are the real product: they turn a folder of images into something an agent can reason about.

16 templates today. The roadmap is a larger, richer library plus trending meme data — the formats that are hot this week, which is what makes meme marketing actually land.

How the text fitting works

For each caption, Memewright finds the largest font size at which the text both wraps inside the box width and fits the box height, shrinking the font (and hard-wrapping over-long words) until it does. White fill, black outline, all-caps by default — the image-macro standard — with per-box overrides for panels that need dark text on light backgrounds (Drake, Expanding Brain, UNO).

Fonts: Memewright bundles Anton (SIL Open Font License), the open substitute for Impact, so the package is legally self-contained. Have Impact and prefer it? Register it and pass { font: "Impact" }.

Self-host / hosted

Memewright is AGPL-3.0 and fully self-hostable — the CLI, the MCP server, and the library are the whole thing; run them anywhere Node runs. A hosted cloud (web editor, brand kits, auto-posting, the trending-meme database) is the planned commercial layer, but the engine is and stays open source.

License

AGPL-3.0-or-later. Bundled font: Anton, SIL OFL (see assets/fonts/OFL.txt).

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选