使用说明
Reddit MCP服务器
模型上下文协议(MCP)服务器,使Claude能够通过官方API与Reddit进行交互。使用完整的OAuth2身份验证读写帖子、评论和图像。
特性
📖 阅读工具(6)
- reddit_get_post -按ID获取包含完整详细信息的帖子
- reddit_get_评论 -获取带有回复的嵌套评论线程
- reddit_search_post -在Reddit或特定子版块内搜索
- reddit_get_subreddit_post -从任何子版块获取热门/新/热门帖子
- reddit_get_subreddit_info -获取subreddit详细信息和统计数据
- reddit_get_user_content -获取用户的帖子和评论
✍️ 写作工具(7)
- reddit_submit_post -创建文本、链接或图像帖子(上传本地文件!)
- reddit_提交_评论 -回复帖子或其他评论
- reddit_编辑内容 -编辑您的帖子和评论
- reddit_delete_content -删除您的内容
- reddit_注意 -投票赞成、投票反对或取消投票
- reddit_save -保存帖子和评论
- reddit_unsave -不安全内容
🖼️ 图像上传支持
- 上传本地图片:直接提供base64编码的图像
- 免费主机:使用Catbox.moe(无权限)或ImgBB(免费API密钥)
- 自动工作流程:本地文件→ 托管→ Reddit帖子
- 支持格式:JPG、PNG、GIF、webp
快速开始
1.创建Reddit应用程序
- 首选https://www.reddit.com/prefs/apps
- 点击“创建另一个应用程序…”
- 选择 “脚本” 类型
- 设置重定向URI:
http://localhost:8080(必需但未使用) - 保存您的客户ID和密码
重要:您的Reddit帐户必须具有2FA 残疾的 用于OAuth密码授权。
2.配置环境
cp .env.example .env
编辑 .env 使用您的凭据:
# Reddit API Credentials
REDDIT_CLIENT_ID=your_client_id_here
REDDIT_CLIENT_SECRET=your_client_secret_here
REDDIT_USERNAME=your_reddit_username
REDDIT_PASSWORD=your_reddit_password
REDDIT_USER_AGENT=mcp:reddit-mcp:1.0.0 (by /u/your_username)
# Optional: ImgBB API key for image hosting fallback
# If not provided, will use Catbox.moe (permissionless, free)
# Get free API key at: https://api.imgbb.com/
IMGBB_API_KEY=
3.安装和构建
npm install
npm run build
4.运行服务器
npm start
Docker部署
构建图像
docker build -t reddit-mcp:latest .
运行容器
docker run --rm \
-e REDDIT_CLIENT_ID=your_client_id \
-e REDDIT_CLIENT_SECRET=your_secret \
-e REDDIT_USERNAME=your_username \
-e REDDIT_PASSWORD=your_password \
-e REDDIT_USER_AGENT="mcp:reddit-mcp:1.0.0 (by /u/your_username)" \
reddit-mcp:latest
Docker MCP网关
此服务器旨在与 Docker MCP网关。配置可在 reddit-mcp-catalog.yaml.
使用示例
阅读Reddit
从subreddit获取热门帖子:
{
"tool": "reddit_get_subreddit_posts",
"arguments": {
"subreddit": "programming",
"sort": "top",
"time": "week",
"limit": 10
}
}
搜索Reddit:
{
"tool": "reddit_search_posts",
"arguments": {
"query": "machine learning",
"sort": "relevance",
"time": "month",
"limit": 25
}
}
给Reddit写信
创建文本帖子:
{
"tool": "reddit_submit_post",
"arguments": {
"subreddit": "test",
"title": "Hello from Reddit MCP!",
"text": "This is a test post created via the MCP server.",
"nsfw": false,
"spoiler": false
}
}
创建链接帖子:
{
"tool": "reddit_submit_post",
"arguments": {
"subreddit": "technology",
"title": "Interesting Article",
"url": "https://example.com/article",
"nsfw": false
}
}
创建图片帖子(从URL):
{
"tool": "reddit_submit_post",
"arguments": {
"subreddit": "pics",
"title": "Check out this image!",
"image_url": "https://example.com/image.jpg",
"nsfw": false
}
}
创建图像帖子(从本地文件):
{
"tool": "reddit_submit_post",
"arguments": {
"subreddit": "pics",
"title": "My photo",
"image_data": "iVBORw0KGgoAAAANS...base64data...CYII=",
"image_filename": "photo.jpg",
"nsfw": false
}
}
发表评论:
{
"tool": "reddit_submit_comment",
"arguments": {
"parent": "t3_abc123",
"text": "Great post! Here's my comment."
}
}
投票和保存
为帖子投票:
{
"tool": "reddit_vote",
"arguments": {
"id": "t3_abc123",
"dir": 1
}
}
保存帖子:
{
"tool": "reddit_save",
"arguments": {
"id": "t3_abc123"
}
}
图像上传工作流
服务器支持通过无缝的E2E工作流将本地图像上传到Reddit:
- 客户端提供base64图像:Claude发送编码为base64的图像数据
- 上传到免费主机:服务器上载到Catbox.moe(或带有API密钥的ImgBB)
- 获取公共URL:托管服务返回一个永久URL
- 创建Reddit帖子:服务器创建带有托管映像的链接帖子
代管服务
初级:Catbox.moe
- ✅ 完全免费
- ✅ 不需要API密钥
- ✅ 无需注册
- ✅ 永久文件托管
- ✅ 合理使用无费率限制
回退:ImgBB
- ✅ 免费套餐可用
- ✅ 需要API密钥(免费https://api.imgbb.com/)
- ✅ 慷慨的限制
- ✅ 高可靠性
支持的图像格式
- PNG(
.png) - JPEG(
.jpg,.jpeg) - GIF(
.gif) - WebP(
.webp)
速率限制
服务器实现令牌桶速率限制:
- 默认:每分钟60个请求
- 可配置的:设置
RATE_LIMIT_PER_MINUTE在.env - 自动排队:请求等待可用令牌
- 符合Reddit标准:尊重Reddit的API指南
错误处理
- 自动重试:失败的请求以指数回退重试
- 令牌刷新:OAuth令牌过期时自动刷新
- 速率限制检测:服务器检测并处理429个响应
- 详细错误:清除错误消息以进行故障排除
安全
- ✅ 通过Reddit进行OAuth2身份验证
- ✅ 通过环境变量获取凭据
- ✅ 代码或Docker镜像中没有秘密
- ✅ 容器隔离
- ✅ 安全令牌管理
项目结构
reddit-mcp/
├── src/
│ ├── auth/
│ │ └── reddit-auth.ts # OAuth2 authentication
│ ├── tools/
│ │ ├── read.ts # Reading operations
│ │ └── write.ts # Writing operations
│ ├── utils/
│ │ ├── rate-limiter.ts # Token bucket rate limiting
│ │ ├── error-handler.ts # Error handling & retry
│ │ └── image-upload.ts # Image hosting integration
│ ├── types/
│ │ └── reddit.ts # TypeScript definitions
│ └── index.ts # MCP server entry point
├── dist/ # Compiled JavaScript
├── Dockerfile # Container definition
├── package.json # Dependencies
├── tsconfig.json # TypeScript config
├── .env.example # Environment template
└── tools.json # Tool definitions for MCP registry
发展
构建
npm run build
观看模式
npm run dev
测试
# Install dependencies
npm install
# Create .env file with your credentials
cp .env.example .env
# Test reading from Reddit
npx tsx test-mcp-subreddit.ts
# Test posting with images
npx tsx post-scenester.ts
故障排除
身份验证错误
错误: invalid_grant
- 确保2FA 残疾的 在您的Reddit帐户上
- 验证用户名和密码是否正确
- 检查应用程序类型是否为 “脚本” 不是“web应用程序”
错误: 403 Forbidden
- 检查您的用户代理格式是否匹配:
platform:app_id:version (by /u/username) - 确保凭据正确
- 如果速率受限,请等待10-15分钟
图像上传问题
上传失败,超时:
- 检查您的互联网连接
- 再试一次-免费服务可能会出现临时问题
- 如果使用ImgBB,请验证您的API密钥
图像太大:
- Reddit对帖子有大小限制
- 上传前考虑调整图像大小
- 大多数托管服务都限制文件大小
API 参考
工具:reddit_submit_post
向subreddit提交新帖子(文本、链接或图像)。
参数:
subreddit(字符串,必填):子文件夹名称title(字符串,必填):帖子标题text(字符串,可选):发布正文(用于文本帖子)url(字符串,可选):链接的URL(用于链接帖子)image_url(字符串,可选):下载和发布的URL(用于远程图像)image_data(字符串,可选):Base64编码图像数据(用于本地文件)image_filename(字符串,可选):带扩展名的文件名(image_data需要)nsfw(布尔值,可选):标记为NSFWspoiler(布尔值,可选):标记为扰流板
退货:
{
"id": "abc123",
"name": "t3_abc123",
"url": "https://www.reddit.com/r/test/comments/abc123/..."
}
许可证
MIT许可证-有关详细信息,请参阅许可证文件
贡献
欢迎投稿!此服务器是 Docker MCP注册表.
支持
- Reddit API状态: https://www.redditstatus.com/
- Reddit API文档: https://www.reddit.com/dev/api
- MCP协议: https://modelcontextprotocol.io/
- Docker MCP网关: https://docs.docker.com/desktop/features/mcp/
更新日志
v1.2.0(最新)
- ✨ 添加了本地文件图像上传支持
- ✨ 集成免费图像托管(Catbox.moe、ImgBB)
- ✨ MCP的Base64图像数据支持
- 🐛 简化的图片发布(链接帖子与媒体API)
- 📝 更新文件
v1.1.0版本
- ✨ 添加了图像URL上传支持
- 🐛 修复了身份验证问题
- 📝 改进了错误消息
v1.0.0
- 🎉 初始版本
- ✅ 13个Reddit互动工具
- ✅ OAuth2身份验证
- ✅ 速率限制
- ✅ Docker支持