README Documentation
Reddit MCP Server ⚙️
A Model Context Protocol (MCP) that provides tools for fetching and creating Reddit content.
Note: This is a fork of the original reddit-mcp-server by Alexandros Lekkas, updated with pnpm, tsup build system, and npx execution support.
🔧 Available Tools (Features)
Read-only Tools (Client Credentials):
get_reddit_post(subreddit, post_id)
- Get a specific Reddit postget_top_posts(subreddit, time_filter, limit)
- Get top posts from a subredditget_user_info(username)
- Get information about a Reddit userget_subreddit_info(subreddit_name)
- Get information about a subredditget_trending_subreddits()
- Get currently trending subredditssearch_reddit(query, subreddit?, sort?, time_filter?, limit?, type?)
- Search for posts on Redditget_post_comments(post_id, subreddit, sort?, limit?)
- Get comments for a specific Reddit postget_user_posts(username, sort?, time_filter?, limit?)
- Get posts submitted by a specific userget_user_comments(username, sort?, time_filter?, limit?)
- Get comments made by a specific user
Write Tools (User Credentials Required):
create_post(subreddit, title, content, is_self)
- Create a new post in a subredditreply_to_post(post_id, content, subreddit?)
- Post a reply to an existing Reddit post
🔌 Installation
Installing via Smithery
To install Reddit Content Integration Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install reddit-mcp-server --client claude
Manual Installation
-
git clone https://github.com/jordanburke/reddit-mcp-server
-
Create a Reddit app here
Make sure to select "script"!
-
Copy the client ID and client secret
-
Create a
.env
file based on.env.example
Do this with your REDDIT_CLIENT_ID
and REDDIT_CLIENT_SECRET
If you want to write posts you need to include your REDDIT_USERNAME
and REDDIT_PASSWORD
-
Install dependencies with
pnpm install
-
Build the project with
pnpm build
-
Run with
pnpm dev
and open the inspection server (http://127.0.0.1:6274/)
- If the connection works, add this to your MCP config (for Cursor or 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"
] // You don't need to add this, but it makes it so that you don't have to keep clicking approve
}
}
🛠️ Development
Commands
# Install dependencies
pnpm install
# Build TypeScript to JavaScript
pnpm build
# Run the MCP inspector for development/testing
pnpm inspect
# Build and run inspector in one command
pnpm dev
# Run tests
pnpm test
# Lint code
pnpm lint
# Format code
pnpm format
Version & Help
# Check version
npx reddit-mcp-server --version
# Show help
npx reddit-mcp-server --help
# Generate OAuth token for HTTP server
npx reddit-mcp-server --generate-token
Streamable MCP Endpoint (Hono Server)
In addition to the standard npx execution, this server also supports a Streamable MCP endpoint via Hono for direct HTTP integration:
# Start the Hono server on port 3000 (default)
pnpm serve
# Start with custom port
PORT=8080 pnpm serve
# Development mode with auto-reload
pnpm serve:dev
The server will be available at http://localhost:3000
with the MCP endpoint at http://localhost:3000/mcp
.
OAuth Security (Optional)
The HTTP server supports optional OAuth protection to secure your endpoints:
Generate a secure token:
npx reddit-mcp-server --generate-token
# Output: Generated OAuth token: A8f2Kp9x3NmQ7vR4tL6eZ1sW5yB8hC2j
Enable OAuth with generated token:
export OAUTH_ENABLED=true
export OAUTH_TOKEN="A8f2Kp9x3NmQ7vR4tL6eZ1sW5yB8hC2j"
pnpm serve
Make authenticated requests:
curl -H "Authorization: Bearer A8f2Kp9x3NmQ7vR4tL6eZ1sW5yB8hC2j" \
-H "Content-Type: application/json" \
-d '{"method":"tools/list","params":{}}' \
http://localhost:3000/mcp
OAuth Configuration:
OAUTH_ENABLED=true
- Enables OAuth protection (disabled by default)OAUTH_TOKEN=your-token
- Your custom token (or use--generate-token
)- Without OAuth, the server is accessible without authentication
- Health check (
/
) is always unprotected; only/mcp
requires authentication
MCP Client Configuration
For MCP clients connecting to an OAuth-protected server, configure according to the MCP Authorization specification:
HTTP-based MCP Clients (e.g., web applications):
// Example using 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();
Direct HTTP MCP Client:
const client = new MCP.Client({
transport: new MCP.HTTPTransport({
url: 'http://localhost:3000/mcp',
headers: {
'Authorization': 'Bearer YOUR_TOKEN'
}
})
});
Custom MCP Client Implementation:
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);
Important Notes:
- Replace
YOUR_TOKEN
with your generated OAuth token - Authorization header MUST be included in every request to
/mcp
- Tokens MUST NOT be included in URI query strings per MCP specification
- Use HTTPS in production for secure token transmission
For Remote/Deployed Servers: When connecting to a remote Reddit MCP server (e.g., deployed on your infrastructure):
// Production server with 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 Client Configuration for Remote Server:
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { HTTPTransport } from '@modelcontextprotocol/sdk/client/http.js';
// For your deployed server
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 with Remote Server (HTTP): For remote servers, you can use a proxy approach:
{
"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": {}
}
}
}
For Claude Desktop/Cursor (stdio transport): OAuth is not applicable when using the traditional npx execution method. Use the stdio configuration instead:
{
"mcpServers": {
"reddit": {
"command": "npx",
"args": ["reddit-mcp-server"],
"env": {
"REDDIT_CLIENT_ID": "your_client_id",
"REDDIT_CLIENT_SECRET": "your_client_secret"
}
}
}
}
Remote Deployment Examples
Deploy to your infrastructure and share the URL:
-
Generate secure token:
npx reddit-mcp-server --generate-token # Output: Generated OAuth token: xyz123abc456def789
-
Deploy with Docker on your server:
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
-
Share with your team:
Server URL: https://your-server.com/mcp OAuth Token: xyz123abc456def789
-
Team members connect:
const client = new Client(...); const transport = new HTTPTransport({ url: 'https://your-server.com/mcp', headers: { 'Authorization': 'Bearer xyz123abc456def789' } }); await client.connect(transport);
This allows integration with systems that support HTTP-based MCP communication, similar to the cq-api and agent-todo implementations.
🐳 Docker Usage
Pull from GitHub Container Registry
# Pull the latest image
docker pull ghcr.io/jordanburke/reddit-mcp-server:latest
# Pull a specific version
docker pull ghcr.io/jordanburke/reddit-mcp-server:v1.0.10
Run with Docker
# Run the HTTP server (recommended)
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
# Run with OAuth enabled (secure)
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
# Run with custom port
docker run -d \
--name reddit-mcp \
-p 8080:3000 \
--env-file .env \
ghcr.io/jordanburke/reddit-mcp-server:latest
# Generate token using Docker
docker run --rm \
ghcr.io/jordanburke/reddit-mcp-server:latest \
node dist/bin.js --generate-token
# Run as stdio MCP server (for direct integration)
docker run -it \
--env-file .env \
ghcr.io/jordanburke/reddit-mcp-server:latest \
node dist/index.js
Build Locally
# Build the image
docker build -t reddit-mcp-server .
# Run the locally built image
docker run -d \
--name reddit-mcp \
-p 3000:3000 \
--env-file .env \
reddit-mcp-server
Docker Compose Example
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}
# Optional OAuth settings
- OAUTH_ENABLED=${OAUTH_ENABLED:-false}
- OAUTH_TOKEN=${OAUTH_TOKEN}
restart: unless-stopped
📚 Credits
-
This is a fork of the original reddit-mcp-server by Alexandros Lekkas.
-
Credit goes to the Python Reddit MCP Server by Arindam200 for the inspiration and implementation of these tools.