Reddit MCP Server
Provides tools for interacting with Reddit, enabling browsing posts, fetching user and subreddit info, searching, and creating, replying to, editing, and deleting posts and comments.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Reddit MCP Server What are today's top posts in r/technology?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Reddit MCP Server
A Model Context Protocol (MCP) server for interacting with Reddit - fetch posts, comments, user info, and create content.
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-serverOr 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-serverFeatures
Read-only Tools
Tool | Description |
| Get a specific Reddit post with engagement analysis |
| Get top posts from a subreddit or home feed |
| Browse a subreddit/home feed by sort (hot, new, top, rising, controversial) |
| Get detailed information about a Reddit user |
| Get posts submitted by a specific user |
| Get comments made by a specific user |
| Get subreddit details and statistics |
| Get currently trending subreddits |
| Get comments from a specific post with threading |
| Search for posts across Reddit |
Write Tools (Require User Credentials)
Tool | Description |
| Create a new post in a subreddit |
| Post a reply to an existing post or comment |
| Edit your own Reddit post (self-text only) |
| Edit your own Reddit comment |
| Permanently delete your own post |
| Permanently delete your own comment |
Configuration
Environment Variables
Variable | Required | Default | Description |
| No* | - | Reddit app client ID |
| No* | - | Reddit app client secret |
| No | - | Reddit username (for write operations) |
| No | - | Reddit password (for write operations) |
| No | Auto-generated | Custom User-Agent string |
| No |
| Authentication mode: |
| No |
| Write safeguards: |
| No |
| Bot disclosure footer: |
| No | Built-in | Custom bot footer text (when disclosure is |
| No |
| In-memory caching of read requests: |
| No |
| Cache size cap in MB (LRU eviction beyond this) |
| No |
| Retries on HTTP 429 with Retry-After backoff ( |
*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 |
| None | No | Explicit opt-out only |
| 2 seconds | Last 10 items + cross-sub | Default, recommended |
| 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-serverWhat Safe Mode Does
Rate Limiting: Enforces minimum delays between write operations
Duplicate Detection: Blocks identical content from being posted twice
Cross-Subreddit Detection: Prevents posting the same content to multiple subreddits (per Reddit policy)
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-serverWhen enabled, a footer is appended to all posts, replies, and edits:
---
🤖 I am a bot | Built with reddit-mcp-serverCustomize 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 |
| ~10 req/min | None | Quick testing, read-only |
| 10-100 req/min | Optional | Flexible usage |
| 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)
Create a Reddit app at https://www.reddit.com/prefs/apps (select "script" type)
Copy the client ID and secret
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 codeCLI 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 modeHTTP Server Mode
For Docker deployments or web-based clients, use HTTP transport:
TRANSPORT_TYPE=httpStream PORT=3000 node dist/index.jsWith OAuth Protection
export OAUTH_ENABLED=true
export OAUTH_TOKEN=$(npx reddit-mcp-server --generate-token | tail -1)
TRANSPORT_TYPE=httpStream node dist/index.jsMake authenticated requests:
curl -H "Authorization: Bearer $OAUTH_TOKEN" \
-H "Content-Type: application/json" \
-d '{"method":"tools/list","params":{}}' \
http://localhost:3000/mcpDocker
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:latestDocker 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-stoppedBuild Locally
docker build -t reddit-mcp-server .
docker run -d --name reddit-mcp -p 3000:3000 --env-file .env reddit-mcp-serverReddit 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
Fork of reddit-mcp-server by Alexandros Lekkas
Inspired by Python Reddit MCP Server by Arindam200
Available Tools
23 toolsbrowse_subredditARead-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_commentADestructiveIdempotent
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_postADestructiveIdempotent
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_commentADestructiveIdempotent
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_postADestructiveIdempotent
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_meARead-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_commentsARead-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_overviewARead-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_savedARead-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_commentsARead-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_flairsARead-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_postARead-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_infoARead-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_rulesARead-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_postsARead-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_trending_subredditsARead-only
Get the subreddits Reddit is currently featuring as trending/popular. Read-only, no parameters; works anonymously. Returns a list of subreddit names that changes through the day (cached briefly server-side). To find subreddits by keyword instead of by trend, use search_reddit with type='sr'.
Inputs: no named parameters.
get_user_commentsARead-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_infoARead-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_postsARead-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_redditARead-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_serverARead-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
Scored across 23 tools
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 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.
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.
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
Related MCP Connectors
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
An MCP server that integrates with Discord to provide AI-powered features.
An MCP server that provides congressional transcripts
A MCP server built for developers enabling Git based project management with project and personal…
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA specialized MCP server that enables AI agents to interact with Reddit, including reading posts, creating content, and managing subreddit configurations.136 npm10Apache 2.0
- AlicenseAqualityDmaintenanceAn 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.15302MIT
- AlicenseBqualityDmaintenanceAn 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.812 PyPI3-
- AlicenseBqualityDmaintenanceAn MCP server that provides AI agents with full Reddit API capabilities including search, browsing, reading, posting, commenting, voting, editing, and deleting.188 npmMIT