Reddit MCP Server
The Reddit MCP Server enables AI assistants to access and interact with Reddit content through comprehensive tools for reading, analyzing, and posting.
User Analysis: Retrieve detailed user profiles including karma, account age, verification status, moderator roles, engagement insights, activity trends, and community influence. Access comment and post history with flexible filtering options. Authenticated users can check their own profile using who_am_i.
Content Discovery: Fetch top posts from subreddits with customizable time filters (day, week, month, year, all-time). Search for posts across Reddit or within specific communities using keywords. Retrieve specific submissions by URL or ID with comprehensive metadata including scores, upvote ratios, comments, media attachments, awards, and engagement metrics.
Community Insights: Access detailed subreddit statistics including subscriber counts, active users, creation date, descriptions, rules, moderator information, content policies, and allowed submission types. Discover currently trending subreddits with growth patterns.
Content Creation (requires authentication): Create posts in subreddits with support for text (self) and link posts, optional flair selection, and timing recommendations. Reply to posts and comments with engagement optimization features.
AI-Driven Features: Benefit from intelligent analysis of user engagement patterns, post performance metrics, community health indicators, and strategic recommendations. All responses include smartly formatted engagement statistics and AI insights.
Flexible Access: Supports read-only operations with client credentials and authenticated operations with user credentials. Includes comprehensive error handling with clear validation messages.
Allows AI assistants to access and interact with Reddit content, providing tools for analyzing user activity, fetching posts from subreddits, retrieving subreddit statistics, viewing trending subreddits, creating posts with timing recommendations, and replying to posts/comments with engagement optimization.
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 Server show me the top posts from r/Python this week"
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
This repository contains a Model Context Protocol server implementation for Reddit that allows AI assistants to access and interact with Reddit content through PRAW (Python Reddit API Wrapper).

