Reddit内容获取服务

一个全面的Reddit内容获取服务,提供8种工具用于获取Reddit内容,支持REST API和Azure部署,适用于Claude Desktop、Microsoft Copilot Studio等MCP兼容客户端。

  • by Aanerud
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Aanerud/Reddit-MCP

使用说明

MCP Reddit服务器

全面的 模型上下文协议(MCP) Reddit的服务器。提供8个用于获取Reddit内容的工具、完整的REST API和Azure部署支持。适用于Claude Desktop、Microsoft Copilot Studio、Power Automation和任何兼容MCP的客户端。

特性

  • 8个Reddit工具:从任何子版块获取热门、新、上升和热门帖子
  • 主题聚合:按主题从多个相关子版块获取帖子
  • 评论树:获取带有线程评论的帖子内容
  • 子文件夹信息:获取订阅者数量和描述
  • 多种连接方式:
    • MCP流式HTTP(适用于Copilot Studio、Claude Desktop)
    • 带有OpenAPI规范的REST API(用于Power Automate,直接HTTP)
  • Azure部署:Docker+容器应用部署开箱即用

可用工具

工具 说明
reddit_hot 从subreddit获取热门帖子
reddit_new 从subreddit获取最新帖子
reddit_rising 获取上升/趋势帖子
reddit_top 按时间段获取热门帖子
reddit_front 获取Reddit首页帖子
reddit_post 获取带有评论的帖子内容
reddit_topic 从主题相关的子版块获取帖子
reddit_info 获取subreddit信息(订阅者、描述)

快速开始

先决条件

  1. Reddit API凭据:在以下位置创建应用程序https://www.reddit.com/prefs/apps

    • 选择“脚本”类型
    • 将重定向URI设置为 http://localhost:8080
    • 记下您的客户端ID和客户端密码
  2. 生成刷新令牌:

    pip install praw
    python get_refresh_token.py
    
  3. 创建 .env 文件:

    cp .env.example .env
    # Edit .env with your credentials
    

本地开发

本地运行

# Install dependencies
pip install uv
uv sync

# Run the server
uv run uvicorn mcp_reddit.web_server:app --host 0.0.0.0 --port 8000

服务器将在以下位置可用:

  • REST API:http://localhost:8000
  • API文件:http://localhost:8000/docs
  • MCP端点:http://localhost:8000/mcp/(需要MCP_API_KEY)

使用克劳德桌面(本地)

添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "reddit": {
      "command": "uv",
      "args": ["run", "uvicorn", "mcp_reddit.web_server:app", "--port", "8000"],
      "cwd": "/path/to/mcp-reddit",
      "env": {
        "REDDIT_CLIENT_ID": "your_client_id",
        "REDDIT_CLIENT_SECRET": "your_client_secret",
        "REDDIT_REFRESH_TOKEN": "your_refresh_token",
        "MCP_API_KEY": "your_api_key"
      }
    }
  }
}

或使用 mcp-remote 要连接到正在运行的服务器,请执行以下操作:

{
  "mcpServers": {
    "reddit": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://localhost:8000/mcp/",
        "--header",
        "X-API-Key: your_api_key"
      ]
    }
  }
}

Azure部署

选项1:自动部署脚本

chmod +x deploy-to-azure.sh
./deploy-to-azure.sh

脚本将:

  1. 创建资源组
  2. 创建Azure容器注册表
  3. 构建并推送Docker镜像
  4. 创建容器应用程序环境
  5. 使用您的Reddit凭据部署容器

选项2:手动部署

1.创建Azure资源

# Set variables
RESOURCE_GROUP="mcp-reddit-rg"
LOCATION="westeurope"  # or your preferred region
ACR_NAME="yourregistryname"

# Create resource group
az group create --name $RESOURCE_GROUP --location $LOCATION

# Create container registry
az acr create --name $ACR_NAME --resource-group $RESOURCE_GROUP --sku Basic --admin-enabled true

# Create container apps environment
az containerapp env create --name mcp-reddit-env --resource-group $RESOURCE_GROUP --location $LOCATION

2.构建和推送图像

az acr build --registry $ACR_NAME --image mcp-reddit:latest --file Dockerfile.azure .

3.部署容器应用程序

# Get ACR password
ACR_PASSWORD=$(az acr credential show --name $ACR_NAME --query "passwords[0].value" -o tsv)

