Reddit API集成MCP服务器
这是一个MCP(模型上下文协议)服务器,它使用PRAW(Python Reddit API包装器)提供Reddit API集成,用于从子版块获取帖子、评论和讨论。它使用D402支付协议进行安全访问控制。
特性
- 🔧 MCP协议:基于模型上下文协议构建,实现无缝的人工智能集成
- 📊 Reddit集成:使用PRAW(Python Reddit API Wrapper)进行全面的Reddit数据访问
- 💳 D402支付协议:使用HTTP 402支付协议进行安全访问
- 🔍 高级搜索:关键字过滤和subreddit搜索功能
- 📈 趋势子漩涡:发现受欢迎和活跃的社区
- 🐳 Docker支持:使用Docker和Docker Compose轻松部署
- ⚡ 异步操作:内置FastMCP,实现高效异步处理
- 🎯 生产就绪:针对生产环境进行了优化
可用工具
此服务器为Reddit数据访问提供以下工具:
1. get_subreddit_posts
通过可选的筛选从特定的subreddit获取帖子。
参数:
subreddit_name(string):子版块的名称(不含r/)limit(整数):要获取的最大帖子数(最大100,默认值:25)time_filter(string):时间过滤器(小时、天、周、月、年、全部,默认值:天)sort_by(string):排序方法(热、新、顶部、上升、默认:热)
退货:
- 带有元数据的帖子(标题、作者、分数、评论数等)
付款: 每个请求0.00001个令牌
2. search_subreddit_posts
使用关键字在特定的subreddit中搜索帖子。
参数:
subreddit_name(string):子版块的名称(不含r/)query(string):搜索查询/关键字limit(整数):要获取的最大帖子数(最大100,默认值:25)time_filter(string):时间过滤器(小时、天、周、月、年、全部,默认值:月)sort_by(string):排序方法(相关性、热门、顶部、新、评论、默认:相关性)
退货:
- 带有帖子元数据的搜索结果
付款: 每个请求0.00001个令牌
3. get_post_comments
从特定的Reddit帖子中获取评论。
参数:
post_id(字符串):Reddit帖子IDlimit(整数):要获取的最大评论数(默认值:50)sort_by(string):排序方法(top、best、new、conference、old、qa、default:top)
退货:
- 带有元数据的评论(正文、作者、分数等)
付款: 每次请求0.000015个令牌
4. get_trending_subreddits
获取热门/流行的子版块。
参数:
limit(整数):要获取的最大子版块数(默认值:25)
退货:
- 带有元数据(订阅者、描述等)的热门子版块
付款: 每个请求0.00001个令牌
5. get_api_info
获取有关Reddit API集成服务及其状态的信息。
退货:
- 服务信息、身份验证状态和可用端点
付款: 每个请求0.000005个令牌
安装
使用Docker(推荐)
- 克隆此存储库:
git clone https://github.com/Traia-IO/reddit-api-integration-mcp-server.git
cd reddit-api-integration-mcp-server- 设置环境变量:
export SERVER_ADDRESS="your-iatp-wallet-address"
export MCP_OPERATOR_PRIVATE_KEY="your-operator-key"
export REDDIT_CLIENT_ID="your-reddit-client-id"
# Note: client_secret is provided by users via D402 API key, not server environment- 使用Docker运行:
./run_local_docker.sh使用Docker Compose
- 创建一个
.env使用您的配置文件:
# Server Configuration
PORT=8000
STAGE=MAINNET
LOG_LEVEL=INFO
# Reddit API Configuration
REDDIT_CLIENT_ID=your-reddit-client-id
# Note: client_secret is provided by users via D402 API key
# D402 Payment Protocol Configuration
SERVER_ADDRESS=your-iatp-wallet-address
MCP_OPERATOR_PRIVATE_KEY=your-operator-key
MCP_OPERATOR_ADDRESS=your-operator-address
D402_FACILITATOR_URL=https://test-facilitator.d402.net
D402_FACILITATOR_API_KEY=your-facilitator-api-key
D402_TESTING_MODE=false
NETWORK=sepolia- 启动服务器:
docker-compose up手动安装
- 使用安装依赖项
uv:
uv pip install -e .- 运行服务器:
SERVER_ADDRESS="your-iatp-wallet-address" \
REDDIT_CLIENT_ID="your-reddit-client-id" \
uv run python server.py注:用户将提供 client_secret 发出请求时通过D402 API密钥
用法
健康检查
测试服务器是否正在运行:
python mcp_health_check.py使用CrewAI
from traia_iatp.mcp.traia_mcp_adapter import create_mcp_adapter
# Connect to the MCP server with payment
with create_mcp_adapter(
url="http://localhost:8000/mcp/"
) as tools:
# Use the tools
for tool in tools:
print(f"Available tool: {tool.name}")
# Example: Get subreddit posts
result = await tool.get_subreddit_posts(
subreddit_name="cryptocurrency",
limit=25,
sort_by="hot",
time_filter="day"
)
print(result)直接MCP连接
import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def main():
server_params = StdioServerParameters(
command="python",
args=["server.py"],
env={
"SERVER_ADDRESS": "your-iatp-wallet-address",
"MCP_OPERATOR_PRIVATE_KEY": "your-operator-key"
}
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
# Initialize
await session.initialize()
# List available tools
tools = await session.list_tools()
print(f"Available tools: {[tool.name for tool in tools.tools]}")
# Call a tool
result = await session.call_tool(
"get_subreddit_posts",
arguments={
"subreddit_name": "Bitcoin",
"limit": 10,
"sort_by": "hot"
}
)
print(result)
if __name__ == "__main__":
asyncio.run(main())认证
此服务器使用 双模认证 采用D402支付协议的系统:
1.D402支付协议(必填)
所有请求必须包括有效的D402付款凭证:
- 使用HTTP 402状态码进行支付请求
- 需要基于区块链的小额支付
- 通过配置
SERVER_ADDRESS和MCP_OPERATOR_PRIVATE_KEY
2.Reddit API凭据(必需)
Reddit API访问使用拆分凭据方法:
- 服务器端:
REDDIT_CLIENT_ID从服务器环境加载 - 用户侧:Reddit
client_secret由用户通过D402 API密钥提供(使用get_active_api_key()) - 可选的:通过自定义用户代理
X-Reddit-User-Agentheader(默认为“Traia Reddit MCP服务器/1.0”)
它是如何工作的:
- 服务器加载其
REDDIT_CLIENT_ID从启动时的环境变量 - 用户提供他们的
client_secret作为付款期间的D402 API密钥 - 服务器将两者结合起来,使用PRAW创建Reddit API客户端
API密钥设置示例: 在提出请求时,用户提供他们的Reddit client_secret 作为D402支付流中的API密钥。服务器使用以下命令自动检索它 get_active_api_key(context) 并将其与服务器的 REDDIT_CLIENT_ID.
获取Reddit API凭据
对于服务器操作员:
- 首选 Reddit应用
- 点击“创建应用程序”或“创建另一个应用程序”
- 填写详细信息:
- 名字:您的应用程序名称(例如,“Traia Reddit MCP服务器”) - 应用程序类型:选择“脚本” - 描述:应用程序的简要说明 - 重定向URI: http://localhost:8080(适用于脚本应用程序)
- 点击“创建应用”
- 设置
client_id作为REDDIT_CLIENT_ID在您的服务器环境中
对于用户:
- 按照上述步骤创建自己的Reddit应用程序
- 用你的
client_secret通过D402进行请求时作为API密钥 - 服务器将自动合并您的
client_secret与服务器的REDDIT_CLIENT_ID
D402付款配置
服务器使用D402支付协议进行访问控制。配置是通过环境变量完成的:
必需变量
SERVER_ADDRESS:您的IATP钱包地址(接收付款)MCP_OPERATOR_PRIVATE_KEY:用于签署结算证明的私钥MCP_OPERATOR_ADDRESS:操作员的公共地址(用于验证)
可选变量
D402_FACILITATOR_URL:支付服务商URL(默认值:https://test-facilitator.d402.net)D402_FACILITATOR_API_KEY:主持人服务的API密钥D402_TESTING_MODE:对于没有实际付款的本地测试,设置为“true”(默认值:false)NETWORK:要使用的区块链网络(默认:sepolia)
付款价格
| 工具 | 价格(代币) | 描述 |
|---|---|---|
get_subreddit_posts | 0.00001 | 从subreddit获取帖子 |
search_subreddit_posts | 0.00001 | 在子版块中搜索帖子 |
get_post_comments | 0.000015 | 从帖子中获取评论 |
get_trending_subreddits | 0.00001 | 获得受欢迎的子版块 |
get_api_info | 0.000005 | 服务信息 |
发展
项目结构
reddit-api-integration-mcp-server/
├── server.py # Main MCP server implementation
├── endpoints.json # API endpoint documentation
├── deployment_params.json # Deployment configuration
├── mcp_health_check.py # Health check script
├── pyproject.toml # Python dependencies
├── Dockerfile # Container configuration
├── docker-compose.yml # Docker orchestration
├── run_local_docker.sh # Local development script
└── README.md # This file测试服务器
- 在本地启动服务器:
./run_local_docker.sh- 运行健康检查:
python mcp_health_check.py- 使用CrewAI适配器或直接MCP连接测试单个工具
添加新工具
要添加新工具,请编辑 server.py 以及:
- 使用以下命令创建工具功能
@mcp.tool()装饰器 - 添加
@require_payment_for_tool()带支付配置的装饰器 - 使用PRAW实现Reddit API逻辑
- 更新
endpoints.json使用新的工具模式 - 更新
deployment_params.json能力阵列 - 使用工具文档更新此README
部署
部署配置
这 deployment_params.json 文件包含部署配置:
{
"mcp_server": {
"name": "reddit-api-integration-mcp",
"payment_protocol": "402",
"dual_mode": true,
"capabilities": [
"get_subreddit_posts",
"search_subreddit_posts",
"get_post_comments",
"get_trending_subreddits",
"get_api_info"
]
}
}重要:始终更新 capabilities 添加或删除工具时使用数组!
谷歌云运行
此服务器旨在部署在Google Cloud Run上。部署将:
- 从Dockerfile构建一个容器
- 使用指定配置部署到Cloud Run
- 暴露
/mcp客户端连接的端点
环境变量
服务器配置
PORT:服务器端口(默认值:8000)STAGE:环境阶段(默认:MAINNET)LOG_LEVEL:日志记录级别(默认值:INFO)
Reddit API配置
REDDIT_CLIENT_ID:服务器的Reddit应用程序客户端ID(必填,从环境加载)- 用户的
client_secret:由用户通过D402 API密钥提供(使用自动检索get_active_api_key())
D402付款配置
SERVER_ADDRESS:用于接收付款的IATP钱包地址(必填)MCP_OPERATOR_PRIVATE_KEY:用于签署结算的私钥(必需)MCP_OPERATOR_ADDRESS:操作员的公共地址用于验证(必填)D402_FACILITATOR_URL:主持人服务URL(默认值:https://test-facilitator.d402.net)D402_FACILITATOR_API_KEY:主持人API密钥(可选)D402_TESTING_MODE:启用测试模式(默认值:false)NETWORK:区块链网络(默认:sepolia)
API文档
- Reddit API文档: https://www.reddit.com/dev/api/
- PRAW文件: https://praw.readthedocs.io/en/stable/
- D402支付协议:IATP(代理间交易协议)的一部分
- 模型上下文协议: https://modelcontextprotocol.io
故障排除
- 服务器未启动:使用以下命令检查Docker日志
docker logs reddit-api-integration-mcp-local - 身份验证错误:验证D402支付凭证和Reddit API凭证
- Reddit API错误:确保您的Reddit凭据有效并具有必要的权限
- 付款错误:检查D402配置和主持人连接
- 工具错误:检查服务器日志以获取详细的错误消息
贡献
- 分叉存储库
- 创建要素分支
- 实施新工具或改进
- 更新README、endpoints.json和deployment_params.json
- 提交拉取请求
