Skip to main content
Glama
eliasbiondo

Reddit MCP Server

by eliasbiondo

Reddit MCP Server

PyPI License: MIT

A Model Context Protocol (MCP) server that provides AI assistants with access to Reddit data. Built on top of redd β€” no API keys required.

https://github.com/user-attachments/assets/af8ae52c-f9f3-4d04-80d5-4be0dfa61b0f


Table of Contents

  1. Features

  2. Quick Start

  3. Available Tools

  4. Configuration

  5. Architecture

  6. Contributing

  7. License


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 API keys, no authentication, no browser required. Just install and run.


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 8000

2.2. From source

git clone https://github.com/eliasbiondo/reddit-mcp-server.git
cd reddit-mcp-server
uv sync

Run 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 8000

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

search

Search Reddit for posts

query, limit, sort

search_subreddit

Search within a subreddit

subreddit, query, limit, sort

get_post

Get post details + comment tree

permalink

get_subreddit_posts

Get subreddit listing

subreddit, limit, category, time_filter

get_user

Get user's activity feed

username, limit

get_user_posts

Get user's submitted posts

username, limit, category, time_filter

Tool Details

Search all of Reddit for posts matching a query.

query: "python async programming"
limit: 10
sort: "relevance"  # relevance, hot, top, new, comments

search_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, all

get_user

Get a user's recent public activity (posts and comments).

username: "spez"
limit: 10

get_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, all

4. Configuration

All settings can be configured via environment variables:

Variable

Default

Description

REDDIT_TRANSPORT

stdio

MCP transport (stdio, streamable-http)

REDDIT_HOST

127.0.0.1

Host for HTTP transport

REDDIT_PORT

8000

Port for HTTP transport

REDDIT_PATH

/mcp

Path for HTTP transport

REDDIT_LOG_LEVEL

WARNING

Log level (DEBUG, INFO, WARNING, ERROR)

REDDIT_PROXY

β€”

HTTP/HTTPS proxy URL

REDDIT_TIMEOUT

10.0

Request timeout in seconds

REDDIT_THROTTLE_MIN

1.0

Min delay between paginated requests (seconds)

REDDIT_THROTTLE_MAX

2.0

Max delay between paginated requests (seconds)

CLI arguments take precedence over environment variables:

uv run reddit-no-auth-mcp-server \
  --transport streamable-http \
  --port 9000 \
  --log-level DEBUG

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 root

6. Contributing

Contributions are welcome. Please read CONTRIBUTING.md for guidelines on setting up the project, running tests, and submitting changes.


7. License

MIT

Available Tools

6 tools
reddit_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/')

ParametersJSON Schema
NameRequiredDescriptionDefault
permalinkYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
subredditYes
limitNo
categoryNo
time_filterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With zero annotations, the description carries the full disclosure burden. It provides useful behavioral constraints (max 100 posts, default values, category options) and notes the time_filter applies only to 'top' listings. However, it omits authentication requirements, rate limits, read-only safety confirmation, or pagination behavior.

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?

Well-structured with purpose front-loaded in the first sentence followed by an Args block. While the Args block is lengthy, it is necessary given the empty schema. No wasted sentences; every line provides essential parameter documentation.

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

Completeness3/5

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

Adequate for the tool's complexity given the output schema exists (covering return values). Parameter documentation is complete, but the description lacks operational context like API authentication requirements or rate limiting, which is crucial given no annotations are provided.

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?

Excellent compensation for 0% schema coverage. Documents all 4 parameters with concrete examples ('Python', 'news'), enum values (hot/top/new/rising), value constraints (max: 100), and formatting rules (without r/ prefix). This adds essential semantic meaning completely absent from the schema.

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 specific verb+resource ('Get posts from a subreddit listing') and implies bulk retrieval via 'listing', which distinguishes it from sibling 'reddit_get_post' (likely single post). However, it doesn't explicitly contrast with other siblings like 'reddit_search' or 'reddit_get_user_posts'.

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?

Provides no explicit guidance on when to use this tool versus siblings (e.g., when to use this vs reddit_search for finding posts). The only usage hint is implicit in the time_filter description noting it applies to 'top listings', but lacks 'when-not' or alternative recommendations.

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It successfully discloses 'public' visibility scope, 'recent' temporal limitation, and rate constraints (max: 100). However, lacks information on authentication requirements, error handling (e.g., non-existent user), or pagination behavior.

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?

Efficient two-section structure: single-sentence purpose statement followed by Args block. Every sentence earns its place with no repetition of structured data. Front-loaded with the core verb and resource.

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?

Given presence of output schema, description appropriately omits return value details. Parameter documentation is complete despite 0% schema coverage. Minor gap: could explicitly clarify relationship with reddit_get_user_posts sibling to maximize tool selection accuracy.

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?

With 0% schema description coverage, the description fully compensates by providing detailed semantics for both parameters: username format explicitly excludes 'u/' prefix with clear examples ('spez', 'GallowBoob'), and limit documents default value (25), maximum constraint (100), and semantics ('Maximum number of activity items').

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?

