Reddit MCP Server

Read Reddit keyless or with your own app, and post, reply, edit and delete with a login

By Jordan (individual) TypeScript Local · stdio, Streamable HTTP Communication

67 popularity score ★ 322 ↓ 3.8k/wk

Connect your client

Local (once it is running)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add --transport http reddit http://localhost:3000/mcp
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "reddit": {
      "url": "http://localhost:3000/mcp"
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "reddit": {
      "type": "http",
      "url": "http://localhost:3000/mcp"
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.reddit]
url = "http://localhost:3000/mcp"
Gemini CLITerminal
gemini mcp add --scope user --transport http reddit http://localhost:3000/mcp
Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add reddit -- npx -y reddit-mcp-server
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "reddit": {
      "command": "npx",
      "args": [
        "-y",
        "reddit-mcp-server"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "reddit": {
      "command": "npx",
      "args": [
        "-y",
        "reddit-mcp-server"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "reddit": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "reddit-mcp-server"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.reddit]
command = "npx"
args = ["-y", "reddit-mcp-server"]
Gemini CLITerminal
gemini mcp add --scope user reddit npx -- -y reddit-mcp-server

Settings 12

Set together: reddit app
REDDIT_CLIENT_ID secret Optional: Client ID of an existing Reddit OAuth app; leave out to run keyless from RSS and the Arctic Shift archive.
REDDIT_CLIENT_SECRET secret Optional: Client secret of that app; with the ID it gives live data and every tool.
Set together: reddit login
REDDIT_USERNAME Optional: Reddit account name; works only together with the app ID and secret. For write tools, get_me, get_my_overview, get_my_saved.
REDDIT_PASSWORD secret Optional: Password of that Reddit account. For write tools, get_me, get_my_overview, get_my_saved.
REDDIT_AUTH_MODE Optional: auto, or authenticated to refuse to start without the app ID and secret; anonymous is a deprecated alias for keyless. Default auto.
REDDIT_SAFE_MODE Optional: Write safeguards: off, standard (2 s gap, duplicate check) or strict (5 s gap). Default standard. For write tools.
REDDIT_CACHE Optional: In-memory cache of reads, capped by REDDIT_CACHE_MAX_MB (50 by default); off disables it. Default on.
REDDIT_MAX_RETRIES Optional: Retries after HTTP 429; 0 turns retrying off. Default 3.
TRANSPORT_TYPE Optional: httpStream serves /mcp over HTTP on HOST and PORT (127.0.0.1:3000 by default). Default stdio.
OAUTH_ENABLED Optional: true makes the HTTP endpoint demand a bearer token, OAUTH_TOKEN or one printed at start. Default false. For HTTP mode.
Set together: bot footer
REDDIT_BOT_DISCLOSURE Optional: auto appends a bot footer to posts, replies and edits. Default off.
REDDIT_BOT_FOOTER Optional: Footer text to use when disclosure is auto.

What it does

This server gives an assistant Reddit to work with. It reads subreddit listings, single posts with their comment trees, user profiles and post histories, subreddit rules and search results. With a Reddit login on top of app credentials it can also post, reply, edit or delete your own posts and comments, and manage your saved items.

Reddit is shutting down RSS and its public Data API, and the server has changed with it. App credentials are now optional. Without them it runs keyless, taking ranked listings from RSS feeds and most other reads from Arctic Shift, a free archive of Reddit kept by one volunteer. Archive scores and comment counts lag behind the live site, and each archived result carries a note that says so. Reddit stops serving RSS on 2026-11-13. After that, keyless listings for a subreddit come back newest first, and the home feed has no keyless source at all.

Anyone who still holds a Reddit app's client ID and secret gets live data and all 25 tools. The README tables list 25 too, but the code adds a detail they skip: when credentials are set, the server tests the connection at start and exits if Reddit refuses it, rather than falling back to keyless (src/index.ts). Writes pass through a safe mode that is on by default, with a 2-second gap between writes and a block on repeated text, also across subreddits. Read requests are cached in memory and HTTP 429 answers are retried 3 times by default.

It speaks stdio by default. TRANSPORT_TYPE=httpStream serves /mcp over HTTP instead, and since 2.0 the old /sse endpoint is gone. It began as a fork of Alexandros Lekkas's reddit-mcp-server.

What it needs

RuntimeNode.js
Runs onmacOS, Windows, Linux
RedditFreeOptional. An existing Reddit app's ID and secret give live data, and a Reddit login enables writes

Node.js with npx. No account is needed for keyless reading. Live data needs the client ID and secret of a Reddit app made before November 2025 or approved by Reddit, registered at developers.reddit.com/app-registration before 2027-01-12. The Docker image serves HTTP only: run it with docker run -p 3000:3000 and any REDDIT_* settings, then point the client at http://localhost:3000/mcp.

Limits

  • Limit Reddit says it closes its public API for all apps in March 2027, which ends the write tools and the OAuth-only reads
  • Limit Reddit takes no new API access requests since 2026-10-31, so newcomers can only run keyless
  • Not covered Keyless: get_trending_subreddits, get_post_flairs, get_me, get_my_overview, get_my_saved, user search and all writes are unavailable
  • Limit Keyless reads come from the third-party Arctic Shift archive with no uptime promise, and scores there lag or show 0 or 1
  • Not covered Keyless post search needs a subreddit, and the home feed and multireddits lose their keyless source once RSS ends on 2026-11-13
  • Rate limit With app credentials Reddit allows 60-100 requests a minute; the archive throttles keyword search on large subreddits
  • Size cap Listing tools return 10 items by default and 100 at most; get_post_comments returns 100 by default and 500 at most
  • Not covered No voting, private-message or moderation tools, by design
  • Limit edit_post works on self-text posts only, and edits and deletes reach only your own content
  • Limit Writes need your Reddit password in its environment; there is no browser sign-in

Reddit's timeline drives what keeps working. RSS ends on 2026-11-13. From 2027-01-12 Reddit starts removing API access for apps that have not registered, and in March 2027 it plans to close the public API for everyone. Arctic Shift gathers its data through that same API, so the archive may stop receiving new posts then, while keyless reads still return what it already holds.

Who it suits

A good fit for reading Reddit from an assistant with no setup: browsing subreddits, pulling threads and searching inside a community, as long as archive data that runs behind the live site is acceptable. If you still have a Reddit app from before the API closed to new requests, add its ID and secret for live numbers, and add your login only when you want it to post or reply under your account. Every write ends with Reddit's March 2027 cutoff, so do not build a lasting posting workflow on it. Look elsewhere for voting, private messages or moderation, which it leaves out on purpose.

Tools 25

17 only read, 4 change things, 4 can delete or overwrite. A ? marks an optional parameter.

test_reddit_mcp_server
Local status check: version, keyless or OAuth source, write access
get_user_info
Profile, karma and account age of any Reddit userusername: string
get_me
Your own account's profile and karma; needs OAuth plus username and password
get_my_overview
Your own recent posts and comments, 25 by defaultlimit?: integerafter?: string
get_my_saved
Posts and comments you have saved, 25 by defaultlimit?: integerafter?: string
get_user_posts
Posts a given user submitted, newest first by defaultusername: stringsort?: enumtime_filter?: enumlimit?: integerafter?: string
get_user_comments
Comments a given user wrote, newest first by defaultusername: stringsort?: enumtime_filter?: enumlimit?: integerafter?: string
get_reddit_post
One post with its score and engagement figuressubreddit: stringpost_id: string
get_top_posts
Top posts of a subreddit or the home feed, past week by defaultsubreddit?: stringtime_filter?: enumlimit?: integerafter?: string
browse_subreddit
List a subreddit or the home feed by hot, new, top, rising or controversialsubreddit?: stringsort?: enumtime_filter?: enumlimit?: integerafter?: string
get_subreddit_info
A subreddit's description, subscribers and settingssubreddit_name: string
get_subreddit_rules
A subreddit's posting rules, worth checking before a postsubreddit_name: string
get_post_flairs
Flair templates a subreddit offers for new posts; OAuth onlysubreddit_name: string
get_trending_subreddits
Subreddits trending now; OAuth only
search_reddit
Search posts, subreddits or users, site-wide or in one subredditquery: stringsubreddit?: stringsort?: enumtime_filter?: enumlimit?: integertype?: enumafter?: string
create_post changes
Publish a text or link post to a subreddit, with optional flairsubreddit: stringtitle: stringcontent: stringis_self?: booleanflair_id?: stringflair_text?: string
reply_to_post changes
Comment on a post or answer a commentpost_id: stringcontent: string
delete_post deletes
Delete one of your posts for goodthing_id: string
delete_comment deletes
Delete one of your comments for goodthing_id: string
edit_post deletes
Replace the text of one of your self-text poststhing_id: stringnew_text: string
edit_comment deletes
Replace the text of one of your commentsthing_id: stringnew_text: string
save_content changes
Add a post or comment to your saved itemsthing_id: stringcategory?: string
unsave_content changes
Take a post or comment out of your saved itemsthing_id: string
get_post_comments
A post's comment tree, 100 comments by default and up to 500post_id: stringsubreddit: stringsort?: enumlimit?: integer
get_more_comments
Expand the collapsed 'more comments' stubs of a threadlink_id: stringcomment_ids: array

Similar servers