Skip to main content
Glama
ToGalan

reddit-keyless-mcp

by ToGalan

reddit-keyless-mcp

A read-only Reddit MCP server that needs no Reddit account, app or API key. It searches Reddit, lists a subreddit's posts and reads whole threads through Reddit's public RSS feeds, so it works for anyone, today.

Why it exists

Reddit's Responsible Builder Policy (November 2025) put new Data API apps behind manual review, so REDDIT_CLIENT_ID / REDDIT_CLIENT_SECRET are no longer something you can create for yourself, and the anonymous .json endpoints now answer 403. Reddit MCP servers built on the API or .json stop working without approved credentials.

Related MCP server: Reddit MCP Server

What it can do

Tool

What it does

search_reddit

Search posts by keyword across Reddit or inside one subreddit; filter by time (hour to all) and sort (relevance, new, hot, top, comments)

browse_subreddit

List a subreddit's new, hot, top or rising posts

get_thread

Read a post and its comments from any www, old or new reddit thread URL

Every result has the title, URL, subreddit, author, date and plain text (HTML and Reddit's footer stripped). All tools are read-only: nothing here can post, comment, vote or message.

What it can't do

RSS is not the API, so some things are out of reach:

  • No scores or comment counts, and comments come as a flat list without reply nesting.

  • At most 25 items per feed (one page; no pagination).

  • No user profiles, private subreddits or quarantined content.

  • Slow. Reddit rate-limits RSS per IP address, roughly one feed a minute in practice. The server queues every call, spaces requests 6 seconds apart and backs off on HTTP 429 for up to 2.5 minutes before giving up with a clear message. Ask for one thing at a time.

  • Loose search. Reddit's search matches broadly; inside a busy subreddit most results can be off-topic. Restricting to a subreddit helps and is rate-limited less often than site-wide search.

Install

Requires Node.js 18 or later.

Claude Code

claude mcp add reddit -- npx -y reddit-keyless-mcp

Claude Desktop and other MCP clients (claude_desktop_config.json or .mcp.json):

{
  "mcpServers": {
    "reddit": {
      "command": "npx",
      "args": ["-y", "reddit-keyless-mcp"]
    }
  }
}

To run the latest code from GitHub instead of the npm release, use npx -y github:ToGalan/reddit-keyless-mcp.

Calls can take more than a minute when Reddit is rate-limiting. If your client times out tool calls sooner, raise its timeout (in Claude Code, MCP_TOOL_TIMEOUT=300000).

Certificate errors (UNABLE_TO_VERIFY_LEAF_SIGNATURE, SELF_SIGNED_CERT_IN_CHAIN): your network inspects HTTPS. Pass your CA to the server with NODE_EXTRA_CA_CERTS=/path/to/ca.pem, or on recent Node versions NODE_USE_SYSTEM_CA=1, in the server's env. Some MCP clients start servers with a minimal environment, so set these in the server config rather than your shell.

Settings

All optional, as environment variables:

Variable

Default

Meaning

REDDIT_USER_AGENT

reddit-keyless-mcp/0.1 (...)

User-Agent sent to Reddit; set one that identifies you

REDDIT_MIN_GAP_MS

6000

Minimum gap between requests

REDDIT_MAX_WAIT_MS

150000

How long to keep retrying a rate-limited request

Example

Search r/Scams for "linkedin recruiter" from the past month, then read the most recent thread.

{
  "url": "https://www.reddit.com/r/Scams/search.rss?q=linkedin+recruiter&t=month&sort=relevance&restrict_sr=1",
  "results": [
    {
      "id": "t3_…",
      "title": "Recruiter scam: pay for resume update",
      "url": "https://www.reddit.com/r/Scams/comments/…/",
      "subreddit": "Scams",
      "author": "…",
      "published": "2026-09-27T…",
      "text": "…"
    }
  ]
}

Use responsibly

Reddit content belongs to its authors and Reddit's terms apply. Reading threads for your own research is fine; don't store Reddit content in bulk, resell it or train models on it, and don't use what you find to spam people. If you reply to someone you found this way, do it in public, say who you are, and don't send unsolicited private messages.

Development

npm install
npm test        # mocked feeds, no network
npm start       # runs the server on stdio

License

MIT

Available Tools

3 tools
browse_subredditBrowse a subredditA
Read-only

List the latest (or hot, top, rising) posts in a subreddit, with title, URL, author, date and text. Reddit rate-limits its RSS feeds hard: calls are queued and spaced out, and can take a minute or more each. Call tools one at a time.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNonew
timeNoTime window, used with sort "top"week
limitNo
subredditYesSubreddit name without r/, e.g. "recruitinghell"

TDQS

A3.6/5.0
Behavior4/5

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

Annotations only declare readOnlyHint and openWorldHint, so the description's disclosure that Reddit rate-limits RSS feeds hard, that calls are queued and spaced out, and that each call can take a minute or more is genuinely additive operational context. It stops short of describing failure/timeout behavior or pagination, keeping it out of the top band.

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?

Two sentences, zero filler, with the core listing behavior front-loaded and the latency warning immediately after. Every clause earns its place.

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?

With no output schema, the description helpfully names the returned fields, and the rate-limit warning covers the main operational surprise. Minor gaps remain: no mention of how 'limit' interacts with rate limiting or what happens when a feed is unavailable.

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 50%: subreddit format and the time/sort relationship are documented in the schema, while sort and limit carry only enums, defaults and bounds. The description restates the sort values but adds no new meaning for sort, time or limit, so it does not compensate for the undocumented half.

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?

States a specific verb (list) plus resource (posts in a subreddit), enumerates the sort modes and the returned fields (title, URL, author, date, text). It is clearly distinguishable from get_thread and search_reddit in practice, but it never names those siblings to make the boundary explicit.

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

Usage Guidelines2/5

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

There is no statement of when to use this versus get_thread or search_reddit, and no prerequisites or exclusions. The sort enumeration implies browsing modes, and 'call tools one at a time' is operational advice rather than tool-selection guidance.

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

get_threadRead a Reddit threadA
Read-only

Read a post and its comments from a Reddit thread URL (www, old or new reddit). Comments come as a flat list in Reddit's order, with author, date and text; reply nesting and scores are not available over RSS. Reddit rate-limits its RSS feeds hard: calls are queued and spaced out, and can take a minute or more each. Call tools one at a time.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThread URL, e.g. https://www.reddit.com/r/Scams/comments/abc123/title/
comment_limitNoMaximum comments to return

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint annotation by disclosing concrete behavioral traits: comments arrive as a flat list in Reddit's own order, reply nesting and scores are unavailable over RSS, and the RSS feed is heavily rate-limited so calls are queued and may take a minute or more each. The serialization constraint ('Call tools one at a time') is actionable operational context an agent could not infer from annotations.

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?

Three sentences, front-loaded with the core purpose before limitations. Every sentence earns its place: the first establishes what it does, the second describes the return shape, the third covers rate-limit behavior and the concurrency rule.

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?

There is no output schema, so the description must disclose return semantics, and it does: flat comment list with author, date and text, explicitly noting that nesting and scores are absent. Combined with the latency warning, an agent has everything needed to call this correctly and set expectations.

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 description coverage is 100%, so both 'url' (with example format) and 'comment_limit' (default 50, max 100) are already fully documented in the schema. The description adds no parameter-specific detail beyond that, so the baseline of 3 applies.

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?

States a specific verb and resource ('Read a post and its comments from a Reddit thread URL') and scopes it to a URL input, which cleanly separates it from the sibling tools search_reddit and browse_subreddit that operate on queries or subreddits rather than a specific thread URL.

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?

The description makes the triggering condition clear (you have a thread URL) and adds operational usage guidance ('Call tools one at a time') driven by rate limits. It does not explicitly name when to prefer search_reddit or browse_subreddit instead, but the sibling distinction is largely self-evident from the required URL parameter.

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

search_redditSearch RedditA
Read-only

Search Reddit posts by keyword, across Reddit or inside one subreddit (prefer one subreddit: site-wide search is rate-limited more often, and Reddit's matching is loose, so expect off-topic results). Returns title, URL, subreddit, author, date and text for each post. Reddit rate-limits its RSS feeds hard: calls are queued and spaced out, and can take a minute or more each. Call tools one at a time.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNorelevance
timeNoHow far back to searchweek
limitNoMaximum posts to return (Reddit sends at most 25 per feed)
queryYesSearch words, e.g. "linkedin recruiter scam"
subredditNoRestrict to one subreddit, without r/ (e.g. "Scams")

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint; the description adds the material behavioral facts an agent needs — RSS feeds are rate-limited hard, calls are queued and spaced and can take a minute or more, and tools must be called one at a time. It also discloses result-quality behavior (loose matching, off-topic hits) that no structured field conveys.

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?

Front-loads the purpose, then behavior, then return fields, with no filler sentences. It is dense but each clause carries operational information; slightly compressed telegraphic style but nothing wasteful.

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?

With no output schema, the description compensates by listing the returned fields (title, URL, subreddit, author, date, text) and covers the two big operational risks of rate limiting and queuing. Nothing an agent needs to invoke this correctly appears to be missing.

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 description coverage is 80%, so the schema already documents query, time, limit and subreddit formats, making 3 the baseline. The description adds only the rationale for preferring the subreddit parameter (rate-limit avoidance) and no semantics for sort beyond what the enum implies.

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?

States a specific verb and resource ('Search Reddit posts by keyword') plus the scope ('across Reddit or inside one subreddit'), which is clear enough for an agent to act on. It does not explicitly distinguish itself from the siblings get_thread and browse_subreddit, both of which also operate on Reddit content, so it falls short of a 5.

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?

Gives real when-to-use guidance: prefer scoping to one subreddit because site-wide search is rate-limited more often, and warns that Reddit matching is loose so off-topic results are expected. It stops short of naming the alternative siblings (browse_subreddit, get_thread) or stating when this tool should not be used.

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. 3 tool updatesv0.1.0
    • First observedbrowse_subreddit
    • First observedget_thread
    • First observedsearch_reddit

TDQS

A4/5.0

Scored across 3 tools

Disambiguation4/5

get_thread (read a thread by URL), search_reddit (keyword search), and browse_subreddit (feed listing) have clearly distinct entry points. search_reddit and browse_subreddit both return post lists, so there is minor potential overlap, but the input parameters (keyword vs subreddit/feed) keep them separable.

Naming Consistency5/5

All three tools follow a clean verb_noun snake_case pattern: get_thread, search_reddit, browse_subreddit. Consistent and predictable throughout.

Tool Count4/5

Three tools is a reasonable, well-scoped surface for a keyless read-only Reddit client covering the core actions of reading, searching, and browsing. It is on the lean side but each tool earns its place.

Completeness4/5

Covers the main read workflows (thread, search, subreddit feed) for an RSS-based keyless server. Write actions (posting, commenting, voting) and user/profile lookups are absent, but these are largely out of scope for a keyless RSS approach, so it is acceptable for the stated purpose.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables browsing and searching Reddit content through read-only tools that access Reddit's official API. Supports searching posts, retrieving subreddit information, fetching hot posts, and getting detailed post information.
    5
    4
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides AI assistants with read-only access to Reddit's API for browsing subreddits, reading posts and comments, searching Reddit, and retrieving user/subreddit information. Enables safe exploration of Reddit content without posting capabilities through natural language interactions.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to search, read, and analyze Reddit content, including posts, comments, subreddits, and user profiles using natural language commands. It provides atomic tools for interacting with the Reddit API to retrieve trending topics and community metadata.
    MIT