使用说明
Reddit常见问题解答(FAQ)MCP服务器
一个MCP(模型上下文协议)服务器,使AI助手能够搜索Reddit、提取常见问题,并分析社区讨论。该工具有助于从Reddit社区收集真实用户的问题和关注点,用于研究、生成常见问题解答(FAQ)以及进行社区分析。
为什么选择这台MCP服务器?
Reddit包含了跨越数千个社区的数百万条真实用户提问和讨论。这台MCP服务器使AI助手能够:
- 寻找相关的社群 基于主题/话题
- 查找帖子 在子版块间匹配特定查询
- 提取常见问题 来自自动讨论
- 导出结果 以多种格式(JSON、CSV、Markdown)提供
这在创建常见问题解答(FAQ)、了解社区痛点、进行用户研究以及收集关于任何主题的实际问题方面特别有用。
先决条件
- Python 3.7及以上版本
- Reddit API 凭据 (见下文设置)
- Claude 桌面版 (仅供本地使用)或另一个与MCP兼容的客户端
获取Reddit API凭证
- 首选 Reddit 应用偏好设置
- 向下滚动并点击 “创建另一个应用…” 或者 “你是开发者吗?开发一个应用……”
- 填写表格:
- 名字选择任意名称(例如,“MCP 常见问题解答服务器”)
- 应用类型选择 “script”
- 描述可选
- 关于网址可选
- 重定向URI输入
http://localhost:8080(必需但未使用)
- 点击 “create app”翻译成中文是“创建应用”
- 记下您的凭据:
- 客户端ID“个人使用脚本”下的字符串(例如。,
GMcc-DOscNHECnU9HAc3KQ) - 客户端密钥标记为“秘密”的字符串
- 用户代理格式化为
mcp:your-app-name:v1.0 (by /u/YourRedditUsername)
- 客户端ID“个人使用脚本”下的字符串(例如。,
环境设置
1. 克隆或导航到项目
cd /path/to/week3
2. 创建并激活虚拟环境
重要提示: 您必须激活虚拟环境,以便服务器正常运行。
# Create virtual environment
python3 -m venv venv
# Activate virtual environment
source venv/bin/activate # On macOS/Linux
# OR
.\venv\Scripts\activate # On Windows
3. 安装依赖项
pip install -r server/requirements.txt
4. 配置环境变量
创建一个 .env 使用您的Reddit API凭据设置文件或环境变量:
export REDDIT_CLIENT_ID="your_client_id_here"
export REDDIT_CLIENT_SECRET="your_client_secret_here"
export REDDIT_USER_AGENT="mcp:your-app-name:v1.0 (by /u/YourUsername)"
运行服务器
选项1:使用Claude代码(本地开发)
如果你正在使用Claude Code,服务器已经通过(某种方式)进行了配置 .mcp.json 在你的项目文件夹中。只需确保:
- 您的虚拟环境已激活
- 依赖项已安装
- 环境变量设置在
.mcp.json
选项2:使用Claude桌面版(本地)
-
创建/编辑配置文件 在:
- macOS(苹果电脑操作系统):
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS(苹果电脑操作系统):
-
添加此配置 (请将路径和凭据替换为您自己的):
{
"mcpServers": {
"reddit-faq": {
"command": "/bin/bash",
"args": [
"-c",
"cd /path/to/week3 && source venv/bin/activate && python server/main.py"
],
"env": {
"REDDIT_CLIENT_ID": "your_client_id_here",
"REDDIT_CLIENT_SECRET": "your_client_secret_here",
"REDDIT_USER_AGENT": "mcp:your-app-name:v1.0 (by /u/YourUsername)"
}
}
}
}
-
重启Claude桌面版 完全(退出并重新打开)
-
验证你应该能在Claude桌面版中看到可用的Reddit常见问题解答工具
选项3:独立运行(测试)
# Make sure venv is activated
source venv/bin/activate
# Set environment variables
export REDDIT_CLIENT_ID="your_client_id"
export REDDIT_CLIENT_SECRET="your_client_secret"
export REDDIT_USER_AGENT="your_user_agent"
# Run the server
python server/main.py
工具参考
1. find_subreddits
根据主题或问题搜索相关的子版块(Reddit社区)。
参数:
query(字符串,必填):要搜索的主题或描述limit(整数,可选):返回的子版块最大数量(1-25,默认:5)
示例输入:
{
"query": "CalTPA teacher credentialing",
"limit": 5
}
示例输出:
{
"subreddits": [
{
"name": "CalTPAhelp",
"display_name": "r/CalTPAhelp",
"description": "Help for California teaching credential candidates...",
"subscribers": 54,
"url": "https://reddit.com/r/CalTPAhelp",
"created_utc": 1746296618.0
}
],
"total_found": 1,
"query": "CalTPA teacher credentialing"
}
2. find_niche_subreddits
寻找那些规模较小、专注于特定领域且限制较少的子版块(subreddits)。
参数:
query(字符串,必填):要搜索的主题或描述limit(整数,可选):要返回的最大数量(1-50,默认:10)min_subscribers(整数,可选):最小订阅者数量(默认值:0)
示例输入:
{
"query": "CalTPA",
"limit": 10,
"min_subscribers": 0
}
预期行为: 返回一些可能不会在常规搜索中出现的小型社区,有助于找到专门的讨论组。
3. get_relevant_posts
在指定的子版块中搜索与查询匹配的帖子。
参数:
subreddits(字符串数组,必填):要搜索的子版块名称列表query(字符串,必填):搜索关键词或问题limit(整数,可选):每个子版块的最大帖子数(1-100,默认值:10)sort(字符串,可选):如何排序结果(relevance,hot,new,top,默认:relevance)time_filter(字符串,可选):时间范围 (hour,day,week,month,year,all,默认:month)
示例输入:
{
"subreddits": ["CalTPAhelp", "Teachers"],
"query": "CalTPA version 01 new version",
"limit": 10,
"sort": "relevance",
"time_filter": "year"
}
示例输出:
{
"posts": [
{
"id": "1n51vwx",
"title": "Just Launched: CalTPA MS Cycle 1 Part A Version 1",
"author": "Sufficient_Goose274",
"subreddit": "CalTPAhelp",
"url": "https://reddit.com/r/CalTPAhelp/comments/1n51vwx/...",
"created_utc": 1756664230,
"score": 3,
"num_comments": 0,
"selftext": "Hi everyone, I know a lot of Multiple Subject..."
}
],
"total_found": 15,
"query_info": { ... }
}
4. extract_faqs
分析Reddit帖子以提取常见问题。
参数:
posts(对象数组,必需):来自(某处)的帖子对象列表get_relevant_postsmax_questions(整数,可选):要提取的最大问题数(1-100,默认:10)include_comments(布尔值,可选):也分析注释(默认:false)output_format(字符串,可选):导出格式 (json,csv,markdown,默认:json)output_path(字符串,可选):保存输出的文件路径(如未提供,则自动生成)
示例输入:
{
"posts": [ /* array of post objects */ ],
"max_questions": 15,
"include_comments": true,
"output_format": "markdown",
"output_path": "/path/to/faqs.md"
}
示例输出:
{
"questions": [
{
"question": "What is the new CalTPA Version 01?",
"frequency": 3,
"example_urls": ["https://reddit.com/..."],
"first_seen": "2025-01-15"
}
],
"total_questions_found": 15,
"exported_to": "/path/to/faqs.md"
}
预期行为: 利用人工智能识别帖子和评论中提出的真实问题,追踪问题频率,并以您选择的格式导出结果。
常见问题
“服务器已断开连接”或“失败”状态
原因: 虚拟环境未激活或依赖项未安装。
解决方案:
- 确保你已经激活了虚拟环境:
source venv/bin/activate - 安装依赖项:
pip install -r server/requirements.txt - 更新配置路径以使用:
cd /path/to/week3 && source venv/bin/activate && python server/main.py - 重启Claude桌面版
“无效凭据”错误
原因: Reddit API凭据不正确或未设置。
解决方案:
- 在 https://www.reddit.com/prefs/apps 验证您的身份
- 在你的配置中更新环境变量
- 确保您的凭据中没有多余的空格
限速
原因: Reddit API 有速率限制(OAuth 每分钟 60 次请求)。
解决方案:
- 分散你的请求
- 使用更小的
limit参数 - 服务器会自动遵守Reddit的速率限制
项目结构
week3/
├── server/
│ ├── main.py # MCP server implementation
│ ├── reddit_client.py # Reddit API wrapper
│ ├── question_extractor.py # FAQ extraction logic
│ ├── requirements.txt # Python dependencies
│ └── tools/ # Individual tool implementations
│ ├── find_subreddits.py
│ ├── find_niche_subreddits.py
│ ├── get_posts.py
│ └── extract_faqs.py
├── venv/ # Virtual environment (must be activated!)
├── .mcp.json # Claude Code MCP config
└── README.md # This file
开发说明
- 总是激活虚拟环境 在运行或测试服务器之前
- 服务器使用MCP SDK来实现协议
- Reddit API客户端使用OAuth2进行身份验证
- 问题提取使用OpenAI的API进行自然语言理解
- 支持导出多种格式,便于集成
支持
对于问题或疑问:
- 检查您的虚拟环境是否已激活
- 验证Reddit API凭据是否正确
- 检查 Claude Desktop 日志(设置 > 开发者 > 打开日志文件夹)
- 确保所有依赖项均已安装:
pip install -r server/requirements.txt
许可证
CS146S课程教育项目——MCP服务器开发