🚀 Reddit MCP Server ⚙️
Reddit MCP Serverは、Redditのコンテンツを取得および作成するためのツールを提供するModel Context Protocol (MCP) です。このサーバーを使用することで、Reddit上の投稿やユーザー情報の取得、新しい投稿の作成などが簡単に行えます。
⚠️ 重要提示
このリポジトリは、Alexandros Lekkasによるオリジナルの reddit-mcp-server をフォークしたもので、pnpm、tsupビルドシステム、およびnpx実行サポートで更新されています。
✨ 主な機能
読み取り専用ツール(クライアント資格情報)
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 Content Integration Serverを自動的にインストールするには、以下のコマンドを実行します。
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
- 開発用のインスペクターサーバーを起動します。
pnpm dev
インスペクターサーバーは http://127.0.0.1:6274/ で開きます。
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 Authorization仕様 に従って設定します。
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"
}
}
}
}
リモートデプロイの例
- 安全なトークンを生成する:
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
- チームと共有する:
Server URL: https://your-server.com/mcp
OAuth Token: xyz123abc456def789
- チームメンバーが接続する:
const client = new Client(...);
const transport = new HTTPTransport({
url: 'https://your-server.com/mcp',
headers: { 'Authorization': 'Bearer xyz123abc456def789' }
});
await client.connect(transport);
これにより、cq-apiやagent-todoの実装と同様に、HTTPベースのMCP通信をサポートするシステムとの統合が可能になります。
🐳 Dockerの使用
GitHub Container Registryからのプル
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
📚 クレジット