使用说明
Reddit MCP(多组件项目)服务器
一个基于(某技术/框架)构建的健壮Python服务器 PRAW(Python Reddit API Wrapper) 并且 FastMCP 用于全面的Reddit交互。此项目允许您通过统一的类似API的界面检索帖子、用户数据、创建/编辑内容、进行版主管理等。
📌 目录
🚀 开始使用
先决条件
安装
-
克隆仓库:
git clone [repository-url] cd reddit-mcp-server -
安装依赖项:
pip install praw fastmcp
配置
为Reddit API认证设置以下环境变量:
| 环境变量 | 描述 |
|---|---|
REDDIT_CLIENT_ID |
您的Reddit应用程序的客户端ID。 |
REDDIT_CLIENT_SECRET |
您的Reddit应用程序的客户端密钥。 |
REDDIT_USER_AGENT |
描述性用户代理(例如。, python:futuregen:v1.0 (by u/YourUsername))。 |
REDDIT_REFRESH_TOKEN |
PRAW 刷新令牌,用于长期脚本访问。 |
获取代币的详细指南
-
创建一个Reddit应用程序:
- 登录Reddit并前往 Reddit 应用偏好设置页面.
- 点击 “创建一个应用程序…”.
- 选择
script作为应用类型。 - 设置
name(例如,“MCP-Server”)。 - 设定
redirect uri到一个虚拟URL,例如http://localhost:8080(这对于PRAW(Python Reddit API Wrapper)的身份验证至关重要)。 - 点击 “create app”翻译成中文是“创建应用”。
-
获取客户端ID和客户端密钥:
- 在生成的页面上 客户端ID 是应用程序名称下的字母数字字符串(例如。,
VoDq1m6w4nmuLk7oDUmN8Q)。 - 该 客户端密钥 标签旁边的字符串是什么
secret(例如。,rxSEa8e2uyFSK6cfrJVlAe_omhgsXQ)。
- 在生成的页面上 客户端ID 是应用程序名称下的字母数字字符串(例如。,
-
生成一个刷新令牌(需要PRAW辅助脚本):
- 这个(或“它”) 刷新令牌 需要永久、基于脚本的访问权限。PRAW 提供了一个辅助工具来生成此令牌。
- 您必须运行一个一次性脚本(或使用专用的PRAW工具),以在网页浏览器中启动OAuth流程。
- 脚本将要求提供 客户端ID, 客户端密钥并将您重定向到一个Reddit授权页面。
- 授权后,脚本将打印出 刷新令牌。
示例:PRAW 初始化
import os
import praw
os.environ["REDDIT_CLIENT_ID"] = "VoDq1m6w4nmuLk7oDUmN8Q"
os.environ["REDDIT_CLIENT_SECRET"] = "rxSEa8e2uyFSK6cfrJVlAe_omhgsXQ"
os.environ["REDDIT_USER_AGENT"] = "python:futuregen:v1.0 (by u/Striking_Economy698)"
os.environ["REDDIT_REFRESH_TOKEN"] = "200334591410393-Uwlr-vfZ65KzOQGmmr2qCUV_TrT53w"
reddit = praw.Reddit(
client_id=os.environ["REDDIT_CLIENT_ID"],
client_secret=os.environ["REDDIT_CLIENT_SECRET"],
refresh_token=os.environ["REDDIT_REFRESH_TOKEN"],
user_agent=os.environ["REDDIT_USER_AGENT"]
)
运行服务器 启动FastMCP服务器: 运行 python reddit_server.py
服务器现已启动并准备好接受API调用。
🛠️ 可用工具(API 端点) 所有工具都返回一个结构化的JSON响应: { "successful": 成功/失败(布尔值,true/false), "data": {...}, "error": "如有错误,显示错误信息" }
内容检索与发现
| 工具名称 | 描述 | 参数 |
|---|---|---|
get_hot_posts |
从某个子版块中获取热门帖子。 | subreddit, limit |
retrieve_reddit_posts |
别名用于 get_hot_posts。 subreddit, size |
|
get_new_submissions 按时间顺序检索最新的帖子。 |
subreddit, limit |
|
get_top_posts |
在指定时间段内检索热门帖子。 | subreddit, time_filter, limit |
get_subreddit_listings |
按列表类型检索帖子 (hot, top等)。 |
subreddit, listing_type, time_filter (optional), limit |
get_gilded_content |
获取带有奖项的帖子。 | subreddit, limit |
retrieve_specific_content |
获取帖子的元数据(t3_) 或者评论 (t1_)。 |
id |
retrieve_post_comments |
获取帖子的所有评论。 | article (帖子ID) |
search_across_subreddits |
根据查询在全球范围内搜索Reddit。 | search_query, limit, sort |
👥 用户与社区信息
| 工具名称 | 描述 | 参数 |
|---|---|---|
get_user_info |
获取用户的基本信息。 | username |
get_redditor_trophies |
获取用户的奖杯。 | username |
get_user_comments |
获取用户最近的评论。 | username, limit |
get_subreddit_details 获取子版块的标题、订阅者数量和描述。 |
subreddit |
|
get_subreddit_sidebar |
从侧边栏获取原始Markdown内容。 | subreddit |
get_subreddit_rules |
获取子版块规则。 (此行无实际内容,若需翻译前文或后文,请提供相应文本) subreddit |
|
get_moderators 列出一个子版块的版主。 |
subreddit |
|
search_subreddits 搜索子版块社区。 |
query, limit |
|
get_subreddits_by_topic |
按主题检索子版块。 | topic, limit |
get_user_flair |
获取用户在某个子版块中的特色徽章。 | subreddit, username |
get_link_flair 获取子版块的链接徽章。 |
subreddit |
|
get_blocked_users |
获取被屏蔽的用户。 | (无) |
get_moderated_subs 列出由已认证用户管理的子版块。 |
limit |
|
list_multireddits |
列出认证用户的全部多子版(Multireddits)。 | (无) |
get_multireddit_posts 从Multireddit中检索热门帖子。 |
multireddit_name, limit |
✍️ 内容修改与操作
| 工具名称 | 描述 | 参数 |
|---|---|---|
create_reddit_post |
创建一个文本(self) 或链接 (link) 帖子。 |
subreddit, title, kind, text (为自己), url (用于链接), flair_id (optional) |
post_reddit_comment |
在帖子下发表评论作为回复(t3_) 或者评论 (t1_)。 |
thing_id, text |
edit_reddit_content 编辑经认证用户的评论或帖子。 |
thing_id, text |
|
delete_reddit_comment |
删除已认证用户的评论。 | id |
delete_reddit_post |
删除已认证用户的帖子。 | id |
vote_on_content |
点赞(1), 投反对票(-1),或撤回投票(0)。 |
fullname, direction |
send_private_message 向用户发送私信。 |
recipient, subject, message |
|
send_mod_mail |
向子版块版主发送消息。 | subreddit, subject, message |
get_unread_messages |
获取未读消息。 (此行无实际内容,若需翻译格式说明,可译为)“空白行”或“无内容行” limit |
⚠️ 已知问题 服务器可能会偶尔达到Reddit API的速率限制:
Reddit 因你的操作过于频繁而封锁了你的账户
创建、编辑或对内容进行投票等操作可能会暂时失败,直至限制解除。