Skip to main content
Glama
jorgen-k

reddit-mcp

reddit-mcp

Read Reddit from local MCP-compatible clients, including Claude Code and Codex, without an API key. No app registration, no account.

Reddit's data API is effectively closed. New apps need a stated moderation use case and manual approval, anonymous .json access is blocked, and the free tier that third-party tools were built on is gone. Most "Reddit for LLMs" integrations now start with a credentials dance you can't complete.

Reddit still publishes public Atom/RSS feeds for every subreddit, thread, user and search. This is a small local MCP server that reads those feeds and hands your compatible client the fields that matter: browse a subreddit, read a thread and its comments, search across the site.

Those feeds are published to be fetched, which is why this keeps working. It reads a supported path in a format frozen since 2005, so there is no markup to break when Reddit ships its next redesign.

What you don't get: scores, upvote ratios, comment counts. Those exist only in the gated API, and nothing here fakes them. Titles, authors, timestamps, and the full text of posts and comments all come through.

Install

reddit-rss-mcp is on PyPI (the plain reddit-mcp name belongs to an unrelated project). You need uv on your machine; it handles Python and dependencies itself, and there is nothing else to set up.

Claude Code:

claude mcp add reddit -s user -- uvx reddit-rss-mcp

Verify with claude mcp list (should show reddit: ✓ Connected). If Claude can't find uvx, use its absolute path (which uvx) instead of the bare command.

Codex CLI:

codex mcp add reddit -- uvx reddit-rss-mcp

Verify with codex mcp list. To use a local checkout instead, run:

codex mcp add reddit -- uv --directory "$(pwd)" run server.py

Codex also supports a project-scoped .codex/config.toml, but this repository does not include one because it would configure and launch the server automatically for every trusted checkout.

Claude Desktop, one click: download reddit-rss-mcp.mcpb from the latest release and drag it into Settings → Extensions. No JSON editing, no absolute paths. (It runs uvx reddit-rss-mcp, so uv still needs to be on your PATH.)

