mcpField
R
Reddit MCP Buddy

Reddit MCP Buddy

本地服务
github.com/karanb192社交媒体8663 天前更新

关于 Reddit MCP Buddy

Reddit MCP Buddy 是供 AI 助手浏览 Reddit 帖子、评论和用户活动的 MCP 服务。可在有条件时通过公共 RSS 匿名浏览版块;搜索和更完整的数据需要获批的 Reddit API 访问,发帖工具可选启用。

主要功能

  1. 01浏览版块帖子
  2. 02搜索 Reddit 帖子
  3. 03读取帖子评论
  4. 04分析用户活动
  5. 05可选发帖和评论工具
  6. 06RSS 浏览与本地速率限制

适用场景

  1. 01查看热门版块帖子
  2. 02使用 Reddit 搜索研究讨论
  3. 03检查帖子评论和用户历史
  4. 04通过可选工具拟稿并发布

MCP 相关

它向 MCP 客户端提供 Reddit 浏览、搜索、帖子详情、用户分析和术语解释工具。启用后可使用发帖工具;有条件时无需凭据即可通过 RSS 浏览,而搜索及其他 API 数据需要获批的访问权限。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"reddit-mcp-buddy": {
"command": "npx",
"args": [
"-y",
"reddit-mcp-buddy"
]
}
}
}
启动命令npx -y reddit-mcp-buddy

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmreddit-mcp-buddy1.1.14

工具

5

收录的工具列表 · 更新于 2 周前

参数类型必填说明
subredditstring是不带 r/ 前缀的 subreddit 名称。使用特定 subreddit(例如,"technology")、使用 "all" 获取整个 Reddit 的帖子,或使用 "popular" 获取默认 subreddit 中的热门内容
sortenum否hot | new | top | rising | controversial
timeenum否hour | day | week | month | year | all
limitnumber否默认值为 25,范围为 (1-100)。仅当用户明确指定时更改。
include_nsfwboolean否
include_subreddit_infoboolean否包含 subreddit 元数据,例如订阅者数量和描述。需要 Reddit 凭据;通过 RSS 回退匿名浏览时会静默省略

详细介绍

README 配图 Reddit MCP Buddy

面向 Claude Desktop 和 AI 助手的 Reddit 浏览器

一个用于浏览 Reddit、搜索帖子和分析用户活动的 Model Context Protocol (MCP) 服务。可用时,匿名浏览会使用 Reddit 的公开 RSS 源。搜索、评论、用户分析和完整指标需要经批准的 Reddit API 访问权限。1.2.0 版新增了可选的发帖和评论功能,并设有每个进程的上限和依赖客户端的确认流程。参见发帖。

npm version npm downloads GitHub stars License: MIT

🎬 实际演示

Reddit MCP Buddy 演示 - AirPods Max 2 和 Dune Part Three

Claude 查看 Reddit 对 Dune Part Three 预告片的反应,以及 AirPods Max 2 是否值得 549 美元

Reddit MCP Buddy 演示 - 分析各个 subreddit 中的 H1B 情绪

Claude 分析 r/cscareerquestions 和 r/india 中关于 H-1B 签证变更的实时情绪

目录

Reddit MCP Buddy 有何不同?

  • 🚀 匿名浏览 - 可用时,通过公开 RSS 源浏览 subreddit;其他实时数据工具需要经批准的 API 访问权限
  • ✍️ 选择启用发帖(v1.2.0) - 创建帖子和评论,具有依赖客户端的确认流程、每个进程的上限和重复内容抑制
  • ⚡ 本地速率限制 - 配置的上限为每分钟 10/60/100 个请求;Reddit 也会应用自己的限制
  • 🎯 干净的数据 - 没有虚假的“情绪分析”或捏造的指标
  • 🧠 针对大模型优化 - 专为 Claude 等 AI 助手打造
  • 📦 TypeScript - 完全类型化、可靠且易于维护
  • ✅ 速率限制测试 - 用于验证服务本地身份验证级别的工具

快速开始(30 秒)

面向 Claude Desktop - 桌面扩展(最简单!)
  1. 下载:reddit-mcp-buddy.mcpb
  2. 安装:打开下载的文件
  3. 完成! Reddit 工具现在已可在 Claude 中使用
面向 Claude Desktop - NPM 方法(备选)

将以下内容添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "reddit": {
      "command": "npx",
      "args": ["-y", "reddit-mcp-buddy"]
    }
  }
}
面向 Claude Code

运行此命令以添加 MCP 服务(用户范围):

claude mcp add --transport stdio reddit-mcp-buddy -s user -- npx -y reddit-mcp-buddy
面向其他 MCP 客户端

使用 NPM 方法:npx -y reddit-mcp-buddy

