Skip to main content
Glama
Reddit MCP Server

Reddit MCP Server

Reddit MCP Server

A Model Context Protocol (MCP) server for interacting with Reddit - fetch posts, comments, user info, and create content.

npm version npm downloads GitHub stars License: MIT

Features at a Glance

Feature

reddit-mcp-server

Other Reddit MCPs

Create Posts

:white_check_mark:

:x:

Reply to Posts/Comments

:white_check_mark:

:x:

Edit Posts/Comments

:white_check_mark:

:x:

Delete Posts/Comments

:white_check_mark:

:x:

Spam Protection (Safe Mode)

:white_check_mark:

:x:

Bot Disclosure Footer

:white_check_mark:

:x:

Policy Compliance Built-in

:white_check_mark:

:x:

Browse Subreddits

:white_check_mark:

:white_check_mark:

Search Reddit

:white_check_mark:

:white_check_mark:

User Analysis

:white_check_mark:

:white_check_mark:

Post Comments

:white_check_mark:

:white_check_mark:

Zero-Setup Anonymous Mode

:white_check_mark:

:white_check_mark:

Three-Tier Auth (10/60/100 rpm)

:white_check_mark:

:white_check_mark:

Related MCP server: Reddit MCP Server

Quick Start

Option 1: Claude Desktop Extension (Easiest)

Download and open the extension file - Claude Desktop will install it automatically:

Download reddit-mcp-server.mcpb

Option 2: NPX (No install required)

npx reddit-mcp-server

Or add to your MCP config (Claude Desktop, Cursor, etc.):

{
  "mcpServers": {
    "reddit": {
      "command": "npx",
      "args": ["reddit-mcp-server"]
    }
  }
}

Option 3: Claude Code

claude mcp add --transport stdio reddit -- npx reddit-mcp-server

Features

Read-only Tools

Tool

Description

get_reddit_post

Get a specific Reddit post with engagement analysis

get_top_posts

Get top posts from a subreddit or home feed

browse_subreddit

Browse a subreddit/home feed by sort (hot, new, top, rising, controversial)

get_user_info

Get detailed information about a Reddit user

get_user_posts

Get posts submitted by a specific user

get_user_comments

Get comments made by a specific user

get_subreddit_info

Get subreddit details and statistics

get_trending_subreddits

Get currently trending subreddits

get_post_comments

Get comments from a specific post with threading

search_reddit

Search for posts across Reddit

Write Tools (Require User Credentials)

Tool

Description

create_post

Create a new post in a subreddit

reply_to_post

Post a reply to an existing post or comment

edit_post

Edit your own Reddit post (self-text only)

edit_comment

Edit your own Reddit comment

delete_post

Permanently delete your own post

delete_comment

Permanently delete your own comment

Configuration

Environment Variables

Variable

Required

Default

Description

REDDIT_CLIENT_ID

No*

-

Reddit app client ID

REDDIT_CLIENT_SECRET

No*

-

Reddit app client secret

REDDIT_USERNAME

No

-

Reddit username (for write operations)

REDDIT_PASSWORD

No

-

Reddit password (for write operations)

REDDIT_USER_AGENT

No

Auto-generated

Custom User-Agent string

REDDIT_AUTH_MODE

No

auto

Authentication mode: auto, authenticated, anonymous

REDDIT_SAFE_MODE

No

standard

Write safeguards: off, standard, strict

REDDIT_BOT_DISCLOSURE

No

off

Bot disclosure footer: auto, off

REDDIT_BOT_FOOTER

No

Built-in

Custom bot footer text (when disclosure is auto)

REDDIT_CACHE

No

on

In-memory caching of read requests: on, off

REDDIT_CACHE_MAX_MB

No

50

Cache size cap in MB (LRU eviction beyond this)

REDDIT_MAX_RETRIES

No

3

Retries on HTTP 429 with Retry-After backoff (0 to disable)

*Required only if using authenticated mode.

Full MCP Config Example

{
  "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",
        "REDDIT_PASSWORD": "your_password",
        "REDDIT_SAFE_MODE": "standard"
      }
    }
  }
}

Safe Mode (Spam Protection)

Protect your Reddit account from spam detection and bans with built-in safeguards. Enabled by default (standard mode) per Reddit's Responsible Builder Policy.