Claude Desktop & Cowork, manual config: add this to ~/Library/Application Support/Claude/claude_desktop_config.json, using the absolute path from which uvx (the app doesn't inherit your shell PATH):

{
  "mcpServers": {
    "reddit": {
      "command": "/absolute/path/to/uvx",
      "args": ["reddit-rss-mcp"]
    }
  }
}

If the file already has other top-level keys, add mcpServers alongside them rather than overwriting the file. Then:

  1. Fully quit the app (Cmd+Q, not just closing the window). The running app rewrites this file, so an edit made while it's open can be discarded.

  2. Relaunch. It may take a couple of restarts before the server registers.

  3. Grant permission when the app prompts to run the server.

Don't use a Custom Connector (the "add server by URL" option) for a local server. Those are dialed from Anthropic's cloud and can't reach localhost, no matter the cert or tunnel. The config-file method above spawns the server on your own machine, which is what works.

Related MCP server: reddit-search

Tools

Tool

What it does

search_reddit(query, subreddit=None, sort="relevance", time_filter="all", limit=25)

Search Reddit discussions for real user opinions and experiences on a topic.

browse_subreddit(subreddit, sort="hot", time_filter="day", limit=25)

What a community is posting right now (hot/new/top/rising/controversial).

get_post(url, comment_limit=50)

One thread in full: the post plus its comments (a flat list; the reply tree isn't in the feed).

fetch_json(url)

The remaining Reddit feed shapes: /user/<name>, multireddits, /domain/<site>.

fetch_json is deliberately not a general web fetcher. URLs on other hosts are refused unless you start the server with REDDIT_MCP_ALLOW_ANY_URL=1, so an unrelated fetch tool doesn't sit in the client's tool list waiting to be picked at the wrong moment.

Other ways to install

From GitHub (latest main, no clone)

To run unreleased changes, point uvx at the repo and the reddit-rss-mcp entry point. Append @v1.1.2 (or any tag) to pin a release instead of tracking main:

claude mcp add reddit -s user -- uvx --from git+https://github.com/jorgen-k/reddit-mcp reddit-rss-mcp

From a local clone

Prefer this if you want to edit the code:

git clone https://github.com/jorgen-k/reddit-mcp.git
cd reddit-mcp
claude mcp add reddit -s user -- uv --directory "$(pwd)" run server.py

For Claude Desktop & Cowork, the same config file as above, with absolute paths from which uv and pwd:

{
  "mcpServers": {
    "reddit": {
      "command": "/absolute/path/to/uv",
      "args": ["--directory", "/absolute/path/to/reddit-mcp", "run", "server.py"]
    }
  }
}

Updating after a code change

The server is a long-lived process, spawned once when the client connects. Editing server.py does not hot-reload it; the running process keeps the old code until it's restarted.

  • Claude Code: run /mcp, select reddit, and reconnect it (or restart Claude Code).

  • Codex CLI: run /mcp and restart the server if needed.

  • Claude Desktop & Cowork: fully quit the app (Cmd+Q) and relaunch.

Limits worth knowing

Read-only, public content only. Be considerate with request volume; these are public feeds.

No scores, vote counts, or comment counts. RSS doesn't carry them. For those you need Reddit's Data API, which now requires a moderation use case and approval.

Rate limiting. Reddit throttles unauthenticated RSS aggressively. On an HTTP 429 the server retries with backoff, honoring the Retry-After header when present and otherwise sleeping roughly 2, 4, 8, 16, 32, 64, 128 seconds (plus jitter) across up to 7 retries. It also keeps a minimum gap between outbound requests to avoid tripping the limit in the first place. All tools share this.

Search is only as good as Reddit's search. search_reddit uses Reddit's own search engine; RSS is just the output format, so results match the website, not a separate weaker index. That engine has real limits:

  • It doesn't search comment text, only post titles and bodies (and community names). A term that appears only in a comment won't be found.

  • Very new posts lag, because indexing isn't instant. To catch brand-new posts reliably, use browse_subreddit(sort="new").

  • It isn't exhaustive. Low-relevance results get dropped or buried.

So "no results" means Reddit's search didn't surface it, not that it was never posted.

License

MIT. See LICENSE.

Available Tools

4 tools
browse_subredditA

Read what a subreddit is posting right now, to see a community's live activity.

Use this when the question is about what people in a specific community are currently saying or doing, or when a post is too recent for Reddit's search index to have caught it yet (search lags; "new" here does not).

Scores, upvote ratios, and comment counts are not available.

Args: subreddit: Subreddit name, with or without the "r/" prefix. sort: One of hot, new, top, rising, controversial. time_filter: For top/controversial — hour, day, week, month, year, all. limit: Number of posts (1-100).

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNohot
limitNo
subredditYes
time_filterNoday

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavior disclosure. It is upfront that scores, upvote ratios, and comment counts are unavailable, and it explains the 'new' sort behavior. It could go further by stating read-only/no-auth expectations or rate limits, but this is still useful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Everything in the description earns its place: purpose, usage guidance, limitations, then parameter details. The most decision-relevant content is front-loaded, and the parameter documentation is compact without being padded by schema repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The input parameters are thoroughly covered and the description calls out key data limitations, which is especially important since there is no output schema. It stops slightly short of describing the exact shape of the returned posts, but it is complete enough for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides only type/default values with 0% description coverage, but the Args section fully compensates. It documents subreddit prefix handling, allowed sort values, when time_filter applies, and the limit range 1-100, adding real meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with 'Read what a subreddit is posting right now', giving a specific verb, a concrete resource (a subreddit), and the scope of live community activity. It also distinguishes itself from the sibling search tool by calling out posts too recent for the search index and clarifying that the 'new' sort does not lag.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this when...' and supplies concrete scenarios: questions about what a community is currently saying, or posts too recent for search indexing. It contrasts with search behavior, but it does not explicitly state when to prefer get_post over this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_jsonA

Read a Reddit feed the other tools do not cover: a user, multireddit, or domain.

Use this only for Reddit URLs outside the usual shapes, such as /user/, /r/+, or /domain/. For browsing a subreddit, searching, or reading a thread, use browse_subreddit, search_reddit, or get_post instead.

This is not a general web fetcher. URLs on other hosts are refused unless the operator sets REDDIT_MCP_ALLOW_ANY_URL=1.

Args: url: A reddit.com URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses key behavioral constraints: it is not a general web fetcher and refuses non-reddit URLs unless an env var is set. It implies read-only via 'Read', but does not explicitly state the return format (JSON) or mention rate limits/authentication. Even so, it covers the most important behavioral limit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear lead sentence, usage rules, and a limitation note. Each sentence earns its place, though it could be slightly tightened. Overall it is not overly verbose and reads efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, it covers the intended use cases, exclusions, and a critical behavioral limitation. It does not explicitly state that the returned data is JSON, but the tool name 'fetch_json' makes that obvious. The description provides enough context for an agent to invoke it correctly in the intended scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single 'url' param has no schema description. The description adds 'a reddit.com URL' and the main text provides examples of accepted shapes, partially compensating. However, the param-level description is redundant and not very detailed; an agent must rely on the overall description for semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and resource (Reddit feeds of user, multireddit, or domain types). It explicitly differentiates from siblings by saying 'the other tools do not cover' and lists concrete URL shapes, making the tool's niche immediately clear to an agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit 'Use this only for' condition with URL shape examples, and names the exact alternative tools (browse_subreddit, search_reddit, get_post) for other cases. It also states when NOT to use it (not a general web fetcher), leaving little room for misrouting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_postA

Read one Reddit thread in full: the original post plus its comments.

Use this after a search or a browse turns up a promising thread and you need what people actually wrote in it, the details, caveats, corrections, and disagreements that a title alone never carries.

Comments come back as a flat list (the reply tree is not available), and neither are scores or vote counts.

Args: url: A Reddit post URL or permalink (e.g. https://www.reddit.com/r/python/comments/abc123/title/ or /r/python/comments/abc123/title/). comment_limit: Max comments to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
comment_limitNo

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so thoroughly. It discloses that comments are returned as a flat list with no reply tree, and that scores/vote counts are not included. It also states the tool reads content, which implies a non-destructive operation. These limitations are exactly the kind of behavioral context agents need.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficient and well-organized: a clear purpose statement, a usage note, a behavioral caveat, and a compact argument list. It is front-loaded with the primary function and avoids redundant phrasing. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema and no annotations, the description covers all critical aspects: what the tool returns, its limitations, usage context, and parameter formats. An agent can confidently call it after reading this description. Minor omissions like error handling are not essential for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully explain both parameters. It does: url is defined with concrete examples of valid Reddit URLs, and comment_limit is described as 'Max comments to return.' This adds meaning far beyond the bare schema names and types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads a Reddit thread (original post plus comments) and explicitly contrasts it with search/browse tools that only return titles. The verb 'read' and resource 'Reddit thread' are specific, and the phrase 'the details, caveats, corrections, and disagreements that a title alone never carries' further clarifies its unique role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit usage trigger: 'Use this after a search or a browse turns up a promising thread.' It also implies when not to use it by noting that it returns full content rather than lists, differentiating it from browse_subreddit and search_reddit. No alternative tool is named, but the context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_redditA

Search Reddit discussions for real user opinions and experiences on a topic.

Use this when the answer depends on what people who actually used or did the thing report: hands-on impressions, "is X worth it", failure stories, workarounds, recommendations, or where a community currently stands. Returns matching posts and their text; follow up with get_post to read the comments.

Reddit's own search covers post titles and bodies, not comment text, so no results means Reddit did not surface it, not that nobody posted it.

Args: query: Search terms. subreddit: Restrict to this subreddit (with or without "r/"). sort: relevance, hot, top, new, comments. time_filter: hour, day, week, month, year, all. limit: Number of results (1-100).

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNorelevance
limitNo
queryYes
subredditNo
time_filterNoall

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does well by disclosing the non-obvious search limitation: 'Reddit's own search covers post titles and bodies, not comment text.' It also states what is returned ('matching posts and their text') and routes comment reading to get_post. It does not mention auth or rate limits, but for a read-only search tool the added context is substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and usage, includes only the essential caveat about comment search coverage, and closes with a compact Args block. Every sentence adds value; there is no filler or unnecessary repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers when to use the tool, parameter semantics, return value ('matching posts and their text'), and an important behavioral limitation. Because there is no output schema, it would be even stronger with explicit result metadata or pagination details, but it is already enough for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage and no enum definitions, but the description fully compensates by listing all five parameters with concrete allowed values: sort options, time_filter options, limit range 1-100, subreddit 'r/' flexibility, and query meaning. This gives an agent everything needed to construct valid arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action and resource: 'Search Reddit discussions for real user opinions and experiences on a topic.' This clearly distinguishes it from a generic search tool, though it does not explicitly contrast with the sibling browse_subreddit, so sibling differentiation is incomplete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit selection context: 'Use this when the answer depends on what people who actually used or did the thing report: hands-on impressions...' This tells an agent when to choose it. It mentions get_post for following up but does not give an explicit when-not-to-use or direct alternative comparison with browse_subreddit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv1.1.4
    • First observedbrowse_subreddit
    • First observedfetch_json
    • First observedget_post
    • First observedsearch_reddit

TDQS

A4.4/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a distinct purpose: browse_subreddit for live subreddit activity, get_post for a single thread with comments, search_reddit for query-based discovery, and fetch_json as an escape hatch for unusual Reddit URLs. The descriptions explicitly cross-reference each other to prevent misselection.

Naming Consistency4/5

Three tools follow the verb_noun pattern (browse_subreddit, get_post, search_reddit) with clear verbs, but fetch_json breaks the pattern with a generic verb and a different structure. Still, the naming is readable and the deviation is minor and purposeful.

Tool Count5/5

Four tools is a well-scoped set for a Reddit reader. Each tool covers a distinct core operation (browse, read, search, fetch uncommon feed), and none feel redundant or extraneous.

Completeness3/5

The surface covers the primary read workflows—browsing, reading threads, and searching—but lacks any write operations (posting, commenting) and does not expose sorting by subreddit-specific metadata like scores. The fetch_json fallback partially compensates for missing feed types, but the domain is clearly read-only.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to browse Reddit, search posts, analyze user activity, and fetch comments without requiring API keys. Features smart caching, clean data responses, and optional authentication for higher rate limits.
    8
    5
    1,185
    820
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables searching Reddit posts, fetching subreddit content, and retrieving post comments without requiring an API key. It uses public JSON endpoints to provide seamless access to Reddit data for LLM-based applications.
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to access public Reddit data via JSON endpoints, including subreddit trending posts, keyword search, and post details with comments, without authentication.
    12
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Provides read-only access to public Reddit discussions via official OAuth, with tools to list posts, search subreddits, and retrieve posts and comments.
    4
    MIT