reddit-mcp
reddit-mcp
MCP-коннектор для Reddit Data API в режиме только для чтения для OAuth через connect-card Cursor / Grok Bot.
Работает как Cloudflare Worker, который использует MCP Streamable HTTP и пробрасывает токен Authorization: Bearer вызывающей стороны на https://oauth.reddit.com.
Репозиторий: https://github.com/pmsorhaindo/reddit-mcp
Архитектура
Cursor / Grok Bot
│ OAuth (connect-card) against Reddit authorize/token
│ then MCP JSON-RPC with Bearer access token
▼
Cloudflare Worker (this repo)
│ POST /mcp → tools/list, tools/call
│ GET /.well-known/oauth-* → discovery pointing at Reddit
▼
https://oauth.reddit.com (User-Agent from env, Bearer passthrough)Маршрут | Назначение |
| Проверка живости (liveness) + карта эндпоинтов |
| MCP Streamable HTTP (JSON-RPC: |
| Метаданные OAuth AS (authorize/token Reddit) |
| Метаданные защищённого ресурса для этого URL MCP |
| Только лендинг для разработки — не обменивает коды |
Почему минимальный JSON-RPC (а не полный MCP SDK)?
@modelcontextprotocol/sdk изначально ориентировался на Node.js-транспорты. Этот Worker реализует нативный для Workers, лёгкий интерфейс Streamable HTTP JSON-RPC (initialize / tools/list / tools/call), который подходит Cursor/Grok для вызова инструментов, без Durable Objects и хранилищ сессий. Это согласуется со сквозной передачей Bearer-токена: Worker никогда не хранит refresh-токены Reddit.
Инструменты
Tool | Reddit API | Scopes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Все инструменты возвращают компактный JSON (текстовые поля усекаются). limit по умолчанию — 25, максимум — 100.
Rate Limiting
Исходящие вызовы к Reddit сериализуются в рамках каждого изолята Worker (цепочка промисов).
Заголовки ответа
X-Ratelimit-Remaining/X-Ratelimit-Resetучитываются перед следующим вызовом.HTTP 429 / 503 вызывают ограниченные повторные попытки с
Retry-Afterили экспоненциальной задержкой.
Безопасность секретов
Никогда не коммитьте настоящие секреты.
Надёжный
.gitignoreпокрывает.env,.dev.vars,.wrangler/,node_modules/,dist/,credentials*.json,.mcp-auth/.Коммитятся только примеры env-файлов:
.dev.vars.example,.env.example.В
wrangler.tomlнет встроенных секретов.Ошибки и
consoleлоги никогда не включают заголовкиAuthorization, токены или секретные значения env.Payload ошибок инструментов — только статус/сообщение, без тел ответов вышестоящих сервисов, которые могут засветить учётные данные.
Related MCP server: reddit-mcp
Настройка приложения Reddit
Создайте Reddit app на https://www.reddit.com/prefs/apps (тип web app или installed app — зависит от вашего клиента).
Добавьте redirect URI:
http://localhost:8787/callback— локальный wrangler / ручное тестированиеhttps://www.cursor.com/agents/mcp/oauth/callback— connect-card Cursor
Запросите scopes (через запятую в authorize URL Reddit):
identity,read,mysubreddits,history
Запишите
client_id/client_secretдля OAuth-клиента (Cursor / ваш секрет-менеджер). Не помещайте их в этот репозиторий или вwrangler.toml.
OAuth discovery assumptions
Файл
/.well-known/oauth-authorization-serverобъявляет:authorization_endpoint:https://www.reddit.com/api/v1/authorizetoken_endpoint:https://www.reddit.com/api/v1/access_token
Этот Worker не выполняет обмен authorization-code и не хранит refresh-токены.
Cursor/Grok выполняют OAuth с Reddit (используя учётные данные приложения Reddit, которые вы настроили в клиенте), а затем отправляют
Authorization: Bearer <access_token>в MCP-запросах.issuerв метаданных — это origin этого Worker, чтобы MCP-клиенты могли найти документацию по базовому URL MCP; authorize/token по-прежнему выполняются на Reddit.Reddit scopes традиционно разделяются запятыми в authorize URL — клиенты должны объединять их соответственно.
Деплой на Cloudflare
Предпосылки: Node 22+, аккаунт Cloudflare, Wrangler авторизован (npx wrangler login).
git clone https://github.com/pmsorhaindo/reddit-mcp.git
cd reddit-mcp
npm install
# Local secrets (gitignored)
cp .dev.vars.example .dev.vars
# edit USER_AGENT — must identify you per Reddit API rules
npm run typecheck
npm run dev # http://127.0.0.1:8787
# Production secret (not committed)
npx wrangler secret put USER_AGENT
npm run deployПример формата USER_AGENT (только плейсхолдер):
cloudflare-worker:reddit-mcp:0.1.0 (by /u/YOUR_REDDIT_USERNAME)После деплоя запомните URL на workers.dev или кастомный домен, например https://reddit-mcp.<account>.workers.dev.
Добавление MCP-сервера (Cursor / Grok)
Настройте AddMcpServer (или их аналог) со connect-card:
Поле | Значение |
URL |
|
Auth | OAuth (connect-card) |
Scopes |
|
Клиент должен использовать ваш Reddit app client id/secret и redirect URI Cursor выше. После авторизации, вызовы инструментов MCP должны включать access-токен Reddit в Bearer-заголовке; этот Worker передаёт его дальше.
Смоук-тесты
Replace $BASE and $TOKEN locally — не коммитьте токены.
BASE=http://127.0.0.1:8787
TOKEN=reddit_access_token_here
# Health
curl -sS "$BASE/health"
# OAuth metadata
curl -sS "$BASE/.well-known/oauth-authorization-server"
curl -sS "$BASE/.well-known/oauth-protected-resource"
# MCP initialize
curl -sS -X POST "$BASE/mcp" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"smoke","version":"0"}}}'
# tools/list
curl -sS -X POST "$BASE/mcp" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
# tools/call get_me (requires valid Bearer)
curl -sS -X POST "$BASE/mcp" \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $TOKEN" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_me","arguments":{}}}'Ожидается: результат JSON-RPC; get_me возвращает компактные поля профиля. Отсутствие Bearer → ошибка JSON-RPC Unauthorized без утечки заголовков.
Скрипты
Скрипт | Команда |
|
|
|
|
|
|
Вне области видимости
Публикация, голосование, сообщения, модерация или Ads API
Хранение refresh-токенов Reddit или client secrets на Worker
Выполнение обмена OAuth-кода на
/callbackПолные MCP resources/prompts/sampling/elicitation sessions
Мультитенантные token vaults / Durable Object session stores
Гарантия глобальной координации rate-limit между изолятами (лимиты — на изолят + заголовки Reddit)
Лицензия
Приватная / не публикуется, если вы не добавите файл лицензии.
This server cannot be deployed
Maintenance
Related MCP Connectors
Reddit MCP server: search posts, subreddit feeds, comments & user profiles as JSON. No API key.
Reddit API as MCP tools: search, subreddits, posts, comments, users, monitors, webhooks, feedback.
Search, organize, and chat with your saved Reddit posts from Claude, Cursor, and any MCP client.
Hosted X (Twitter) MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Related MCP Servers
- 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.83-
- AlicenseNot gradedqualityDmaintenanceA read-only MCP server that connects to the Reddit Data API to search posts, browse subreddits, read comments, view user profiles, and check trending content through the Model Context Protocol.74 npm2MIT
- AlicenseNot gradedqualityDmaintenanceRead-only MCP server for public Reddit content using TypeScript. Enables listing posts, fetching post details and comments, and searching Reddit.10 npm2MIT
- AlicenseNot gradedqualityBmaintenanceA local, read-only Reddit MCP server that provides tools for searching posts, retrieving posts/comments, subreddit information, and user content via the official Reddit Data API with caching and privacy-focused features.-