Reddit搜索工具

一个基于Reddit官方API的只读浏览和搜索工具,提供帖子搜索、子论坛信息获取等功能,适用于内容分析和数据挖掘。

  • by GeLi2001
  • Python
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 GeLi2001/reddit-mcp

使用说明

Reddit MCP工具

模型上下文协议(MCP)服务器,通过Reddit的官方API提供用于浏览和搜索Reddit内容的只读工具。内置于 FastMCP 实现无缝集成和自动序列化。此服务器允许您通过MCP兼容的客户端搜索帖子、阅读帖子详细信息并获取subreddit信息。

特性

  • 🔍 搜索文章:使用各种排序和筛选选项在特定的子版块中搜索帖子
  • 🌐 全站搜索:使用关键字查询在所有Reddit上搜索
  • 📊 获取子文件夹信息:检索有关子版块的详细信息
  • 🔥 获取热门帖子:从subreddit获取热门帖子
  • 📋 获取帖子详细信息:获取有关特定职位的全面详细信息
  • ⚡ FastMCP集成:内置FastMCP,实现自动序列化和无缝MCP兼容性

先决条件

  1. Python 3.10+ 安装在您的系统上
  2. 紫外线 已安装包管理器(安装指南)
  3. Reddit API证书 (见下面的设置部分)

Reddit API设置

  1. 创建Reddit应用程序:

    • 首选 Reddit应用程序首选项
    • 点击“创建应用程序”或“创建另一个应用程序”
    • 为应用程序类型选择“脚本”
    • 填写必填字段:
      • 名称:您的应用程序名称(例如,“Reddit MCP工具”)
      • 说明:简要说明
      • 关于URL:可以为空
      • 重定向URI:http://localhost:8080(必需但未使用)
  2. 获取您的凭据:

    • 客户端ID:在您的应用程序名称(短字符串)下找到
    • 客户端密钥:在应用程序详细信息中找到(较长字符串)

安装

  1. 克隆或下载此存储库:

    git clone <repository-url>
    cd reddit-mcp-tool
    
  2. 使用uv安装依赖项:

    uv sync
    
  3. 快速设置(推荐):

    uv run python scripts/setup.py
    

    这将创建您的 .env 归档并告诉你下一步该做什么。

  4. 手动设置:

    cp env.example .env
    

    编辑 .env 使用您的Reddit API凭据文件:

    REDDIT_CLIENT_ID=your_client_id_here
    REDDIT_CLIENT_SECRET=your_client_secret_here
    REDDIT_USER_AGENT=reddit-mcp-tool:v0.2.0 (by /u/yourusername)
    
  5. 测试您的设置:

    uv run python scripts/test_basic.py
    

    备注:此服务器以只读模式运行,只需要客户端ID、机密和用户代理即可进行基本API访问。

故障排除

如果遇到问题,请参阅 故障排除.md 了解常见问题的详细解决方案。

用法

运行MCP服务器

uv run reddit-mcp-tool

或者直接使用Python:

uv run python -m reddit_mcp.server

可用工具

1.搜索Reddit帖子(特定于子版块)

在特定的subreddit中搜索帖子:

{
  "name": "search_reddit_posts",
  "arguments": {
    "subreddit": "python",
    "query": "machine learning",
    "limit": 10,
    "sort": "relevance",
    "time_filter": "week"
  }
}

参数:

  • subreddit (必填):子版块名称(不含r/)
  • query (必填):搜索查询字符串
  • limit (可选):要返回的帖子数量(1-100,默认值:10)
  • sort (可选):排序方法-“相关性”、“热门”、“顶部”、“新”、“评论”(默认:“相关性”)
  • time_filter (可选):时间过滤器-“全部”、“日”、“周”、“月”、“年”(默认值:“全部”)

2.搜索所有Reddit(整个网站)

在整个Reddit上搜索:

{
  "name": "search_reddit_all",
  "arguments": {
    "query": "artificial intelligence",
    "limit": 20,
    "sort": "top",
    "time_filter": "week"
  }
}

