Reddit Mcp Poc

Reddit Mcp Poc

🚀 Reddit MCP 服务器

Reddit MCP 服务器是一个模型上下文协议(MCP)服务器,它通过专门为深入研究和分析设计的三层架构,为大语言模型(LLMs)提供全面访问 Reddit 内容的能力。该服务器基于 FastMCP 和 PRAW 构建,可实现高效部署。

🚀 快速开始

前提条件

  • Python 3.11 及以上版本
  • Reddit API 凭证(点击此处获取
    1. 访问 https://www.reddit.com/prefs/apps
    2. 点击“创建应用”或“创建另一个应用”
    3. 选择“脚本”作为应用类型
    4. 记录下你的 client_id(在“个人使用脚本”下方)和 client_secret

安装

  1. 克隆仓库:
git clone 
cd reddit-mcp-poc
  1. 使用 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 资源:可访问热门子版块、子版块信息和服务器功能

💻 使用示例

基础用法

🚀 推荐的全面研究工作流程

为获得最佳效果,请遵循以下利用三层架构的工作流程:

# 1. 发现 - 查找相关社区
discover_reddit_resources(
topic="machine learning ethics",
discovery_depth="comprehensive"
)

# 2. 需求 - 获取参数指导(可选)
get_operation_requirements("fetch_multiple", context="ML ethics discussion")

# 3. 执行 - 从多个社区获取内容
execute_reddit_operation("fetch_multiple", {
"subreddit_names": ["MachineLearning", "artificial", "singularity", "ethics"],
"limit_per_subreddit": 8
})

# 4. 深入挖掘 - 获取有前景帖子的评论
execute_reddit_operation("fetch_comments", {
"submission_id": "abc123",
"comment_limit": 100
})

为何此流程有效

  • 📊 比单板块方法的覆盖率提高 60%
  • 🔗 自动包含 Reddit URL,便于正确引用
  • ⚡ 通过智能批处理减少 70% 的 API 调用
  • 📝 支持全面的评论分析,适合研究需求

高级用法

🔧 三层架构工作流程示例

# 推荐:完整的研究工作流程
# 步骤 1: 发现社区
result = discover_reddit_resources(
topic="sustainable technology",
discovery_depth="comprehensive"
)
# 返回:8 - 15 个相关子版块 + 推荐操作

# 步骤 2: 获取操作要求(可选)
schema = get_operation_requirements("fetch_multiple")
# 返回:参数模式、建议和常见错误

# 步骤 3: 使用发现的社区执行操作
posts = execute_reddit_operation("fetch_multiple", {
"subreddit_names": result["relevant_communities"]["subreddits"][:8],
"listing_type": "hot",
"limit_per_subreddit": 6
})

# 步骤 4: 深入挖掘有前景的讨论
comments = execute_reddit_operation("fetch_comments", {
"submission_id": "interesting_post_id",
"comment_limit": 100
})

⚡ 快速操作示例

# 在整个 Reddit 上搜索
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
})

# 从已知子版块批量获取内容(效率提高 70%)
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)

下一步计划

基于三层架构的基础,后续计划如下:

  1. 增强大语言模型指导:改进 get_operation_requirements,提供更丰富的上下文感知建议
  2. 高级分析:为发现的社区添加情感分析和趋势检测功能
  3. 缓存层:为发现的社区和频繁查询实现智能缓存
  4. 用户认证:添加写操作(发帖、评论等)并提供适当的认证
  5. 扩展发现:添加基于时间和活动的社区发现模式
  6. 研究模板:为常见研究模式提供预配置的工作流程
  7. 引用工具:根据 Reddit URL 自动生成参考书目

📄 许可证

本项目采用 MIT 许可证。

贡献

欢迎贡献代码!请随时提交拉取请求。

故障排除

问题 解决方案
"Reddit API credentials not found" 确保 .env 文件存在且包含有效凭证
速率限制错误 等待几分钟,PRAW 会自动处理
"Subreddit not found" 验证子版块名称(无需 r/ 前缀)
无搜索结果 尝试更广泛的搜索词或不同的时间过滤器
导入错误 运行 uv sync 安装所有依赖项
  • 0 关注
  • 0 收藏,8 浏览
  • system 提出于 2025-09-28 07:33

相似服务问题