Reddit MCP Server
# MCP Reddit Server
A Model Context Protocol (MCP) server that provides read-only access to Reddit's API through a standardized interface. This server focuses on content discovery and analysis without requiring OAuth authentication.
## ๐ Features
- **7 Read-Only Tools**: Comprehensive Reddit content access without authentication
- **No OAuth Required**: Works immediately without any setup or configuration
- **Type-Safe Architecture**: Full TypeScript with Zod schema validation and z.infer types
- **Error Handling**: Robust error handling with dynamic troubleshooting tips
- **Clean Code Patterns**: Consistent tool handlers with reduced boilerplate
- **MCP Standard**: Compliant with Model Context Protocol specifications
- **Smart Defaults**: Intelligent parameter defaults for better user experience
## ๐ No Authentication Required
This server provides **read-only access** to Reddit's public API without requiring any authentication. All tools work immediately without OAuth setup or API credentials.
### Reddit API Access
The server uses Reddit's public API endpoints that don't require authentication:
- **Public Posts**: Access to all public subreddit posts
- **Public Comments**: Access to all public comments
- **Public Profiles**: Access to public user information
- **Public Subreddits**: Access to subreddit information and metadata
## ๐ ๏ธ Installation
1. **Clone the repository**:
```bash
git clone <repository-url>
cd mcp-reddit
```
2. **Install dependencies**:
```bash
npm install
```
3. **Build the project**:
```bash
npm run build
```
4. **Start the server**:
```bash
npm start
```
## โ๏ธ Configuration
No configuration required! The server works immediately without any setup.
### Optional Environment Variables
You can create a `.env` file for optional configuration:
```env
# Optional: Custom User-Agent (recommended)
REDDIT_USER_AGENT=Your-App-Name/1.0.0 (by /u/YourUsername)
# Optional: Request timeout
TIMEOUT_SECONDS=30
```
### User-Agent String
While not required, it's recommended to set a custom User-Agent string to identify your application:
- Format: `AppName/Version (by /u/YourUsername)`
- Example: `MCP-Reddit-Server/1.0.0 (by /u/YourUsername)`
## ๐งช Testing
### Using MCP Inspector
1. **Start MCP Inspector**:
```bash
npx @modelcontextprotocol/inspector node dist/index.js
```
2. **Open browser**: http://localhost:6274
3. **Test tools**: Use the comprehensive test data in `test-data.json`
### Quick Start Testing
All tools work immediately without any setup:
1. **`get_subreddit_posts`** - Get posts from any subreddit
2. **`search_reddit`** - Search across Reddit or specific subreddits
3. **`get_user_profile`** - Get user profile information
4. **`get_subreddit_info`** - Get subreddit details
5. **`get_post_comments`** - Get comments for any post
6. **`get_trending_subreddits`** - Get trending subreddits
7. **`get_cross_posts`** - Find crossposts of a post
## ๐ฏ Available Tools
### ๐ Read-Only Tools (7 tools - No Authentication Required)
1. **`get_subreddit_posts`** - Get posts from a subreddit with sorting options
2. **`search_reddit`** - Search for posts across Reddit or within specific subreddits
3. **`get_user_profile`** - Get detailed profile information for any Reddit user
4. **`get_subreddit_info`** - Get comprehensive subreddit information
5. **`get_post_comments`** - Get comments for a specific post with sorting
6. **`get_trending_subreddits`** - Get trending and popular subreddits
7. **`get_cross_posts`** - Find crossposts of a specific post
## ๐ Tool Usage Examples
### Read-Only Tools (No Authentication Required)
#### Get Subreddit Posts
```json
{
"name": "get_subreddit_posts",
"arguments": {
"subreddit": "programming",
"sort": "hot"
}
}
```
#### Search Reddit
```json
{
"name": "search_reddit",
"arguments": {
"query": "python tutorial",
"subreddit": "learnprogramming"
}
}
```
#### Get User Profile
```json
{
"name": "get_user_profile",
"arguments": {
"username": "spez"
}
}
```
#### Get Subreddit Info
```json
{
"name": "get_subreddit_info",
"arguments": {
"subreddit": "programming"
}
}
```
#### Get Post Comments
```json
{
"name": "get_post_comments",
"arguments": {
"post_id": "1n1nlse",
"sort": "best"
}
}
```
#### Get Trending Subreddits
```json
{
"name": "get_trending_subreddits",
"arguments": {}
}
```
#### Get Cross Posts
```json
{
"name": "get_cross_posts",
"arguments": {
"post_id": "1n1nlse"
}
}
```
### ๐ง Tool Features
- **Smart Defaults**: Intelligent parameter defaults for better UX
- **Type Safety**: Full TypeScript validation with Zod schemas
- **Error Handling**: Comprehensive error messages with troubleshooting tips
- **Rate Limiting**: Built-in protection against API rate limits
- **Inline Documentation**: Detailed descriptions with examples for each tool
## ๐ Getting Started Workflow
### Step 1: Setup and Build
```bash
npm install
npm run build
```
### Step 2: Start MCP Inspector
```bash
npx @modelcontextprotocol/inspector node dist/index.js
```
### Step 3: Open Browser
Navigate to http://localhost:6274
### Step 4: Test All Tools
All tools work immediately without any setup:
1. **`get_trending_subreddits`** - See what's popular on Reddit
2. **`get_subreddit_info`** - Get details about any subreddit
3. **`get_subreddit_posts`** - Browse posts from any subreddit
4. **`search_reddit`** - Search for content across Reddit
5. **`get_user_profile`** - Get information about any Reddit user
6. **`get_post_comments`** - Read comments on any post
7. **`get_cross_posts`** - Find crossposts of any post
## ๐ Rate Limiting
### Rate Limits
- **Public API**: 60 requests per minute (Reddit default)
- **Built-in Protection**: Server includes rate limiting to prevent API abuse
- **Header Monitoring**: Automatically reads `X-Ratelimit-Remaining` and `X-Ratelimit-Reset` headers
- **Smart Warnings**: Logs warnings when approaching rate limits
- **Graceful Handling**: Returns helpful error messages when rate limits are exceeded
## ๐จ Troubleshooting
### Common Issues
1. **403 Forbidden**
- Check User-Agent string format in `.env` file
- Ensure User-Agent follows Reddit's guidelines
- Verify app is not suspended on Reddit
2. **Rate Limit Exceeded**
- Server automatically monitors rate limits
- Check console for rate limit warnings
- Wait for the reset time shown in error messages
- Consider implementing request queuing for high-volume usage
3. **404 Not Found**
- Verify subreddit name is correct (without r/ prefix)
- Check if post ID is valid
- Ensure username exists on Reddit
### Debug Steps
1. **Test with MCP Inspector**:
```bash
npx @modelcontextprotocol/inspector node dist/index.js
```
2. **Verify Environment** (optional):
```bash
cat .env
```
3. **Test All Tools**:
- Start with `get_trending_subreddits` to verify basic connectivity
- Try `get_subreddit_posts` with popular subreddits like "programming"
- Use `search_reddit` to test search functionality
## ๐๏ธ Technical Improvements
### Code Quality Enhancements
- **Type Safety**: All tools now use `z.infer<typeof Schema>` for compile-time type checking
- **Consistent Patterns**: Unified `createToolHandler` wrapper eliminates boilerplate try-catch blocks
- **Magic Number Constants**: Replaced hardcoded values with named constants for better maintainability
- **Error Handling**: Dynamic error messages with context-specific troubleshooting tips
### Architecture Improvements
- **Rate Limit Intelligence**: Real-time monitoring of Reddit API rate limit headers
- **Smart Defaults**: Intelligent parameter defaults based on tool context
- **Clean Code**: Consistent patterns and reduced boilerplate
### Developer Experience
- **Inline Documentation**: Comprehensive tool descriptions with examples and usage patterns
- **TypeScript Strict Mode**: Full type safety with strict TypeScript configuration
- **Consistent Error Responses**: Standardized error format across all tools
- **Build Validation**: Automated TypeScript compilation with error checking
## ๐ Project Structure
```
mcp-reddit/
โโโ src/
โ โโโ services/
โ โ โโโ reddit-api.ts # Reddit API service
โ โโโ types/
โ โ โโโ index.ts # TypeScript types and Zod schemas
โ โโโ index.ts # Main MCP server with 7 read-only tools
โโโ test-data.json # Comprehensive test data for all tools
โโโ MCP_TEST_DATA.md # Detailed testing guide
โโโ QUICK_START.md # Quick start guide
โโโ .env # Optional environment variables
โโโ env.example # Environment template
โโโ README.md # This file
```
## ๐ค Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull request
## ๐ License
This project is licensed under the MIT License.
## ๐ Links
- [Reddit API Documentation](https://www.reddit.com/dev/api)
- [Model Context Protocol](https://modelcontextprotocol.io/)
- [Reddit App Preferences](https://www.reddit.com/prefs/apps)
- [Reddit App Preferences](https://www.reddit.com/prefs/apps)TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose targeting specific Reddit entities or actions: crossposts, post comments, subreddit info, subreddit posts, trending subreddits, user profiles, and search. There is no overlap in functionality, and the descriptions clearly differentiate what each tool does, making misselection unlikely.
All tool names follow a consistent verb_noun pattern using snake_case, starting with 'get_' for retrieval operations or 'search_' for search functionality. This uniformity makes the tool set predictable and easy to understand, with no deviations in naming conventions.
With 7 tools, the count is well-scoped for a Reddit server, covering core read-only operations like fetching posts, comments, subreddits, users, and search. Each tool serves a unique and necessary function without bloat, fitting typical expectations for such a domain.
The tool set provides comprehensive read-only coverage for browsing Reddit content, including posts, comments, subreddits, users, and search. A minor gap exists in write operations (e.g., posting, voting, commenting), but for a retrieval-focused server, the surface is nearly complete and supports common agent workflows without dead ends.