🚀 Reddit MCP Server ⚙️
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 安裝
要通過 Smithery 自動安裝適用於 Claude Desktop 的 Reddit 內容集成服務器,請執行以下命令:
npx -y @smithery/cli install reddit-mcp-server --client claude
手動安裝
- 克隆倉庫:
git clone https://github.com/jordanburke/reddit-mcp-server
- 在 這裡 創建一個 Reddit 應用,確保選擇 "script"。

- 複製客戶端 ID 和客戶端密鑰。
- 根據
.env.example
創建一個 .env
文件,填入 REDDIT_CLIENT_ID
和 REDDIT_CLIENT_SECRET
。如果需要發佈帖子,還需要填入 REDDIT_USERNAME
和 REDDIT_PASSWORD
。
- 安裝依賴:
pnpm install
- 構建項目:
pnpm build
- 運行項目並打開檢查服務器(http://127.0.0.1:6274/):
pnpm dev
8. 如果連接成功,將以下內容添加到 MCP 配置(適用於 Cursor 或 Claude Desktop):
{
"mcpServers": {
"reddit": {
"command": "npx",
"args": [
"reddit-mcp-server"
],
"env": {
"REDDIT_CLIENT_ID": "<YOUR_CLIENT_ID>",
"REDDIT_CLIENT_SECRET": "<YOUR_CLIENT_SECRET>",
"REDDIT_USERNAME": "<YOUR_USERNAME_OPTIONAL>",
"REDDIT_PASSWORD": "<YOUR_PASSWORD_OPTIONAL>"
},
"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
pnpm build
pnpm inspect
pnpm dev
pnpm test
pnpm lint
pnpm format
版本與幫助信息
npx reddit-mcp-server --version
npx reddit-mcp-server --help
npx reddit-mcp-server --generate-token
可流式傳輸的 MCP 端點(Hono 服務器)
除了標準的 npx 執行方式,該服務器還支持通過 Hono 實現的可流式傳輸的 MCP 端點,用於直接的 HTTP 集成:
pnpm serve
PORT=8080 pnpm serve
pnpm serve:dev
服務器將在 http://localhost:3000
可用,MCP 端點為 http://localhost:3000/mcp
。
OAuth 安全(可選)
HTTP 服務器支持可選的 OAuth 保護,以確保端點的安全性:
生成安全令牌:
npx reddit-mcp-server --generate-token
使用生成的令牌啟用 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
生成)
- 不使用 OAuth 時,服務器無需認證即可訪問
- 健康檢查 (
/
) 始終不受保護;只有 /mcp
需要認證
MCP 客戶端配置
對於連接到受 OAuth 保護的服務器的 MCP 客戶端,請根據 MCP 授權規範 進行配置:
基於 HTTP 的 MCP 客戶端(例如,Web 應用程序):
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
的請求都必須包含授權頭
- 根據 MCP 規範,令牌不得包含在 URI 查詢字符串中
- 在生產環境中使用 HTTPS 以確保令牌的安全傳輸
對於遠程/部署的服務器:
連接到遠程 Reddit MCP 服務器(例如,部署在您的基礎設施上)時:
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
- 在您的服務器上使用 Docker 部署:
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 使用
從 GitHub 容器註冊表拉取鏡像
docker pull ghcr.io/jordanburke/reddit-mcp-server:latest
docker pull ghcr.io/jordanburke/reddit-mcp-server:v1.0.10
使用 Docker 運行
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
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 run --rm \
ghcr.io/jordanburke/reddit-mcp-server:latest \
node dist/bin.js --generate-token
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
Docker Compose 示例
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_ENABLED=${OAUTH_ENABLED:-false}
- OAUTH_TOKEN=${OAUTH_TOKEN}
restart: unless-stopped
📚 致謝