Why Use Safe Mode?

Reddit's spam detection can flag accounts for:

  • Rapid posting or commenting

  • Duplicate or similar content

  • Posting the same content across multiple subreddits

  • Non-standard User-Agent strings

Safe Mode helps prevent these issues automatically.

Mode Options

Mode

Write Delay

Duplicate Detection

Use Case

off

None

No

Explicit opt-out only

standard

2 seconds

Last 10 items + cross-sub

Default, recommended

strict

5 seconds

Last 20 items + cross-sub

For cautious automated posting

Disable Safe Mode

Safe mode is enabled by default. To explicitly disable:

export REDDIT_SAFE_MODE=off
npx reddit-mcp-server

What Safe Mode Does

  1. Rate Limiting: Enforces minimum delays between write operations

  2. Duplicate Detection: Blocks identical content from being posted twice

  3. Cross-Subreddit Detection: Prevents posting the same content to multiple subreddits (per Reddit policy)

  4. Smart User-Agent: Auto-generates Reddit-compliant User-Agent format when username is provided

Bot Disclosure

Reddit's Responsible Builder Policy requires bots to disclose their automated nature. Enable automatic bot footers on all posted content:

export REDDIT_BOT_DISCLOSURE=auto
npx reddit-mcp-server

When enabled, a footer is appended to all posts, replies, and edits:

---
🤖 I am a bot | Built with reddit-mcp-server

Customize the footer with REDDIT_BOT_FOOTER:

export REDDIT_BOT_DISCLOSURE=auto
export REDDIT_BOT_FOOTER=$'\n\n---\n^(🤖 Custom bot footer text)'

Authentication Modes

Mode Comparison

Mode

Rate Limit

Setup Required

Best For

anonymous

~10 req/min

None

Quick testing, read-only

auto (default)

10-100 req/min

Optional

Flexible usage

authenticated

60-100 req/min

Required

Production use

Anonymous Mode (Zero Setup)

{
  "env": {
    "REDDIT_AUTH_MODE": "anonymous"
  }
}

Anonymous mode does not work on every network. Reddit blocks unauthenticated requests from many IP ranges — datacenters, cloud hosts, VPNs, and addresses it has flagged — and answers with an HTTP 403 block page. If you hit this, tools fail with:

Reddit is blocking unauthenticated requests from this network (HTTP 403 with a
block page). Set REDDIT_CLIENT_ID and REDDIT_CLIENT_SECRET to authenticate with
OAuth, which also raises the rate limit from ~10 to 60+ requests/min.

The fix is OAuth credentials — see the next section. This is a property of your network, not of your Reddit account or the subreddit you asked for, so it affects every tool at once. A 403 on a single subreddit while others work is a different thing: that subreddit is private or quarantined.

Authenticated Mode (Higher Rate Limits)

  1. Create a Reddit app at https://www.reddit.com/prefs/apps (select "script" type)

  2. Copy the client ID and secret

  3. Configure:

{
  "env": {
    "REDDIT_AUTH_MODE": "authenticated",
    "REDDIT_CLIENT_ID": "your_client_id",
    "REDDIT_CLIENT_SECRET": "your_client_secret"
  }
}

Write Operations

To create posts, reply, edit, or delete content, you need user credentials:

{
  "env": {
    "REDDIT_USERNAME": "your_username",
    "REDDIT_PASSWORD": "your_password",
    "REDDIT_SAFE_MODE": "standard"
  }
}

Development

Commands

pnpm install        # Install dependencies
pnpm build          # Build TypeScript
pnpm dev            # Build and run MCP inspector
pnpm test           # Run tests
pnpm lint           # Lint code
pnpm format         # Format code

CLI Options

npx reddit-mcp-server --version         # Show version
npx reddit-mcp-server --help            # Show help
npx reddit-mcp-server --generate-token  # Generate OAuth token for HTTP mode

HTTP Server Mode

For Docker deployments or web-based clients, use HTTP transport:

TRANSPORT_TYPE=httpStream PORT=3000 node dist/index.js

With OAuth Protection

export OAUTH_ENABLED=true
export OAUTH_TOKEN=$(npx reddit-mcp-server --generate-token | tail -1)
TRANSPORT_TYPE=httpStream node dist/index.js

Make authenticated requests:

