MCPizza - Enhanced
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCPizza - EnhancedFind the best coupons for a large pepperoni pizza near 90210."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
š MCPizza - Enhanced
An educational MCP (Model Context Protocol) server demonstrating AI-powered pizza ordering with Domino's API integration.
ā ļø Important: This project is for educational purposes only. While it integrates with Domino's real API, actual order placement is blocked by CAPTCHA requirements. See Limitations for details.
Credits
This project is based on GrahamMcBain/mcpizza, with significant enhancements:
Original Project
Author: Graham McBain
Purpose: Educational MCP protocol demonstration
Design: Safe-mode ordering without real placement
Our Enhancements
ā Real API Integration - Actually calls Domino's pricing and validation APIs
ā Pizza Customization -
add_pizza_with_toppingstool for proper coupon + topping configurationā Interaction Logging - Complete 2-way logging system for all MCP interactions
ā Coupon Discovery -
get_couponsandget_ordering_guidancetoolsā Enhanced Error Handling - Detailed error reporting and validation
ā Comprehensive Documentation - WORKFLOW.md with step-by-step instructions
Related MCP server: Food402
What This Project Demonstrates
MCP Protocol Integration - Full implementation of Model Context Protocol
Real-world API Interaction - Integration with Domino's unofficial API
Complex Tool Orchestration - 12 tools working together for multi-step workflows
State Management - Order state management across tool calls
Error Handling - Graceful handling of API validation and errors
Features
Store & Menu Tools
š
find_stores- Find nearby Domino's by address or zipšŖ
get_store_info- Detailed store information and hoursš
get_menu- Complete menu with categoriesš
search_menu- Search for specific itemsš
get_coupons- Discover available deals and coupons
Ordering Tools
š
create_order- Initialize a new orderš
add_pizza_with_toppings- Add customized pizzas with toppings (NEW!)ā
add_item_to_order- Add any menu itemšļø
view_order- Preview order details and pricingšļø
clear_order- Clear current orderš³
place_order- Attempt to place order (blocked by CAPTCHA)
Guidance Tools
šÆ
get_ordering_guidance- AI-powered deal recommendations (NEW!)
Installation
Prerequisites
Python 3.10+
uv package manager
Setup
# Clone the repository
git clone https://github.com/dshanklin-bv/mcp-pizza.git
cd mcp-pizza
# Install dependencies
uv pip install -e .Claude Desktop Integration
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"pizza": {
"command": "uv",
"args": [
"--directory",
"/path/to/mcp-pizza",
"run",
"mcpizza"
]
}
}
}Usage
See WORKFLOW.md for complete ordering workflow documentation.
Basic Example
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 CAPTCHAArchitecture
The codebase follows a clean, modular architecture with separation of concerns:
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 fileBenefits of This Architecture
Maintainability: Each module has a single responsibility
Testability: Services and utilities are easily unit tested
Readability: Clear separation between MCP layer, business logic, and API calls
Scalability: Easy to add new tools or services
Reusability: Services can be reused outside of MCP context
Logging
All MCP interactions are automatically logged to logs/interactions_YYYYMMDD.log:
Tool calls with full arguments
Tool responses with previews
State changes (order creation, items added)
Errors with context
Log format is JSON for easy parsing and analysis.
Limitations
CAPTCHA Requirement
Domino's API requires CAPTCHA verification for order placement. Our system successfully:
ā Validates pizza configurations
ā Prices orders correctly (e.g., $11.90 for medium 2-topping)
ā Accepts payment structure
ā Cannot submit final order (blocked by
recaptchaVerificationRequired)
This is an intentional fraud prevention measure by Domino's and cannot be bypassed without violating their terms of service.
What Works
Store lookup and menu browsing
Coupon discovery and deal analysis
Order validation and pricing
Complete order preparation
All MCP protocol features
What Doesn't Work
Final order submission (CAPTCHA required)
Real payment processing
Development
Testing
# Run autonomous test suite (tests all tools except order placement)
python test_mcp_with_ollama.pyContributing
This is an educational project demonstrating MCP protocol integration. Contributions that enhance the educational value are welcome!
Technical Details
MCP SDK: Official Model Context Protocol SDK
API Library: pizzapi (unofficial Domino's API wrapper)
Order Structure: Mock order object with real API calls
Validation: Multi-step validation (structure ā pricing ā placement)
Disclaimer
ā ļø Educational Use Only
This project is for learning about:
Model Context Protocol implementation
Real-world API integration
Multi-tool orchestration
State management in AI assistants
Do not use for actual pizza ordering. Use Domino's official website or mobile app instead.
License
MIT License
Based on GrahamMcBain/mcpizza (MIT License)
Acknowledgments
Graham McBain - Original mcpizza project and MCP implementation
pizzapi contributors - Unofficial Domino's API wrapper
Anthropic - Model Context Protocol specification
Built with Claude Code š¤
Available Tools
12 toolsadd_item_to_orderB
Add a menu item to the current order. Must create an order first.
| Name | Required | Description | Default |
|---|---|---|---|
| item_code | Yes | Menu item code from the menu | |
| quantity | No | Quantity to add | |
| options | No | Item customization options |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions a prerequisite but doesn't disclose behavioral traits such as whether this is a mutation (implied by 'Add'), error handling, permissions needed, or what happens if the order doesn't exist. This leaves significant gaps for an agent to understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with zero waste, front-loading the main action. It could be slightly more structured by explicitly listing key parameters or outcomes, but it's efficient and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is minimal. It covers the basic purpose and a prerequisite but lacks details on behavior, error cases, or return values. For a mutation tool with 3 parameters, this is adequate but with clear gaps, making it just viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters well. The description doesn't add any meaning beyond what the schema provides, such as examples or constraints on 'item_code' or 'options'. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add a menu item') and target ('to the current order'), providing specific verb+resource. However, it doesn't differentiate from sibling tools like 'add_pizza_with_toppings' which might serve a similar purpose but for specific items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a prerequisite ('Must create an order first'), which gives some context for when to use it. However, it doesn't explicitly state when to use this tool versus alternatives like 'add_pizza_with_toppings' or 'search_menu', nor does it provide exclusions or detailed scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_pizza_with_toppingsC
Add a customized pizza with toppings using a coupon code. Handles proper product + topping configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| coupon_code | Yes | Coupon code (e.g., '9204') | |
| size | No | Pizza size code: 10, 12, 14, or 16 | 12 |
| crust | No | Crust code: NPAN (pan), HAND (hand tossed), THIN, BROOKLYN, etc. | NPAN |
| toppings | Yes | Topping codes: P (pepperoni), S (sausage), M (mushrooms), O (onions), etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool 'Handles proper product + topping configuration', hinting at validation or processing, but lacks details on behavioral traits such as error handling, permissions needed, whether it modifies an existing order or creates a new one, or any side effects like rate limits. This is inadequate for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded, consisting of two concise sentences that directly state the tool's purpose. There's no unnecessary information, making it efficient, though it could be slightly more structured by explicitly separating purpose from context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no annotations, no output schema, and involves mutation (adding a pizza), the description is incomplete. It doesn't explain what the tool returns, error conditions, or how it interacts with other order-related tools. For a 4-parameter tool with complex configuration, more context is needed to guide effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all parameters (coupon_code, size, crust, toppings) with descriptions and defaults. The description adds minimal value by mentioning 'using a coupon code' and 'topping configuration', but doesn't provide additional semantics beyond what's in the schema, such as format details or usage tips.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add a customized pizza with toppings') and resource ('pizza'), specifying it involves product + topping configuration. However, it doesn't explicitly differentiate from sibling tools like 'add_item_to_order' or 'create_order', which might handle similar order-related functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions using a coupon code, implying a context for discounts, but provides no guidance on when to use this tool versus alternatives like 'add_item_to_order' or 'create_order'. There's no mention of prerequisites, exclusions, or specific scenarios for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_orderB
Clear the current order and start over.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states the action ('clear and start over'). It doesn't disclose behavioral traits such as whether this is destructive (likely yes, but not confirmed), what happens to existing order data, or any side effects like resetting pricing or coupons.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's function with no wasted words. It is front-loaded and appropriately sized for a zero-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that likely performs a destructive reset operation, the description is incomplete. With no annotations and no output schema, it fails to explain what 'clear' entails (e.g., data deletion, state reset) or what 'start over' results in, leaving gaps in understanding the tool's full behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately adds no parameter details, maintaining focus on the tool's purpose without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('clear') and target ('current order'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'create_order' or 'view_order' beyond the specific reset action, which keeps it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when starting over an order, but provides no explicit guidance on when to use this tool versus alternatives like 'create_order' for a new order or 'view_order' to check current status. No prerequisites or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_orderB
Create a new order for delivery or carryout. Required before adding items.
| Name | Required | Description | Default |
|---|---|---|---|
| store_id | Yes | Store ID | |
| customer_name | Yes | Customer full name | |
| customer_email | Yes | Customer email | |
| customer_phone | Yes | Customer phone number | |
| delivery_address | Yes | Street address | |
| delivery_city | Yes | City | |
| delivery_state | Yes | State (2-letter code) | |
| delivery_zip | Yes | Zip code | |
| order_type | No | Delivery or Carryout | Delivery |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Create' implies a write/mutation operation, the description doesn't disclose important behavioral traits like: what permissions are needed, whether the order is saved immediately or temporarily, what happens on failure, or if there are rate limits. It mentions the order type options but doesn't explain their implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with just two short sentences that are front-loaded with the main purpose. Every word earns its place - the first sentence states what the tool does, and the second provides important workflow context without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 9 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what happens after creation (e.g., does it return an order ID?), error conditions, authentication requirements, or how this tool relates to the complete ordering workflow with siblings like 'place_order' and 'add_item_to_order'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 9 parameters thoroughly. The description adds minimal value beyond the schema - it mentions 'delivery or carryout' which relates to the 'order_type' parameter, but doesn't provide additional semantic context about parameter relationships or business logic.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new order') and resource ('order'), specifying it's for 'delivery or carryout'. It distinguishes from siblings like 'add_item_to_order' by noting it's 'Required before adding items', but doesn't explicitly differentiate from 'place_order' which might be a finalization step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some contextual guidance by stating this tool is 'Required before adding items', which implies it should be used early in the ordering workflow. However, it doesn't explicitly state when to use this versus 'place_order' or other order-related tools, nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_storesB
Find nearby Domino's stores by address or zip code. Returns store IDs, addresses, and phone numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Address or zip code to search for stores |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the return values ('store IDs, addresses, and phone numbers') but lacks details on error handling, rate limits, authentication needs, or whether the search is real-time or cached. For a search tool with zero annotation coverage, this leaves significant gaps in understanding its operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and front-loaded, consisting of two efficient sentences that directly state the tool's purpose and return values. Every word contributes to understanding without redundancy, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one parameter, no output schema, no annotations), the description is adequate but incomplete. It covers the basic purpose and returns, but lacks behavioral details like error cases or search limitations. Without annotations or output schema, it should provide more context for reliable use, yet it meets the minimum for a simple lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds minimal meaning beyond the input schema, which has 100% coverage for the single parameter 'query'. It reiterates that the query is an 'address or zip code', matching the schema's description. Since the schema already documents this well, the description provides no additional syntax, format, or constraints, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Find nearby Domino's stores by address or zip code.' It specifies the verb ('Find'), resource ('Domino's stores'), and scope ('by address or zip code'), making the intent unambiguous. However, it does not explicitly differentiate from sibling tools like 'get_store_info', which might retrieve details for a specific store rather than searching nearby ones, so it misses full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention when-not scenarios, prerequisites, or direct comparisons to siblings such as 'get_store_info' or 'create_order'. Usage is implied only by the purpose statement, leaving the agent to infer context without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_couponsC
Get available coupons and deals for a store. Returns coupon codes, descriptions, and prices.
| Name | Required | Description | Default |
|---|---|---|---|
| store_id | Yes | Store ID to get coupons for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool returns 'coupon codes, descriptions, and prices,' which hints at read-only behavior, but doesn't explicitly confirm it's non-destructive or safe. It also omits details like rate limits, authentication needs, or error handling, leaving significant gaps for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with two clear sentences that state the purpose and return values. There's no unnecessary fluff, and every sentence earns its place by providing essential information. It could be slightly improved by integrating usage hints, but it's efficient as-is.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose and return types, but lacks details on behavioral traits, usage context, or error handling. Without annotations or an output schema, more completeness would be beneficial, but it's not entirely inadequate for such a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'store_id' parameter fully documented in the schema itself. The description adds no additional parameter semantics beyond implying the tool fetches coupons for a specific store, which is already covered by the schema. This meets the baseline of 3 for high schema coverage without extra value from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get available coupons and deals for a store.' It specifies the verb ('Get') and resource ('coupons and deals'), and distinguishes it from siblings like 'get_menu' or 'get_store_info' by focusing on promotional content. However, it doesn't explicitly differentiate from potential similar tools (e.g., if there were a 'search_coupons' tool), keeping it at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a store_id from 'find_stores' or 'get_store_info'), exclusions, or comparisons to sibling tools like 'get_menu' for non-promotional items. This lack of contextual usage information results in a low score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ordering_guidanceC
Get AI guidance on how to build the best order based on user preferences. Analyzes deals, suggests optimal pizza counts, and provides ordering strategy.
| Name | Required | Description | Default |
|---|---|---|---|
| store_id | Yes | Store ID to analyze deals for | |
| user_request | Yes | What the user wants (e.g., 'deep dish sausage and pepperoni', '2 large pizzas for a party') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions analysis and suggestions but doesn't disclose behavioral traits such as whether this is a read-only operation, if it requires authentication, rate limits, or what the output format looks like (e.g., structured advice vs. text). For a tool with no annotations, this leaves significant gaps in understanding how it behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with the core purpose stated first. Both sentences earn their place by elaborating on analysis and strategy. However, it could be slightly more structured by explicitly separating purpose from details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., guidance format, error handling), and with 2 parameters, it lacks details on behavioral aspects like side effects or dependencies. For a tool that provides AI guidance, more context on output and usage is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('store_id' and 'user_request') with descriptions. The description adds marginal value by implying parameters are used for analysis and suggestions (e.g., 'store_id' for deals, 'user_request' for preferences), but doesn't provide additional syntax or format details beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get AI guidance on how to build the best order based on user preferences.' It specifies the verb ('Get AI guidance') and resource ('order'), and mentions analysis of deals, pizza counts, and ordering strategy. However, it doesn't explicitly differentiate from siblings like 'search_menu' or 'get_menu' which might also provide ordering information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, exclusions, or compare to siblings like 'search_menu' for menu items or 'get_coupons' for deals. The context is implied (building an order), but no explicit usage rules are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_store_infoC
Get detailed information about a specific Domino's store including hours and services.
| Name | Required | Description | Default |
|---|---|---|---|
| store_id | Yes | Store ID to get information for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read-only operation ('Get'), but doesn't state whether it requires authentication, has rate limits, or what the return format looks like (e.g., JSON structure). For a tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the key information: the action and resource. There's no wasted verbiage, and it directly states the purpose without unnecessary details, making it appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'detailed information' includes beyond 'hours and services', nor does it cover behavioral aspects like error handling or response format. For a tool with no structured metadata, more context is needed to fully guide the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'store_id' parameter clearly documented. The description adds no additional parameter semantics beyond what the schema provides, such as format examples or constraints. Given the high schema coverage, a baseline score of 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get detailed information about a specific Domino's store including hours and services.' It specifies the verb ('Get'), resource ('Domino's store'), and scope ('detailed information'), though it doesn't explicitly differentiate from sibling tools like 'find_stores' or 'view_order'. This makes it clear but not fully sibling-distinctive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'find_stores' (which might list stores) or 'view_order' (which might show order details), nor does it specify prerequisites or exclusions. This leaves the agent with no contextual usage hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_orderA
ā ļø PLACES A REAL ORDER with real payment! Submit the current order to Domino's. Requires payment information.
| Name | Required | Description | Default |
|---|---|---|---|
| card_number | Yes | Credit card number | |
| card_expiry | Yes | Card expiry (MM/YY) | |
| card_cvv | Yes | Card CVV | |
| card_zip | Yes | Billing zip code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and effectively discloses critical behavioral traits: it's a real-world transaction ('PLACES A REAL ORDER with real payment!'), requires payment info, and implies irreversible action. It could improve by mentioning response format or confirmation details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: the first conveys the core action and warning, the second states the prerequisite. It's front-loaded with the critical warning and appropriately sized for its purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-stakes mutation tool with no annotations and no output schema, the description is mostly completeāit warns of real consequences and lists requirements. It could be enhanced by specifying what happens after submission (e.g., order confirmation, errors) or return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters (card_number, card_expiry, card_cvv, card_zip). The description adds no additional parameter semantics beyond implying these are required for payment, meeting the baseline of 3 when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('PLACES A REAL ORDER with real payment') and the target resource ('Submit the current order to Domino's'), distinguishing it from siblings like 'add_item_to_order' or 'view_order' which handle order modification or viewing rather than final submission with payment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool ('Submit the current order to Domino's') and includes prerequisites ('Requires payment information'), with clear alternatives implied by sibling tools like 'view_order' for checking status or 'add_item_to_order' for modifications before submission.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
view_orderB
View the current order including all items, prices, and totals.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a read operation ('view'), implying non-destructive behavior, but doesn't address other important aspects like authentication requirements, error conditions (e.g., what happens if no order exists), response format, or any rate limits. The description provides minimal behavioral context beyond the basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that immediately communicates the core functionality without unnecessary words. Every element ('view,' 'current order,' 'items, prices, and totals') serves a clear purpose. It's appropriately sized for a simple retrieval tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is insufficiently complete. While it states what data will be returned, it doesn't describe the response structure, format, or potential edge cases. Given the lack of structured documentation about behavior and outputs, the description should provide more contextual information to help the agent understand what to expect from this operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters with 100% schema description coverage, so the schema already fully documents the parameter situation. The description appropriately doesn't waste space discussing non-existent parameters. This meets the baseline expectation for a zero-parameter tool where the schema handles all parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('view') and resource ('current order') with specific content details ('all items, prices, and totals'). It distinguishes from siblings like 'create_order' or 'place_order' by focusing on retrieval rather than modification. However, it doesn't explicitly differentiate from potential similar read operations like 'get_menu' which might show different data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., whether an order must exist first), timing considerations, or comparisons to siblings like 'get_menu' or 'place_order'. The agent must infer usage context solely from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v0.1.0- First observed
add_item_to_order - First observed
add_pizza_with_toppings - First observed
clear_order - First observed
create_order - First observed
find_stores - First observed
get_coupons - First observed
get_menu - First observed
get_ordering_guidance - First observed
get_store_info - First observed
place_order - First observed
search_menu - First observed
view_order
TDQS
Scored across 12 tools
Each tool has a clearly distinct purpose with no significant overlap. For example, 'get_menu' retrieves the full menu, while 'search_menu' filters it, and 'add_item_to_order' and 'add_pizza_with_toppings' handle different item types. The descriptions clearly differentiate their functions, making misselection unlikely.
All tool names follow a consistent verb_noun pattern using snake_case, such as 'create_order', 'get_menu', and 'place_order'. This uniformity makes the tool set predictable and easy to understand, with no deviations in naming style.
With 12 tools, the server is well-scoped for a pizza ordering domain. Each tool serves a specific role in the ordering workflow, from store lookup to order placement, without being excessive or insufficient for the intended functionality.
The tool set provides complete coverage for the pizza ordering domain, including store discovery, menu browsing, order creation and management, coupon retrieval, and final placement. There are no obvious gaps, as all essential CRUD and lifecycle operations are covered, ensuring agents can handle the full process without dead ends.
Maintenance
Related MCP Connectors
Hosted MCP server to manage a restaurant menu from AI agents - 39 tools over the DuckHub API.
DTC modular hat brand MCP server. 6 tools for AI agents: catalog, curated builds, shipping.
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
Hosted MCP for e-commerce: live product catalog, stock, and pricing for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that allows AI assistants to order Domino's Pizza through an unofficial API, with features for store location, menu browsing, and order management.11MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI assistants to order food from TGO Yemek by browsing restaurants, managing carts, and completing checkouts. It allows users to handle address selection and order tracking directly through natural language interactions.29 npm13MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI agents to discover restaurants and place food delivery orders on Uber Eats and Thuisbezorgd (Just Eat Takeaway). It provides tools for restaurant discovery and order management through normalized platform APIs.8 npm2MIT
- AlicenseAqualityDmaintenanceMCP server for Wendy's that enables AI agents to search the menu, view nutrition info, find nearby locations, and place mobile orders.711 npmMIT