Reddit趋势分析协议服务器

一个无需认证的模型上下文协议服务器,允许AI助手探索Reddit趋势、发现社区并分析热门内容。

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

使用说明

A Model Context Protocol server that lets AI assistants explore Reddit trends,
discover communities, and analyze what's hot — without authentication.

What it does • Getting Started • Tools • Trend Score • JQ Filters • Docker


🎯 它能做什么?

此MCP使您的AI助手能够:

  • 发现 哪些子版块与任何主题最相关
  • 找到 同时涵盖多个主题的跨社区
  • 轨道 当前特定子版块的趋势是什么
  • 搜索 在全球或社区内发布
  • 斑点 在病毒传播之前增加内容
  • 分析 随着时间的推移,一个话题的势头是增强还是减弱

没有API密钥。没有OAuth。只是Reddit的公共JSON端点。


🚀 入门

1.配置

创建一个 config.yaml:

server:
  name: "reddit-mcp"
  version: "0.1.0"
  transport:
    type: "stdio"

reddit:
  user_agent: "MCP-TrendBot/1.0 (by /u/yourusername)"

⚠️ 始终设置适当的 user_agentReddit会阻止缺少或通用用户代理的请求。使用您实际的Reddit用户名。

HTTP传输(用于生产)

server:
  name: "reddit-mcp"
  version: "0.1.0"
  transport:
    type: "http"
    http:
      host: ":8080"

reddit:
  user_agent: "MCP-TrendBot/1.0 (by /u/yourusername)"

看 docs/config-stdio.yaml 和 docs/config-http.yaml 如需查看完整示例。

2.构建和运行

go mod tidy
make build
./bin/reddit-mcp -config config.yaml

🛠️ 可用工具

发现

工具 它做什么
discover_communities 查找单个主题的子版块,按订阅者排序
get_crossover_communities 查找同时涵盖多个主题的子版块,按重叠程度排序
get_subreddit_info 关于subreddit的统计信息:订阅者、活跃用户、描述

趋势和搜索

工具 它做什么
get_trending_posts 来自已知子版块的帖子,按趋势得分合并和排序
get_topic_trends 全球Reddit同时搜索多个主题
get_subreddit_pulse 单个社区的现状(热门/新兴/热门/新兴)
search_posts 按关键字搜索帖子,全局搜索或在子版块内搜索
get_rising_posts 在r/all中获得势头的帖子现在

分析

工具 它做什么
analyze_sentiment_trend 比较主题势头:过去24小时与过去N天

所有返回帖子的工具都接受 jq_filter 参数。 始终使用它 以避免烧毁上下文。


🔥 趋势得分

每一篇文章都有一个 trend_score 计算如下:

trend_score = velocity × (1 + engagement)
velocity    = score / age_hours
engagement  = num_comments / max(score, 1)

2小时前获得500张赞成票的帖子得分远高于3天前获得2000张赞成票。这给出了一个真实的信号,表明现在真正热门的是什么,而不仅仅是随着时间的推移累积的选票。


🔍 JQ滤波器

所有返回帖子的工具都接受 jq_filter 参数。这是保持输出紧凑和避免上下文爆炸的关键。

总是提供一个。 工具说明包括推荐的过滤器。

例子

# Compact list — title, score and link only
[.[] | {title, score, permalink}]

# Top 5 posts sorted by trend score
sort_by(-.trend_score) | .[0:5]

# Only high-scoring posts
[.[] | select(.score > 500)]

# For get_topic_trends — 3 posts per topic, minimal fields
[.[] | {topic, posts: [.posts[:3] | .[] | {title, score, trend_score, subreddit}]}]

如果过滤器无效,该工具将退回到完全未过滤的输出。


🗺️ 推荐工作流程

在探索多个主题(例如kubernetes、云、golang、AI)时:

第一步——找到合适的社区:

get_crossover_communities(
  topics: ["kubernetes", "cloud", "golang", "AI"],
  limit_per_topic: 5
)

这将为您的子版块提供按其覆盖的主题数量排名的结果。

第二步——从这些社区获取热门帖子:

get_trending_posts(
  subreddits: ["devops", "kubernetes", "golang", "MachineLearning"],
  time_range: "week",
  limit: 5,
  jq_filter: "[.[:20] | .[] | {title, subreddit, score, trend_score, permalink}]"
)

两个电话。输出紧凑。来自实际社区的高质量成果。


🐳 码头工人

docker build -t reddit-mcp .
docker run -v $(pwd)/config.yaml:/config/config.yaml reddit-mcp

⚠️ 费率限制

Reddit允许约60个请求/分钟,无需身份验证。如果你打了很多电话,在它们之间加一点延迟。服务器不实现自动回退——如果需要,在应用程序级别处理它。


🔧 故障排除

429请求太多

您已达到Reddit的速率限制。请稍候,然后重试。

空结果

子版块可能是私有的、非常小的,或者查询过于具体。使用 get_subreddit_info 在从社区获取帖子之前对其进行验证。

jq过滤器错误

无效的jq语法会退回到未过滤的输出。如果获得的数据比预期的多,请检查筛选器语法。

Reddit返回HTML而不是JSON

你的 user_agent 正在被阻止。确保已设置并遵循格式 AppName/Version (by /u/username).


🤝 贡献

有关处理此代码库的AI代理,请参阅 代理商.md.


📄 许可证

Apache 2.0