🚀 Reddit MCP 服务器
Reddit MCP 服务器是一个模型上下文协议(MCP)服务器,它通过专门为深入研究和分析设计的三层架构,为大语言模型(LLMs)提供全面访问 Reddit 内容的能力。该服务器基于 FastMCP 和 PRAW 构建,可实现高效部署。
🚀 快速开始
前提条件
- Python 3.11 及以上版本
- Reddit API 凭证(点击此处获取)
- 访问 https://www.reddit.com/prefs/apps
- 点击“创建应用”或“创建另一个应用”
- 选择“脚本”作为应用类型
- 记录下你的
client_id(在“个人使用脚本”下方)和 client_secret
安装
- 克隆仓库:
git clone <repository-url>
cd reddit-mcp-poc
- 使用 uv 安装依赖:
pip install uv
uv sync
配置
在项目根目录下创建一个 .env 文件:
REDDIT_CLIENT_ID=your_client_id_here
REDDIT_CLIENT_SECRET=your_client_secret_here
REDDIT_USER_AGENT=RedditMCP/1.0 by u/your_username
运行服务器
生产模式
uv run src/server.py
开发模式(使用 MCP 检查器)
fastmcp dev src/server.py
服务器启动后,即可接受 MCP 连接。
✨ 主要特性
🔍 三层架构
本服务器采用独特的三层架构,引导大语言模型对 Reddit 进行全面研究:
第一层:发现 (discover_reddit_resources)
- 使用多种搜索策略查找 8 - 15 个相关社区
- 支持“快速”和“全面”两种发现模式
- 返回可用操作和推荐工作流程
第二层:需求 (get_operation_requirements)
- 提供详细的参数模式和验证规则
- 根据你的研究需求提供上下文感知的建议
- 明确指导何时使用每个操作
第三层:执行 (execute_reddit_operation)
- 验证参数并执行 Reddit 操作
- 具备全面的错误处理机制,并提供可操作的提示
- 返回带有详细元数据的结构化结果
🌟 其他关键特性
- 多社区覆盖:在一个工作流程中发现并获取 8 - 15 个子版块的内容
- 智能发现:使用多种搜索策略实现全面覆盖
- 引用支持:所有结果中均包含 Reddit URL,便于正确引用
- 效率优化:批量操作可减少 70% 以上的 API 调用
- 专注研究:设计用于深入分析,支持评论深度挖掘
- MCP 资源:可访问热门子版块、子版块信息和服务器功能
💻 使用示例
基础用法
🚀 推荐的全面研究工作流程
为获得最佳效果,请遵循以下利用三层架构的工作流程:
discover_reddit_resources(
topic="machine learning ethics",
discovery_depth="comprehensive"
)
get_operation_requirements("fetch_multiple", context="ML ethics discussion")
execute_reddit_operation("fetch_multiple", {
"subreddit_names": ["MachineLearning", "artificial", "singularity", "ethics"],
"limit_per_subreddit": 8
})
execute_reddit_operation("fetch_comments", {
"submission_id": "abc123",
"comment_limit": 100
})
为何此流程有效:
- 📊 比单板块方法的覆盖率提高 60%
- 🔗 自动包含 Reddit URL,便于正确引用
- ⚡ 通过智能批处理减少 70% 的 API 调用
- 📝 支持全面的评论分析,适合研究需求
高级用法
🔧 三层架构工作流程示例
result = discover_reddit_resources(
topic="sustainable technology",
discovery_depth="comprehensive"
)
schema = get_operation_requirements("fetch_multiple")
posts = execute_reddit_operation("fetch_multiple", {
"subreddit_names": result["relevant_communities"]["subreddits"][:8],
"listing_type": "hot",
"limit_per_subreddit": 6
})
comments = execute_reddit_operation("fetch_comments", {
"submission_id": "interesting_post_id",
"comment_limit": 100
})
⚡ 快速操作示例
execute_reddit_operation("search_all", {
"query": "artificial intelligence ethics",
"sort": "top",
"time_filter": "week",
"limit": 15
})
execute_reddit_operation("search_subreddit", {
"subreddit_name": "MachineLearning",
"query": "transformer architecture",
"limit": 20
})
execute_reddit_operation("fetch_multiple", {
"subreddit_names": ["artificial", "singularity", "Futurology"],
"listing_type": "hot",
"limit_per_subreddit": 8
})
📚 详细文档
可用操作
服务器通过 execute_reddit_operation 提供以下操作来访问 Reddit:
核心操作
| 操作 |
描述 |
适用场景 |
search_all |
在整个 Reddit 上进行搜索 |
广泛主题探索 |
search_subreddit |
在特定子版块中进行搜索 |
针对性社区搜索 |
fetch_posts |
获取子版块的最新帖子 |
了解当前趋势和活动 |
fetch_multiple |
⚡ 从多个子版块批量获取内容 |
多社区研究 |
fetch_comments |
获取带有完整讨论的帖子 |
深入分析对话 |
三层架构工具
| 工具 |
用途 |
使用时机 |
discover_reddit_resources |
查找相关社区和操作 |
始终从这里开始 |
get_operation_requirements |
获取详细的参数模式 |
复杂操作之前 |
execute_reddit_operation |
执行任何 Reddit 操作 |
获取要求之后 |
MCP 资源
服务器提供三种 MCP 资源,用于访问常用数据:
1. reddit://popular-subreddits
返回 25 个最热门子版块的列表,包含订阅者数量和描述。
2. reddit://subreddit/{name}/about
获取特定子版块的详细信息,包括:
- 标题和描述
- 订阅者数量和活跃用户数
- 子版块规则
- 创建日期和其他元数据
3. reddit://server-info
返回 MCP 服务器的全面信息,包括:
- 可用工具和资源
- 版本信息
- 使用示例
- 当前速率限制状态
🔧 技术细节
项目结构
reddit-mcp-poc/
├── src/
│ ├── server.py # 具有三层架构的主 MCP 服务器
│ ├── config.py # Reddit 客户端配置
│ ├── models.py # Pydantic 数据模型
│ ├── resources.py # MCP 资源实现
│ └── tools/ # 工具实现
│ ├── search.py # 搜索功能(支持永久链接)
│ ├── posts.py # 子版块帖子获取
│ ├── comments.py # 评论获取
│ └── discover.py # 子版块发现
├── tests/
│ └── test_tools.py # 单元测试
├── pyproject.toml # 项目依赖
├── .env # 你的 API 凭证
└── README.md # 本文件
错误处理
服务器能够优雅地处理常见的 Reddit API 错误:
- 速率限制:由 PRAW 自动处理,冷却时间为 5 分钟
- 未找到:对于不存在的子版块/帖子返回错误消息
- 禁止访问:对于私有/受限内容返回错误消息
- 无效输入:验证并清理所有输入参数
局限性
此 MVP 实现存在一些有意设置的限制:
- 只读访问(不支持发帖、评论或投票)
- 无用户认证(使用仅应用程序认证)
- 有限的评论展开(不获取“更多评论”)
- 无缓存(每个请求直接访问 Reddit API)
下一步计划
基于三层架构的基础,后续计划如下:
- 增强大语言模型指导:改进
get_operation_requirements,提供更丰富的上下文感知建议
- 高级分析:为发现的社区添加情感分析和趋势检测功能
- 缓存层:为发现的社区和频繁查询实现智能缓存
- 用户认证:添加写操作(发帖、评论等)并提供适当的认证
- 扩展发现:添加基于时间和活动的社区发现模式
- 研究模板:为常见研究模式提供预配置的工作流程
- 引用工具:根据 Reddit URL 自动生成参考书目
📄 许可证
本项目采用 MIT 许可证。
贡献
欢迎贡献代码!请随时提交拉取请求。
故障排除
| 问题 |
解决方案 |
| "Reddit API credentials not found" |
确保 .env 文件存在且包含有效凭证 |
| 速率限制错误 |
等待几分钟,PRAW 会自动处理 |
| "Subreddit not found" |
验证子版块名称(无需 r/ 前缀) |
| 无搜索结果 |
尝试更广泛的搜索词或不同的时间过滤器 |
| 导入错误 |
运行 uv sync 安装所有依赖项 |