Reddit交互服务器

一个基于PRAW和FastMCP的Python服务器,提供全面的Reddit交互功能,包括内容检索、用户数据获取、内容创建/编辑和社区管理。

  • by Sujay3054
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Sujay3054/mcp-reddit

使用说明

Reddit MCP(多组件项目)服务器

一个基于(某技术/框架)构建的健壮Python服务器 PRAW(Python Reddit API Wrapper) 并且 FastMCP 用于全面的Reddit交互。此项目允许您通过统一的类似API的界面检索帖子、用户数据、创建/编辑内容、进行版主管理等。


📌 目录


🚀 开始使用

先决条件

安装

  1. 克隆仓库:

    git clone [repository-url]
    cd reddit-mcp-server
    
  2. 安装依赖项:

    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 刷新令牌,用于长期脚本访问。

获取代币的详细指南

  1. 创建一个Reddit应用程序:

    • 登录Reddit并前往 Reddit 应用偏好设置页面.
    • 点击 “创建一个应用程序…”.
    • 选择 script 作为应用类型。
    • 设置 name (例如,“MCP-Server”)。
    • 设定 redirect uri 到一个虚拟URL,例如 http://localhost:8080 (这对于PRAW(Python Reddit API Wrapper)的身份验证至关重要)。
    • 点击 “create app”翻译成中文是“创建应用”。
  2. 获取客户端ID和客户端密钥:

    • 在生成的页面上 客户端ID 是应用程序名称下的字母数字字符串(例如。, VoDq1m6w4nmuLk7oDUmN8Q)。
    • 该 客户端密钥 标签旁边的字符串是什么 secret (例如。, rxSEa8e2uyFSK6cfrJVlAe_omhgsXQ)。
  3. 生成一个刷新令牌(需要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 因你的操作过于频繁而封锁了你的账户

创建、编辑或对内容进行投票等操作可能会暂时失败,直至限制解除。