What is MCP?
The Model Context Protocol (MCP) is a standard for enabling AI assistants to interface with external services, tools, and data sources. This server implements the MCP specification to provide access to Reddit content.
To know more about MCP, Check this video
Related MCP server: Reddit MCP
Features
Get detailed user information with engagement analysis
Retrieve user comment and post history with flexible filtering
Fetch and analyze top posts from any subreddit
Search for posts across all of Reddit or within specific subreddits using search terms
Get comprehensive subreddit statistics and health metrics
View trending subreddits with growth patterns
Create strategic posts with timing recommendations
Reply to posts and comments with engagement optimization
AI-driven insights and recommendations
Smart response formatting with engagement metrics
Installation
Clone this repository
git clone https://github.com/Arindam200/reddit-mcp.git
cd reddit-mcpConnect to the MCP server
Copy the below json with the appropriate {{PATH}} values:
{ "mcpServers": { "reddit": { "command": "{{PATH_TO_UV}}", // Run `which uv` and place the output here "args": [ "--directory", "{{PATH_TO_SRC}}", // cd into the repo, run `pwd` and enter the output here "run", "server.py" ], "env": { "REDDIT_CLIENT_ID": "your_client_id", "REDDIT_CLIENT_SECRET": "your_client_secret", "REDDIT_USERNAME": "your_username", // Optional for authenticated operations "REDDIT_PASSWORD": "your_password" // Optional for authenticated operations } } } }You can obtain Reddit API credentials by creating an app at Reddit's app preferences page.
For Claude, save this as
claude_desktop_config.jsonin your Claude Desktop configuration directory at:~/Library/Application Support/Claude/claude_desktop_config.jsonFor Cursor, save this as
mcp.jsonin your Cursor configuration directory at:~/.cursor/mcp.jsonRestart Claude Desktop / Cursor
Open Claude Desktop and you should now see Reddit as an available integration.
Or restart Cursor.
Available Tools
The server provides the following tools:
Read-only Tools (require only client credentials):
get_user_info(username)- Get detailed user analysis with engagement insightsget_user_comments(username, sort, time_filter, limit)- Get a user's comment history with filtering optionsget_user_posts(username, sort, time_filter, limit)- Get a user's post/submission history with filtering optionsget_top_posts(subreddit, time_filter, limit)- Get and analyze top postssearch_posts(query, subreddit, sort, time_filter, limit)- Search for posts across Reddit or within a specific subredditget_subreddit_stats(subreddit)- Get comprehensive subreddit analysisget_trending_subreddits()- Get list of trending subredditsget_submission_by_url(url)- Get a Reddit submission by its URLget_submission_by_id(submission_id)- Get a Reddit submission by its ID
Authenticated Tools (require user credentials):
who_am_i()- Get information about the currently authenticated usercreate_post(subreddit, title, content, flair, is_self)- Create an optimized postreply_to_post(post_id, content, subreddit)- Add a reply with engagement insightsreply_to_comment(comment_id, content, subreddit)- Add a strategic reply
Example Queries
Here are some examples of what you can ask an AI assistant connected to this server:
"Who am I on Reddit?" or "Show my Reddit profile"
"Analyze u/spez's Reddit activity"
"Show me u/spez's recent comments"
"Get the top posts by u/poem_for_your_sprog from the past year"
"Show me the most controversial comments by u/username"
"Show me the top posts from r/Python this week"
"Search for posts about 'machine learning' across all of Reddit"
"Find posts about 'beginner tutorials' in r/learnprogramming from this month"
"Get statistics about r/AskReddit"
"What are the trending subreddits right now?"
"Create a post in r/Python about a new project"
"Reply to this post with an insightful comment"
"What's the best time to post in this subreddit?"
Advanced Features
AI-Driven Analysis
The server provides intelligent analysis in several areas:
User Analysis
Engagement patterns
Activity trends
Community influence
Personalized recommendations
Post Analysis
Performance metrics
Engagement quality
Timing optimization
Content impact assessment
Community Analysis
Health indicators
Growth patterns
Activity metrics
Engagement opportunities
Smart Response Formatting
Organized bullet points
Engagement statistics
AI-driven insights
Strategic recommendations
Performance metrics
Authentication
The server supports two levels of authentication:
Read-only Access
Requires:
client_idandclient_secretAllows: Fetching public data, reading posts/comments
Authenticated Access
Requires: All read-only credentials PLUS
usernameandpasswordAllows: All read-only operations PLUS posting and commenting
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Available Tools
15 toolscreate_postA
Create a new post in a subreddit.
Args:
subreddit: Name of the subreddit to post in (with or without 'r/' prefix)
title: Title of the post (max 300 characters)
content: Content of the post (text for self posts, URL for link posts)
flair: Flair to add to the post. Must be an available flair in the subreddit
is_self: Whether this is a self (text) post (True) or link post (False)
Returns:
Dictionary containing information about the created post
Raises:
ValueError: If input validation fails or flair is invalid
RuntimeError: For other errors during post creation
Inputs: subreddit (required), title (required), content (required), flair, +1 more.
get_submission_by_idA
Get a Reddit submission by its ID.
Args:
submission_id: The ID of the Reddit submission to retrieve (can be full URL or just ID)
include_comments: If True, load and return the full comment forest for the post
comment_replace_more_limit: Limit for replacing "MoreComments" objects (0 for none, None for all)
Returns:
Dictionary containing structured submission information with the following structure:
{
'id': str, # Submission ID (e.g., 'abc123')
'title': str, # Submission title
'author': str, # Author's username or '[deleted]' if deleted
'subreddit': str, # Subreddit name
'score': int, # Post score (upvotes - downvotes)
'upvote_ratio': float, # Ratio of upvotes to total votes
'num_comments': int, # Number of comments
'created_utc': float, # Post creation timestamp (UTC)
'url': str, # Full URL to the post
'permalink': str, # Relative URL to the post
'is_self': bool, # Whether it's a self (text) post
'selftext': str, # Content of self post (if any)
'selftext_html': Optional[str], # HTML formatted content
'link_url': str, # URL for link posts (if any)
'domain': str, # Domain of the linked content
'over_18': bool, # Whether marked as NSFW
'spoiler': bool, # Whether marked as spoiler
'stickied': bool, # Whether stickied in the subreddit
'locked': bool, # Whether comments are locked
'archived': bool, # Whether the post is archived
'distinguished': Optional[str], # Distinguishing type (e.g., 'moderator')
'flair': Optional[Dict], # Post flair information if any
'media': Optional[Dict], # Media information if any
'preview': Optional[Dict], # Preview information if available
'awards': List[Dict], # List of awards received
'comments': Optional[List[Dict]], # present if include_comments is True
'metadata': {
'fetched_at': float, # Timestamp when data was fetched
'subreddit_id': str, # Subreddit full ID
'author_id': str, # Author's full ID if available
'is_original_content': bool, # Whether marked as OC
'is_meta': bool, # Whether marked as meta
'is_crosspostable': bool, # Whether can be crossposted
'is_reddit_media_domain': bool, # Whether media is hosted on Reddit
'is_robot_indexable': bool, # Whether search engines should index
'is_created_from_ads_ui': bool, # Whether created via ads UI
'is_video': bool, # Whether the post is a video
'pinned': bool, # Whether the post is pinned in the subreddit
'gilded': int, # Number of times gilded
'total_awards_received': int, # Total number of awards received
'view_count': Optional[int], # View count if available
'visited': bool, # Whether the current user has visited
}
}
Raises:
ValueError: If submission_id is invalid or submission not found
RuntimeError: For other errors during the operation
Inputs: submission_id (required), include_comments, comment_replace_more_limit.
get_submission_by_urlA
Get a Reddit submission by its URL.
Args:
url: The URL of the Reddit submission to retrieve
include_comments: If True, load and return the full comment forest for the post
comment_replace_more_limit: Limit for replacing "MoreComments" objects (0 for none, None for all)
Returns:
Dictionary containing structured submission information with the following structure:
{
'id': str, # Submission ID (e.g., 'abc123')
'title': str, # Submission title
'author': str, # Author's username or '[deleted]' if deleted
'subreddit': str, # Subreddit name
'score': int, # Post score (upvotes - downvotes)
'upvote_ratio': float, # Ratio of upvotes to total votes
'num_comments': int, # Number of comments
'created_utc': float, # Post creation timestamp (UTC)
'url': str, # Full URL to the post
'permalink': str, # Relative URL to the post
'is_self': bool, # Whether it's a self (text) post
'selftext': str, # Content of self post (if any)
'selftext_html': Optional[str], # HTML formatted content
'link_url': str, # URL for link posts (if any)
'domain': str, # Domain of the linked content
'over_18': bool, # Whether marked as NSFW
'spoiler': bool, # Whether marked as spoiler
'stickied': bool, # Whether stickied in the subreddit
'locked': bool, # Whether comments are locked
'archived': bool, # Whether the post is archived
'distinguished': Optional[str], # Distinguishing type (e.g., 'moderator')
'flair': Optional[Dict], # Post flair information if any
'media': Optional[Dict], # Media information if any
'preview': Optional[Dict], # Preview information if available
'awards': List[Dict], # List of awards received
'comments': Optional[List[Dict]], # present if include_comments is True
'metadata': {
'fetched_at': float, # Timestamp when data was fetched
'subreddit_id': str, # Subreddit full ID
'author_id': str, # Author's full ID if available
'is_original_content': bool, # Whether marked as OC
'is_meta': bool, # Whether marked as meta
'is_crosspostable': bool, # Whether can be crossposted
'is_reddit_media_domain': bool, # Whether media is hosted on Reddit
'is_robot_indexable': bool, # Whether search engines should index
'is_created_from_ads_ui': bool, # Whether created via ads UI
'is_video': bool, # Whether the post is a video
'pinned': bool, # Whether the post is pinned in the subreddit
'gilded': int, # Number of times gilded
'total_awards_received': int, # Total number of awards received
'view_count': Optional[int], # View count if available
'visited': bool, # Whether the current user has visited
}
}
Raises:
ValueError: If URL is invalid or submission not found
RuntimeError: For other errors during the operation
Inputs: url (required), include_comments, comment_replace_more_limit.
get_subreddit_infoB
Get information about a subreddit.
Args:
subreddit_name: Name of the subreddit (with or without 'r/' prefix)
Returns:
Dictionary containing subreddit information
Raises:
ValueError: If subreddit_name is invalid or subreddit not found
RuntimeError: For other errors during the operation
Inputs: subreddit_name (required).
get_subreddit_statsA
Get statistics and information about a subreddit.
Args:
subreddit: Name of the subreddit (with or without 'r/' prefix)
Returns:
Dictionary containing structured subreddit information with the following structure:
{
'id': str, # Subreddit ID (e.g., '2qgzt')
'display_name': str, # Subreddit display name (without r/ prefix)
'title': str, # Subreddit title
'public_description': str, # Public description
'description': str, # Full description (can include markdown)
'subscribers': int, # Number of subscribers
'active_user_count': Optional[int], # Currently active users if available
'created_utc': float, # Creation timestamp (UTC)
'over18': bool, # Whether marked as NSFW
'submission_type': str, # Allowed submission types (any, link, self)
'allow_images': bool, # Whether image uploads are allowed
'allow_videos': bool, # Whether video uploads are allowed
'allow_polls': bool, # Whether polls are allowed
'spoilers_enabled': bool, # Whether spoiler tags are enabled
'wikienabled': bool, # Whether wiki is enabled
'user_is_banned': bool, # Whether current user is banned
'user_is_moderator': bool, # Whether current user is a moderator
'user_is_subscriber': bool, # Whether current user is a subscriber
'mod_permissions': List[str], # Moderator permissions if applicable
'metadata': {
'fetched_at': float, # Timestamp when data was fetched
'url': str, # Full URL to the subreddit
'moderators_count': int, # Number of moderators
'rules': List[Dict], # Subreddit rules if available
'features': Dict[str, bool], # Enabled subreddit features
}
}
Raises:
ValueError: If subreddit is invalid or not found
RuntimeError: For other errors during the operation
Inputs: subreddit (required).
get_top_postsA
Get top posts from a subreddit.
Args:
subreddit: Name of the subreddit (with or without 'r/' prefix)
time_filter: Time period to filter posts (e.g. "day", "week", "month", "year", "all")
limit: Number of posts to fetch (1-100)
include_comments: If True, load and return the full comment forest for each post
comment_replace_more_limit: Limit for replacing "MoreComments" objects (0 for none, None for all)
Returns:
Dictionary containing structured post information with the following structure:
{
'subreddit': str, # Subreddit name
'time_filter': str, # The time period used for filtering
'posts': [ # List of posts, each with the following structure:
{
'id': str, # Post ID
'title': str, # Post title
'author': str, # Author's username
'score': int, # Post score (upvotes - downvotes)
'upvote_ratio': float, # Ratio of upvotes to total votes
'num_comments': int, # Number of comments
'created_utc': float, # Post creation timestamp
'url': str, # URL to the post
'permalink': str, # Relative URL to the post
'is_self': bool, # Whether it's a self (text) post
'selftext': str, # Content of self post (if any)
'link_url': str, # URL for link posts (if any)
'over_18': bool, # Whether marked as NSFW
'spoiler': bool, # Whether marked as spoiler
'stickied': bool, # Whether stickied in the subreddit
'locked': bool, # Whether comments are locked
'distinguished': Optional[str], # Distinguishing type (e.g., 'moderator')
'flair': Optional[Dict], # Post flair information if any
'comments': Optional[List[Dict]], # present if include_comments is True
},
...
],
'metadata': {
'fetched_at': float, # Timestamp when data was fetched
'post_count': int, # Number of posts returned
}
}
Raises:
ValueError: If subreddit is invalid or time_filter is not valid
RuntimeError: For other errors during the operation
Inputs: subreddit (required), time_filter, limit, include_comments, +1 more.
get_trending_subredditsB
Get currently trending subreddits.
Args:
limit: Maximum number of trending subreddits to return (1-50)
Returns:
Dictionary containing list of trending subreddits with their basic info
Raises:
ValueError: If limit is invalid
RuntimeError: For errors during the operation
Inputs: limit.
get_user_commentsA
Get a user's comment history.
Args:
username: The username of the Reddit user (with or without 'u/' prefix)
sort: Sort order for comments - one of: "new", "hot", "top", "controversial"
time_filter: Time period to filter comments (e.g. "hour", "day", "week", "month", "year", "all")
limit: Number of comments to return (1-100)
Returns:
Dictionary containing structured comment history with the following structure:
{
'username': str, # The username
'sort': str, # Sort method used
'time_filter': str, # Time filter used
'comments': [ # List of comments
{
'id': str, # Comment ID
'body': str, # Comment text content
'author': str, # Author's username
'subreddit': str, # Subreddit where comment was posted
'score': int, # Comment score (upvotes - downvotes)
'created_utc': float, # Comment creation timestamp
'permalink': str, # Relative URL to the comment
'link_title': str, # Title of the post being commented on
'link_id': str, # ID of the post
'parent_id': str, # ID of parent comment or post
'is_submitter': bool, # Whether commenter is the post author
'stickied': bool, # Whether comment is stickied
'distinguished': Optional[str], # Distinguishing type (e.g., 'moderator')
'edited': bool, # Whether comment has been edited
'gilded': int, # Number of times gilded
'controversiality': int, # Controversy score
'depth': int, # Comment depth in thread (0 for top-level)
},
...
],
'metadata': {
'fetched_at': float, # Timestamp when data was fetched
'comment_count': int, # Number of comments returned
}
}
Raises:
ValueError: If username is invalid, sort method is invalid, or time_filter is invalid
RuntimeError: For other errors during the operation
Inputs: username (required), sort, time_filter, limit.
get_user_infoA
Get information about a Reddit user.
Args:
username: The username of the Reddit user to get info for
Returns:
Dictionary containing user information with the following structure:
{
'username': str, # User's username
'created_utc': float, # Account creation timestamp
'comment_karma': int, # User's comment karma
'link_karma': int, # User's post/link karma
'has_verified_email': bool, # Whether email is verified
'is_mod': bool, # Whether user is a moderator
'is_gold': bool, # Whether user has Reddit premium
'has_subscribed': bool, # Whether user has subscribed to premium
'is_employee': bool, # Whether user is a Reddit employee
'over_18': bool, # Whether user is marked as NSFW
'is_suspended': bool, # Whether account is suspended
'suspension_expiration_utc': Optional[float], # When suspension ends if suspended
'total_karma': int, # Total karma (comments + posts)
'subreddit': Optional[Dict], # User's profile subreddit info if exists
}
Raises:
ValueError: If the username is invalid or not found
RuntimeError: For other errors during the operation
Inputs: username (required).
get_user_postsA
Get a user's post/submission history.
Args:
username: The username of the Reddit user (with or without 'u/' prefix)
sort: Sort order for posts - one of: "new", "hot", "top", "controversial"
time_filter: Time period to filter posts (e.g. "hour", "day", "week", "month", "year", "all")
limit: Number of posts to return (1-100)
Returns:
Dictionary containing structured post history with the following structure:
{
'username': str, # The username
'sort': str, # Sort method used
'time_filter': str, # Time filter used
'posts': [ # List of posts
{
'id': str, # Post ID
'title': str, # Post title
'author': str, # Author's username
'subreddit': str, # Subreddit name
'score': int, # Post score (upvotes - downvotes)
'upvote_ratio': float, # Ratio of upvotes to total votes
'num_comments': int, # Number of comments
'created_utc': float, # Post creation timestamp
'url': str, # Full URL to the post
'permalink': str, # Relative URL to the post
'is_self': bool, # Whether it's a self (text) post
'selftext': str, # Content of self post (if any)
'link_url': str, # URL for link posts (if any)
'domain': str, # Domain of the linked content
'over_18': bool, # Whether marked as NSFW
'spoiler': bool, # Whether marked as spoiler
'stickied': bool, # Whether stickied in the subreddit
'locked': bool, # Whether comments are locked
'distinguished': Optional[str], # Distinguishing type (e.g., 'moderator')
'gilded': int, # Number of times gilded
},
...
],
'metadata': {
'fetched_at': float, # Timestamp when data was fetched
'post_count': int, # Number of posts returned
}
}
Raises:
ValueError: If username is invalid, sort method is invalid, or time_filter is invalid
RuntimeError: For other errors during the operation
Inputs: username (required), sort, time_filter, limit.
join_subredditA
Join (subscribe to) or leave (unsubscribe from) a subreddit.
Args:
subreddit_name: Name of the subreddit to join/leave (with or without 'r/' prefix)
unsubscribe: If True, leave the subreddit instead of joining
Returns:
Dictionary containing information about the action and subreddit
Raises:
ValueError: If subreddit name is invalid or subreddit not found
RuntimeError: For other errors during the operation
Inputs: subreddit_name (required), unsubscribe.
reply_to_commentA
Post a reply to an existing Reddit comment.
Args:
comment_id: The ID of the comment to reply to (can be full URL, permalink, or just ID)
content: The content of the reply (1-10000 characters)
Returns:
Dictionary containing information about the created reply and parent comment
Raises:
ValueError: If input validation fails or comment is not found
RuntimeError: For other errors during reply creation
Inputs: comment_id (required), content (required).
reply_to_postA
Post a reply to an existing Reddit post.
Args:
post_id: The ID of the post to reply to (can be full URL, permalink, or just ID)
content: The content of the reply (1-10000 characters)
subreddit: The subreddit name if known (for validation, with or without 'r/' prefix)
Returns:
Dictionary containing information about the created reply and parent post
Raises:
ValueError: If input validation fails or post is not found
RuntimeError: For other errors during reply creation
Inputs: post_id (required), content (required), subreddit.
search_postsA
Search for Reddit posts using a search query.
Args:
query: The search query/term to search for
subreddit: Optional subreddit to limit search to (with or without 'r/' prefix). If None, searches all of Reddit
sort: Sort order for results - one of: "relevance", "hot", "top", "new", "comments"
time_filter: Time period to filter results (e.g. "hour", "day", "week", "month", "year", "all")
limit: Number of posts to return (1-100)
Returns:
Dictionary containing structured search results with the following structure:
{
'query': str, # The search query used
'subreddit': Optional[str], # Subreddit searched (None if searching all of Reddit)
'sort': str, # Sort method used
'time_filter': str, # Time filter used
'posts': [ # List of matching posts
{
'id': str, # Post ID
'title': str, # Post title
'author': str, # Author's username
'subreddit': str, # Subreddit name
'score': int, # Post score (upvotes - downvotes)
'upvote_ratio': float, # Ratio of upvotes to total votes
'num_comments': int, # Number of comments
'created_utc': float, # Post creation timestamp
'url': str, # URL to the post
'permalink': str, # Relative URL to the post
'is_self': bool, # Whether it's a self (text) post
'selftext': str, # Content of self post (if any)
'link_url': str, # URL for link posts (if any)
'over_18': bool, # Whether marked as NSFW
'spoiler': bool, # Whether marked as spoiler
'stickied': bool, # Whether stickied in the subreddit
'locked': bool, # Whether comments are locked
'distinguished': Optional[str], # Distinguishing type (e.g., 'moderator')
'flair': Optional[Dict], # Post flair information if any
},
...
],
'metadata': {
'fetched_at': float, # Timestamp when data was fetched
'result_count': int, # Number of results returned
'search_scope': str, # "all" or subreddit name
}
}
Raises:
ValueError: If query is empty, sort method is invalid, or time_filter is invalid
RuntimeError: For other errors during the operation
Inputs: query (required), subreddit, sort, time_filter, +1 more.
who_am_iA
Get information about the currently authenticated user.
Returns:
Dictionary containing structured user information with the following structure:
{
'id': str, # Full user ID (e.g., 't2_abc123')
'name': str, # Username
'created_utc': float, # Account creation timestamp
'comment_karma': int, # Comment karma
'link_karma': int, # Post/link karma
'total_karma': int, # Total karma (comments + posts)
'awardee_karma': int, # Karma from awards received
'awarder_karma': int, # Karma from awards given
'has_verified_email': bool, # Whether email is verified
'is_employee': bool, # Whether user is a Reddit employee
'is_friend': bool, # Whether user is a friend
'is_gold': bool, # Whether user has Reddit Premium
'is_mod': bool, # Whether user is a moderator
'is_suspended': bool, # Whether account is suspended
'verified': bool, # Whether account is verified
'has_subscribed': bool, # Whether user has subscribed to Premium
'snoovatar_img': str, # URL to snoovatar image
'icon_img': str, # URL to user's icon
'pref_show_snoovatar': bool, # Whether to show snoovatar
'snoovatar_size': Optional[List[int]], # Snoovatar dimensions
'subreddit': Optional[Dict], # User's profile subreddit info
'metadata': {
'fetched_at': float, # Timestamp when data was fetched
'is_authenticated': bool, # Whether user is authenticated
'is_moderator': bool, # Whether user is a moderator
'has_verified_email': bool, # Whether email is verified
'has_mail': bool, # Whether user has unread messages
'has_mod_mail': bool, # Whether user has mod mail
'has_subscribed': bool, # Whether user has subscribed to Premium
'in_chat': bool, # Whether user is in chat
'in_redesign_beta': bool, # Whether user is in redesign beta
'new_modmail_exists': bool, # Whether user has new modmail
'pref_no_profanity': bool, # Whether to filter profanity
'suspension_expiration_utc': Optional[float], # When suspension ends if suspended
}
}
Raises:
ValueError: If user authentication is not available
RuntimeError: For other errors during the operation
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 15 tools
Every tool has a clearly distinct purpose with no ambiguity. Tools are well-organized around specific resources (posts, subreddits, users, comments) and actions (create, get, search, join), making it easy for an agent to select the right tool. For example, get_submission_by_id and get_submission_by_url serve the same purpose but through different inputs, which is clear from their names and descriptions.
All tools follow a consistent verb_noun pattern with snake_case throughout (e.g., create_post, get_submission_by_id, search_posts). The naming is predictable and readable, with no deviations in style or convention. Tools like get_user_info and who_am_i both retrieve user information but are clearly distinguished by their naming.
With 15 tools, the server is well-scoped for a Reddit API, covering core functionalities like posting, retrieving submissions, managing subreddits, and user interactions. Each tool earns its place without feeling excessive or thin, providing comprehensive coverage for typical Reddit workflows without overwhelming an agent.
The tool set offers complete CRUD/lifecycle coverage for the Reddit domain, including creating posts, retrieving submissions (by ID, URL, search, top posts), managing subreddits (info, stats, joining), user interactions (info, posts, comments), and replying to posts/comments. There are no obvious gaps, and agents can perform end-to-end operations without dead ends.
Maintenance
Related MCP Connectors
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
An MCP server that integrates with Discord to provide AI-powered features.
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
MCP server for OpenAI API (chat completions, image generation, embeddings) via AceDataCloud
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA specialized MCP server that enables AI agents to interact with Reddit, including reading posts, creating content, and managing subreddit configurations.136 npm10Apache 2.0
- AlicenseBqualityDmaintenanceA plug-and-play MCP server that enables AI assistants to browse, search, and read Reddit content through the PRAW library.619MIT
- AlicenseBqualityDmaintenanceAn MCP server that provides both read-only and authenticated access to Reddit content and interactions without requiring a developer API key. It enables users to browse posts, search subreddits, and perform write actions like commenting and voting by leveraging browser session cookies.827 PyPI3-
- AlicenseBqualityDmaintenanceAn MCP server that provides AI agents with full Reddit API capabilities including search, browsing, reading, posting, commenting, voting, editing, and deleting.188 npmMIT