curl -H "Authorization: Bearer $OAUTH_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"method":"tools/list","params":{}}' \
     http://localhost:3000/mcp

Docker

Quick Start

# Pull and run
docker pull 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 REDDIT_SAFE_MODE=standard \
  ghcr.io/jordanburke/reddit-mcp-server:latest

Docker Compose

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}
      - REDDIT_SAFE_MODE=standard
      - OAUTH_ENABLED=${OAUTH_ENABLED:-false}
      - OAUTH_TOKEN=${OAUTH_TOKEN}
    restart: unless-stopped

Build Locally

docker build -t reddit-mcp-server .
docker run -d --name reddit-mcp -p 3000:3000 --env-file .env reddit-mcp-server

Reddit Responsible Builder Policy

This server is designed with Reddit's Responsible Builder Policy in mind:

  • Safe mode on by default — rate limiting and duplicate detection prevent spam

  • Cross-subreddit duplicate detection — blocks identical content across subreddits

  • Bot disclosure support — optional automated footer for transparency

  • No voting/karma manipulation — upvote/downvote tools are intentionally excluded

  • No private messaging — DM tools are intentionally excluded

  • Policy-aware AI instructions — MCP server instructions remind AI assistants of data usage restrictions

Credits

Available Tools

23 tools
browse_subredditA
Read-only

Browse a subreddit — or the authenticated home feed when no subreddit is given — by sort order: hot, new, top, rising, or controversial. Read-only; works anonymously. time_filter applies only to the top and controversial sorts. Returns a page of posts (title, author, score, upvote ratio, comments, link) plus an after cursor. Use get_top_posts as a shortcut for the top sort, or search_reddit to find posts by keyword rather than by feed order.

Inputs: sort, after, limit, subreddit, +1 more.

create_postA

Create a new text or link post in a subreddit. Mutating and NOT idempotent — each call publishes a separate post. Requires REDDIT_USERNAME and REDDIT_PASSWORD; fails without them. Returns the new post's id and URL. Check get_subreddit_rules and get_post_flairs first, since many subreddits require a flair or reject certain content. WARNING: rapid posting or duplicate content may trigger Reddit's spam detection and account bans — enable REDDIT_SAFE_MODE=standard for rate limiting and duplicate detection.

Inputs: title (required), content (required), subreddit (required), is_self, +2 more.

delete_commentA
DestructiveIdempotent

Permanently delete one of your own comments. Mutating and destructive but idempotent — deleting an already-deleted comment is a no-op. Requires REDDIT_USERNAME and REDDIT_PASSWORD, and only works on comments authored by the authenticated account. Only affects the comment you name; use delete_post for posts. WARNING: this cannot be undone — the content is removed, though the comment id remains.

Inputs: thing_id (required).

delete_postA
DestructiveIdempotent

Permanently delete one of your own posts. Mutating and destructive but idempotent — deleting an already-deleted post is a no-op. Requires REDDIT_USERNAME and REDDIT_PASSWORD, and only works on posts authored by the authenticated account. Only affects the post you name; use delete_comment for comments. WARNING: this cannot be undone — the content is removed, though the post id remains.

Inputs: thing_id (required).

edit_commentA
DestructiveIdempotent

Replace the text of one of your own comments. Mutating and idempotent (same text → same result); it overwrites the previous content. Requires REDDIT_USERNAME and REDDIT_PASSWORD, and works only on comments you authored. Adds an "edited" marker. Use reply_to_post to add a new comment, or edit_post for posts. WARNING: rapid edits may trigger spam detection; enable REDDIT_SAFE_MODE for protection.

Inputs: new_text (required), thing_id (required).

edit_postA
DestructiveIdempotent

Replace the body text of one of your own self-text posts. Mutating and idempotent (same text → same result); it overwrites the previous body. Requires REDDIT_USERNAME and REDDIT_PASSWORD, and works only on self posts you authored — titles and link posts cannot be edited. Adds an "edited" marker. Use create_post to make a new post, or edit_comment for comments. WARNING: rapid edits may trigger spam detection; enable REDDIT_SAFE_MODE for protection.

Inputs: new_text (required), thing_id (required).

get_meA
Read-only

