Reddit MCP Server
This server gives AI assistants read-only access to Reddit data such as posts, comments, subreddit listings, searches, and user activity.
Search all of Reddit for posts matching a query.
Search within a specific subreddit.
Get full details of a Reddit post, including its comment tree.
Browse a subreddit’s posts by hot, top, new, or rising listings.
View a Reddit user’s recent public activity, including posts and comments.
Get a Reddit user’s submitted posts with category and time-filter options.
Provides tools for searching Reddit, browsing subreddit posts, retrieving detailed post content with comment trees, and viewing user activity and submitted posts.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Reddit MCP ServerFind the top posts from the past week in r/MachineLearning"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Reddit MCP Server
A Model Context Protocol (MCP) server that provides AI assistants with access to Reddit data. Built on top of redd. It works without API keys where Reddit allows anonymous access, and can use optional Reddit OAuth credentials where it doesn't.
https://github.com/user-attachments/assets/af8ae52c-f9f3-4d04-80d5-4be0dfa61b0f
Table of Contents
Related MCP server: Reddit MCP Server
1. Features
🔍 Search — Search all of Reddit or within a specific subreddit
📰 Subreddit Posts — Browse hot, top, new, or rising posts from any subreddit
📖 Post Details — Get full post content with nested comment trees
👤 User Activity — View a user's recent posts and comments
📝 User Posts — Get a user's submitted posts
No browser required, and API keys are optional. Reddit now blocks unauthenticated
requests from many networks (you'll see HTTP 403 ... blocked by network security). If that happens to you, add
Reddit API credentials.
2. Quick Start
2.1. Using uvx (recommended)
The fastest way to run the server — no clone needed:
# stdio transport (default, for Claude Desktop / Cursor / etc.)
uvx reddit-no-auth-mcp-server
# HTTP transport
uvx reddit-no-auth-mcp-server \
--transport streamable-http \
--port 80002.2. From source
git clone https://github.com/eliasbiondo/reddit-mcp-server.git
cd reddit-mcp-server
uv syncRun the server:
# stdio transport (default)
uv run reddit-no-auth-mcp-server
# HTTP transport
uv run reddit-no-auth-mcp-server \
--transport streamable-http \
--port 80002.3. MCP Client Configuration
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"reddit": {
"command": "uvx",
"args": ["reddit-no-auth-mcp-server"]
}
}
}Cursor
Add to your .cursor/mcp.json:
{
"mcpServers": {
"reddit": {
"command": "uvx",
"args": ["reddit-no-auth-mcp-server"]
}
}
}From source (any MCP client)
{
"mcpServers": {
"reddit": {
"command": "uv",
"args": [
"--directory", "/path/to/reddit-mcp-server",
"run", "reddit-no-auth-mcp-server"
]
}
}
}3. Available Tools
Tool | Description | Key Arguments | Returns |
| Search Reddit for posts |
|
|
| Search within a subreddit |
|
|
| Get post details + comment tree |
| post object |
| Get subreddit listing |
|
|
| Get user's activity feed |
|
|
| Get user's submitted posts |
|
|
Every tool returns a JSON object (never a bare array) that matches its advertised
outputSchema, so MCP-to-OpenAPI bridges such as
mcpo / Open WebUI can validate the response.
Tool Details
search
Search all of Reddit for posts matching a query.
query: "python async programming"
limit: 10
sort: "relevance" # relevance, hot, top, new, commentssearch_subreddit
Search within a specific subreddit.
subreddit: "Python"
query: "web scraping"
limit: 10
sort: "top"get_post
Get full details of a Reddit post including its comment tree.
permalink: "/r/Python/comments/abc123/my_post/"get_subreddit_posts
Get posts from a subreddit listing.
subreddit: "MachineLearning"
limit: 25
category: "hot" # hot, top, new, rising
time_filter: "week" # hour, day, week, month, year, allget_user
Get a user's recent public activity (posts and comments).
username: "spez"
limit: 10get_user_posts
Get a user's submitted posts.
username: "spez"
limit: 10
category: "top" # hot, top, new
time_filter: "all" # hour, day, week, month, year, all4. Configuration
All settings can be configured via environment variables:
Variable | Default | Description |
|
| MCP transport ( |
|
| Host for HTTP transport |
|
| Port for HTTP transport |
|
| Path for HTTP transport |
|
| Log level ( |
| — | HTTP/HTTPS proxy URL |
|
| Request timeout in seconds |
|
| Min delay between paginated requests (seconds) |
|
| Max delay between paginated requests (seconds) |
| — | Reddit app client ID; enables the OAuth API (see 4.1) |
| — | Reddit app client secret (required together with |
|
| User-Agent for OAuth API requests |
CLI arguments take precedence over environment variables:
uv run reddit-no-auth-mcp-server \
--transport streamable-http \
--port 9000 \
--log-level DEBUG4.1. Reddit API credentials (optional)
By default the server makes anonymous requests to www.reddit.com, the same
JSON endpoints a browser uses. Reddit blocks those from many networks: every tool
then fails with HTTP 403: You've been blocked by network security. In that case,
use Reddit's official OAuth API with app-only ("userless") credentials. No Reddit
account login is involved; the server only reads public data.
Sign in to Reddit and open https://www.reddit.com/prefs/apps.
Click create another app..., choose script, give it a name, and enter any redirect URI (for example
http://localhost:8080; it is not used).Copy the client ID (the string under the app name) and the secret.
Pass them to the server as environment variables:
{
"mcpServers": {
"reddit": {
"command": "uvx",
"args": ["reddit-no-auth-mcp-server"],
"env": {
"REDDIT_CLIENT_ID": "your-client-id",
"REDDIT_CLIENT_SECRET": "your-client-secret"
}
}
}
}With both variables set, the server gets an access token using the
client_credentials grant, refreshes it automatically, and sends all requests
to https://oauth.reddit.com. Leave both unset to keep anonymous access. Setting
only one of them is an error.
Notes:
Reddit's API rules apply, including its OAuth rate limits (about 100 requests per minute per client). Depending on Reddit's current policy, a new app may need approval before its credentials work.
Reddit asks API clients to send a descriptive User-Agent. Set
REDDIT_USER_AGENTto identify yourself, e.g.python:my-reddit-mcp:v1.0 (by /u/your_username).An
HTTP 401error or "OAuth authentication failed" means the client ID or secret is wrong.
4.2. stdio and the FastMCP banner
With the default stdio transport, the server turns off FastMCP's startup
banner, so the only output is JSON-RPC on stdout and logs on stderr. Some MCP
clients (notably on Windows) misbehave when the banner's box-drawing art shows up
on stderr. For the HTTP transport the banner is still shown; set
FASTMCP_SHOW_SERVER_BANNER=false to hide it there too.
5. Architecture
This project follows hexagonal architecture (ports & adapters):
src/reddit_mcp_server/
├── domain/ # Pure business logic, no framework imports
│ ├── exceptions.py # Domain exception hierarchy
│ └── value_objects.py # Immutable config objects
├── ports/ # Abstract interfaces (contracts)
│ ├── config.py # ConfigPort
│ └── reddit.py # RedditPort
├── application/ # Use cases (orchestration)
│ ├── search.py
│ ├── search_subreddit.py
│ ├── get_post.py
│ ├── get_user.py
│ ├── get_subreddit_posts.py
│ └── get_user_posts.py
├── adapters/
│ ├── inbound/ # Presentation layer
│ │ ├── cli.py # CLI entry point
│ │ ├── mcp_server.py
│ │ ├── error_mapping.py
│ │ ├── serialization.py
│ │ └── mcp_tools/ # MCP tool definitions
│ └── outbound/ # Infrastructure layer
│ ├── env_config.py # ConfigPort implementation
│ └── redd_client.py # RedditPort implementation (wraps redd)
└── container.py # DI composition root6. Contributing
Contributions are welcome. Please read CONTRIBUTING.md for guidelines on setting up the project, running tests, and submitting changes.
7. License
Available Tools
6 toolsreddit_get_postB
Get full details of a Reddit post including its comment tree.
Args: permalink: Reddit permalink path (e.g., '/r/Python/comments/abc123/my_post/')
| Name | Required | Description | Default |
|---|---|---|---|
| permalink | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It adequately discloses the comment tree inclusion (important behavioral trait not obvious from 'get post'), but omits auth requirements, rate limits, comment depth limits, and error handling for invalid permalinks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with purpose front-loaded in the first sentence, followed by clear Args documentation. No redundant text; the example permalink efficiently illustrates the expected format without verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Appropriate for a single-parameter read operation with output schema present. Covers core functionality and return data shape (comment tree), but given lack of annotations, should mention authentication requirements or API rate considerations to be complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the Args block compensates effectively by documenting the permalink parameter with both semantic description ('Reddit permalink path') and format example ('/r/Python/comments/abc123/my_post/'), clarifying expected input structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear specific verb ('Get') + resource ('Reddit post') + scope ('full details including its comment tree'). Distinguishes implicitly from siblings via the permalink-based retrieval (vs. search/list operations), though explicit differentiation is absent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance, prerequisites, or alternatives mentioned. User must infer this is for direct permalink retrieval versus searching or listing from sibling tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_get_subreddit_postsA
Get posts from a subreddit listing.
Args: subreddit: Subreddit name without r/ prefix (e.g., 'Python', 'news') limit: Maximum number of posts (default: 25, max: 100) category: Listing category (hot, top, new, rising). Default: hot time_filter: Time window for top listings (hour, day, week, month, year, all). Default: all
Returns: An object with a 'posts' array.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| category | No | ||
| subreddit | Yes | ||
| time_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| posts | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load; it does disclose concrete behavioral facts (limit max 100, defaults of hot/all, the four listing categories). It omits auth requirements, rate limits, pagination behavior, and whether the call is read-only, which matters for a 0%-annotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line summary followed by tightly scoped Args/Returns blocks; each line earns its place. The opening sentence slightly restates the tool name but sets up the structured detail efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and all four inputs are documented. However, for an unannotated network-backed read tool, missing auth/rate-limit/pagination context leaves it only adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no descriptions, no enums), so the description must compensate, and it does: every one of the four parameters gets an explanation, the valid category and time_filter values are enumerated, the limit ceiling is given, and the format for subreddit ('without r/ prefix') is clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get posts from a subreddit listing'), which is clearly distinct from search-oriented and user-oriented siblings. It does not explicitly name the alternatives, but the scope of a listing fetch is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the parameter docs ('listing category', 'time window for top listings'). Nothing says when to prefer this over reddit_search or reddit_search_subreddit, and there are no stated prerequisites for the subreddit name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_get_userA
Get a Reddit user's recent public activity (posts and comments).
Args: username: Reddit username without u/ prefix (e.g., 'spez', 'GallowBoob') limit: Maximum number of activity items (default: 25, max: 100)
Returns: An object with an 'items' array of posts and comments.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| username | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It does add useful traits such as 'recent' and 'public' (implying no private/draft data), but omits auth requirements, rate limits, ordering, and how far back 'recent' reaches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose followed by compact Args and Returns sections. The Returns block largely restates what the output schema already provides, a small amount of redundancy, but nothing is padded elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with an output schema, the description covers the essentials: argument formats, limits, and return shape. It could say more about ordering/pagination and the posts-vs-comments distinction, but nothing critical for invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet the description compensates well: it specifies that username must omit the u/ prefix with concrete examples, and gives limit's default of 25 and max of 100, neither of which is captured in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (a Reddit user's recent public activity) and clarifies the payload is posts and comments. It distinguishes itself somewhat from reddit_get_user_posts by including comments, but never names or contrasts the sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use statement or exclusions. The contrast with reddit_get_user_posts is only implied by the phrase 'posts and comments' in the parenthetical, leaving the agent to infer which sibling to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_get_user_postsA
Get a Reddit user's submitted posts.
Args: username: Reddit username without u/ prefix (e.g., 'spez') limit: Maximum number of posts (default: 25, max: 100) category: Listing category (hot, top, new). Default: new time_filter: Time window for top listings (hour, day, week, month, year, all). Default: all
Returns: An object with a 'posts' array.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| category | No | ||
| username | Yes | ||
| time_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| posts | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description has to carry the full safety profile, and it mostly does not. It does disclose useful limits: the max value of 100 for limit, the allowed category and time_filter values, and the shape of the response. It says nothing about rate limits, page/auth requirements, or what happens for a deleted, suspended, or private user. That is a real gap for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence comes first, then compact Args and Returns blocks in the standard docstring layout. It is appropriately sized with no filler. The Returns line is mostly redundant because an output schema exists, which keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema is present, so return values are already covered, and the description is complete enough to call the tool. It leaves out error behavior for missing users and any note about rate limits or authentication, which matters for a README-level public API surface. It is usable but not fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage and no enums, so the description has to document the 4 parameters, and it does. It gives the username format (no u/ prefix) and lists the allowed category and time_filter values that the schema leaves as bare strings. One flaw holds it below 5: the defaults it states, category=new and time_filter=all, differ from the schema's null defaults, so an agent omitting those arguments gets a different behavior from what the prose implies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and resource: fetch a Reddit user's submitted posts. That is enough to separate it from reddit_get_user (profile) and reddit_get_subreddit_posts (community feed). It never names a sibling explicitly, but the noun phrase alone makes the difference clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The Args block tells the agent how to shape a request (username format, limit cap, category and time_filter choices), so its use is implied. Nothing says when to pick this tool instead of reddit_get_user or reddit_search, and nothing covers the cases where a call should be skipped. A 2 would be too harsh, but this is only adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_searchA
Search all of Reddit for posts matching a query.
Args: query: Search keywords (e.g., 'python web scraping', 'machine learning') limit: Maximum number of results to return (default: 25, max: 100) sort: Sort order for results (relevance, hot, top, new, comments)
Returns: An object with a 'results' array.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden: it does disclose useful behavioral constraints such as the default limit of 25 and maximum of 100, which is real added context. It says nothing about authentication, rate limits, or pagination behavior, which matters for a live external search API.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose followed by compact Args/Returns sections with zero filler. Every line carries information the caller needs, and the structure maps cleanly onto the three parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the brief 'results' array note is sufficient and the description needn't detail return fields. For a three-parameter read tool with no annotations, what remains missing is minor: pagination/cursor guidance and any auth or rate-limit preconditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: query gets an example, limit gets default and max, and sort enumerates the accepted values ('relevance, hot, top, new, comments') that the schema only types as an unconstrained string. The sort values are the strongest addition since the schema provides no enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search all of Reddit for posts') with the scope word 'all' that implicitly distinguishes it from the sibling reddit_search_subreddit. It never names the sibling explicitly, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'all of Reddit' implies the tool is for site-wide searches rather than subreddit-scoped ones, which is useful against the sibling list. However, there is no explicit when-to-use/when-not statement and no guidance on choosing sort modes or limit tradeoffs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_search_subredditA
Search within a specific subreddit.
Args: subreddit: Subreddit name without r/ prefix (e.g., 'Python', 'MachineLearning') query: Search keywords limit: Maximum number of results to return (default: 25, max: 100) sort: Sort order for results (relevance, hot, top, new, comments)
Returns: An object with a 'results' array.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| query | Yes | ||
| subreddit | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose result-shape ('results' array), the default limit of 25 and the max of 100, and the valid sort modes — useful operational context — but says nothing about pagination, rate limits, or whether private/quarantined subreddits are reachable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence front-loads the purpose, and the Args/Returns block is scannable with no filler. The docstring scaffolding is slightly more verbose than a prose paragraph would be, but every line carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple four-parameter read operation with an output schema present, the description covers parameters and call mechanics adequately. What it lacks is routing context — how results differ from reddit_search or a subreddit post listing — which an agent needs before choosing this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must do all the work, and it does: subreddit format ('without r/ prefix', with examples), query meaning, limit default and ceiling, and the enumerated sort values (relevance, hot, top, new, comments) — none of which appear as an enum in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and scoped resource: 'Search within a specific subreddit', which is clearly narrower than a global search and clearly different from a post-listing tool. It doesn't name any sibling (reddit_search, reddit_get_subreddit_posts) to sharpen the distinction, so it stops short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the phrase 'within a specific subreddit' — an agent can infer this is the scoped variant of reddit_search, but nothing states when to prefer it over reddit_search (global) or reddit_get_subreddit_posts (browse without keywords). No exclusions or prerequisites are given.
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.
5 tool updates
v0.2.1- Changed
reddit_get_subreddit_posts5 fields changed- added
Output schema / descriptionAdded value: +"Tool response for listings of posts (subreddit or user submissions)." - added
Output schema / properties / postsAdded value: +{ + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" +} - removed
Output schema / properties / resultRemoved value: -{ - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" -} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "posts" +] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
reddit_get_user5 fields changed- added
Output schema / descriptionAdded value: +"Tool response for a user's activity feed (posts and comments)." - added
Output schema / properties / itemsAdded value: +{ + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" +} - removed
Output schema / properties / resultRemoved value: -{ - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" -} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "items" +] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
reddit_get_user_posts5 fields changed- added
Output schema / descriptionAdded value: +"Tool response for listings of posts (subreddit or user submissions)." - added
Output schema / properties / postsAdded value: +{ + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" +} - removed
Output schema / properties / resultRemoved value: -{ - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" -} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "posts" +] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
reddit_search5 fields changed- added
Output schema / descriptionAdded value: +"Tool response for search queries." - removed
Output schema / properties / resultRemoved value: -{ - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" -} - added
Output schema / properties / resultsAdded value: +{ + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "results" +] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
reddit_search_subreddit5 fields changed- added
Output schema / descriptionAdded value: +"Tool response for search queries." - removed
Output schema / properties / resultRemoved value: -{ - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" -} - added
Output schema / properties / resultsAdded value: +{ + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "results" +] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
6 tool updates
v0.1.2- First observed
reddit_get_post - First observed
reddit_get_subreddit_posts - First observed
reddit_get_user - First observed
reddit_get_user_posts - First observed
reddit_search - First observed
reddit_search_subreddit
TDQS
Scored across 6 tools
Most tools are clearly distinct by resource+action (get_post, get_subreddit_posts, search, get_user). The only real overlap is reddit_get_user vs reddit_get_user_posts, where the former returns mixed posts+comments and the latter only submissions; descriptions clarify this but an agent could still misselect when it just wants a user's posts. search vs search_subreddit is well delineated by the subreddit parameter.
All six tools follow a consistent snake_case `reddit_<verb>_<object>` pattern with a uniform server prefix. The verb mix (get/search) is semantically meaningful rather than arbitrary, and qualifiers like _subreddit/_posts/_user_posts read predictably.
Six tools is well-scoped for a read-only Reddit reader: fetching posts, comment trees, searches, and user activity. Each tool maps to a distinct access pattern and none feels redundant padding.
Core read workflows (post detail with comments, subreddit listings, global and scoped search, user activity) are covered. Minor gaps remain: no subreddit metadata/about endpoint, no dedicated user-comments-only retrieval, and no pagination/cursor beyond limits, but agents can work around these via existing tools.
Maintenance
Related MCP Connectors
Read-only Reddit search API for AI agents: posts, comments, comment trees, subreddit rules.
Reddit posts, comments, keyword search and historical archives as tools. Runs on Apify.
Search public Reddit posts, browse subreddit feeds, and read posts, comments, and profiles.
Reddit posts, comments, subreddits, and search for AI agents. Free key, self-minted, no signup.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables 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.54MIT
- FlicenseNot gradedqualityDmaintenanceProvides 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.-
- AlicenseAqualityAmaintenanceEnables 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.52,051 npm867MIT
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to interact with Reddit by searching subreddits, retrieving hot posts, and fetching detailed post information with comments through the Reddit API.-