Reddit MCP Server
Reads Reddit posts, users and subreddits, and can post and reply with your Reddit account
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
Opens the app, which asks before it adds the server.
claude mcp add --transport http reddit http://localhost:3000/mcp{
"mcpServers": {
"reddit": {
"url": "http://localhost:3000/mcp"
}
}
}{
"servers": {
"reddit": {
"type": "http",
"url": "http://localhost:3000/mcp"
}
}
}[mcp_servers.reddit]
url = "http://localhost:3000/mcp"gemini mcp add --scope user --transport http reddit http://localhost:3000/mcpOpens the app, which asks before it adds the server.
claude mcp add reddit -- npx -y reddit-mcp-server{
"mcpServers": {
"reddit": {
"command": "npx",
"args": [
"-y",
"reddit-mcp-server"
]
}
}
}{
"mcpServers": {
"reddit": {
"command": "npx",
"args": [
"-y",
"reddit-mcp-server"
]
}
}
}{
"servers": {
"reddit": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"reddit-mcp-server"
]
}
}
}[mcp_servers.reddit]
command = "npx"
args = ["-y", "reddit-mcp-server"]gemini mcp add --scope user reddit npx -- -y reddit-mcp-server| 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. |
REDDIT_PASSWORD secret |
Optional: Password of that Reddit account. |
REDDIT_AUTH_MODE |
Optional: auto, or authenticated to refuse to start without the app ID and secret; anonymous is a deprecated alias for keyless. |
REDDIT_SAFE_MODE |
Optional: Write safeguards: off, standard (2 s gap, duplicate check) or strict (5 s gap). |
REDDIT_CACHE |
Optional: In-memory cache of reads, capped by REDDIT_CACHE_MAX_MB (50 by default); off disables it. |
REDDIT_MAX_RETRIES |
Optional: Retries after HTTP 429; 0 turns retrying off. |
TRANSPORT_TYPE |
Optional: httpStream serves /mcp over HTTP on HOST and PORT (127.0.0.1:3000 by default). |
OAUTH_ENABLED |
Optional: true makes the HTTP endpoint demand a bearer token, OAUTH_TOKEN or one printed at start. |
| Set together: bot footer | |
REDDIT_BOT_DISCLOSURE |
Optional: auto appends a bot footer to posts, replies and edits. |
REDDIT_BOT_FOOTER |
Optional: Footer text to use when disclosure is auto. |
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.
| Runtime | Node.js |
|---|---|
| Runs on | macOS, Windows, Linux |
| FreeOptional. 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.
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.
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.
17 only read, 4 change things, 4 can delete or overwrite. A ? marks an optional parameter.
test_reddit_mcp_serverget_user_infousername: stringget_meget_my_overviewlimit?: integerafter?: stringget_my_savedlimit?: integerafter?: stringget_user_postsusername: stringsort?: enumtime_filter?: enumlimit?: integerafter?: stringget_user_commentsusername: stringsort?: enumtime_filter?: enumlimit?: integerafter?: stringget_reddit_postsubreddit: stringpost_id: stringget_top_postssubreddit?: stringtime_filter?: enumlimit?: integerafter?: stringbrowse_subredditsubreddit?: stringsort?: enumtime_filter?: enumlimit?: integerafter?: stringget_subreddit_infosubreddit_name: stringget_subreddit_rulessubreddit_name: stringget_post_flairssubreddit_name: stringget_trending_subredditssearch_redditquery: stringsubreddit?: stringsort?: enumtime_filter?: enumlimit?: integertype?: enumafter?: stringcreate_post changessubreddit: stringtitle: stringcontent: stringis_self?: booleanflair_id?: stringflair_text?: stringreply_to_post changespost_id: stringcontent: stringdelete_post deletesthing_id: stringdelete_comment deletesthing_id: stringedit_post deletesthing_id: stringnew_text: stringedit_comment deletesthing_id: stringnew_text: stringsave_content changesthing_id: stringcategory?: stringunsave_content changesthing_id: stringget_post_commentspost_id: stringsubreddit: stringsort?: enumlimit?: integerget_more_commentslink_id: stringcomment_ids: array