参数:

  • query (必填):搜索查询字符串
  • limit (可选):要返回的帖子数量(1-100,默认值:10)
  • sort (可选):排序方法-“相关性”、“热门”、“顶部”、“新”、“评论”(默认:“相关性”)
  • time_filter (可选):时间过滤器-“全部”、“日”、“周”、“月”、“年”(默认值:“全部”)

3.获取帖子详细信息

获取特定帖子的详细信息:

{
  "name": "get_reddit_post_details",
  "arguments": {
    "post_id": "abc123"
  }
}

参数:

  • post_id (必填):Reddit帖子ID

4.获取子漩涡信息

获取有关subreddit的信息:

{
  "name": "get_subreddit_info",
  "arguments": {
    "subreddit": "python"
  }
}

参数:

  • subreddit (必填):子版块名称(不含r/)

5.获取热门帖子

从subreddit获取热门帖子:

{
  "name": "get_hot_reddit_posts",
  "arguments": {
    "subreddit": "programming",
    "limit": 15
  }
}

参数:

  • subreddit (必填):子版块名称(不含r/)
  • limit (可选):要返回的帖子数量(1-100,默认值:10)

搜索工具比较

特点 search_reddit_posts search_reddit_all
范围 单一子版块 所有Reddit
用例 聚焦社区搜索 广泛主题发现
结果 来自一个子版块 来自多个子版块
示例 r/programming中的“python” 所有Reddit中的“python”

配置

环境变量

变量 必填 描述
REDDIT_CLIENT_ID 是 您的Reddit应用程序的客户端ID
REDDIT_CLIENT_SECRET 是 您的Reddit应用程序的客户端机密
REDDIT_USER_AGENT 是 API请求的用户代理字符串

与MCP客户端集成

此服务器实现了模型上下文协议,可以与任何兼容MCP的客户端一起使用。配置您的MCP客户端以使用stdio传输连接到此服务器。

Claude桌面配置

将此添加到您的Claude Desktop配置中:

{
  "mcpServers": {
    "reddit-mcp-tool": {
      "command": "uvx",
      "args": ["reddit-mcp-tool@latest"],
      "env": {
        "REDDIT_CLIENT_ID": "your_client_id_here",
        "REDDIT_CLIENT_SECRET": "your_client_secret_here",
        "REDDIT_USER_AGENT": "reddit-mcp-tool:v0.2.0 (by /u/yourusername)"
      }
    }
  }
}

本地开发配置

对于本地开发,请使用:

{
  "mcpServers": {
    "reddit-mcp-tool": {
      "command": "uv",
      "args": ["run", "reddit-mcp-tool"],
      "cwd": "/path/to/reddit-mcp-tool",
      "env": {
        "REDDIT_CLIENT_ID": "your_client_id_here",
        "REDDIT_CLIENT_SECRET": "your_client_secret_here",
        "REDDIT_USER_AGENT": "reddit-mcp-tool:v0.2.0 (by /u/yourusername)"
      }
    }
  }
}

错误处理

服务器包括针对常见场景的全面错误处理:

  • 子版块名称无效
  • 未找到帖子
  • 身份验证失败
  • 速率限制
  • 网络错误

所有错误都通过MCP协议作为描述性文本内容返回。

速率限制

Reddit的API有费率限制。服务器遵守这些限制,但如果在短时间内发出太多请求,则可能会遇到限速错误。经过身份验证的用户的默认速率限制通常为每分钟60个请求。

发展

运行测试

uv run pytest

代码格式化

uv run black .
uv run ruff check .

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 如果适用,添加测试
  5. 运行测试套件
  6. 提交拉取请求

许可证

该项目根据MIT许可证获得许可。有关详细信息,请参阅LICENSE文件。

免责声明

此工具用于教育和发展目的。使用此工具时,请确保遵守Reddit的API服务条款和社区指南。这是一个只读工具,尊重Reddit的API限制,不提供任何发布或评论功能。

备注

  • 此项目已重命名为 reddit-mcp-tool 避免与现有冲突 reddit-mcp PyPI上的包
  • 仅支持只读操作(搜索、阅读帖子、获取subreddit信息)
  • 不需要用户身份验证-只需要基本API访问的应用程序凭据
  • 使用可靠的PRAW(Python Reddit API Wrapper)库构建
  • 包括适当的速率限制和错误处理