它能做什么?

让你的 AI 助手:

  • 📊 “Reddit 上最近有什么热门内容?” - 浏览 r/all 中的热门帖子
  • 🔍 “搜索关于 AI 的讨论” - 搜索所有子版块
  • 💬 “获取这篇 Reddit 帖子的评论” - 获取帖子及其完整评论串
  • 👤 “分析用户 spez” - 获取用户历史记录、karma 和活动情况
  • 📚 “解释 Reddit karma” - 了解 Reddit 术语
  • ✍️ “把这篇内容发到 r/test” - 起草内容、检查子版块规则,并在你确认后提交(需主动启用,见发帖)

可用工具

browse_subreddit

使用排序选项浏览任意子版块的帖子。

- Subreddit:
  - "all" - entire Reddit frontpage
  - "popular" - trending across Reddit
  - Any specific subreddit (e.g., "technology", "programming", "science")
- Sort by: hot, new, top, rising, controversial
- Time range: hour, day, week, month, year, all (for top/controversial sort)
- Include subreddit info: Optional flag for subreddit metadata (requires credentials)

没有凭据? 结果来自 Reddit 公共 RSS 源(data_source: "rss"):score、num_comments、upvote_ratio 和 nsfw 会返回 null,且无法应用 include_nsfw 过滤条件。添加凭据(身份验证)即可通过 API 获取完整数据。

search_reddit

搜索整个 Reddit 或指定子版块。

- Query: Your search terms
- Filter by: subreddit, author, time, flair
- Sort by: relevance, hot, top, new, comments
get_post_details

获取帖子及其所有评论。

- Input:
  - Reddit URL (supports multiple formats), OR
  - Post ID alone (will auto-detect subreddit, 2 API calls), OR
  - Post ID + subreddit (most efficient, 1 API call)
