Meme生成器MCP服务器
一种将互联网模因转换为短视频内容的MCP服务器。它通过FastMCP公开了一组工具,因此LLM或客户端应用程序可以获取模因,选择合适的配乐,渲染垂直视频,生成上传元数据,并将其发布到YouTube。
目标
构建一个可重用的基于MCP的后端,可以自动生成模因到视频的管道。该项目旨在让人工智能代理编排完整的内容工作流程,而不是将视频创建、元数据生成和上传视为单独的手动任务。
为什么这个项目
简式内容创作通常涉及大量重复性工作:
- 寻找一个引人入胜的模因或视觉效果。
- 搭配合适的配乐。
- 以移动友好的纵横比渲染。
- 写标题、描述和关键字。
- 将其上传到平台。
本项目探讨了当工作流转换为MCP服务器后面的可调用工具时会发生什么。服务器的结构不是首先构建传统的UI,而是LLM可以推理可用的工具并以编程方式执行管道。
它所解决的需求
- 减少将模因转化为可分享的短视频所需的人工操作。
- 为AI驱动的内容自动化提供干净的后端。
- 演示如何将MCP用于聊天之外的其他用途,特别是用于媒体工作流程。
- 为构建可以端到端获取、生成、丰富和发布内容的代理系统奠定了基础。
这个项目做什么
服务器公开了以下工具:
- 使用模因API从Reddit下载随机模因。
- 将模因渲染成1080x1920的短片,并配以选定的背景音乐。
- 致电Gemini,确定最佳音频风格并生成YouTube就绪元数据。
- 将最终视频上传到已登录用户的YouTube频道。
- 清理临时生成的资产。
还有一个简单的示例工具, add(a, b),主要用作MCP服务器的健全性检查。
核心功能
1.迷因抓取
这 download_random_meme 工具从以下位置获取模因 https://meme-api.com/gimme,跳过NSFW和剧透内容,在本地下载媒体,并返回元数据,如subreddit、作者、帖子URL和upvotes。
2.视频生成
这 createVideo 该工具将下载的meme转换为垂直视频:
- 输出格式目标
1080 x 1920. - 静态图像被转换为短片。
- GIF或MP4表情包作为动画剪辑处理。
- 背景音乐是从精心策划的本地音频文件夹中选择的。
- 最终视频以base64编码字节的形式返回,供下游使用。
3.人工智能辅助内容丰富
这 call_gemini_api 该工具将模因媒体上传到Gemini并要求其返回:
- 最佳匹配的音频风格。
- YouTube标题。
- 描述。
- 逗号分隔的关键字。
这使得媒体生成工作流更具上下文意识,而不是依赖于固定模板。
4.上传YouTube
这 upload_video_to_youtube 该工具使用基于OAuth的凭据和YouTube数据API将渲染的视频直接上载到频道。
探索的技术
这个项目是一个很好的平台,可以将多种技术结合到一个管道中:
FastMCP用于通过模型上下文协议公开基于工具的操作。Starlette支持HTTP访问的CORS中间件。MoviePy用于图像/视频合成和配乐叠加。Google Gemini通过google-genai用于多模态推理和元数据生成。YouTube Data API用于程序化视频上传。python-dotenv用于本地配置管理。requests用于外部API访问和媒体下载。
为什么MCP在这里很有趣
MCP非常适合这个项目,因为工作流程自然会分解为可组合的工具:
- 获取内容
- 检查内容
- 生成元数据
- 创建资产
- 发布资产
这使得服务器对代理自动化非常有用,而不仅仅是对单个硬编码脚本。LLM客户端可以根据前一个工具的输出决定下一个调用哪个工具。
系统设计
在较高层次上,服务器充当模因源、本地媒体处理、人工智能丰富和发布之间的编排层。
文本流程图
[Client / LLM Agent]
|
v
[FastMCP Server]
|
+--> download_random_meme()
| |
| v
| [Meme API / Reddit meme source]
| |
| v
| [Local meme storage]
|
+--> call_gemini_api()
| |
| v
| [Gemini multimodal analysis]
| |
| v
| [Audio style + title + description + keywords]
|
+--> createVideo()
| |
| v
| [MoviePy rendering engine]
| |
| +--> local audio library
| +--> local meme media
| |
| v
| [Generated vertical video]
|
+--> upload_video_to_youtube()
|
v
[YouTube Data API]
|
v
[Published short-form video]请求和处理流程
- 客户端或LLM调用MCP工具。
- 服务器获取模因内容并将其存储在本地。
- Gemini分析模因,并建议最佳配乐类别和上传元数据。
- MoviePy将模因媒体和配乐组装成垂直视频。
- 服务器使用OAuth凭据将输出上传到YouTube。
- 可以使用清除临时介质
/clear路线。
项目结构
.
├── app.py
├── meme_fetch_and_download.py
├── youtube_video_upload/
│ └── upload_video.py
├── data/
│ └── audio/
│ ├── ambient/
│ ├── club_beat/
│ ├── comedy_hiphop/
│ ├── funny/
│ ├── hyperpop/
│ ├── lofi/
│ ├── meme_music/
│ ├── phonk/
│ ├── rpg_fantasy_medieval/
│ └── sad/
└── requirements.txt重要工具和路线
MCP工具
add(a, b)-基本测试工具。download_random_meme(...)-在本地下载meme媒体。createVideo(...)-创建短视频。call_gemini_api()-生成音频类别和YouTube元数据。upload_video_to_youtube(...)-上传生成的视频。
HTTP路由
GET /health-健康检查终点。GET /clear-删除临时下载的表情包和生成的视频。
环境变量
该项目依赖于环境变量进行运行时配置:
BASE_DIR=/absolute/path/to/project
THREADS=4
GEMINI_API_KEY=your_gemini_api_key
YOUTUBE_CLIENT_ID=your_client_id
YOUTUBE_PROJECT_ID=your_project_id
YOUTUBE_AUTH_URI=https://accounts.google.com/o/oauth2/auth
YOUTUBE_TOKEN_URI=https://oauth2.googleapis.com/token
YOUTUBE_AUTH_PROVIDER_X509_CERT_URL=https://www.googleapis.com/oauth2/v1/certs
YOUTUBE_CLIENT_SECRET=your_client_secret设置和运行
先决条件
- python
3.12.x ffmpeg已安装并在系统路径中可用- 双子星API密钥
- YouTube API OAuth凭据
安装
git clone https://github.com/janakmandavgade/meme_generator_mcp_server.git
cd meme_generator_mcp_server
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt运行服务器
python app.py服务器运行超时 streamable-http 日期:
http://0.0.0.0:8000/mcp端到端流程示例
理想的编排流程如下:
- 呼叫
download_random_meme(). - 呼叫
call_gemini_api()以获得最佳的音频风格和元数据。 - 呼叫
createVideo(audio_type=). - 呼叫
upload_video_to_youtube(...)使用返回的元数据和用户OAuth令牌。
面临的挑战
该项目涉及几个容易被低估的问题领域:
- 在一个可靠的工作流程中协调多个外部服务。
- 处理不同的模因格式,如静态图像、GIF和MP4剪辑。
- 确保生成的视频符合短格式垂直内容要求。
- 安全地管理临时文件和清理。
- 处理第三方发布API的身份验证。
- 将多模式AI输出转换为下游工具可以信任的确定性JSON。
工程权衡
- 目前的系统更倾向于实验速度,而不是严格的生产硬化。
- 媒体在本地磁盘上处理,这使实现保持简单,但限制了水平可扩展性。
- 服务器返回base64视频内容,这便于工具链接,但对于较大的输出可能很昂贵。
- 音频选择是基于文件夹和策划的,这使得行为可预测,但不如推荐引擎动态。
我探索和学到了什么
- MCP如何作为非平凡媒体工作流的控制平面。
- 多模式人工智能如何帮助做出创造性决策,如配乐和元数据选择。
- 如何在单一后端将本地媒体处理与云AI服务相结合。
- 面向工具的设计如何使项目更容易通过代理实现自动化。
当前限制
- 没有数据库或持久作业跟踪。
- 围绕工具执行的最小验证和可观察性。
- 某些故障模式的重试和恢复逻辑有限。
- 没有用于大规模或并发渲染作业的排队层。
- 临时资产生命周期是在本地管理的,而不是通过对象存储。
未来改进
- 为生成的资产和作业历史添加持久存储。
- 添加具有队列和工作者分离的异步作业处理。
- 支持单个API之外的多个模因源。
- 改进上传前的审核和过滤。
- 添加更丰富的元数据生成和缩略图选择。
- 将工作流打包成一个更适合生产的服务,具有更好的日志记录和监控功能。
为什么这个项目值得展示
这不仅仅是一个模因生成器。这是一个代理就绪媒体自动化系统的紧凑示例:
- MCP为自主编排提供了有意义的工具。
- 人工智能有助于做出创造性决策,而不仅仅是文本决策。
- 本地渲染弥合了内容选择和可发布输出之间的差距。
- 该项目演示了LLM工具如何从聊天转变为行动。
