Back to MCP directory
publicPublicdnsLocal runtime

reddit-mcp-poc

一个基于三层架构的Reddit MCP服务器,为LLM提供全面的Reddit内容访问,支持发现社区、获取操作要求和执行操作,优化研究效率。

article

README

🚀 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 <repository-url>
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 安装所有依赖项 |

help

Runtime guide

cloud

Hosted runtime

Hosted servers run from a provider-managed environment. You usually connect the MCP client to the hosted endpoint or follow the provider's authorization flow, without keeping a local process alive

  1. Open provider connection page
  2. Authorize or copy endpoint
  3. Connect from your MCP client
terminal

Local runtime / other methods

Local servers run on your own machine or infrastructure. You normally copy the server_config into your MCP client, install the required package, and provide env variables from env_schema when needed

  1. Copy server_config
  2. Install required package
  3. Fill env variables and restart client