🍕 MCPizza-增强型
一个教育MCP(模型上下文协议)服务器,演示了AI驱动的披萨订购与Domino的API集成。
⚠️ 重要:这个项目是为了 仅用于教育目的.虽然它与Domino的真正的API集成,但实际的订单放置被CAPTCHA要求阻止。看 局限性 了解详情。
鸣谢
该项目基于 GrahamMcBain/mcpizza,具有显著增强功能:
原始项目
- 作者:格雷厄姆·麦克贝恩
- 目的:教育性MCP协议演示
- 设计:安全模式订购,无需实际放置
我们的增强功能
- ✅ 真正的API集成 -实际上调用Domino的定价和验证API
- ✅ 披萨定制 -
add_pizza_with_toppings用于正确配置优惠券+配料的工具 - ✅ 交互日志记录 -用于所有MCP交互的完整双向记录系统
- ✅ 优惠券发现 -
get_coupons和get_ordering_guidance工具 - ✅ 增强的错误处理 -详细的错误报告和验证
- ✅ 综合文档 -WORKFLOW.md,附带分步说明
这个项目展示了什么
- MCP协议集成 -模型上下文协议的全面实现
- 现实世界API交互 -与Domino的非官方API集成
- 复杂工具编排 -12个工具协同工作,实现多步骤工作流程
- 状态管理 -跨工具调用的订单状态管理
- 错误处理 -优雅地处理API验证和错误
特性
商店和菜单工具
- 📍
find_stores-按地址或邮政编码查找附近的达美乐 - 🏪
get_store_info-详细的店铺信息和营业时间 - 📋
get_menu-包含类别的完整菜单 - 🔍
search_menu-搜索特定项目 - 🎉
get_coupons-发现可用的优惠和优惠券
订购工具
- 📝
create_order-初始化新订单 - 🍕
add_pizza_with_toppings-添加带配料的定制披萨(新增!) - ➕
add_item_to_order-添加任何菜单项 - 👁️
view_order-预览订单详细信息和定价 - 🗑️
clear_order-清除当前订单 - 💳
place_order-尝试下订单(被验证码阻止)
指导工具
- 🎯
get_ordering_guidance-基于人工智能的交易建议(新增!)
安装
先决条件
- Python 3.10+
- 紫外线 包管理器
设置
# Clone the repository
git clone https://github.com/dshanklin-bv/mcp-pizza.git
cd mcp-pizza
# Install dependencies
uv pip install -e .Claude桌面集成
添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"pizza": {
"command": "uv",
"args": [
"--directory",
"/path/to/mcp-pizza",
"run",
"mcpizza"
]
}
}
}用法
看 工作流.md 获取完整的订购工作流程文档。
基础示例
1. Find stores: "find pizza stores near 76104"
2. Get coupons: "what deals are available at store 8022?"
3. Get guidance: "I want a deep dish sausage and pepperoni pizza"
4. Create order: Create order with your details
5. Add pizza: Use add_pizza_with_toppings with coupon code
6. View order: Review pricing and details
7. (Optional) Place order: Will be blocked by CAPTCHA建筑
代码库遵循一个干净的、模块化的架构,关注点分离:
mcp-pizza/
├── mcpizza/
│ ├── server.py # Main MCP server (303 lines, down from 1308!)
│ ├── logger.py # Interaction logging system
│ ├── __main__.py # Entry point
│ │
│ ├── models/ # Pydantic parameter models
│ │ └── params.py # Tool parameter definitions
│ │
│ ├── services/ # Business logic layer
│ │ ├── store_service.py # Store lookup & menu browsing
│ │ ├── order_service.py # Order creation & management
│ │ ├── payment_service.py # Payment processing
│ │ └── guidance_service.py # AI ordering guidance
│ │
│ ├── tools/ # MCP tool handlers
│ │ ├── store_tools.py # Store-related tools
│ │ ├── menu_tools.py # Menu-related tools
│ │ ├── order_tools.py # Order-related tools
│ │ └── guidance_tools.py # Guidance tools
│ │
│ ├── api/ # Domino's API client
│ │ ├── endpoints.py # API endpoint constants
│ │ └── client.py # HTTP client wrapper
│ │
│ └── utils/ # Utilities
│ └── mock_order.py # Mock order object creation
│
├── tests/ # Comprehensive test suite (18 tests)
│ ├── test_models.py # Model validation tests
│ ├── test_utils.py # Utility function tests
│ ├── test_api_client.py # API client tests
│ └── test_services.py # Service layer tests
│
├── examples/ # Example scripts
│ └── test_mcp_with_ollama.py # Autonomous testing
│
├── logs/ # Interaction logs (gitignored)
├── WORKFLOW.md # Complete workflow documentation
└── README.md # This file这种架构的好处
- 可维护性:每个模块都有一个单一的职责
- 可测试性:服务和公用设施易于进行单元测试
- 可读性:MCP层、业务逻辑和API调用之间的清晰分离
- 可扩展性:易于添加新工具或服务
- 可重复使用性:服务可以在MCP上下文之外重用
日志记录
所有MCP交互都会自动记录到 logs/interactions_YYYYMMDD.log:
- 带有完整参数的工具调用
- 带有预览的工具响应
- 状态更改(订单创建、添加项目)
- 上下文错误
日志格式为JSON,便于解析和分析。
局限性
验证码要求
Domino的API需要CAPTCHA验证才能下订单。我们的系统成功:
- ✅ 验证披萨配置
- ✅ 订单价格正确(例如,中等2对价11.90美元)
- ✅ 接受付款结构
- ❌ 无法提交最终订单 (被封锁
recaptchaVerificationRequired)
这是达美乐和 无法绕过 而不违反他们的服务条款。
什么起作用
- 店铺查找和菜单浏览
- 优惠券发现和交易分析
- 订单验证和定价
- 完成订单准备
- 所有MCP协议功能
什么不起作用
- 最终订单提交(需要验证码)
- 真实支付处理
发展
测试
# Run autonomous test suite (tests all tools except order placement)
python test_mcp_with_ollama.py贡献
这是一个演示MCP协议集成的教育项目。欢迎为提高教育价值做出贡献!
技术细节
- MCP-SDK:官方模型上下文协议SDK
- API库:pizzapi(Domino的API非官方包装)
- 订单结构:具有实际API调用的模拟订单对象
- 验证:多步骤验证(结构→ 定价→ 位置)
免责声明
⚠️ 仅供教育使用
本项目旨在学习:
- 模型上下文协议实现
- 现实世界API集成
- 多工具编排
- AI助手中的状态管理
不要用于实际的披萨订购。 请使用Domino的官方网站或移动应用程序。
许可证
MIT许可证
基于 GrahamMcBain/mcpizza (MIT许可证)
致谢
- 格雷厄姆·麦克贝恩 -原始mcpizza项目和MCP实施
- pizza贡献者 -非正式Domino的API包装器
- Anthropic -模型上下文协议规范
______________________________________________________________________
使用克劳德代码构建🤖
