Reddit MCP Buddy

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

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-buddy http://localhost:3000/mcp
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "reddit-buddy": {
      "url": "http://localhost:3000/mcp"
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "reddit-buddy": {
      "type": "http",
      "url": "http://localhost:3000/mcp"
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.reddit-buddy]
url = "http://localhost:3000/mcp"
Gemini CLITerminal
gemini mcp add --scope user --transport http reddit-buddy 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-buddy -- npx -y reddit-mcp-buddy
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "reddit-buddy": {
      "command": "npx",
      "args": [
        "-y",
        "reddit-mcp-buddy"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "reddit-buddy": {
      "command": "npx",
      "args": [
        "-y",
        "reddit-mcp-buddy"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "reddit-buddy": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "reddit-mcp-buddy"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.reddit-buddy]
command = "npx"
args = ["-y", "reddit-mcp-buddy"]
Gemini CLITerminal
gemini mcp add --scope user reddit-buddy npx -- -y reddit-mcp-buddy

Settings 12

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. For search_reddit, get_post_details, user_analysis.
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. Default RedditBuddy/1.0 (by /u/karanb192).
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. Default false. For create_post, add_comment, subreddit_rules.
REDDIT_BUDDY_NO_CACHE Optional: Set to true to turn off the in-memory cache. Default false.
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. Default false.
REDDIT_BUDDY_PORT Optional: HTTP port. Default 3000.
REDDIT_BUDDY_HOST Optional: Interface the HTTP server binds to. Default 127.0.0.1.
REDDIT_BUDDY_ALLOWED_HOSTS Optional: Host names the HTTP server accepts, needed for the Host-header check on a non-loopback bind.

What it does

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).

What it needs

RuntimeNode.js 20+
Runs onmacOS, Windows, Linux
Reddit APIFreeOptional 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.

Limits

  • Not covered Without credentials only `browse_subreddit` and `reddit_explain` work, and browse results carry no scores, comment counts or NSFW flags
  • Limit Anonymously `include_subreddit_info` is dropped without notice and `include_nsfw` cannot filter, so NSFW posts in ordinary subreddits pass through (src/tools/index.ts)
  • Rate limit Local caps of 10, 60 and 100 requests a minute by mode. Reddit's RSS feed throttles each IP further, often one uncached request per 25-60 seconds, and may return 429
  • Size cap A call returns at most 100 posts or 500 comments, and a search names at most 10 subreddits
  • Limit Posting tools appear only with `REDDIT_BUDDY_WRITE=true`, user credentials from environment variables, the identity, read, submit and flair scopes, and stdio
  • Rate limit Posting is capped per process at 5 posts and 30 comments an hour, 15 seconds apart. A restart resets the count and settings can only lower it
  • Limit `REDDIT_REFRESH_TOKEN` and `REDDIT_PASSWORD` cannot both be set, and the server refuses to start if they are (src/core/auth.ts)
  • Not covered `create_post` takes text and link posts only. The `media` and `poster_path` fields are rejected until a later release
  • Limit The `--auth` CLI setup does not work with Claude Desktop and cannot enable posting. Use environment variables instead
  • Limit HTTP mode (`REDDIT_BUDDY_HTTP=true`) has no authentication

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.

Who it suits

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.

Tools 8

6 only read, 2 change things. A ? marks an optional parameter.

browse_subreddit
Lists posts from a subreddit, r/all or r/popular with a chosen sort and time rangesubreddit: stringsort?: enumtime?: enumlimit?: numberinclude_nsfw?: booleaninclude_subreddit_info?: boolean
search_reddit
Searches posts by query, optionally narrowed by subreddit, author, flair and time (needs credentials)query: stringsubreddits?: arraysort?: enumtime?: enumlimit?: numberauthor?: stringflair?: string
get_post_details
Fetches one post by URL or ID with its sorted comment tree and optional links (needs credentials)post_id?: stringsubreddit?: stringurl?: stringcomment_limit?: numbercomment_sort?: enumcomment_depth?: numberextract_links?: booleanmax_top_comments?: number
user_analysis
Summarises a user's karma, recent posts and comments and most active subreddits (needs credentials)username: stringposts_limit?: numbercomments_limit?: numbertime_range?: enumtop_subreddits_limit?: number
reddit_explain
Explains Reddit terms such as karma, cake day or ELI5, offlineterm: string
create_post changes
Submits a text or link post to one subreddit after rule checks, with a dry-run option (posting must be on)subreddit: stringtitle: stringbody_markdown?: stringlink_url?: stringflair_id?: stringflair_text?: stringresubmit?: booleannsfw?: booleanspoiler?: booleansend_replies?: booleanvalidate_only?: booleanmedia?: arrayposter_path?: string
add_comment changes
Comments on a post or replies to a comment, chosen by ID or URL (posting must be on)post_id?: stringcomment_id?: stringurl?: stringtext: string
subreddit_rules
Reads a subreddit's rules, posting requirements and flair choices before a draft (posting must be on)subreddit: string

Similar servers