使用说明
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