Marriott hotel search as an MCP server and CLI, via the Phoenix GraphQL API driven through a real Chrome session.
Marriott MCP has well-structured tool definitions with complete input schemas and reasonable descriptions. All 6 tools have descriptions (10 - 200 chars) and typed parameters with enums where appropriate. However, output schemas are not documented, LLMs cannot predict what fields to expect from responses. Parameter descriptions are functional but generic; many lack format hints, constraints, or dependency documentation. Error handling is absent from tool definitions. Tool composition is reasonable (search_hotels, plan_stay, scan_dates are distinct), but no guidance on chaining or required follow-up calls.
Execute a raw GraphQL operation with custom variables
Search for hotel destinations by name or partial match
List all available GraphQL operations and their signatures
Find the cheapest hotel-hopping itinerary for a multi-night stay by comparing consecutive check-in dates and calculating optimal hotel switches
Compare pricing across consecutive check-in dates to find the cheapest night in a date range
Search for available hotels at a destination with optional filters for dates, rates, amenities, brands, and sorting preferences
No output schemas documented. LLMs cannot predict response structure, forcing them to guess what fields are available for downstream tool calls or user display.
Parameter descriptions lack format constraints and examples. E.g., 'checkInDate' says 'YYYY-MM-DD format' but does not specify valid range (past/future), default behavior if omitted, or what happens if check-in is in the past.
No error handling guidance in tool definitions. If search_hotels returns 0 results, or if a date is invalid, the LLM has no recovery path documented.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
get_operations and call_operation are low-level GraphQL introspection tools. Their descriptions do not explain when an LLM should use them vs. the domain-specific tools (search_hotels, plan_stay). Risk of LLM choosing the wrong tool.
Parameter 'tolerance' in plan_stay lacks clear guidance. Description says 'Stickiness factor: how much cheaper a move must be to be worth it (default: 0.1 = 10%)' but does not explain the unit (percentage? absolute? ratio?) or valid range.