# Generate MCP API key
MCP_API_KEY=$(python -c "import secrets; print(secrets.token_urlsafe(32))")

# Create container app
az containerapp create \
  --name mcp-reddit-server \
  --resource-group $RESOURCE_GROUP \
  --environment mcp-reddit-env \
  --image $ACR_NAME.azurecr.io/mcp-reddit:latest \
  --registry-server $ACR_NAME.azurecr.io \
  --registry-username $ACR_NAME \
  --registry-password "$ACR_PASSWORD" \
  --target-port 8000 \
  --ingress external \
  --min-replicas 1 \
  --max-replicas 5 \
  --cpu 0.5 \
  --memory 1Gi \
  --secrets \
    reddit-client-id="YOUR_CLIENT_ID" \
    reddit-client-secret="YOUR_CLIENT_SECRET" \
    reddit-refresh-token="YOUR_REFRESH_TOKEN" \
    mcp-api-key="$MCP_API_KEY" \
  --env-vars \
    REDDIT_CLIENT_ID=secretref:reddit-client-id \
    REDDIT_CLIENT_SECRET=secretref:reddit-client-secret \
    REDDIT_REFRESH_TOKEN=secretref:reddit-refresh-token \
    MCP_API_KEY=secretref:mcp-api-key

4.获取您的服务器URL

az containerapp show --name mcp-reddit-server --resource-group $RESOURCE_GROUP --query "properties.configuration.ingress.fqdn" -o tsv

5.(可选)添加自定义域

# Add custom domain
az containerapp hostname add \
  --name mcp-reddit-server \
  --resource-group $RESOURCE_GROUP \
  --hostname your-domain.com

# Bind SSL certificate
az containerapp hostname bind \
  --name mcp-reddit-server \
  --resource-group $RESOURCE_GROUP \
  --hostname your-domain.com \
  --environment mcp-reddit-env \
  --validation-method CNAME

连接方式

1.MCP可流式HTTP(经过身份验证)

对于 微软复制品工作室 和 克劳德桌面版:

设置 值
URL https://your-server.com/mcp/
Auth neneneba API密钥
头球 X-API-Key

重要:URL必须有尾随斜线(/mcp/)

2.REST API/OpenAPI(无需验证)

对于 Power Automate 和 直接HTTP调用:

设置 值
基本URL https://your-server.com
OpenAPI规范 https://your-server.com/openapi-3.0.json
文件 https://your-server.com/docs

REST端点:

  • POST /api/hot-threads -获取热门帖子
  • POST /api/post-content -获取带有评论的帖子
  • POST /api/topic-latest -按主题获取帖子
  • POST /api/front-page -获取头版帖子
  • POST /api/subreddit-posts-by-time -按时间获取热门帖子
  • POST /api/subreddit-new-posts -获取新帖子
  • POST /api/subreddit-rising-posts -获得上升职位
  • POST /api/subreddit-info -获取subreddit信息
  • GET /api/topics -列出可用主题

配置

环境变量

变量 必填 描述
REDDIT_CLIENT_ID 是 Reddit应用程序客户端ID
REDDIT_CLIENT_SECRET 是 Reddit应用程序客户端机密
REDDIT_REFRESH_TOKEN 是 Reddit OAuth刷新令牌
MCP_API_KEY 没有用于MCP端点身份验证的 API密钥

主题类别

服务器包括预定义的主题类别 list.txt:

  • 编程
  • 科技新闻
  • AI/ML
  • 游戏
  • 科学
  • 还有更多。..

编辑 list.txt 自定义主题到subreddit的映射。


更新部署

# Rebuild image
az acr build --registry $ACR_NAME --image mcp-reddit:latest --file Dockerfile.azure .

# Force new revision
az containerapp update \
  --name mcp-reddit-server \
  --resource-group $RESOURCE_GROUP \
  --image $ACR_NAME.azurecr.io/mcp-reddit:latest \
  --set-env-vars FORCE_UPDATE="$(date +%s)"

清理

# Delete all Azure resources
az group delete --name mcp-reddit-rg --yes --no-wait

致谢

这个项目最初的灵感来自 mcp reddit 通过 adhikasp,教我们如何通过MCP与Reddit API接口。随着时间的推移,该项目大大超出了原来的范围——添加了完整的REST API、跨子版块的主题聚合、Azure部署,并从2个工具扩展到8个——并成为了自己的独立项目。

许可证

AGPL-3.0许可证-请参阅 许可证 了解详情。