Get the authenticated user's own profile (karma, account age, status flags). Read-only, but requires user credentials (REDDIT_USERNAME/REDDIT_PASSWORD) and fails in anonymous mode. Use this instead of get_user_info when you need the current account rather than an arbitrary user. Do NOT use it to look up other users — it always returns the logged-in account.

Inputs: no named parameters.

get_more_commentsA
Read-only

Expand truncated 'load more comments' stubs in a thread. Read-only; works anonymously. Pass the post's link id and the comment ids from a 'more' node (surfaced by get_post_comments) to fetch those hidden comments; returns the expanded comments (author, body excerpt, score, link). Call get_post_comments first to obtain the thread and its 'more' node ids — do NOT invent ids.

Inputs: link_id (required), comment_ids (required).

get_my_overviewA
Read-only

Get the authenticated user's own recent activity — posts and comments interleaved, newest first. Read-only but requires user credentials (REDDIT_USERNAME/REDDIT_PASSWORD). Returns up to limit items plus an after cursor for the next page. Use get_my_saved for saved items, or get_user_posts / get_user_comments for another user. Do NOT use this to fetch a specific post's thread — use get_post_comments.

Inputs: after, limit.

get_my_savedA
Read-only

Get the authenticated user's saved posts and comments (private to the account). Read-only but requires user credentials (REDDIT_USERNAME/REDDIT_PASSWORD). Returns up to limit items plus an after pagination cursor. Use get_my_overview for your authored activity. Do NOT use this for another user — saved items are private and have no cross-user equivalent.

Inputs: after, limit.

get_post_commentsA
Read-only

Get the comment thread for a post (by post id + subreddit), sorted best/top/new/controversial/old/qa. Read-only; works anonymously. Returns the post header plus threaded comments (author, OP/edited badges, score, body, nesting depth) up to limit. Long threads are truncated with 'load more' stubs — expand those with get_more_comments. Use get_reddit_post for just the post body, not the thread.

Inputs: post_id (required), subreddit (required), sort, limit.

get_post_flairsA
Read-only

List a subreddit's selectable link flairs (flair text + flair_id) for use with create_post. Read-only, but requires user credentials; many subreddits expose flairs only to members, so this can 403 or return empty anonymously. Pass a returned flair_id (and flair_text for text-editable flairs) to create_post. For the subreddit's posting rules use get_subreddit_rules instead.

Inputs: subreddit_name (required).

get_reddit_postA
Read-only

Get a single post by subreddit + post id: title, author, self-text or link content, score, upvote ratio, comment count, flair/flags, and an engagement analysis. Read-only; works anonymously. Returns the post only — use get_post_comments for its comment thread. Do NOT use this to list a subreddit's posts (use browse_subreddit / get_top_posts) or to find posts by keyword (use search_reddit).

Inputs: post_id (required), subreddit (required).

get_subreddit_infoA
Read-only

Get a subreddit's profile: title, description, subscriber and active-user counts, creation date, flags, wiki/link URLs, plus a community analysis and posting tips. Read-only; works anonymously. Returns metadata about the community itself — use browse_subreddit / get_top_posts for its posts, or get_subreddit_rules for its posting rules. Do NOT use this to find subreddits by topic — use search_reddit with type='sr'.

Inputs: subreddit_name (required).

get_subreddit_rulesA
Read-only

Get a subreddit's posting rules (each rule's name, what it applies to, and its description). Read-only; works anonymously. Returns the rules list, or a note when the subreddit lists none. Call this before create_post to check requirements and avoid auto-removal. For available post flairs use get_post_flairs instead.

Inputs: subreddit_name (required).

get_top_postsA
Read-only

Get the top-scoring posts from a subreddit — or from the authenticated home feed if no subreddit is given — within a time window (hour…all). Read-only; works anonymously. Returns a page of posts (title, author, score, upvote ratio, comments, link) plus an after cursor. This is a shortcut for the 'top' sort; use browse_subreddit for hot/new/rising/controversial, or search_reddit to find posts by keyword.

Inputs: after, limit, subreddit, time_filter.

get_user_commentsA
Read-only

Get comments made by a specific user, with sort (new/hot/top) and time filter. Read-only; works anonymously. Returns a page of comments (subreddit, parent post title, body excerpt, score, permalink) plus an after cursor. Use get_user_posts for their submissions, or get_user_info for karma/profile stats. Do NOT use this to read one post's thread — use get_post_comments.

