返回 MCP 目录
public公开dns本地运行

reddit-mcp-server

Reddit MCP Server是一个提供Reddit内容获取和创建功能的模型上下文协议服务器,支持通过命令行或HTTP接口与Reddit API交互。

article

README

🚀 Reddit MCP Server ⚙️

Reddit MCP Server 是一个模型上下文协议(MCP),它提供了用于获取和创建Reddit内容的工具。该项目是Alexandros Lekkas的原始 reddit-mcp-server 的一个分支,更新后支持 pnpm、tsup 构建系统和 npx 执行。

🚀 快速开始

本项目提供了一系列工具来与Reddit内容进行交互,支持多种安装和使用方式,下面将详细介绍。

✨ 主要特性

只读工具(客户端凭证)

  • get_reddit_post(subreddit, post_id) - 获取特定的Reddit帖子
  • get_top_posts(subreddit, time_filter, limit) - 获取子版块的热门帖子
  • get_user_info(username) - 获取Reddit用户的信息
  • get_subreddit_info(subreddit_name) - 获取子版块的信息
  • get_trending_subreddits() - 获取当前热门的子版块
  • search_reddit(query, subreddit?, sort?, time_filter?, limit?, type?) - 在Reddit上搜索帖子
  • get_post_comments(post_id, subreddit, sort?, limit?) - 获取特定Reddit帖子的评论
  • get_user_posts(username, sort?, time_filter?, limit?) - 获取特定用户提交的帖子
  • get_user_comments(username, sort?, time_filter?, limit?) - 获取特定用户发表的评论

写入工具(需要用户凭证)

  • create_post(subreddit, title, content, is_self) - 在子版块中创建新帖子
  • reply_to_post(post_id, content, subreddit?) - 回复现有的Reddit帖子

📦 安装指南

通过 Smithery 安装

要通过 Smithery 自动安装适用于 Claude Desktop 的 Reddit 内容集成服务器,请执行以下命令:

npx -y @smithery/cli install reddit-mcp-server --client claude

手动安装

  1. 克隆仓库:
git clone https://github.com/jordanburke/reddit-mcp-server
  1. 这里 创建一个 Reddit 应用,确保选择 "script"。 image
  2. 复制客户端 ID 和客户端密钥。
  3. 根据 .env.example 创建一个 .env 文件,填入 REDDIT_CLIENT_IDREDDIT_CLIENT_SECRET。如果需要发布帖子,还需要填入 REDDIT_USERNAMEREDDIT_PASSWORD
  4. 安装依赖:
pnpm install
  1. 构建项目:
