Reddit MCP Server 是一个模型上下文协议(MCP),它提供了用于获取和创建Reddit内容的工具。该项目是Alexandros Lekkas的原始 reddit-mcp-server 的一个分支,更新后支持 pnpm、tsup 构建系统和 npx 执行。
本项目提供了一系列工具来与Reddit内容进行交互,支持多种安装和使用方式,下面将详细介绍。
get_reddit_post(subreddit, post_id)
- 获取特定的Reddit帖子get_top_posts(subreddit, time_filter, limit)
- 获取子版块的热门帖子get_user_info(username)
- 获取Reddit用户的信息get_subreddit_info(subreddit_name)
- 获取子版块的信息get_trending_subreddits()
- 获取当前热门的子版块search_reddit(query, subreddit?, sort?, time_filter?, limit?, type?)
- 在Reddit上搜索帖子get_post_comments(post_id, subreddit, sort?, limit?)
- 获取特定Reddit帖子的评论get_user_posts(username, sort?, time_filter?, limit?)
- 获取特定用户提交的帖子get_user_comments(username, sort?, time_filter?, limit?)
- 获取特定用户发表的评论create_post(subreddit, title, content, is_self)
- 在子版块中创建新帖子reply_to_post(post_id, content, subreddit?)
- 回复现有的Reddit帖子要通过 Smithery 自动安装适用于 Claude Desktop 的 Reddit 内容集成服务器,请执行以下命令:
npx -y @smithery/cli install reddit-mcp-server --client claude
git clone https://github.com/jordanburke/reddit-mcp-server
.env.example
创建一个 .env
文件,填入 REDDIT_CLIENT_ID
和 REDDIT_CLIENT_SECRET
。如果需要发布帖子,还需要填入 REDDIT_USERNAME
和 REDDIT_PASSWORD
。pnpm install
pnpm build
pnpm dev
8. 如果连接成功,将以下内容添加到 MCP 配置(适用于 Cursor 或 Claude Desktop):
{
"mcpServers": {
"reddit": {
"command": "npx",
"args": [
"reddit-mcp-server"
],
"env": {
"REDDIT_CLIENT_ID": "" ,
"REDDIT_CLIENT_SECRET": "" ,
"REDDIT_USERNAME": "" ,
"REDDIT_PASSWORD": ""
},
"autoApprove": [
"get_reddit_post",
"get_top_posts",
"get_user_info",
"get_subreddit_info",
"get_trending_subreddits",
"search_reddit",
"get_post_comments",
"get_user_posts",
"get_user_comments",
"create_post",
"reply_to_post"
]
}
}
}
# 安装依赖
pnpm install
# 将 TypeScript 编译为 JavaScript
pnpm build
# 运行 MCP 检查器进行开发/测试
pnpm inspect
# 一键构建并运行检查器
pnpm dev
# 运行测试
pnpm test
# 代码检查
pnpm lint
# 代码格式化
pnpm format
# 查看版本
npx reddit-mcp-server --version
# 显示帮助信息
npx reddit-mcp-server --help
# 为 HTTP 服务器生成 OAuth 令牌
npx reddit-mcp-server --generate-token
除了标准的 npx 执行方式,该服务器还支持通过 Hono 实现的可流式传输的 MCP 端点,用于直接的 HTTP 集成:
# 在默认端口 3000 启动 Hono 服务器
pnpm serve
# 自定义端口启动
PORT=8080 pnpm serve
# 开发模式,支持自动重载
pnpm serve:dev
服务器将在 http://localhost:3000
可用,MCP 端点为 http://localhost:3000/mcp
。
HTTP 服务器支持可选的 OAuth 保护,以确保端点的安全性: 生成安全令牌:
npx reddit-mcp-server --generate-token
# 输出:Generated OAuth token: A8f2Kp9x3NmQ7vR4tL6eZ1sW5yB8hC2j
使用生成的令牌启用 OAuth:
export OAUTH_ENABLED=true
export OAUTH_TOKEN="A8f2Kp9x3NmQ7vR4tL6eZ1sW5yB8hC2j"
pnpm serve
进行认证请求:
curl -H "Authorization: Bearer A8f2Kp9x3NmQ7vR4tL6eZ1sW5yB8hC2j" \
-H "Content-Type: application/json" \
-d '{"method":"tools/list","params":{}}' \
http://localhost:3000/mcp
OAuth 配置:
OAUTH_ENABLED=true
- 启用 OAuth 保护(默认禁用)OAUTH_TOKEN=your-token
- 自定义令牌(或使用 --generate-token
生成)/
) 始终不受保护;只有 /mcp
需要认证对于连接到受 OAuth 保护的服务器的 MCP 客户端,请根据 MCP 授权规范 进行配置: 基于 HTTP 的 MCP 客户端(例如,Web 应用程序):
// 使用 fetch API 的示例
const response = await fetch('http://localhost:3000/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "tools/list",
params: {}
})
});
const result = await response.json();
直接 HTTP MCP 客户端:
const client = new MCP.Client({
transport: new MCP.HTTPTransport({
url: 'http://localhost:3000/mcp',
headers: {
'Authorization': 'Bearer YOUR_TOKEN'
}
})
});
自定义 MCP 客户端实现:
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { HTTPTransport } from '@modelcontextprotocol/sdk/client/http.js';
const transport = new HTTPTransport({
url: 'http://localhost:3000/mcp',
headers: {
'Authorization': 'Bearer YOUR_TOKEN',
'Content-Type': 'application/json'
}
});
const client = new Client({
name: "reddit-client",
version: "1.0.0"
}, {
capabilities: {}
});
await client.connect(transport);
重要注意事项:
YOUR_TOKEN
替换为生成的 OAuth 令牌/mcp
的请求都必须包含授权头对于远程/部署的服务器: 连接到远程 Reddit MCP 服务器(例如,部署在您的基础设施上)时:
// 带有 OAuth 的生产服务器
const response = await fetch('https://your-server.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "tools/list",
params: {}
})
});
远程服务器的 MCP 客户端配置:
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { HTTPTransport } from '@modelcontextprotocol/sdk/client/http.js';
// 对于您部署的服务器
const transport = new HTTPTransport({
url: 'https://your-reddit-mcp.company.com/mcp',
headers: {
'Authorization': 'Bearer YOUR_GENERATED_TOKEN',
'Content-Type': 'application/json'
}
});
const client = new Client({
name: "reddit-client",
version: "1.0.0"
}, {
capabilities: {}
});
await client.connect(transport);
Claude Desktop/Cursor 与远程服务器(HTTP): 对于远程服务器,您可以使用代理方法:
{
"mcpServers": {
"reddit-remote": {
"command": "node",
"args": [
"-e",
"const http = require('https'); const req = http.request('https://your-server.com/mcp', {method:'POST',headers:{'Authorization':'Bearer YOUR_TOKEN','Content-Type':'application/json'}}, res => res.pipe(process.stdout)); process.stdin.pipe(req);"
],
"env": {}
}
}
}
对于 Claude Desktop/Cursor(stdio 传输): 使用传统的 npx 执行方法时,OAuth 不适用。请使用 stdio 配置:
{
"mcpServers": {
"reddit": {
"command": "npx",
"args": ["reddit-mcp-server"],
"env": {
"REDDIT_CLIENT_ID": "your_client_id",
"REDDIT_CLIENT_SECRET": "your_client_secret"
}
}
}
}
部署到您的基础设施并共享 URL:
npx reddit-mcp-server --generate-token
# 输出:Generated OAuth token: xyz123abc456def789
docker run -d \
--name reddit-mcp \
-p 3000:3000 \
-e REDDIT_CLIENT_ID=your_reddit_client_id \
-e REDDIT_CLIENT_SECRET=your_reddit_client_secret \
-e OAUTH_ENABLED=true \
-e OAUTH_TOKEN=xyz123abc456def789 \
ghcr.io/jordanburke/reddit-mcp-server:latest
服务器 URL: https://your-server.com/mcp
OAuth 令牌: xyz123abc456def789
const client = new Client(...);
const transport = new HTTPTransport({
url: 'https://your-server.com/mcp',
headers: { 'Authorization': 'Bearer xyz123abc456def789' }
});
await client.connect(transport);
这允许与支持基于 HTTP 的 MCP 通信的系统集成,类似于 cq-api 和 agent-todo 的实现。
# 拉取最新镜像
docker pull ghcr.io/jordanburke/reddit-mcp-server:latest
# 拉取特定版本
docker pull ghcr.io/jordanburke/reddit-mcp-server:v1.0.10
# 运行 HTTP 服务器(推荐)
docker run -d \
--name reddit-mcp \
-p 3000:3000 \
-e REDDIT_CLIENT_ID=your_client_id \
-e REDDIT_CLIENT_SECRET=your_client_secret \
-e REDDIT_USERNAME=your_username \
-e REDDIT_PASSWORD=your_password \
ghcr.io/jordanburke/reddit-mcp-server:latest
# 启用 OAuth 运行(安全)
docker run -d \
--name reddit-mcp \
-p 3000:3000 \
-e REDDIT_CLIENT_ID=your_client_id \
-e REDDIT_CLIENT_SECRET=your_client_secret \
-e OAUTH_ENABLED=true \
-e OAUTH_TOKEN=your_generated_token \
ghcr.io/jordanburke/reddit-mcp-server:latest
# 使用自定义端口运行
docker run -d \
--name reddit-mcp \
-p 8080:3000 \
--env-file .env \
ghcr.io/jordanburke/reddit-mcp-server:latest
# 使用 Docker 生成令牌
docker run --rm \
ghcr.io/jordanburke/reddit-mcp-server:latest \
node dist/bin.js --generate-token
# 作为 stdio MCP 服务器运行(用于直接集成)
docker run -it \
--env-file .env \
ghcr.io/jordanburke/reddit-mcp-server:latest \
node dist/index.js
# 构建镜像
docker build -t reddit-mcp-server .
# 运行本地构建的镜像
docker run -d \
--name reddit-mcp \
-p 3000:3000 \
--env-file .env \
reddit-mcp-server
version: '3.8'
services:
reddit-mcp:
image: ghcr.io/jordanburke/reddit-mcp-server:latest
ports:
- "3000:3000"
environment:
- REDDIT_CLIENT_ID=${REDDIT_CLIENT_ID}
- REDDIT_CLIENT_SECRET=${REDDIT_CLIENT_SECRET}
- REDDIT_USERNAME=${REDDIT_USERNAME}
- REDDIT_PASSWORD=${REDDIT_PASSWORD}
# 可选的 OAuth 设置
- OAUTH_ENABLED=${OAUTH_ENABLED:-false}
- OAUTH_TOKEN=${OAUTH_TOKEN}
restart: unless-stopped