Reddit MCP Server
Reads Reddit posts, users and subreddits, and can post and reply with your Reddit account
Reddit access for assistants: subreddit listings, search, threads, user histories and opt-in posting
By Karan Bansal (individual) TypeScript Local · stdio, Streamable HTTP CommunicationWeb search
72 popularity score ★ 886 ↓ 4.1k/wk
Opens the app, which asks before it adds the server.
claude mcp add --transport http reddit-buddy http://localhost:3000/mcp{
"mcpServers": {
"reddit-buddy": {
"url": "http://localhost:3000/mcp"
}
}
}{
"servers": {
"reddit-buddy": {
"type": "http",
"url": "http://localhost:3000/mcp"
}
}
}[mcp_servers.reddit-buddy]
url = "http://localhost:3000/mcp"gemini mcp add --scope user --transport http reddit-buddy http://localhost:3000/mcpOpens the app, which asks before it adds the server.
claude mcp add reddit-buddy -- npx -y reddit-mcp-buddy{
"mcpServers": {
"reddit-buddy": {
"command": "npx",
"args": [
"-y",
"reddit-mcp-buddy"
]
}
}
}{
"mcpServers": {
"reddit-buddy": {
"command": "npx",
"args": [
"-y",
"reddit-mcp-buddy"
]
}
}
}{
"servers": {
"reddit-buddy": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"reddit-mcp-buddy"
]
}
}
}[mcp_servers.reddit-buddy]
command = "npx"
args = ["-y", "reddit-mcp-buddy"]gemini mcp add --scope user reddit-buddy npx -- -y reddit-mcp-buddy| Set together: reddit app | |
|---|---|
REDDIT_CLIENT_ID |
Optional: Reddit app client ID. With the secret, enables search, comments and user analysis at 60 requests a minute. |
REDDIT_CLIENT_SECRET secret |
Optional: Reddit app client secret, used together with the client ID. |
REDDIT_REFRESH_TOKEN secret |
Optional: Refresh token printed by `--oauth` for a web app. Gives the 100-a-minute mode and posting. Needs the client ID and secret, and cannot be set with REDDIT_PASSWORD. |
REDDIT_USER_AGENT |
Optional: User agent sent when credentials are set. |
REDDIT_BUDDY_WRITE |
Optional: Set to true to add the posting tools. Needs a refresh token or username and password, and works over stdio only. |
REDDIT_BUDDY_NO_CACHE |
Optional: Set to true to turn off the in-memory cache. |
| Set together: user login | |
REDDIT_USERNAME |
Optional: Account username for a script app's password login. Optional with a refresh token, and must match its account when set. |
REDDIT_PASSWORD secret |
Optional: Account password for a script app's password login, the other way to the 100-a-minute mode. |
| Set together: http | |
REDDIT_BUDDY_HTTP |
Optional: Set to true to serve HTTP instead of stdio. Posting tools are then off. |
REDDIT_BUDDY_PORT |
Optional: HTTP port. |
REDDIT_BUDDY_HOST |
Optional: Interface the HTTP server binds to. |
REDDIT_BUDDY_ALLOWED_HOSTS |
Optional: Host names the HTTP server accepts, needed for the Host-header check on a non-loopback bind. |
Reddit MCP Buddy is a local Node.js server for reading Reddit from an assistant. Out of the box it has five read-only tools: list a subreddit (or r/all and r/popular) by hot, new, top, rising or controversial, search posts, pull a post with its comment tree, summarise a user's karma, recent activity and favourite subreddits, and look up Reddit slang such as karma or AMA in an offline glossary.
What works depends on the credentials you give it. With none it can only browse. Reddit blocks its logged-out JSON API, so listings are read from the public RSS feed and score, comment count, upvote ratio and NSFW flag come back null. A Reddit app's client ID and secret switch on search, comments and user analysis at a local cap of 60 requests a minute. Add a user login, either a refresh token from the new `--oauth` consent command or a script app's username and password, and the cap goes to 100.
Since 1.2.0 it can also post, but only when you ask for it. Set `REDDIT_BUDDY_WRITE=true` with user credentials and three more tools appear: `create_post`, `add_comment` and the read-only `subreddit_rules`. The server checks the account and its granted scopes with Reddit at startup and leaves them out if anything is missing. They never register over HTTP.
A few numbers from the code that the README does not spell out. Listings and searches return 25 posts unless you raise `limit` (100 at most). `get_post_details` gives 20 comments three levels deep by default, up to 500 and 10 levels. `user_analysis` looks back one month by default (src/tools/index.ts). The posting caps of 5 posts and 30 comments an hour, 15 seconds apart, can be lowered with `REDDIT_BUDDY_MAX_POSTS_PER_HOUR`, `REDDIT_BUDDY_MAX_COMMENTS_PER_HOUR` and `REDDIT_BUDDY_MIN_WRITE_INTERVAL_S`, and a higher value is silently ignored (src/core/write-gate.ts).
| Runtime | Node.js 20+ |
|---|---|
| Runs on | macOS, Windows, Linux |
| Reddit API | FreeOptional for browsing. Search, comments, user analysis and posting need an app Reddit has approved under its Responsible Builder Policy |
Browsing needs only Node.js 20 or later. Search, post comments and user analysis need a Reddit app's client ID and secret, and Reddit asks developers to get API approval first (Devvit, or its access request form). The project cannot grant approval or share keys. The 100-a-minute mode and posting also need a refresh token or a script app's username and password. For a token, register a web app with a loopback redirect URI such as http://localhost:8080 and run `npx -y reddit-mcp-buddy --oauth` once where your browser is signed in to Reddit (`--write` adds the posting scopes). It prints `REDDIT_REFRESH_TOKEN`. The Docker image is built from a clone and serves HTTP on port 3000.
Without credentials only `browse_subreddit` and `reddit_explain` work, and the RSS feed behind them throttles each IP well below the local cap. When posting is on and the client does not support MCP elicitation, the server only asks for a preview or dry run followed by the same payload within 15 minutes. It cannot tell whether a person approved that second call, so the check is only as good as the client's own tool approval. Reddit may also remove a post right after it is accepted. The server checks again after submitting and reports `status: "filtered"` in that case.
It suits someone who wants an assistant to read Reddit discussion, such as reactions to a launch, a thread's comments or a user's posting history. Browsing works with nothing to set up, but most of the value needs a Reddit app, and Reddit now gates API access behind its own approval. Posting and commenting are there for those who opt in, with hard hourly caps, and there are no tools to vote, edit, delete or moderate. Pick a client with MCP elicitation if you turn posting on. It is not for Reddit Ads: we hold separate Reddit Ads servers such as mcp-server-reddit-ads. It is a community project, not one from Reddit.
6 only read, 2 change things. A ? marks an optional parameter.
browse_subredditsubreddit: stringsort?: enumtime?: enumlimit?: numberinclude_nsfw?: booleaninclude_subreddit_info?: booleansearch_redditquery: stringsubreddits?: arraysort?: enumtime?: enumlimit?: numberauthor?: stringflair?: stringget_post_detailspost_id?: stringsubreddit?: stringurl?: stringcomment_limit?: numbercomment_sort?: enumcomment_depth?: numberextract_links?: booleanmax_top_comments?: numberuser_analysisusername: stringposts_limit?: numbercomments_limit?: numbertime_range?: enumtop_subreddits_limit?: numberreddit_explainterm: stringcreate_post changessubreddit: stringtitle: stringbody_markdown?: stringlink_url?: stringflair_id?: stringflair_text?: stringresubmit?: booleannsfw?: booleanspoiler?: booleansend_replies?: booleanvalidate_only?: booleanmedia?: arrayposter_path?: stringadd_comment changespost_id?: stringcomment_id?: stringurl?: stringtext: stringsubreddit_rulessubreddit: string