Inputs: username (required), sort, after, limit, +1 more.

get_user_infoA
Read-only

Get a public profile for any Reddit user: comment/post/total karma, account age and status flags, plus a short activity analysis and engagement tips. Read-only; works in anonymous mode. Returns profile stats only — use get_user_posts / get_user_comments for their actual content. Use get_me instead for your own authenticated account; do NOT expect private fields here, as only public data is returned.

Inputs: username (required).

get_user_postsA
Read-only

Get posts submitted by a specific user, with sort (new/hot/top) and time filter. Read-only; works anonymously. Returns a page of posts (title, subreddit, score, upvote ratio, comment count, permalink) plus an after cursor for paging. Use get_user_comments for their comments, or get_user_info for karma/profile stats. Do NOT use this to search a subreddit — use search_reddit or browse_subreddit.

Inputs: username (required), sort, after, limit, +1 more.

reply_to_postA

Post a reply to an existing post or comment. Mutating and NOT idempotent — each call adds a new comment. Requires REDDIT_USERNAME and REDDIT_PASSWORD. The parent is identified by its thing id — t3_ for a post, t1_ for a comment — so this creates both top-level and nested replies. Returns the new comment's id. Use edit_comment to change a reply you already posted. WARNING: rapid or duplicate replies may trigger Reddit's spam detection; enable REDDIT_SAFE_MODE=standard for rate limiting and duplicate detection.

Inputs: content (required), post_id (required).

search_redditA
Read-only

Search Reddit for posts — or subreddits/users via type — optionally scoped to one subreddit, with sort and time filters. Read-only; works anonymously. Returns a page of results (title, subreddit, author, score, comments, link) plus an after cursor for paging. Use this to find content by keyword; use browse_subreddit / get_top_posts to list a known subreddit's feed instead.

Inputs: query (required), sort, type, after, +3 more.

test_reddit_mcp_serverA
Read-only

Health check for the Reddit MCP server. Read-only and side-effect-free — inspects local configuration only and makes no Reddit API calls. Returns the server version, whether the Reddit client is initialized, whether OAuth credentials are present, and whether write access (REDDIT_USERNAME/REDDIT_PASSWORD) is configured. Use this first to diagnose setup/auth problems. Do NOT use it to check Reddit's own status or connectivity — it never contacts Reddit. A "✗ Write Access" result means the write tools (create_post, reply_to_post, edit_*, delete_*) will fail.

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.4/5.0

    Scored across 23 tools

    Disambiguation3/5

    Most tools are clearly scoped (e.g., get_user_posts vs get_user_comments), but several overlaps remain: get_me vs get_user_info vs get_my_overview can be confused, and get_top_posts vs browse_subreddit both list posts by sort. Descriptions contain useful cross-references, which helps, but the boundaries are not razor-sharp.

    Naming Consistency4/5

    Naming follows a fairly consistent get_/create_/edit_/delete_/reply_ + resource pattern (e.g., get_user_info, edit_post, delete_comment). Deviations exist: test_reddit_mcp_server breaks the verb_noun convention, and reply_to_post vs reply_to_comment would be more consistent, but overall the pattern is predictable.

    Tool Count5/5

    23 tools is on the higher end but appropriate for Reddit's breadth: user, subreddit, post, comment, search, and auth. The count is justified by the domain and each tool covers a distinct resource/action.

    Completeness4/5

    Covers read/write for posts and comments, user and subreddit profiles, search, and edge features (trending, flairs, rules). Missing pieces include voting, saving, and messaging, which would be expected for full Reddit coverage, but the core workflows are complete.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      An MCP server that enables AI assistants to access and interact with Reddit content through features like user analysis, post retrieval, subreddit statistics, and authenticated posting capabilities.
      15
      302
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      An MCP server that provides both read-only and authenticated access to Reddit content and interactions without requiring a developer API key. It enables users to browse posts, search subreddits, and perform write actions like commenting and voting by leveraging browser session cookies.
      8
      12 PyPI
      3
      -
    • A
      license
      B
      quality
      D
      maintenance
      An MCP server that provides AI agents with full Reddit API capabilities including search, browsing, reading, posting, commenting, voting, editing, and deleting.
      18
      8 npm
      MIT