UberEats MCP服务器增强
用于UberEats自动化的现代、生产就绪的模型上下文协议(MCP)服务器,使用TypeScript、Redis和企业级安全功能构建。
🚀 特性
核心功能
- MCP协议合规性:带有工具、资源和提示的本地MCP服务器
- 会话管理:Redis支持的JWT身份验证会话
- n8n集成:与断路器无缝协调工作流程
- 类型安全:具有严格模式的完整TypeScript实现
- 安全:输入验证、速率限制、加密和审计日志记录
性能和可扩展性
- 水平缩放:使用Redis会话存储的无状态设计
- 断路器:外部服务的容错
- 连接池:高效的资源管理
- 缓存:基于Redis的缓存可实现最佳性能
- 监控:内置健康检查和指标
开发者体验
- 热重新加载:具有自动重启功能的开发模式
- 综合录井:使用pino进行结构化日志记录
- 错误处理:集中错误管理
- 代码质量:ESLint、Prettier和TypeScript严格模式
- 文档:完整的API文档和示例
📋 先决条件
- Node.js 20.0.0或更高版本
- Redis 7.0或更高版本
- n8n工作流自动化平台
- Docker(可选,用于容器化部署)
🛠 安装
方案1:地方发展
# Clone the repository
cd ubereats_mcp_server_enhanced
# Install dependencies
npm install
# Copy environment configuration
cp .env.example .env
# Edit configuration
nano .env
# Build the project
npm run build
# Start Redis (if not running)
redis-server
# Start the server
npm start选项2:Docker部署
# Copy environment configuration
cp .env.example .env
# Edit configuration for production
nano .env
# Start all services
docker-compose up -d
# View logs
docker-compose logs -f ubereats-mcp⚙️ 配置
环境变量
创建一个 .env 文件基于 .env.example:
# Security (REQUIRED for production)
JWT_SECRET=your-super-secure-jwt-secret-key-change-in-production
SESSION_SECRET=your-session-secret-key-change-in-production
ENCRYPTION_KEY=your-32-character-encryption-key-change-this
# Redis Configuration
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
# n8n Integration
N8N_BASE_URL=http://localhost:5678
N8N_API_KEY=
# Server Configuration
NODE_ENV=production
PORT=5001
LOG_LEVEL=infoMCP客户端配置
添加到您的Claude Desktop配置中:
{
"mcpServers": {
"ubereats": {
"command": "node",
"args": ["/path/to/ubereats_mcp_server_enhanced/dist/index.js"],
"env": {
"NODE_ENV": "production"
}
}
}
}🔧 用法
MCP工具
登录工具
{
"name": "ubereats_login",
"arguments": {
"username": "user@example.com",
"password": "password",
"manualMode": false
}
}添加项目工具
{
"name": "ubereats_add_items",
"arguments": {
"sessionId": "session-uuid",
"restaurantName": "McDonald's",
"items": [
{
"name": "Big Mac",
"quantity": 2,
"options": {
"size": "large",
"extras": ["cheese"]
}
}
]
}
}设置地址工具
{
"name": "ubereats_set_address",
"arguments": {
"sessionId": "session-uuid",
"address": {
"street": "123 Main St",
"city": "Anytown",
"state": "CA",
"zipCode": "90210"
}
}
}结账工具
{
"name": "ubereats_checkout",
"arguments": {
"sessionId": "session-uuid",
"paymentMethodId": "saved_card_123",
"tipAmount": 5.00
}
}MCP资源
健康检查
URI: ubereats://health返回服务器健康状态、系统指标和服务可用性。
会话信息
URI: ubereats://sessions返回有关活动会话和会话计数的信息。
提示
快速下单
{
"name": "quick_order",
"arguments": {
"restaurant": "Pizza Hut",
"items": "Large pepperoni pizza, 2 liter Coke",
"address": "123 Main St, Anytown, CA 90210"
}
}🏗 建筑
系统概述
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ MCP Client │◄──►│ MCP Server │◄──►│ Redis Cache │
│ (Claude) │ │ (TypeScript) │ │ (Sessions) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐ ┌─────────────────┐
│ n8n Server │◄──►│ Playwright │
│ (Workflows) │ │ (Browser) │
└─────────────────┘ └─────────────────┘组件详细信息
- MCP服务器:实现MCP协议的TypeScript服务器
- 会话服务:使用JWT进行Redis支持的会话管理
- n8n服务:使用断路器进行工作流编排
- 工具:UberEats运营的MCP工具
- 资源:用于监控的信息端点
- 提示:预定义的交互模板
🔒 安全功能
身份验证和授权
- 基于JWT令牌的会话管理
- 所有受保护操作的会话验证
- 使用Redis TTL实现安全会话存储
输入验证
- 对所有输入进行Zod模式验证
- XSS保护和消毒
- SQL注入防御(Redis NoSQL)
速率限制
- 每终点速率限制
- 全球利率限制
- 可配置的限制和窗口
数据保护
- 敏感数据的AES-256加密
- 安全的cookie处理
- 从日志和存储中排除密码
监控与审计
- 全面的审计日志记录
- 安全事件跟踪
- 性能监控
📊 监测和可观察性
健康检查
# Check server health
curl http://localhost:5001/health
# Docker health check
docker-compose ps日志记录
- 使用pino进行结构化JSON日志记录
- 可配置的日志级别
- 带有敏感数据编辑的请求/响应日志记录
指标
- Redis连接健康状况
- n8n服务可用性
- 断路器状态
- 会话统计信息
🧪 测试
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
# Run tests in watch mode
npm run test:watch
# Lint code
npm run lint
# Format code
npm run format
# Type check
npm run type-checkMCP检查员
MCP检查器是一个功能强大的调试工具,允许您直接测试和与MCP服务器交互。它提供了一个基于网络的界面,用于:
- 使用自定义参数测试MCP工具
- 查看可用资源和提示
- 监控服务器响应和错误
- 验证MCP协议合规性
运行MCP检查器
# Build the project first
npm run build
# Start the MCP Inspector
npm run inspector
# Or run directly with npx
npx @modelcontextprotocol/inspector dist/index.js这将启动一个web界面(通常在 http://localhost:5173)您可以在哪里:
- 测试工具:使用自定义参数调用任何已注册的工具(登录、add_items、set_address、checkout)
- 查看资源:访问健康检查和会话信息资源
- 测试提示:尝试使用不同参数的快速排序和重新排序提示
- 调试问题:请参阅详细的请求/响应日志和错误消息
检查器使用提示
- 环境设置:在测试工具之前,确保Redis和n8n正在运行
- 工具测试:从登录工具开始建立会话,然后测试其他工具
- 调试错误:检查检查器控制台以获取详细的错误消息
- 架构验证:检查器自动验证输入模式
检查器对于开发和调试至关重要,它允许您独立于Claude Code集成来测试MCP服务器。
🚀 部署
生产部署
- 环境设置
# Set production environment variables
export NODE_ENV=production
export JWT_SECRET="your-production-jwt-secret"
export SESSION_SECRET="your-production-session-secret"
export ENCRYPTION_KEY="your-production-encryption-key"- 数据库设置
# Start Redis
docker run -d --name redis -p 6379:6379 redis:7-alpine
# Or use managed Redis (AWS ElastiCache, etc.)- 应用程序部署
# Build application
npm run build
# Start with PM2 (recommended)
pm2 start dist/index.js --name ubereats-mcp
# Or use Docker
docker-compose up -dKubernetes部署
看 k8s/ Kubernetes清单目录(即将推出)。
🐛 故障排除
常见问题
服务器无法启动
# Check Node.js version
node --version # Should be >= 20.0.0
# Check environment variables
npm run check-env
# Check Redis connection
redis-cli ping身份验证错误
# Verify JWT secret is set
echo $JWT_SECRET
# Check session in Redis
redis-cli get "ubereats:session:your-session-id"n8n集成问题
# Test n8n connectivity
curl http://localhost:5678/health
# Check circuit breaker status
curl http://localhost:5001/api/circuit-breakers调试模式
# Enable debug logging
export LOG_LEVEL=debug
export ENABLE_DEBUG=true
# Start server
npm run dev🤝 贡献
- 分叉存储库
- 创建要素分支:
git checkout -b feature/amazing-feature - 提交更改:
git commit -m 'Add amazing feature' - 推送到分支:
git push origin feature/amazing-feature - 打开拉取请求
开发指南
- 遵循TypeScript严格模式
- 为新功能编写测试
- 更新文档
- 使用常规提交
- 确保代码通过linting
📄 许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
🙏 致谢
- 模型上下文协议 通过Anthropic
- n8n 用于工作流自动化
- 雷迪斯 用于会话管理
- TypeScript 用于类型安全
📞 支持
- 为错误报告创建问题
- 利用讨论提问
- 检查 故障排除指南 第一
______________________________________________________________________
备注:这是基于Flask的原始UberEats MCP服务器的增强版本,用现代技术和企业级功能重建。