Specific verb 'Get' with clear resource 'Reddit user's recent public activity'. Critically, it explicitly includes '(posts and comments)' which distinguishes it from sibling tool 'reddit_get_user_posts' that presumably returns only posts, fulfilling the sibling differentiation requirement for 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 Guidelines3/5

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

Provides implied usage guidance by specifying it retrieves both content types (posts and comments), hinting at when to use this versus the posts-only sibling. However, lacks explicit 'when to use/when not to use' statements or direct references to sibling alternatives.

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

reddit_get_user_postsB

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

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYes
limitNo
categoryNo
time_filterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure but offers minimal context beyond parameter definitions. It omits pagination behavior, rate limits, authentication requirements, and whether results include deleted posts or comments (vs submissions only).

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?

Well-structured with a clear summary sentence followed by an Args block documenting parameters. No redundant prose. The docstring-style formatting is readable and efficient, though slightly informal compared to standard MCP description conventions.

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

Completeness3/5

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

Adequate for parameter documentation given zero schema coverage, but incomplete overall. Missing critical context: no distinction from reddit_get_user (which may return comments vs submissions), no mention of the output schema structure, and no API behavioral constraints (e.g., Reddit's rate limiting for user history endpoints).

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

Parameters4/5

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

Excellent compensation for 0% schema coverage: the Args section documents all 4 parameters with specific constraints (e.g., 'no u/ prefix', max 100), valid enum values (hot/top/new), and effective defaults. Score 4 (not 5) due to default value discrepancies: schema specifies null defaults for category/time_filter while description claims 'new' and 'all' respectively.

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's purpose with a specific verb ('Get') and resource ('Reddit user's submitted posts'). It effectively distinguishes from siblings: unlike reddit_get_subreddit_posts (community content), reddit_get_post (single item), or reddit_get_user (profile metadata), this targets a specific user's submission history.

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?

No guidance is provided on when to use this tool versus alternatives like reddit_search (for query-based discovery) or reddit_get_subreddit_posts (for community browsing). There are no stated prerequisites, rate limit warnings, or conditions that would help an agent select this over sibling tools.

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
subredditYes
queryYes
limitNo
sortNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. The term 'Search' implies a read-only operation, which is helpful, but the description lacks disclosure of rate limits, authentication requirements, error behaviors (e.g., private/quarantined subreddits), or what content types are returned. The existence of an output schema mitigates some return-value disclosure needs.

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 efficiently structured with a clear purpose statement front-loaded ('Search within a specific subreddit'), followed by a well-formatted Args section. Every sentence earns its place. Minor deduction only because the Args documentation is slightly verbose, though necessary given the schema's lack of descriptions.

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?

Given the 0% schema coverage, the description successfully documents all 4 parameters with examples and constraints. The presence of an output schema means return values don't need explanation in the description. It adequately covers the tool's scope, though it could mention error cases or sibling distinctions for completeness.

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?

Excellent compensation for 0% schema description coverage. The Args section adds crucial semantics: 'subreddit' includes format guidance ('without r/ prefix') and examples, 'limit' specifies constraints (default: 25, max: 100), and 'sort' enumerates valid options. This provides complete semantic meaning that the schema totally lacks.

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 clearly states the verb ('Search') and resource ('subreddit'), and the phrase 'within a specific subreddit' effectively distinguishes it from the sibling 'reddit_search' tool (which presumably searches all of Reddit). However, it doesn't specify what content type is being searched (posts, comments, etc.), preventing 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 Guidelines3/5

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

The description implies usage context by requiring a 'subreddit' parameter, suggesting this is for targeted single-community searches. However, it lacks explicit guidance on when to prefer this over 'reddit_search' (global search) or 'reddit_get_subreddit_posts' (listing vs. searching), and doesn't mention prerequisites like subreddit existence or access requirements.

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. Dates show when Glama detected each change.

  1. 6 tool updatesv0.1.2
    • First observedreddit_get_post
    • First observedreddit_get_subreddit_posts
    • First observedreddit_get_user
    • First observedreddit_get_user_posts
    • First observedreddit_search
    • First observedreddit_search_subreddit

TDQS

A3.7/5.0
Disambiguation3/5

The tools have clear distinctions between post retrieval, subreddit listing, user activity, and search operations, but there is some overlap between reddit_get_user and reddit_get_user_posts, as the former includes both posts and comments while the latter is a subset. This could cause confusion about which to use for specific user post queries.

Naming Consistency5/5

All tool names follow a consistent reddit_verb_noun pattern with snake_case throughout, such as reddit_get_post, reddit_get_subreddit_posts, and reddit_search_subreddit. This predictability makes it easy for agents to understand and navigate the toolset.

Tool Count5/5

With 6 tools, the server is well-scoped for a Reddit API, covering key functionalities like retrieving posts, subreddit content, user data, and search operations. This count is neither too sparse nor overwhelming, fitting typical use cases effectively.

Completeness4/5

The toolset covers essential read operations for posts, subreddits, users, and search, with good parameter support. However, it lacks write or interaction capabilities (e.g., posting, commenting, voting), which are common in Reddit workflows, leaving minor gaps that agents might need to work around.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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
    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,785
    811
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/eliasbiondo/reddit-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server