Skip to main content
Glama
binbinao
by binbinao
README.md
# Reddit MCP Server 🤖

> 让AI助手访问Reddit的神奇工具!一个基于MCP (Model Context Protocol)的Reddit数据访问服务。

## ✨ 功能特性

这个MCP服务器让你的AI助手(比如Claude)能够:

- 🔐 **安全认证** - 使用Reddit官方OAuth进行安全连接
- 👤 **用户信息** - 获取用户配置文件、karma、活动概览
- 📰 **子版块** - 浏览子版块信息、帖子列表、规则
- 💬 **帖子和评论** - 查看帖子详情、评论树
- 🔍 **搜索** - 跨Reddit搜索帖子
- ⚡ **智能分页** - 支持分页和大量数据的优雅处理

**注意**:当前版本为第一阶段,只实现只读操作。暂不支持发布帖子或评论(在后续版本中添加)。

## 📋 前置要求

- Python 3.11 或更高版本
- 一个Reddit账号
- Reddit开发者应用凭证(见下方配置指南)

## 🚀 快速开始

### 1. 克隆或下载项目

```bash
git clone <your-repo-url>
cd reddit-mcp
```

### 2. 创建虚拟环境(推荐)

```bash
# 使用uv(推荐,速度更快)
uv venv
source .venv/bin/activate

# 或使用传统方法
python3 -m venv .venv
source .venv/bin/activate  # Linux/Mac
# 或
.venv\Scripts\activate     # Windows
```

### 3. 安装依赖

```bash
pip install -r requirements.txt
```

### 4. 配置Reddit应用凭证

这是最重要的一步!你需要创建一个Reddit开发者应用来获取API凭证:

#### 步骤1:创建Reddit应用

1. 访问 [Reddit App Preferences](https://www.reddit.com/prefs/apps)
2. 滚动到页面底部的 "developed apps" 部分
3. 点击 "create another app..." 或 "create app"
4. 填写表单:
   - **name**: 随便起个名字,比如 `reddit-mcp-server`
   - **type**: 选择 `script`(这很重要!)
   - **description**: 填写或不填都行
   - **about url**: 可以填你的GitHub仓库链接或不填
   - **redirect uri**: 留空即可
5. 点击 "create app"

#### 步骤2:获取凭证

创建成功后,你会看到:
- **client_id**: 字符串(14个字符)在app名称下方
- **client_secret**: 字符串(27个字符)紧挨着 "secret" 文字旁边
- 注意:不要混淆成 "app id" 或其他字段!

#### 步骤3:配置环境变量

复制 `.env.example` 为 `.env` 并填入你的凭证:

```bash
cp .env.example .env
```

然后编辑 `.env` 文件:

```env
REDDIT_CLIENT_ID=你的14字符client_id
REDDIT_CLIENT_SECRET=你的27字符client_secret
REDDIT_USER_AGENT=script:reddit-mcp:1.0.0:你的Reddit用户名
REDDIT_USERNAME=你的Reddit用户名
REDDIT_PASSWORD=你的Reddit密码
```

### 5. 测试连接

你可以使用MCP客户端(如Claude Desktop)测试连接,或运行示例脚本:

```bash
# 测试连接(需要先配置环境变量)
python -c "from src.reddit_mcp.server import main; main()"
```

## 🔧 配置Claude Desktop

要在Claude Desktop中使用这个MCP服务器,你需要编辑配置文件:

### macOS/Linux

编辑 `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "reddit": {
      "command": "python",
      "args": ["/绝对路径/to/reddit-mcp/src/reddit_mcp/server.py"],
      "env": {
        "REDDIT_CLIENT_ID": "你的client_id",
        "REDDIT_CLIENT_SECRET": "你的client_secret",
        "REDDIT_USER_AGENT": "script:reddit-mcp:1.0.0:你的用户名",
        "REDDIT_USERNAME": "你的用户名",
        "REDDIT_PASSWORD": "你的密码"
      }
    }
  }
}
```

### Windows

编辑 `%APPDATA%\Claude\claude_desktop_config.json`(路径类似)

## 🛠️ 可用工具

### 连接和用户信息
- `check_connection` - 检查Reddit API连接状态
- `get_current_user` - 获取当前认证用户的信息
- `get_user_karma` - 获取用户的karma明细
- `get_user_overview` - 获取用户最近的活动

### 子版块
- `get_subreddit_info` - 获取子版块详细信息
- `get_subreddit_posts` - 获取子版块的帖子列表(支持hot/new/top/rising)
- `get_subreddit_rules` - 获取子版块规则

### 帖子和评论
- `get_post_details` - 获取帖子的完整详情
- `get_post_comments` - 获取帖子的评论树
- `search_posts` - 搜索帖子

## 📖 使用示例

### 基础使用

1. **检查连接**:
   ```
   "请帮我检查一下Reddit API的连接状态"
   ```

2. **查看用户信息**:
   ```
   "获取我的Reddit用户信息和karma"
   ```

3. **浏览子版块**:
   ```
   "获取r/python子版块的热门帖子"
   ```

4. **搜索帖子**:
   ```
   "搜索关于MCP协议的帖子"
   ```

### 高级用法

**带分页的子版块浏览**:
```
"获取r/technology的新帖子,限制20条,返回详细格式"
```

**查看特定帖子**:
```
"获取这个帖子的详情:https://www.reddit.com/r/python/comments/xyz123"
```

**查看评论**:
```
"获取这个帖子的评论树,深度限制为3层"
```

## ⚠️ 常见问题

### 1. 认证失败:401 Unauthorized

**原因**:凭证错误或应用类型不对

**解决方法**:
- 确保client_id和client_secret填写正确(没有多余的空格)
- 确保创建的应用类型是 `script` 而不是 `web` 或 `installed app`
- 检查用户名和密码是否正确
- Reddit用户名区分大小写!

### 2. 速率限制错误:429 Too Many Requests

**原因**:请求太频繁,超过了Reddit API限制

**解决方法**:
- 这个服务器已经内置了速率限制处理,会自动重试
- 如果频繁遇到,可能需要减少请求频率
- Reddit的速率限制通常是60秒内最多600次请求

### 3. 子版块不存在:404 Not Found

**原因**:子版块名称错误或已删除

**解决方法**:
- 确认子版块名称拼写正确(包括大小写)
- 某些私有或已删除的子版块无法访问

### 4. 找不到模块错误

**原因**:Python环境配置问题

**解决方法**:
```bash
# 确保在虚拟环境中
source .venv/bin/activate  # Linux/Mac

# 重新安装依赖
pip install -r requirements.txt
```

## 🔒 安全注意事项

- ✅ **不要**将 `.env` 文件提交到版本控制系统(已添加到.gitignore)
- ✅ 凭证通过环境变量存储,不会硬编码在代码中
- ✅ 当前版本只实现只读操作,不会修改你的Reddit数据
- ⚠️ 请妥善保管你的Reddit应用凭证,不要分享给他人

## 📚 技术栈

- **Python 3.11+** - 编程语言
- **PRAW** - Python Reddit API Wrapper(Reddit API客户端)
- **MCP Python SDK** - MCP协议实现
- **Pydantic v2** - 数据验证和序列化
- **python-dotenv** - 环境变量管理

## 🤝 贡献

欢迎提交Issue和Pull Request!

## 📄 许可证

MIT License

## 🙏 致谢

- Reddit官方API文档
- PRAW开发团队
- MCP (Model Context Protocol) 社区

---

**有问题?** 请查看GitHub Issues或创建新的Issue。祝你使用愉快!🎉