pnpm build
  1. 运行项目并打开检查服务器(http://127.0.0.1:6274/):
pnpm dev

image 8. 如果连接成功,将以下内容添加到 MCP 配置(适用于 Cursor 或 Claude Desktop):

{
  "mcpServers": {
    "reddit": {
      "command": "npx",
      "args": [
        "reddit-mcp-server"
      ],
      "env": {
        "REDDIT_CLIENT_ID": "<YOUR_CLIENT_ID>",
        "REDDIT_CLIENT_SECRET": "<YOUR_CLIENT_SECRET>",
        "REDDIT_USERNAME": "<YOUR_USERNAME_OPTIONAL>",
        "REDDIT_PASSWORD": "<YOUR_PASSWORD_OPTIONAL>"
      },
      "autoApprove": [
        "get_reddit_post",
        "get_top_posts",
        "get_user_info",
        "get_subreddit_info",
        "get_trending_subreddits",
        "search_reddit",
        "get_post_comments",
        "get_user_posts",
        "get_user_comments",
        "create_post",
        "reply_to_post"
      ] 
    }
  }
}

🛠️ 开发

常用命令

# 安装依赖
pnpm install

# 将 TypeScript 编译为 JavaScript
pnpm build

# 运行 MCP 检查器进行开发/测试
pnpm inspect

# 一键构建并运行检查器
pnpm dev

# 运行测试
pnpm test

# 代码检查
pnpm lint

# 代码格式化
pnpm format

版本与帮助信息

# 查看版本
npx reddit-mcp-server --version

# 显示帮助信息
npx reddit-mcp-server --help

# 为 HTTP 服务器生成 OAuth 令牌
npx reddit-mcp-server --generate-token

可流式传输的 MCP 端点(Hono 服务器)

除了标准的 npx 执行方式,该服务器还支持通过 Hono 实现的可流式传输的 MCP 端点,用于直接的 HTTP 集成:

# 在默认端口 3000 启动 Hono 服务器
pnpm serve

# 自定义端口启动
PORT=8080 pnpm serve

# 开发模式,支持自动重载
pnpm serve:dev

服务器将在 http://localhost:3000 可用,MCP 端点为 http://localhost:3000/mcp

OAuth 安全(可选)

HTTP 服务器支持可选的 OAuth 保护,以确保端点的安全性: 生成安全令牌:

npx reddit-mcp-server --generate-token
# 输出:Generated OAuth token: A8f2Kp9x3NmQ7vR4tL6eZ1sW5yB8hC2j

使用生成的令牌启用 OAuth:

export OAUTH_ENABLED=true
export OAUTH_TOKEN="A8f2Kp9x3NmQ7vR4tL6eZ1sW5yB8hC2j"
pnpm serve

进行认证请求:

curl -H "Authorization: Bearer A8f2Kp9x3NmQ7vR4tL6eZ1sW5yB8hC2j" \
     -H "Content-Type: application/json" \
     -d '{"method":"tools/list","params":{}}' \
     http://localhost:3000/mcp

OAuth 配置:

  • OAUTH_ENABLED=true - 启用 OAuth 保护(默认禁用)
  • OAUTH_TOKEN=your-token - 自定义令牌(或使用 --generate-token 生成)
  • 不使用 OAuth 时,服务器无需认证即可访问
  • 健康检查 (/) 始终不受保护;只有 /mcp 需要认证

MCP 客户端配置

对于连接到受 OAuth 保护的服务器的 MCP 客户端,请根据 MCP 授权规范 进行配置: 基于 HTTP 的 MCP 客户端(例如,Web 应用程序):

// 使用 fetch API 的示例
const response = await fetch('http://localhost:3000/mcp', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_TOKEN',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "tools/list",
    params: {}
  })
});

const result = await response.json();

直接 HTTP MCP 客户端:

const client = new MCP.Client({
  transport: new MCP.HTTPTransport({
    url: 'http://localhost:3000/mcp',
    headers: {
      'Authorization': 'Bearer YOUR_TOKEN'
    }
  })
});

自定义 MCP 客户端实现:

import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { HTTPTransport } from '@modelcontextprotocol/sdk/client/http.js';

const transport = new HTTPTransport({
  url: 'http://localhost:3000/mcp',
  headers: {
    'Authorization': 'Bearer YOUR_TOKEN',
    'Content-Type': 'application/json'
  }
});

const client = new Client({
  name: "reddit-client",
  version: "1.0.0"
}, {
  capabilities: {}
});

await client.connect(transport);

重要注意事项:

  • YOUR_TOKEN 替换为生成的 OAuth 令牌
  • 每个对 /mcp 的请求都必须包含授权头
  • 根据 MCP 规范,令牌不得包含在 URI 查询字符串中
  • 在生产环境中使用 HTTPS 以确保令牌的安全传输

对于远程/部署的服务器: 连接到远程 Reddit MCP 服务器(例如,部署在您的基础设施上)时:

// 带有 OAuth 的生产服务器
const response = await fetch('https://your-server.com/mcp', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_TOKEN',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "tools/list",
    params: {}
  })
});

远程服务器的 MCP 客户端配置:

import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { HTTPTransport } from '@modelcontextprotocol/sdk/client/http.js';

// 对于您部署的服务器
const transport = new HTTPTransport({
  url: 'https://your-reddit-mcp.company.com/mcp',
  headers: {
    'Authorization': 'Bearer YOUR_GENERATED_TOKEN',
    'Content-Type': 'application/json'
  }
});

const client = new Client({
  name: "reddit-client",
  version: "1.0.0"
}, {
  capabilities: {}
});

await client.connect(transport);

Claude Desktop/Cursor 与远程服务器(HTTP): 对于远程服务器,您可以使用代理方法:

{
  "mcpServers": {
    "reddit-remote": {
      "command": "node",
      "args": [
        "-e", 
        "const http = require('https'); const req = http.request('https://your-server.com/mcp', {method:'POST',headers:{'Authorization':'Bearer YOUR_TOKEN','Content-Type':'application/json'}}, res => res.pipe(process.stdout)); process.stdin.pipe(req);"
      ],
      "env": {}
    }
  }
}

