{
  "markdown": "# reddit-mcp\n\n<!-- mcp-name: io.github.jorgen-k/reddit-mcp -->\n\n**Read Reddit from local MCP-compatible clients, including Claude Code and Codex, without an API key.** No app registration, no account.\n\nReddit's data API is effectively closed. New apps need a stated moderation use\ncase and manual approval, anonymous `.json` access is blocked, and the free tier\nthat third-party tools were built on is gone. Most \"Reddit for LLMs\" integrations\nnow start with a credentials dance you can't complete.\n\nReddit still publishes public Atom/RSS feeds for every subreddit, thread, user and\nsearch. This is a small local MCP server that reads those feeds and hands your compatible client\nthe fields that matter: browse a subreddit, read a thread and its comments, search\nacross the site.\n\nThose feeds are published to be fetched, which is why this keeps working. It reads a\nsupported path in a format frozen since 2005, so there is no markup to break when\nReddit ships its next redesign.\n\n**What you don't get:** scores, upvote ratios, comment counts. Those exist only in\nthe gated API, and nothing here fakes them. Titles, authors, timestamps, and the\nfull text of posts and comments all come through.\n\n## Install\n\n`reddit-rss-mcp` is on PyPI (the plain `reddit-mcp` name belongs to an unrelated\nproject). You need [`uv`](https://docs.astral.sh/uv/) on your machine; it handles\nPython and dependencies itself, and there is nothing else to set up.\n\n**Claude Code:**\n\n```sh\nclaude mcp add reddit -s user -- uvx reddit-rss-mcp\n```\n\nVerify with `claude mcp list` (should show `reddit: ✓ Connected`). If Claude can't\nfind `uvx`, use its absolute path (`which uvx`) instead of the bare command.\n\n**Codex CLI:**\n\n```sh\ncodex mcp add reddit -- uvx reddit-rss-mcp\n```\n\nVerify with `codex mcp list`. To use a local checkout instead, run:\n\n```sh\ncodex mcp add reddit -- uv --directory \"$(pwd)\" run server.py\n```\n\nCodex also supports a project-scoped `.codex/config.toml`, but this repository\ndoes not include one because it would configure and launch the server\nautomatically for every trusted checkout.\n\n**Claude Desktop, one click:** download `reddit-rss-mcp.mcpb` from the\n[latest release](https://github.com/jorgen-k/reddit-mcp/releases/latest) and drag it\ninto **Settings → Extensions**. No JSON editing, no absolute paths. (It runs\n`uvx reddit-rss-mcp`, so `uv` still needs to be on your PATH.)\n\n**Claude Desktop & Cowork, manual config:** add this to\n`~/Library/Application Support/Claude/claude_desktop_config.json`, using the\nabsolute path from `which uvx` (the app doesn't inherit your shell `PATH`):\n\n```json\n{\n  \"mcpServers\": {\n    \"reddit\": {\n      \"command\": \"/absolute/path/to/uvx\",\n      \"args\": [\"reddit-rss-mcp\"]\n    }\n  }\n}\n```\n\nIf the file already has other top-level keys, add `mcpServers` alongside them\nrather than overwriting the file. Then:\n\n1. **Fully quit the app** (`Cmd+Q`, not just closing the window). The running app\n   rewrites this file, so an edit made while it's open can be discarded.\n2. **Relaunch.** It may take a couple of restarts before the server registers.\n3. **Grant permission** when the app prompts to run the server.\n\n> **Don't use a Custom Connector** (the \"add server by URL\" option) for a local\n> server. Those are dialed from Anthropic's cloud and can't reach `localhost`, no\n> matter the cert or tunnel. The config-file method above spawns the server on your\n> own machine, which is what works.\n\n## Tools\n\n| Tool | What it does |\n|------|--------------|\n| `search_reddit(query, subreddit=None, sort=\"relevance\", time_filter=\"all\", limit=25)` | Search Reddit discussions for real user opinions and experiences on a topic. |\n| `browse_subreddit(subreddit, sort=\"hot\", time_filter=\"day\", limit=25)` | What a community is posting right now (`hot`/`new`/`top`/`rising`/`controversial`). |\n| `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). |\n| `fetch_json(url)` | The remaining Reddit feed shapes: `/user/<name>`, multireddits, `/domain/<site>`. |\n\n`fetch_json` is deliberately not a general web fetcher. URLs on other hosts are\nrefused unless you start the server with `REDDIT_MCP_ALLOW_ANY_URL=1`, so an\nunrelated fetch tool doesn't sit in the client's tool list waiting to be picked at the\nwrong moment.\n\n## Other ways to install\n\n### From GitHub (latest `main`, no clone)\n\nTo run unreleased changes, point `uvx` at the repo and the `reddit-rss-mcp` entry\npoint. Append `@v1.1.2` (or any tag) to pin a release instead of tracking `main`:\n\n```sh\nclaude mcp add reddit -s user -- uvx --from git+https://github.com/jorgen-k/reddit-mcp reddit-rss-mcp\n```\n\n### From a local clone\n\nPrefer this if you want to edit the code:\n\n```sh\ngit clone https://github.com/jorgen-k/reddit-mcp.git\ncd reddit-mcp\nclaude mcp add reddit -s user -- uv --directory \"$(pwd)\" run server.py\n```\n\nFor Claude Desktop & Cowork, the same config file as above, with absolute paths\nfrom `which uv` and `pwd`:\n\n```json\n{\n  \"mcpServers\": {\n    \"reddit\": {\n      \"command\": \"/absolute/path/to/uv\",\n      \"args\": [\"--directory\", \"/absolute/path/to/reddit-mcp\", \"run\", \"server.py\"]\n    }\n  }\n}\n```\n\n### Updating after a code change\n\nThe server is a long-lived process, spawned once when the client connects. Editing\n`server.py` does not hot-reload it; the running process keeps the old code until\nit's restarted.\n\n- **Claude Code:** run `/mcp`, select `reddit`, and reconnect it (or restart Claude\n  Code).\n- **Codex CLI:** run `/mcp` and restart the server if needed.\n- **Claude Desktop & Cowork:** fully quit the app (`Cmd+Q`) and relaunch.\n\n## Limits worth knowing\n\nRead-only, public content only. Be considerate with request volume; these are\npublic feeds.\n\n**No scores, vote counts, or comment counts.** RSS doesn't carry them. For those\nyou need Reddit's Data API, which now requires a moderation use case and approval.\n\n**Rate limiting.** Reddit throttles unauthenticated RSS aggressively. On an HTTP\n429 the server retries with backoff, honoring the `Retry-After` header when present\nand otherwise sleeping roughly 2, 4, 8, 16, 32, 64, 128 seconds (plus jitter) across\nup to 7 retries. It also keeps a minimum gap between outbound requests to avoid\ntripping the limit in the first place. All tools share this.\n\n**Search is only as good as Reddit's search.** `search_reddit` uses Reddit's own\nsearch engine; RSS is just the output format, so results match the website, not a\nseparate weaker index. That engine has real limits:\n\n- **It doesn't search comment text**, only post titles and bodies (and community\n  names). A term that appears only in a comment won't be found.\n- **Very new posts lag**, because indexing isn't instant. To catch brand-new posts\n  reliably, use `browse_subreddit(sort=\"new\")`.\n- **It isn't exhaustive.** Low-relevance results get dropped or buried.\n\nSo \"no results\" means Reddit's search didn't surface it, not that it was never\nposted.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n",
  "bytes": 6990,
  "sha": "aae28fcdb7f87f66388d0bd1ded52311ce74649a86dcd877cdda02fb983f411c",
  "repo_slug": "jorgen-k/reddit-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_jorgen_k_reddit_mcp_1e74c677/readme"
}