npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

reddit-mcp-server

v1.1.2

Published

A Model Context Protocol (MCP) that provides tools for fetching and creating Reddit content. Fork of the alexandros-lekkas/reddit-mcp-server.

Readme

Reddit MCP Server ⚙️

A Model Context Protocol (MCP) that provides tools for fetching and creating Reddit content.

Note: This is a fork of the 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 post
  • get_top_posts(subreddit, time_filter, limit) - Get top posts from a subreddit
  • get_user_info(username) - Get information about a Reddit user
  • get_subreddit_info(subreddit_name) - Get information about a subreddit
  • get_trending_subreddits() - Get currently trending subreddits
  • search_reddit(query, subreddit?, sort?, time_filter?, limit?, type?) - Search for posts on Reddit
  • get_post_comments(post_id, subreddit, sort?, limit?) - Get comments for a specific Reddit post
  • get_user_posts(username, sort?, time_filter?, limit?) - Get posts submitted by a specific user
  • get_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 subreddit
  • reply_to_post(post_id, content, subreddit?) - Post a reply to an existing Reddit post
  • edit_post(thing_id, new_text) - Edit your own Reddit post (self-text posts only)
  • edit_comment(thing_id, new_text) - Edit your own Reddit comment
  • delete_post(thing_id) - Delete your own Reddit post
  • delete_comment(thing_id) - Delete your own Reddit comment

🔌 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

  1. git clone https://github.com/jordanburke/reddit-mcp-server

  2. Create a Reddit app here

image

Make sure to select "script"!

  1. Copy the client ID and client secret

  2. 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

  1. Install dependencies with pnpm install

  2. Build the project with pnpm build

  3. Run with pnpm dev and open the inspection server (http://127.0.0.1:6274/)

image

  1. 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",
        "edit_post",
        "edit_comment",
        "delete_post",
        "delete_comment"
      ] // Optional if you do not want to always 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

HTTP MCP Endpoint (FastMCP)

In addition to the standard npx execution, this server supports HTTP transport via FastMCP for direct HTTP integration:

# Start the HTTP server on port 3000 (default)
node dist/index.js

# Start with custom port
PORT=8080 node dist/index.js

# Or use the npm script
pnpm start

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:

  1. Generate secure token:

    npx reddit-mcp-server --generate-token
    # Output: Generated OAuth token: xyz123abc456def789
  2. 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
  3. Share with your team:

    Server URL: https://your-server.com/mcp
    OAuth Token: xyz123abc456def789
  4. 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 via the FastMCP framework.

🐳 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