- Supported URL formats:
  - reddit.com, www.reddit.com
  - old.reddit.com, new.reddit.com
  - np.reddit.com (No Participation links)
  - m.reddit.com (mobile links)
  - redd.it short URLs
  - URLs with query params (?utm_source=...) or fragments (#comment)
- Options: comment sorting, depth, link extraction
user_analysis

分析 Reddit 用户的个人资料。

- Username: Any Reddit user
- Returns: karma, posts, comments, active subreddits
reddit_explain

获取 Reddit 术语的解释。

- Terms: karma, cake day, AMA, ELI5, etc.
写入工具(需主动启用)

只有启用发帖后,才会显示 create_post、add_comment 和 subreddit_rules;只读安装中只会显示上述五个工具。详见发帖(v1.2.0)。

身份验证(可选)

搜索、帖子详情、用户分析和完整指标需要获批应用及使用场景对应的 Reddit API 凭据。

Reddit API 审批

Reddit 的负责任构建者政策要求使用其 API 前必须获得明确批准。创建应用并不保证能访问 API。Reddit 建议开发者优先使用 Devvit;对于 Devvit 不支持的使用场景,请使用 Reddit API 访问申请表。

如果你已经获得批准,请使用下方的应用凭据。本项目无法代为申请批准或保证审批时间,也不提供共享 API 密钥或第三方 OAuth 服务。

没有凭据时,browse_subreddit 可以使用公共 RSS 源,reddit_explain 则可离线运行。RSS 可能会被屏蔽或限流,且不提供互动指标或 NSFW 标记。它无法启用搜索、帖子详情或用户分析,也不能代替 API 审批。

设置步骤
  1. 为你的应用和使用场景申请 Reddit API 审批,使用上方的链接。
  2. 打开 https://www.reddit.com/prefs/apps 并选择获批的应用。如果 Reddit 要求你创建应用,请按其说明操作。
  3. 填写表单:
    • 名称:例如,“mcp-buddy”。Reddit 会拒绝名称中包含“reddit”的客户端。
    • 应用类型:使用 “script” 进行密码授权,或使用 “web app” 通过 OAuth 同意流程获取刷新令牌。仅应用模式支持这两种方式。
    • 说明:可选
    • 关于 URL:留空
    • 重定向 URI:你注册的 OAuth 回调地址,例如 http://localhost:8080。密码授权不会使用此地址。
  4. 按 Reddit 的指示完成应用注册。如果无法创建应用,请通过 Reddit 的访问申请流程继续跟进。
  5. 查找你的凭据:
    • 客户端 ID:应用名称和类型下方的字符串
    • 客户端密钥:密钥字符串
  6. 更新你的 Claude Desktop 配置:
{
  "mcpServers": {
    "reddit": {
      "command": "npx",
      "args": ["-y", "reddit-mcp-buddy"],
      "env": {
        "REDDIT_CLIENT_ID": "your_client_id",
        "REDDIT_CLIENT_SECRET": "your_client_secret",
        "REDDIT_USERNAME": "your_username",
        "REDDIT_PASSWORD": "your_password"
      }
    }
  }
}
采用 OAuth 授权的 Web 应用

经批准的 Web 应用无需 Reddit 密码即可验证用户身份。使用已注册的重定向 URI、由回调验证的随机 state 值,以及 duration=permanent,完成 Reddit 的授权码流程以获取刷新令牌。只读工具需要申请 identity、read 和 history 权限范围;Reddit 在其 API 参考中列出了各端点所需的权限范围。

在服务的环境中设置以下变量:

{
  "REDDIT_CLIENT_ID": "your_client_id",
  "REDDIT_CLIENT_SECRET": "your_client_secret",
  "REDDIT_REFRESH_TOKEN": "your_refresh_token"
}

使用刷新令牌时,请勿设置 REDDIT_PASSWORD。同时设置两者会导致服务在启动时拒绝运行。服务会按需将刷新令牌换取访问令牌,且不会将环境凭据写入 auth.json。不会使用从该文件加载的刷新令牌;请通过环境配置此模式。

请像保护密码一样保护刷新令牌。将其保存在版本控制之外,不再需要时,请在 Reddit 应用偏好设置中撤销访问权限。OAuth 授权不会授予 Reddit API 审批,也不会扩大获批的使用范围。

三层身份验证系统

Reddit MCP Buddy 执行以下本地上限。这些并非 Reddit API 配额,也不代表有保证的吞吐量:

模式本地上限所需凭据适用场景
匿名10 req/min*无测试、轻度使用
仅应用60 req/min客户端 ID + Secret日常浏览
已验证身份100 req/min客户端 ID + Secret,以及刷新令牌或用户名/密码重度使用、自动化

*服务端上限。匿名请求通过 Reddit 的未登录 RSS 源提供,该源会实施更严格的单 IP 限流(通常每 25-60 秒仅允许一次未缓存请求)。15 分钟缓存和自动重试可以缓解大部分影响,但持续进行匿名浏览时,实际速度会低于 10 req/min。

工作原理:
  • 匿名模式:默认模式,无需设置。仅 browse_subreddit(以及离线工具 reddit_explain)可用:Reddit 会阻止未登录状态下的 JSON API 请求,因此浏览结果来自 Reddit 的公开 RSS 源(data_source: "rss"),互动指标和 NSFW 标记均为 null。其余工具需要凭据。
  • 仅应用模式:使用 OAuth2 客户端凭据授权(脚本应用和 Web 应用均适用)
  • 已验证身份模式:针对获授权的 Web 应用使用 OAuth2 刷新令牌身份验证,或针对脚本应用使用密码授权

重要说明:

  • 客户端凭据会选择仅应用模式;刷新令牌或用户名/密码会选择用户身份验证。
  • 刷新令牌携带授权时授予的权限范围。缺少权限范围可能导致个别工具无法使用。
  • 用户身份验证会改变此服务的本地上限,但不会提高 Reddit 提供的配额。

发帖(v1.2.0)

从 v1.2.0 起,服务可以代表你发帖。提供三个工具,均需主动选择启用:

  • create_post - 向一个 subreddit 提交文本帖或链接帖。会检查机械规则(标题限制、是否必须设置 flair、是否允许链接帖或文本帖),并支持使用 validate_only: true 进行试运行。是否需要确认取决于客户端的功能,如下文所述。
  • add_comment - 对帖子发表评论,或回复特定评论(通过 ID 或 URL),并采用相同的确认流程。
  • subreddit_rules - 只读工具。通过一次缓存调用获取 subreddit 的规则、发帖要求、功能标记和 flair 选项,便于在提交前完善草稿。

建议的工作流:先调用 subreddit_rules,然后使用 validate_only: true 调用 create_post,与用户一起检查完整草稿和选项,最后提交完全相同的请求内容。

启用发帖

在现有凭据旁添加 REDDIT_BUDDY_WRITE:

{
  "mcpServers": {
    "reddit": {
      "command": "npx",
      "args": ["-y", "reddit-mcp-buddy"],
      "env": {
        "REDDIT_CLIENT_ID": "your_client_id",
        "REDDIT_CLIENT_SECRET": "your_client_secret",
        "REDDIT_USERNAME": "your_username",
        "REDDIT_PASSWORD": "your_password",
        "REDDIT_BUDDY_WRITE": "true"
      }
    }
  }
}

Claude Desktop 扩展用户:改为在扩展设置中打开 启用发帖工具 开关。该开关会映射到同一个 REDDIT_BUDDY_WRITE 变量。

或者,将 REDDIT_PASSWORD 替换为上述 Web 应用授权流程获取的 REDDIT_REFRESH_TOKEN。发帖需要已授予 identity、read、submit 和 flair 权限范围。如果还使用 user_analysis,请添加 history。使用刷新令牌时,REDDIT_USERNAME 为可选项;如果提供,该值必须与 Reddit 返回的账户一致。

凭据必须来自环境变量(或会转换为环境变量的扩展配置字段)。交互式 --auth 文件设置不会启用发帖功能。启动时,服务会通过 Reddit 验证账户并检查已授予的权限范围。如果缺少任何要求,服务会记录原因,并保持发帖工具禁用。

通俗来说,安全模型如下

发帖会使用你的账户。服务会强制执行注册、速率限制和重复内容检查;是否需要人工批准也取决于客户端:

  • 默认关闭。 未设置 REDDIT_BUDDY_WRITE 时,写入工具不会注册:只读安装与之前完全相同,仍只有 5 个工具,且不会额外占用上下文。
  • 仅限 stdio。 HTTP 传输没有身份验证,因此写入工具不会在该传输方式下注册。你设备或网络上的任何进程都无法将 HTTP 端点变成发帖代理。
  • 确认方式取决于客户端。 支持 MCP elicitation 的客户端会显示确认提示,其中包含目标、账户、内容预览、完整内容长度和发帖选项。必须明确接受才能继续。预览可能会被截断,因此请先在客户端中检查完整草稿。不支持 elicitation 时,服务要求先进行预览或成功的试运行,然后在 15 分钟内提交完全相同的载荷。服务无法验证是否有人工批准了这次重复操作:是否批准取决于客户端的工具提示,以及模型是否遵循指令。请仅在你信任其批准机制的客户端中启用发帖。
  • 无法提高的每小时上限。 服务强制执行每小时最多发 5 篇帖子、30 条评论,且两次写入之间至少间隔 15 秒。环境变量可以收紧这些限制,但不能放宽。需要坦诚说明的是:这些限制由服务进程执行(重启会重置每小时计数,并行会话各自拥有独立上限,而且该开源代码的分支可以移除这些限制)。设置这些限制是为了让随意滥用得不偿失,而不是阻止蓄意操作的人。
  • 抑制重复内容。 在 15 分钟内重试完全相同的提交时,服务会返回原帖,而不是重复发帖;即使是为同一 subreddit 重新起草的相同内容也一样。允许将相同内容发到不同的 subreddit,但会发出警告并指出较早发布的帖子。
  • 提交后验证。 Reddit 有时会先返回“成功”,但帖子几秒后就被 AutoModerator 移除。提交后,服务会重新检查,并在发生这种情况时报告 status: "filtered" 并附上警告,而不是告诉你帖子已上线。
  • 醒目的日志记录。 每次获准的写入都会记录到 stderr,其中包含操作类型、目标(已知时为 subreddit)和执行用户。
启用前请了解其中的权衡

Reddit 的密码授权会返回具有完整账户权限范围的令牌。OAuth 刷新令牌则携带授权时授予的权限。这些权限适用于整个账户,而不仅仅是某个 subreddit。关闭发帖时,服务使用凭据进行读取;启用发帖后,服务便可以提交帖子和评论。请勿将密码和刷新令牌纳入版本控制,也不要将其存放在共享设备上。

另外请注意:除了上述限制外,Reddit 还会根据账户年龄和 karma 对账户级发帖频率进行限制。如果 Reddit 提示“请在 N 分钟后重试”,服务会显示等待时间,而不会不断重试。

隐私与数据处理

Reddit MCP Buddy 的设计注重隐私和透明度。以下是数据的处理方式:

数据收集
  • Reddit API 数据:服务通过 Reddit 官方 API 获取公开的 Reddit 内容(帖子、评论、用户个人资料)
  • 不跟踪:我们不会收集、存储或传输任何分析、遥测或使用数据
  • 无第三方:所有数据都直接在你的计算机、Reddit API 和 AI 助手之间流动
本地存储
  • 身份验证凭据(可选):
    • 使用 --auth CLI 设置时,凭据存储在本地的 ~/.reddit-mcp-buddy/auth.json 中
    • 密码绝不会写入磁盘——仅在内存中用于 OAuth 令牌交换
    • 环境变量(推荐用于 Claude Desktop)不会由此服务持久化
  • 缓存数据:
    • Reddit API 响应会临时缓存在内存中,以提升性能
    • 缓存大小上限为 50MB
    • 服务停止时会清除所有缓存数据
    • 可通过 REDDIT_BUDDY_NO_CACHE=true 禁用
数据传输
  • 仅限 Reddit API:你的凭据只会发送到 Reddit 官方 OAuth 端点(https://oauth.reddit.com 和 https://www.reddit.com)
  • 无外部服务:不会向任何其他外部服务、分析平台或第三方发送数据
  • 本地处理:所有数据处理都在你的计算机上本地进行
安全说明
  • 默认只读:发布内容需要明确选择启用。启用前,请查看依赖客户端的确认流程。
  • 凭据安全:
    • OAuth 令牌会自动刷新并保存在内存中;只有通过 --auth CLI 设置时,令牌才会同时缓存在 ~/.reddit-mcp-buddy/auth.json 中(文件权限为 600)
    • 客户端密钥被视为敏感信息,绝不会记录到日志中
    • 为获得最高安全性,请在 Claude Desktop 配置中使用环境变量
  • 开源:完整源代码可在 https://github.com/karanb192/reddit-mcp-buddy 获取,供安全审计
GDPR 与隐私合规
  • 不收集个人数据:除 Reddit API 身份验证所需的信息外,我们不会收集或处理任何个人数据
  • 用户控制权:所有凭据均由你掌控,你可以随时删除 ~/.reddit-mcp-buddy/auth.json
  • 删除权:只需删除身份验证文件或卸载服务,即可移除所有本地数据
有疑问或顾虑?

如果你对隐私有任何疑问或顾虑,请在 GitHub 上提交问题。

测试与开发

测试速率限制

Reddit MCP Buddy 包含全面的测试工具,可验证身份验证是否正常工作:

# Clone the repository first
git clone https://github.com/karanb192/reddit-mcp-buddy.git
cd reddit-mcp-buddy
npm install

# Test with your current environment settings
npm run test:rate-limit

# Test specific authentication modes
npm run test:rate-limit:anon    # Test anonymous mode (10 rpm)
npm run test:rate-limit:app     # Test app-only mode (60 rpm)
npm run test:rate-limit:auth    # Test authenticated mode (100 rpm)

速率限制测试器将:

  • 启动本地服务实例
  • 快速发送 API 请求以测试速率限制
  • 显示实时进度条
  • 确认你使用的身份验证级别
  • 准确显示何时触发速率限制
交互式身份验证设置(仅用于本地测试)

对于本地开发和测试,你可以交互式地设置身份验证:

npx -y reddit-mcp-buddy --auth

系统会提示你输入 Reddit 应用凭据,并将其保存在本地。注意:此方式不适用于 Claude Desktop——请改为在 Claude 配置中使用环境变量。

私有测试版发帖测试

构建检出目录,然后打印拟议的测试内容,不发送任何请求:

npm run build
REDDIT_TEST_SUBREDDIT=your_private_sub node tests/live-write.mjs

实时运行需要已获批准的应用、REDDIT_CLIENT_ID 和 REDDIT_CLIENT_SECRET,以及 REDDIT_REFRESH_TOKEN 或脚本应用所需的 REDDIT_USERNAME/REDDIT_PASSWORD 组合。该账号必须是私有测试子版块的版主。OAuth 验证需要全部六个范围:identity、read、submit、flair,以及用于恢复的 history 和用于清理的 edit。测试框架会在连接任何发帖客户端前检查这些条件。请将凭据保存在仓库之外。在支持 --env-file 的 Node 版本中,可以通过本地环境文件提供这些凭据:

RUN_WRITE_TESTS=1 REDDIT_TEST_SUBREDDIT=your_private_sub \
  node --env-file=/path/to/private.env tests/live-write.mjs --run

此命令会执行实际写入。它会启动真正的 stdio MCP 连接,拒绝一条发帖请求,接受一条测试帖,并测试评论预览,随后由不支持征询的客户端提交相同内容。测试框架会自动提供确认响应;运行此命令即表示授权执行这些测试操作。它会创建一条帖子和一条评论,验证其内容,然后尝试删除两者,即使发生故障也会继续尝试。

唯一标记和任何清理失败都会打印出来,供手动检查。如果响应丢失,系统会搜索测试用户最新发布的帖子和评论;如果结果无法确定或删除未经验证,运行就会失败。如果进程被终止或 Reddit 无法访问,则无法保证完成清理。普通单元测试使用离线 API 固定数据,常规集成运行则会跳过发帖,除非明确启用。

使用 HTTP 模式测试

要在终端中直接测试服务:

# Run in HTTP mode on port 3000
npx -y reddit-mcp-buddy --http

# Or with custom port
REDDIT_BUDDY_PORT=8080 npx -y reddit-mcp-buddy --http

**注意:**默认情况下,服务以 stdio 模式运行(供 Claude Desktop 使用)。使用 --http 标志可通过 Postman MCP 或直接 API 调用进行测试。

安装选项

全局安装
npm install -g reddit-mcp-buddy
reddit-buddy --http  # For testing
从源代码安装
git clone https://github.com/karanb192/reddit-mcp-buddy.git
cd reddit-mcp-buddy
npm install
npm run build
npm link
使用 Docker

Docker 镜像和 CI 工作流使用 Node.js 26。要构建并运行镜像:

git clone https://github.com/karanb192/reddit-mcp-buddy.git
cd reddit-mcp-buddy
docker build --pull -t reddit-mcp-buddy .
docker run -it reddit-mcp-buddy

安装 Docker、curl 和 jq 后,运行容器冒烟测试:

bash tests/test-docker.sh reddit-mcp-buddy

该测试会检查容器健康状况、MCP 初始化、工具发现和关闭过程,无需 Reddit 凭据。

Claude Desktop 扩展

如需在 Claude Desktop 中一键安装,请下载预构建的扩展:

📦 下载 reddit-mcp-buddy.mcpb

**安装:**只需打开下载的 .mcpb 文件,Claude Desktop 就会自动安装扩展,随后即可使用 Reddit 工具。

从源代码构建(可选)

如果你希望自行构建扩展:

git clone https://github.com/karanb192/reddit-mcp-buddy.git
cd reddit-mcp-buddy
./scripts/build-mcpb.sh

注意:大多数用户应使用快速开始中所示的标准 npm 安装方式。

与其他工具的比较

特性Reddit MCP Buddy其他 MCP 工具
匿名访问RSS 浏览;其他数据工具需要经批准的 API 访问权限因服务而异
语言TypeScript/Node.jsPython(大多数)
工具数量5 个读取工具 + 3 个选择启用的写入工具8-10 个(存在冗余)
虚假指标✅ 仅真实数据❌“情绪评分”
搜索✅ 完整搜索有限或不支持
缓存✅ 智能缓存通常没有
针对大模型优化✅ 参数清晰选项令人困惑
速率限制测试✅ 内置工具❌ 不提供验证

速率限制

模式每分钟请求数缓存 TTL所需设置
匿名1015 分钟无
仅应用605 分钟客户端 ID + 密钥
已认证1005 分钟所有凭据

缓存 TTL 适用于子版块列表。在所有模式下,帖子详情(10 分钟)、搜索结果(10 分钟)和用户个人资料(15 分钟)均使用固定 TTL。匿名模式的吞吐量还会受到 Reddit 自身基于 IP 的 RSS 限流影响;对于未缓存的请求,其限制比每分钟 10 次更严格。

为什么选择 Reddit MCP Buddy?

其他方案的不足:
  • ❌ 虚假指标 —— 所谓的“情感分数”其实只是关键词计数
  • ❌ 设置复杂 —— 一开始就要求 API 密钥
  • ❌ 响应臃肿 —— 返回 Reddit 原始 API 中 100 多个字段
  • ❌ 与大模型集成不佳 —— 参数令人困惑,描述含糊不清
我们的优势:
  • ✅ 只提供真实数据 —— 数据不是来自 Reddit API,我们就不会编造
  • ✅ 响应简洁 —— 只包含重要字段
  • ✅ 参数清晰 —— 大模型能准确理解需要发送什么
  • ✅ 快速且带缓存 —— 条件允许时可即时响应

示例

你的 AI 现在可以回答:

“今天关于 GPT-4 的热门帖子有哪些?”

→ search_reddit with query="GPT-4", time="day", sort="top"

“告诉我科技领域有哪些热门趋势”

→ browse_subreddit with subreddit="technology", sort="hot"

“大家对这篇文章怎么看?”

→ search_reddit with the article URL to find discussions

“分析用户 DeepFuckingValue”

→ user_analysis with username="DeepFuckingValue"

“获取这篇 Reddit 帖子的评论”

→ get_post_details with url="https://reddit.com/r/..."

“整个 Reddit 上有哪些热门趋势?”

→ browse_subreddit with subreddit="all", sort="hot"

故障排除

常见问题

“无法创建应用”或“需要 API 审批”

  • 按照 Reddit 的审批流程操作;本项目无法审批应用,也无法解除 Reddit 的限制
  • 仅将凭据用于 Reddit 已批准的应用和使用场景

“无法达到每分钟 100 次请求”

  • 10/60/100 档位是此服务的本地上限,并不代表 Reddit 保证提供相应的吞吐量
  • 遵守 Reddit 的速率限制响应;添加账户凭据不会提高 Reddit 授予的配额
  • 运行 npm run test:rate-limit:app 或 npm run test:rate-limit:auth,检查对应的本地模式(需要克隆仓库)

“找不到命令”错误

# Ensure npm is installed
node --version
npm --version

# Try the full global-bin path
$(npm prefix -g)/bin/reddit-mcp-buddy

浏览正常,但搜索 / 评论 / 用户分析失败

  • 不提供凭据时,只有 browse_subreddit(通过 Reddit 的公开 RSS Feed 提供,不含评分或评论数)和离线工具 reddit_explain 可用
  • 匿名浏览也可能触发 Reddit 自身的 RSS 速率限制(HTTP 429);服务会自动重试,但持续受到限流仍可能导致失败
  • 解决方法:添加 Reddit 凭据(请参阅身份验证)

速率限制错误

  • 本地上限:未进行身份验证时每分钟 10 次请求,使用应用凭据时每分钟 60 次,完成完整身份验证时每分钟 100 次
  • Reddit 对 API 和 RSS 分别实施限制;服务会重试暂时性故障,但持续受到限流仍可能导致失败
  • 降低请求频率,并遵守 Reddit 的速率限制响应
  • 如果错误提示 Retry in Ns,请等待相应时长后再重试。对于上游要求等待较长时间的情况,服务会立即返回,而不会一直等待到客户端请求超时。

未显示写入工具

  • 以下条件必须全部满足:REDDIT_BUDDY_WRITE=true,通过环境变量提供客户端凭据以及刷新令牌或用户名 / 密码,使用 stdio 传输,用户身份已验证,并已授予 identity/read/submit/flair 作用域
  • 启动日志(stderr)会明确指出未满足的条件
  • 使用 --auth 文件的设置无法写入:密码不会保存,因此重启后会退回到仅使用应用令牌。请将凭据移至 MCP 客户端配置的 env 块中
  • HTTP 模式按设计不会注册写入工具(HTTP 端点不提供身份验证)

“找不到版块”

  • 检查拼写(不区分大小写)
  • 某些版块可能设为私密或已隔离
  • 请改用 “all” 或 “popular”

连接问题

环境变量
身份验证变量
变量说明必填速率限制
REDDIT_CLIENT_IDReddit 应用客户端 ID否本地上限:60 req/min(需提供密钥)
REDDIT_CLIENT_SECRETReddit 应用密钥否本地上限:60 req/min(需提供 ID)
REDDIT_USERNAMEReddit 账户用户名否本地上限:100 req/min(需提供全部 4 项)
REDDIT_PASSWORDReddit 账户密码否本地上限:100 req/min(需提供全部 4 项)
REDDIT_REFRESH_TOKENOAuth 刷新令牌;不要设置密码否提供客户端 ID 和密钥时,本地上限为 100 req/min
REDDIT_USER_AGENT自定义用户代理字符串(配置凭据后生效)否-
服务配置
变量说明默认值
REDDIT_BUDDY_HTTP以 HTTP 服务而非 stdio 模式运行false
REDDIT_BUDDY_PORTHTTP 服务端口(当 HTTP=true 时)3000
REDDIT_BUDDY_HOSTHTTP 服务绑定的接口127.0.0.1
REDDIT_BUDDY_ALLOWED_ORIGINS允许调用 HTTP 端点的浏览器来源列表,以逗号分隔无
REDDIT_BUDDY_ALLOWED_HOSTSHost 标头中接受的 host:port 值列表,以逗号分隔(防止 DNS 重绑定)绑定到 localhost 时为回环地址
REDDIT_BUDDY_NO_CACHE禁用缓存(始终获取最新内容)false
发帖(v1.2.0)
变量说明默认值
REDDIT_BUDDY_WRITE注册发帖工具;需要环境变量中的用户凭据、已验证的身份和权限范围,以及 stdiofalse
REDDIT_BUDDY_MAX_POSTS_PER_HOUR每小时发帖数;仅接受 1 到 4 之间的值(0 和无效值将被忽略)5
REDDIT_BUDDY_MAX_COMMENTS_PER_HOUR每小时评论数;仅接受 1 到 29 之间的值(0 和无效值将被忽略)30
REDDIT_BUDDY_MIN_WRITE_INTERVAL_S两次写入之间的秒数;仅接受大于 15 的值15

这三个速率下限变量只能收紧内置上限。故意如此:将其设置得比默认值宽松不会产生任何效果,而且 0 不代表“暂停发帖”,而是恢复为默认上限。

HTTP 模式没有身份验证。 它绑定到 localhost,因此只有你的计算机可以访问,并且会拒绝回环地址范围之外的 Host 标头。将 REDDIT_BUDDY_HOST=0.0.0.0 会使整个网络都能访问它——仅在可信网络中这样做(例如在 Docker 中,因为 Docker 会有意设置此值)。绑定到非回环地址时,默认关闭 Host 检查,因为客户端可能会使用容器 IP 或服务名称访问;可设置 REDDIT_BUDDY_ALLOWED_HOSTS 来限制访问。除非来源列在 REDDIT_BUDDY_ALLOWED_ORIGINS 中,否则浏览器请求会被拒绝;Postman 等非浏览器客户端不受影响。

HTTP 和 HTTPS 代理

在 22.x 系列的 Node 22.21.0+,或 Node 24 及更高版本上,请在启动服务前启用 Node 内置的代理支持。项目的 Node 26 Docker 镜像支持此功能。请先检查 node --version:不受支持的版本可能会忽略这些设置并直接连接。Node 目前将此功能标记为仍在积极开发中。

{
  "mcpServers": {
    "reddit": {
      "command": "npx",
      "args": ["-y", "reddit-mcp-buddy"],
      "env": {
        "NODE_USE_ENV_PROXY": "1",
        "HTTP_PROXY": "http://proxy.example.com:8080",
        "HTTPS_PROXY": "http://proxy.example.com:8080",
        "NO_PROXY": "localhost,127.0.0.1"
      }
    }
  }
}

HTTP_PROXY 用于转发 HTTP 请求;HTTPS_PROXY 用于转发 HTTPS 请求,包括 Reddit API 和 RSS 调用。NO_PROXY 用于排除匹配的主机。通过在 shell 中导出这些变量以供 CLI 使用,或通过 Docker 的 -e 选项传入。请在启动前将它们设置在进程环境中;服务不会自动加载项目的 .env 文件。

在 Docker 内部,localhost 指的是容器。在 Docker Desktop 上,使用 host.docker.internal 连接运行在主机上的代理。

代理身份验证信息可以包含在代理 URL 中,例如 http://username:[email protected]:8080。请将该值视为凭据,并在共享的日志和配置中将其隐去。对于使用私有证书颁发机构的网络,请使用 NODE_EXTRA_CA_CERTS 指定组织的 PEM 证书文件,而不要禁用 TLS 验证。

请参阅 Node 的代理和证书配置指南。代理支持用于转发网络流量;它不会授予 Reddit API 使用许可,也不会绕过 Reddit 的访问规则。

技术详情

智能缓存系统

Reddit MCP Buddy 包含智能缓存,可提升性能并减少 API 调用:

  • 内存安全:上限为 50MB,不会影响系统性能
  • 按内容设置 TTL:帖子详情(10 分钟)、用户资料(15 分钟)、搜索结果(10 分钟);subreddit 列表使用模式默认值(匿名时为 15 分钟,使用凭据时为 5 分钟)
  • LRU 淘汰:接近上限时自动移除最少使用的数据
  • 命中跟踪:根据实际使用模式优化缓存

这样既能加快响应速度,又能让 Reddit API 调用保持在速率限制范围内,同时只占用极少的系统资源。

开发

# Install dependencies
npm install

# Run in development
npm run dev

# Build
npm run build

# Run tests
npm test                     # Unit tests
npm run test:integration     # Integration tests
npm run test:all             # All tests

# Test rate limits
npm run test:rate-limit       # Test with current environment
npm run test:rate-limit:anon  # Test anonymous mode (10 rpm)
npm run test:rate-limit:app   # Test app-only mode (60 rpm)
npm run test:rate-limit:auth  # Test authenticated mode (100 rpm)

# Lint
npm run lint

# Type check
npm run typecheck
要求
  • Node.js >= 18.0.0
  • npm 或 yarn
  • TypeScript 5.5+

贡献

欢迎提交 PR!请参阅 CONTRIBUTING.md 了解指南。

我们坚持简单:

  • 不做虚假分析
  • 代码简洁且类型明确
  • 文档清晰
  • 响应迅速

支持

🔗 相关资源

MCP 官方资源
查找此服务
通过 API 查看所有版本
# Get all versions of reddit-mcp-buddy from the registry
curl -s "https://registry.modelcontextprotocol.io/v0/servers?search=reddit-mcp-buddy" | jq

# Get just names, version numbers, and latest flag
curl -s "https://registry.modelcontextprotocol.io/v0/servers?search=reddit-mcp-buddy" | \
  jq '.servers[] | {name: .server.name, version: .server.version, isLatest: ._meta."io.modelcontextprotocol.registry/official".isLatest}'

许可证

MIT - 随你使用!


为 MCP 社区倾心打造。没有风险投资,没有跟踪,只有一个出色的 MCP 服务。

由 Karan Bansal(ArmorCode 的 AI 负责人)打造。我在 karanbansal.in/blog 撰写有关 Claude Code、MCP 和生产级 Agentic AI 的文章。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。