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 installed
Maintenance
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
Reddit MCP server: search posts, subreddit feeds, comments & user profiles as JSON. No API key.
Reddit MCP — public Reddit data via JSON endpoints (no auth required)
Reddit & X data for AI agents over MCP. Semantic search, hosted, no Reddit API.
Read-only Reddit search API for AI agents: posts, comments, comment trees, subreddit rules.
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.81The Unlicense
- FlicenseNot gradedqualityDmaintenanceA read-only Model Context Protocol server that enables browsing subreddits, searching within subreddits, retrieving comment trees, and looking up user activity on Reddit via natural language.
- 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.121MIT
- AlicenseNot gradedqualityCmaintenanceRead-only MCP server for public Reddit content using TypeScript. Enables listing posts, fetching post details and comments, and searching Reddit.322MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/pmsorhaindo/reddit-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server