对于 Claude Desktop/Cursor(stdio 传输): 使用传统的 npx 执行方法时,OAuth 不适用。请使用 stdio 配置:

{
  "mcpServers": {
    "reddit": {
      "command": "npx",
      "args": ["reddit-mcp-server"],
      "env": {
        "REDDIT_CLIENT_ID": "your_client_id",
        "REDDIT_CLIENT_SECRET": "your_client_secret"
      }
    }
  }
}

远程部署示例

部署到您的基础设施并共享 URL:

  1. 生成安全令牌:
npx reddit-mcp-server --generate-token
# 输出:Generated OAuth token: xyz123abc456def789
  1. 在您的服务器上使用 Docker 部署:
docker run -d \
  --name reddit-mcp \
  -p 3000:3000 \
  -e REDDIT_CLIENT_ID=your_reddit_client_id \
  -e REDDIT_CLIENT_SECRET=your_reddit_client_secret \
  -e OAUTH_ENABLED=true \
  -e OAUTH_TOKEN=xyz123abc456def789 \
  ghcr.io/jordanburke/reddit-mcp-server:latest
  1. 与团队共享:
服务器 URL: https://your-server.com/mcp
OAuth 令牌: xyz123abc456def789
  1. 团队成员连接:
const client = new Client(...);
const transport = new HTTPTransport({
  url: 'https://your-server.com/mcp',
  headers: { 'Authorization': 'Bearer xyz123abc456def789' }
});
await client.connect(transport);

这允许与支持基于 HTTP 的 MCP 通信的系统集成,类似于 cq-api 和 agent-todo 的实现。

🐳 Docker 使用

从 GitHub 容器注册表拉取镜像

# 拉取最新镜像
docker pull ghcr.io/jordanburke/reddit-mcp-server:latest

# 拉取特定版本
docker pull ghcr.io/jordanburke/reddit-mcp-server:v1.0.10

使用 Docker 运行

# 运行 HTTP 服务器(推荐)
docker run -d \
  --name reddit-mcp \
  -p 3000:3000 \
  -e REDDIT_CLIENT_ID=your_client_id \
  -e REDDIT_CLIENT_SECRET=your_client_secret \
  -e REDDIT_USERNAME=your_username \
  -e REDDIT_PASSWORD=your_password \
  ghcr.io/jordanburke/reddit-mcp-server:latest

# 启用 OAuth 运行(安全)
docker run -d \
  --name reddit-mcp \
  -p 3000:3000 \
  -e REDDIT_CLIENT_ID=your_client_id \
  -e REDDIT_CLIENT_SECRET=your_client_secret \
  -e OAUTH_ENABLED=true \
  -e OAUTH_TOKEN=your_generated_token \
  ghcr.io/jordanburke/reddit-mcp-server:latest

# 使用自定义端口运行
docker run -d \
  --name reddit-mcp \
  -p 8080:3000 \
  --env-file .env \
  ghcr.io/jordanburke/reddit-mcp-server:latest

# 使用 Docker 生成令牌
docker run --rm \
  ghcr.io/jordanburke/reddit-mcp-server:latest \
  node dist/bin.js --generate-token

# 作为 stdio MCP 服务器运行(用于直接集成)
docker run -it \
  --env-file .env \
  ghcr.io/jordanburke/reddit-mcp-server:latest \
  node dist/index.js

本地构建

# 构建镜像
docker build -t reddit-mcp-server .

# 运行本地构建的镜像
docker run -d \
  --name reddit-mcp \
  -p 3000:3000 \
  --env-file .env \
  reddit-mcp-server

Docker Compose 示例

version: '3.8'

services:
  reddit-mcp:
    image: ghcr.io/jordanburke/reddit-mcp-server:latest
    ports:
      - "3000:3000"
    environment:
      - REDDIT_CLIENT_ID=${REDDIT_CLIENT_ID}
      - REDDIT_CLIENT_SECRET=${REDDIT_CLIENT_SECRET}
      - REDDIT_USERNAME=${REDDIT_USERNAME}
      - REDDIT_PASSWORD=${REDDIT_PASSWORD}
      # 可选的 OAuth 设置
      - OAUTH_ENABLED=${OAUTH_ENABLED:-false}
      - OAUTH_TOKEN=${OAUTH_TOKEN}
    restart: unless-stopped

📚 致谢

help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端