marriott_mcp
Provides tools for searching Marriott properties, comparing special-rate categories, and reviewing cancellation, eligibility, and rate details through a user-controlled Chrome session.
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., "@marriott_mcp@marriott_mcp Compare AAA and government rates for Marriott in NYC"
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.
marriott_mcp
An unofficial Model Context Protocol server for searching Marriott properties, comparing configured special-rate categories, and reviewing cancellation and eligibility terms through a user-controlled Chrome session.
Repository: YHRen/marriott_mcp
Current capabilities
Attach to a dedicated, locally running Chrome profile without exporting its cookies.
Search regular, AAA/CAA, senior, government/military, and corporate/promo categories independently.
Restrict government results to explicitly identified federal offers.
Expand Marriott's current room-rate page and parse each room/rate combination separately.
Read tax-inclusive stay totals, cancellation wording, eligibility, room-pool codes, and rate-program codes.
Require confirmation tokens and revalidation before supported booking mutations.
This project does not promise to bypass Marriott's bot protection. Challenges, access denials, unrecognized pages, and incomplete terms are reported explicitly. It is not affiliated with or endorsed by Marriott International.
Related MCP server: @striderlabs/mcp-ihg
Run from GitHub with npx
The recommended deployment keeps two responsibilities separate:
The user starts a dedicated Chrome profile with local debugging enabled and signs in to Marriott.
The MCP client starts this server through
npxand attaches to that profile.
npx starts the MCP server; it does not start the dedicated Chrome process. Chrome must be running before the first Marriott tool call (starting it before the MCP client is simplest). On macOS:
open -na "Google Chrome" --args \
--user-data-dir="$HOME/Library/Application Support/Marriott-MCP-Chrome" \
--remote-debugging-address=127.0.0.1 \
--remote-debugging-port=9222 \
"https://www.marriott.com/"Use that window to choose cookie preferences, sign in, and complete MFA. The dedicated profile retains its own cookies between launches. Do not use an everyday browsing profile, and do not expose or forward port 9222.
Configure the MCP client to install and run the tagged GitHub source:
{
"mcpServers": {
"marriott": {
"command": "npx",
"args": [
"--yes",
"--package=github:YHRen/marriott_mcp#v0.1.0",
"--",
"mcp-marriott"
],
"env": {
"MARRIOTT_CDP_URL": "http://127.0.0.1:9222",
"MARRIOTT_SPECIAL_RATES": "government",
"MARRIOTT_GOVERNMENT_SCOPE": "federal"
}
}
}
}The repository currently is private, so the account running npx must have authenticated Git access to YHRen/marriott_mcp. A public repository would allow anonymous installation. The first launch can take longer because npm clones the Git repository, installs dependencies, and runs its prepare build; subsequent launches use npm's cache. The version tag is pinned so a later change to main cannot silently alter the installed server.
This GitHub package-spec workflow is supported by npm. It requires Node.js/npm and Git on the MCP host.
Clone and run for development
git clone git@github.com:YHRen/marriott_mcp.git
cd marriott_mcp
npm ci
npx playwright install chromium
npm run build
node dist/index.jsThe browser is visible by default so you can sign in and complete website verification in the same session. To use an installed Google Chrome instead of downloading Chromium:
MARRIOTT_BROWSER_CHANNEL=chrome node dist/index.jsFor a development checkout, an MCP client can run the built local file directly:
{
"mcpServers": {
"marriott": {
"command": "node",
"args": ["/absolute/path/to/marriott_mcp/dist/index.js"],
"env": { "MARRIOTT_BROWSER_CHANNEL": "chrome" }
}
}
}Optional environment settings:
Setting | Purpose |
| Use installed Chrome with a separate automation session. |
| Attach to a user-launched, dedicated Chrome profile instead of launching a browser. |
| Hide the browser. Manual login/recovery then requires restarting in headed mode. |
| Override the encrypted storage directory. |
| Explicitly disable Chromium's sandbox for environments that require it. |
| Comma-separated search categories; defaults to regular plus government. Use |
| Default government filter: |
| Corporate/promo code; required only when |
The optional legacy MARRIOTT_EMAIL/MARRIOTT_PASSWORD environment variables enable automatic login. Manual login avoids storing an account password in client configuration.
Attach to a dedicated Chrome profile
If a normally launched dedicated profile works, you can test attaching the MCP to it. Fully quit only that dedicated Chrome instance, then restart the same profile with a local debugging endpoint (macOS example):
open -na "Google Chrome" --args \
--user-data-dir="$HOME/Library/Application Support/Marriott-MCP-Chrome" \
--remote-debugging-address=127.0.0.1 \
--remote-debugging-port=9222 \
"https://www.marriott.com/"Check that Marriott still works before connecting. Cookie consent is yours to choose; additional marketing cookies are not requested by the MCP. A restart may require signing in or completing MFA again.
MARRIOTT_CDP_URL=http://127.0.0.1:9222 node dist/index.jsFor an MCP client, set that environment variable in its server configuration. Only numeric loopback HTTP endpoints with an explicit port are accepted. Debugging grants control of that dedicated browser to local processes; use it only while needed and never expose or forward the port. Do not use your everyday browsing profile. Chrome's debugging/profile guidance
Attached mode creates its own tab in the existing context. It does not override the profile's cookies, consent, locale, viewport, headers, or request routing, and does not export its cookies or session metadata to the MCP storage directory. Chrome manages the profile's persistence. Booking-attempt records still use the MCP journal. Disconnecting closes the tool tab but preserves Chrome and its other tabs. logout disconnects and clears MCP authentication files; it does not sign the attached profile out of Marriott. Sign out on the website when desired, and restart Chrome without debugging to remove debugging access.
Live read-only validation succeeded with an attached dedicated Chrome profile, but attachment is not a guaranteed bot-detection bypass and site behavior can change.
Login and browser verification
Call login, complete sign-in in the browser opened by this server, then call status to verify and save cookies. Signing in in another browser does not authenticate this session.
The server uses the browser's native user agent and browser properties. There is no guaranteed bot-detection bypass. When Marriott challenges or blocks a request, the tool reports BOT_CHALLENGE, ACCESS_DENIED, or RATE_LIMITED; it does not report zero availability. Call recover_session to bring the existing browser forward, complete verification there, and retry the search. A rate-limited session should wait before retrying.
Unrecognized results pages report PAGE_CHANGED. Login redirects report AUTH_REQUIRED. These states must not be interpreted as sold out.
Configure special rates
Use mcp-config.example.json for a dedicated Chrome session with federal-government-only defaults. Replace its executable path with your checkout. This example is not automatically installed into your MCP client.
The menu categories map to these configuration/tool values:
Marriott menu |
| Search code |
Lowest Regular Rate |
|
|
AAA/CAA |
|
|
Senior Discount |
|
|
Government & Military |
|
|
Corp/Promo Code |
|
|
For example, set this env object in the MCP client's server configuration to inspect several categories:
{
"MARRIOTT_CDP_URL": "http://127.0.0.1:9222",
"MARRIOTT_SPECIAL_RATES": "regular,aaa_caa,senior,government,corporate_promo",
"MARRIOTT_GOVERNMENT_SCOPE": "federal",
"MARRIOTT_CORPORATE_CODE": "YOURCODE"
}Replace YOURCODE with an authorized code, or omit corporate_promo and its code setting. Selecting a discount does not assert that the traveler qualifies. Restart the MCP server after editing its environment.
Each tool call can replace the category defaults, for example:
{
"destination": "Argonne National Laboratory, Lemont, Illinois",
"checkIn": "2026-10-14",
"checkOut": "2026-10-16",
"adults": 1,
"rooms": 1,
"specialRates": ["regular", "government"],
"governmentScope": "federal"
}Explicit tool settings take precedence over the corresponding environment defaults. Empty lists, duplicates, unknown categories, invalid scope, and missing/invalid corporate codes fail before browser work. An explicit specialRates list cannot be combined with the deprecated rateType alias (regular, government, both).
Review all selected rates
search_hotels accepts destination, ISO dates, adults/children per room, rooms, and:
specialRates: one or more categories above; omitted values use MCP configuration.governmentScope:federalorall; defaultfederalunless configured otherwise.corporateCode: overrides the configured corporate/promo code.maxResults: maximum properties inspected, default 10, maximum 50.maxPages: maximum hotel result pages per rate category, default 5, maximum 10.
Each selected category is searched separately with identical dates and occupancy. Government searches now use Marriott's Government & Military menu category (gov), not the separate corporate-code search with GOV. Federal-only filtering additionally requires explicit federal eligibility evidence in each returned rate. State-only, military-only or unspecified government rates do not establish federal availability. governmentScope: "all" retains all verified government subcategories for other users.
On Marriott's current rateListMenu.mi layout, the adapter expands every visible room, switches the page to Show with taxes and fees, and parses each member/non-member rate separately. It accepts room and rate identifiers only when the room-detail URL and decoded product identifier agree on property, room pool, and rate program. This prevents a price or cancellation policy from one rate being attached to another.
get_room_options accepts a hotelId and the same stay and special-rate options, plus usePoints. Award searches use regular award inventory instead of cash-rate configuration defaults; explicitly mixing special cash rates with points is rejected. Rate pagination/load-more controls are followed for up to five pages per category; recognized Rate Details controls are expanded.
Responses include:
offers: all matching inspected offers, not only the cheapest or refundable ones. Each includesofferId, room/rate codes, requested selection, government subcategory, dates, occupancy, money, cancellation/deposit terms, eligibility, and observation time.rateResults: one entry per selected category, containing itsselection,offers,availability,unmatchedRateCount, and coverage/error information. Unmatched or unclassifiable fallback rates are counted, not relabeled as the requested discount.searchesandselectedRateson hotel searches: category discovery coverage, failures and resolved configuration, even when no hotel could be verified.governmentAvailability:available,unavailable,unknown, ornot_requested.coverage.completeand a note explaining incomplete coverage.
The tool no longer returns automatic comparisons/lowest-rate winners. The agent should present the category, full-stay total, cancellation policy/deadline, deposit and eligibility terms to the user, then let the user decide. Search does not select a room, confirm eligibility or book anything. Full-stay totals are read from the website; nightly prices are not multiplied to invent a stay total. Money contains currency, integer minor units, and fraction digits. A bare dollar symbol does not establish USD.
Refundability belongs to the individual rate. The adapter requires affirmative cancellation terms, deposit terms, and an unexpired deadline with an explicit UTC offset before classifying a rate as refundable. Missing or ambiguous terms remain unknown; nonrefundable deposits override positive cancellation wording. Raw deadline text is retained for review.
The current page often displays a cancellation date but omits the cutoff time, UTC offset, and deposit/guarantee terms. Such offers retain the website's exact cancellation wording but remain refundability: "unknown"; agents should show that wording to the user instead of upgrading it to a verified refundable classification. The parser does not click the current Rate Details information icon because live inspection showed that its SPA handler can open a room-selected flyout.
Missing identifiers, unexpanded rates, page limits, incomplete terms, or uncertain pagination are disclosed. A category whose page cannot be parsed remains unknown, while other selected categories can still be reported. Site blocks, login challenges and rate limits stop the operation rather than continuing to make category requests. No currency conversion or automatic ranking is performed.
Corporate offers require both an observed matching corporate-code filter and corporate/negotiated/promo evidence in the rate's name or eligibility. An unrecognized branded corporate offer stays unverified; the requested code alone is not proof. AAA/CAA and senior offers likewise require affirmative rate-name/eligibility evidence.
Government availability does not establish eligibility. Read each offer's terms, including any official-travel and identification requirements. Marriott documents this in its government-rate eligibility guidance and government/military discount guidance. Cancellation deadlines use the hotel's local time; see Marriott cancellation guidance.
Booking
Search for offers, then call
select_roomwith the exactofferId(or passofferIddirectly to checkout).Call
checkoutwith guest details to obtain a preview. Government offers requiregovernmentEligibilityConfirmed: true; other special rates requirespecialRateEligibilityConfirmed: true, after reviewing the traveler's eligibility. Merely configuring categories does not supply that approval.Review the exact hotel, room, rate, occupancy, stay total, deposit, and cancellation terms with the user.
Only after explicit approval call
checkoutwith the returnedconfirmationToken. A token-only call uses the saved parameters.
Tokens are single-use, expire after five minutes, and are bound to the saved request and offer. Changed parameters are rejected. Changed prices or terms generate a new preview or stop checkout; they are never submitted under the old approval. Offers expire after fifteen minutes.
The checkout page must expose an identifiable booking summary and matching stay, room and rate. Missing evidence stops checkout before submission. Only an explicit Complete Booking control is used.
A successful response requires a confirmation number and matching stay/room/rate evidence after submission. An ambiguous outcome is unknown, never success or an instruction to resubmit. A persistent booking-attempt journal prevents the same stay from being automatically submitted again across server restarts. Check get_reservation, Marriott, or your confirmation email to reconcile it. The journal intentionally also blocks another identical stay after a confirmed booking; do not delete it merely to retry an uncertain submission. Run one server process per storage directory.
For points bookings, search with usePoints: true, select an award offer, and use redeem_points for preview and token confirmation. Exact points and any cash component must be verified.
modify_reservation and cancel_reservation use previews and confirmation tokens too; repeat their original parameters with the token. Legacy confirm: true is rejected. Tokens enforce a preview and parameter binding; the MCP client remains responsible for obtaining explicit human approval.
add_extras reports unsupported instead of claiming services were added. Choose a rate with the desired inclusions or arrange extras with the hotel.
Storage
Cookies and session metadata are encrypted under ~/.striderlabs/marriott/ by default, with owner-only file/directory permissions. Valid session cookies (expiry -1) are retained.
Encryption is not an OS keychain: the stored salt plus the originating hostname/username can derive the key. Protect full directory backups accordingly.
logout clears authentication, pending confirmations, and selected offers. It retains the booking-attempt journal to prevent accidental duplicate reservations.
Verification and limitations
npm test
npm run build
# Use installed Chrome for local browser fixtures:
MARRIOTT_BROWSER_CHANNEL=chrome npm testStorage tests create and remove their own temporary directories. Browser tests fulfill all page requests with local HTML fixtures and mock the booking journal; they never contact Marriott or submit real bookings.
The browser adapter is deliberately conservative about unrecognized markup. Fixture tests verify behavior, not Marriott's current production selectors or bot-protection acceptance. A live read-only search and manual review of checkout are still required before relying on this adapter for a particular Marriott page variant. This project is not affiliated with Marriott.
The current rateListMenu.mi room/rate layout has been validated live for regular and federal-government searches, including multi-room-card expansion, tax-inclusive totals, rate-program codes, room-pool codes, eligibility, and visible cancellation wording. Full checkout parsing and automatic selection on this layout remain separate work; offers missing guarantee/deposit evidence are intentionally not bookable. The five category codes above were inspected from the live menu.
SECURITY_REVIEW.md is the historical review of the original implementation, not a current audit of these changes.
Available Tools
17 toolsadd_extrasA
Extras are not supported by this adapter. This tool reports that nothing was added.
| Name | Required | Description | Default |
|---|---|---|---|
| extras | Yes |
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 transparently states the key outcome—nothing is added, only a report. This is sufficient to prevent an agent from expecting a successful state change, though it does not detail response format or potential errors.
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 concise sentences with no filler. The key fact (unsupported) is front-loaded, and the behavioral outcome follows immediately. Every word earns its place.
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 single-parameter no-op tool with no output schema, the description captures the essential behavior. It tells the agent the tool is a stub and its expected result. It could mention what the 'report' looks like, but that is a minor gap given the simplicity.
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 0%, so the description must compensate. It adds meaningful context by indicating the extras parameter is not honored—nothing will be added regardless of its value. However, it does not elaborate on input validation or the meaning of each enum value, which the schema already enumerates.
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 what the tool does: it reports that nothing was added because extras are not supported. This is not a tautology and gives a concrete behavior. It distinguishes itself from siblings by explicitly noting the unsupported nature.
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 it should not be relied upon for adding extras ('Extras are not supported by this adapter'), which is a form of usage guidance. However, it does not explicitly name alternatives or state conditions for when this tool should be called, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_reservationA
Preview a cancellation. After explicit user approval, repeat the same confirmationNumber with confirmationToken.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmationToken | No | ||
| confirmationNumber | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that this is a preview operation, requires explicit user approval, and needs a confirmationToken to actually confirm. This is strong for a destructive operation, though it could further mention irreversibility or authorization requirements.
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 no filler. The core action 'Preview a cancellation' is front-loaded, and the confirmation flow is stated efficiently.
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?
The description captures the essential two-phase flow but leaves some gaps: it does not explicitly state that confirmationToken comes from the preview response, what the preview returns, or how to handle errors. For a low-complexity tool without an output schema, this is adequate but not fully complete.
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 0%, so the description must add meaning. It explains that confirmationNumber is reused across both calls and that confirmationToken is the artifact needed for the confirmed cancellation, giving workflow-level semantics beyond the raw schema names.
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 previews a cancellation and then confirms it by repeating the same confirmationNumber with a confirmationToken. This differentiates it from sibling tools like modify_reservation by naming cancellation as the specific resource and action.
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 a clear two-step workflow: first preview the cancellation, then after explicit user approval call again with the confirmationToken. It does not explicitly mention alternatives like modify_reservation for non-cancellation changes, but the intended usage is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_inC
Request mobile check-in for an existing reservation.
| Name | Required | Description | Default |
|---|---|---|---|
| roomPreferences | No | ||
| confirmationNumber | Yes | ||
| estimatedArrivalTime | No |
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 only says 'Request mobile check-in' without revealing side effects, authentication requirements, or whether the operation mutates reservation state. The action word 'request' hints at a non-destructive operation but does not confirm it.
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, concise sentence with no wasted words. It is appropriately short, though it sacrifices critical detail for brevity. Structurally, it is front-loaded with the core action.
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, no output schema, and a sparse description, the tool is severely incomplete. It fails to explain return values, prerequisites, side effects, or parameter semantics, leaving an agent with insufficient information to call it correctly.
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 0%, so the description must compensate by explaining the parameters. It does not mention confirmationNumber, roomPreferences, or estimatedArrivalTime at all, providing zero guidance on their meaning or usage beyond what the schema itself gives (names/types).
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 states a specific action ('Request') on a specific resource ('mobile check-in') with a condition ('for an existing reservation'). It clearly distinguishes from siblings like modify_reservation or cancel_reservation, so an agent can tell what this tool does without opening the schema.
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 phrase 'for an existing reservation' implies the user must already have a reservation, but it does not explicitly mention when not to use this tool or name alternatives. There is no guidance on how it differs from get_reservation or status, leaving the agent to infer the context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
checkoutA
Prepare a verified checkout preview for the selected offerId. Review total, terms and guest details with the user. Only after explicit user approval call again with the returned confirmationToken. A token-only call uses the saved parameters. Changed price/terms require new approval. Government offers require governmentEligibilityConfirmed; other special rates require specialRateEligibilityConfirmed. Never retry an unknown submission outcome.
| Name | Required | Description | Default |
|---|---|---|---|
| No | |||
| phone | No | ||
| rooms | No | ||
| adults | No | ||
| checkIn | No | ||
| hotelId | No | ||
| offerId | No | ||
| checkOut | No | ||
| children | No | ||
| lastName | No | ||
| roomCode | No | ||
| firstName | No | ||
| specialRequests | No | ||
| confirmationToken | No | ||
| governmentEligibilityConfirmed | No | ||
| specialRateEligibilityConfirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the two-step nature, the requirement for explicit user approval, the effect of changed price/terms, and the eligibility confirmation conditions. It also warns against retrying unknown outcomes, which is a key behavioral constraint. It does not mention side effects like booking finalization, but the token flow implies that.
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 compact yet information-dense, front-loading the purpose and then logically sequencing the workflow, conditions, and a warning. Every sentence adds value, and there is no fluff.
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?
The tool is complex with 16 parameters and no output schema. The description explains the two-step process and key flags, but it omits details on which parameters are needed in each call, error handling beyond unknown outcomes, and what the preview response contains. An agent might not know exactly what to supply for the first call without additional inference.
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 coverage is 0%, so the description must explain parameters. It explains confirmationToken, governmentEligibilityConfirmed, and specialRateEligibilityConfirmed, which are critical. However, it does not clarify the roles of the other 13 parameters (email, phone, dates, guest counts, etc.) beyond the general phrase 'guest details.' It does not indicate which are required for the first call versus the token-only call, leaving some ambiguity.
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 prepares a checkout preview for a given offerId, which is a specific verb-resource pair. It distinguishes itself from siblings like select_room or add_extras by focusing on the checkout step, though it does not explicitly name alternatives.
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 provides explicit workflow guidance: call once to get a token, then call again with that token after user approval. It also specifies conditions for eligibility flags and warns against retrying unknown outcomes. However, it does not state when to prefer this over other booking tools or what precedes it in the flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bonvoy_statusB
Read Marriott Bonvoy points and tier status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 only states that the tool 'Reads' data, implying a non-destructive operation, but it does not disclose authentication requirements, whether it requires a prior login, the response shape, or any error conditions. For a tool that likely depends on session state, this is a significant gap.
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, tight sentence with no filler or redundancy. It front-loads the action and the resource, making the purpose instantly clear. Every word earns its place, and the brevity is appropriate given the tool's simplicity.
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 parameters and no output schema, the description is minimal but lacks critical context. It does not mention that the user may need an active session or that the data might be stale or require authentication. The presence of sibling tools like 'login', 'logout', and 'status' suggests integration with session flow, which is not addressed. An agent cannot fully determine when or how to invoke this tool correctly without additional assumptions.
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 and the input schema is an empty object, so the description has no parameter information to add. Per the baseline rule for 0-parameter tools, a score of 4 is appropriate. The description does not contradict the schema and provides the minimal context needed for a parameterless read.
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 a verb ('Read') and a specific resource ('Marriott Bonvoy points and tier status'). It is unambiguous and provides enough detail to distinguish from the generic sibling 'status' by naming the loyalty program and what is read. However, it does not explicitly name alternative tools or contrast its scope, so it falls just short of a 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?
There is no guidance on when to use this tool versus alternatives. The description does not mention prerequisites (e.g., active session) or scenarios where this tool is preferred over 'status' or other read tools. An agent would have to infer the usage context entirely from the name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hotel_detailsB
Get property details for a Marriott property code or URL.
| Name | Required | Description | Default |
|---|---|---|---|
| hotelIdOrUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It only states 'Get property details' which implies a read operation, but does not mention any side effects, authentication requirements, rate limits, or what the response contains. This is insufficient for a 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 a single, front-loaded sentence that conveys the essential action and input without any filler. It is appropriately concise and easy to parse.
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 simple one-parameter tool with no output schema, the description covers the input type but omits details about the response structure, potential errors, or any behavioral constraints. Given the lack of annotations and output schema, this is a moderate gap – the agent knows what to call but not what to expect back.
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?
With schema description coverage at 0%, the description is the sole source of parameter meaning. It adds clarity by specifying that the parameter is a 'Marriott property code or URL', which goes beyond the schema's generic pattern and URI format. This gives the agent a clear understanding of what to pass.
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 (get) and resource (property details), and specifies the input type (Marriott property code or URL). It doesn't explicitly distinguish from sibling tools like search_hotels, but the purpose is unambiguous and self-contained.
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 for retrieving details of a specific known property, but provides no explicit guidance on when to use it over alternatives like search_hotels or get_room_options. There is no mention of when not to use it or what scenarios favor this tool, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reservationA
Read upcoming Marriott reservations or filter by confirmation number.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmationNumber | No |
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 the tool reads reservations, which implies non-destructive behavior, but does not mention return format (list vs. single), pagination, error handling, or any side effects. The description is minimal and does not adequately disclose behavior beyond the action itself.
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, concise sentence that front-loads the primary purpose and quickly mentions the optional filter. There is no unnecessary wording, and it is efficient for an agent to parse.
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?
The tool is simple with one optional parameter and no output schema. The description covers the core action and parameter role, but it omits the exact return behavior (e.g., list vs. single reservation) and does not guide when to use this tool versus siblings. While adequate for a basic read, it leaves some gaps that an agent might need filled.
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 0%, so the description must compensate. It explains that confirmationNumber is used to filter results, which adds semantic meaning beyond the parameter name. However, it does not clarify the pattern constraints or the effect of omitting the parameter (e.g., returns all upcoming). The description provides basic role but lacks detail.
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 a specific action (read) and resource (upcoming Marriott reservations), and distinguishes itself from siblings like get_stay_history by specifying 'upcoming'. This differentiates it without ambiguity.
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 context (upcoming reservations) and mentions optional filtering, but does not explicitly state when to prefer this over get_stay_history or other tools, nor does it provide exclusions or alternatives. The guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_room_optionsA
Return all matching room/rate offers grouped in rateResults for each selected specialRates category, with cancellation policy, deadline, deposit terms and eligibility. Defaults come from MCP environment config; government scope defaults to federal-only. No rate is automatically selected or ranked. Missing terms remain unknown. usePoints supports only regular award inventory. Review options with the user before choosing an offerId.
| Name | Required | Description | Default |
|---|---|---|---|
| rooms | No | ||
| adults | No | ||
| checkIn | Yes | ||
| hotelId | Yes | ||
| checkOut | Yes | ||
| children | No | ||
| rateType | No | Deprecated alias. Do not combine with specialRates. | |
| usePoints | No | ||
| specialRates | No | Categories to search separately. Overrides MARRIOTT_SPECIAL_RATES. All matching offers and cancellation terms are returned; none is selected automatically. | |
| corporateCode | No | Required for corporate_promo, or set MARRIOTT_CORPORATE_CODE. | |
| governmentScope | No | federal (default) excludes state-only and unverified government eligibility; all includes all verified government/military categories. |
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 discloses that no rate is auto-selected or ranked, that missing terms remain unknown, that usePoints supports only regular award inventory, and that government scope defaults to federal-only. It also instructs to review options with the user before choosing an offerId. This is comprehensive for a read-only tool.
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 compact yet information-dense, with the core function stated first and key caveats following. Every sentence adds value, and it avoids redundancy. It is appropriately sized for the tool's complexity.
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 11 parameters, no output schema, and no annotations, the description covers the essential behaviors, defaults, limitations, and workflow. It could be more detailed on the structure of rateResults or how to interpret cancellation terms, but it gives enough to call the tool correctly. The missing details are not critical for invocation.
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 only 36%, so the description must compensate. It adds meaning to specialRates (categories to search separately), usePoints (regular award inventory only), governmentScope (defaults to federal-only), and corporateCode (implied for corporate_promo). It does not explain rooms, adults, children, dates, or hotelId, but those are self-explanatory and covered by schema patterns. Overall, it adds value beyond the schema.
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 returns all matching room/rate offers grouped in rateResults for each selected specialRates category, including cancellation policy, deadline, deposit terms, and eligibility. It is specific about the resource (room/rate offers) and the action (returning them), and it distinguishes itself from sibling tools like select_room by explicitly noting that no rate is automatically selected or ranked.
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 clear context on how to use the tool, including that defaults come from MCP environment config, government scope defaults to federal-only, and that review with the user before choosing an offerId is required. It does not explicitly name alternatives (e.g., select_room) or state when not to use it, but the guidance is strong enough to orient an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stay_historyD
Read past stays.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. 'Read' implies a safe read operation, but no other behavior is disclosed—no mention of pagination, ordering, what a 'stay' consists of, or whether any side effects occur. The description adds minimal transparency beyond the verb.
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 brief, which could be seen as concise, but it is under-specified rather than efficiently sized. It is front-loaded in the sense that the only information is at the start, but there is no structure or additional detail to justify its brevity.
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 single optional parameter, lack of output schema, and no annotations, the description is wholly inadequate. It does not explain what past stays are, what data is returned, or any ordering or filtering behavior. An agent cannot reliably call this tool based on the description alone.
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 schema coverage is 0% and the description does not mention the 'limit' parameter at all. The description adds no meaning to the parameter, so the agent has no idea how to set or interpret it.
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 states a specific verb ('Read') and resource ('past stays'), but 'stays' is ambiguous and there is no differentiation from the sibling get_reservation, which likely also deals with stay-related data. The purpose is somewhat clear but not precise enough for an agent to distinguish it.
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?
No guidance is provided on when to use this tool versus alternatives like get_reservation. The description gives no context, prerequisites, or exclusions, leaving the agent to infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loginA
Open the server browser for manual Marriott login; optionally use credentials from the server environment. Finish with status.
| 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 must disclose behavior. It reveals that it opens a server browser (interactive), optionally uses environment credentials, and finishes with status. Yet it doesn't explain what 'status' means, whether it blocks, or how it affects an existing session – significant gaps for a state-changing 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 concise, a single sentence with three clauses: action, optional credential use, and completion with status. It front-loads the primary purpose. No wasted words, though the phrase 'Finish with status' is slightly ambiguous.
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 login tool with no params and no output schema, the description covers the basics but leaves out critical context: what happens if already logged in, whether it requires a specific environment setup, and what the status output actually contains. Given the interactive nature and potential side effects, this is incomplete.
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?
There are zero parameters, so the schema coverage is trivially 100% and the baseline is 4. The description adds context about environmental credentials, which is not a parameter but relevant operational detail. No further parameter explanation is needed.
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 states a clear action: 'Open the server browser for manual Marriott login' – a specific verb and resource. It also mentions optional credential usage and finishing with status, which adds context. It is distinct from sibling tools like logout and recover_session, though it doesn't explicitly name them.
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?
Usage is implied: it's for logging in manually. However, there is no explicit guidance on when to prefer this over alternatives like recover_session, or what to do if already logged in. The mention of 'manual' suggests a fallback but doesn't spell out conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logoutA
Clear MCP authentication, pending confirmations and selected offers. An attached Chrome profile is disconnected and stays signed in; sign out in Chrome separately. Booking-attempt journal is retained.
| 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 responsibility. It discloses that it clears auth, pending confirmations, and offers; disconnects Chrome profile but retains sign-in; and retains the booking-attempt journal. This is thorough transparency about side effects and what is preserved.
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 sentences, front-loaded with the primary action. It wastes no words and efficiently communicates the core behavior and the key nuance about Chrome sign-in.
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 no-parameter, no-output tool, the description is complete. It covers what is cleared, what is retained, and the Chrome profile behavior, leaving no ambiguity about the tool's effect.
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, so the baseline is 4. The description adds no parameter semantics because none exist, which is appropriate.
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 states a specific verb 'Clear' with clear objects: MCP authentication, pending confirmations, selected offers. It also distinguishes itself from Chrome sign-out, clarifying its exact scope, which differentiates it from sibling tools like login, recover_session, and status.
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 provides guidance on when to use this tool by clarifying that it clears MCP auth but not Chrome sign-in, explicitly directing users to 'sign out in Chrome separately.' This implies the tool is for MCP-level logout, not browser logout. It doesn't mention explicit alternatives but gives clear contextual instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_reservationA
Preview reservation changes. After explicit user approval, repeat identical parameters with confirmationToken. Changed parameters require a new preview.
| Name | Required | Description | Default |
|---|---|---|---|
| newCheckIn | No | ||
| newCheckOut | No | ||
| newRoomType | No | ||
| specialRequests | No | ||
| confirmationToken | No | ||
| confirmationNumber | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that this is a preview step and that confirmation is required, but it does not explicitly state whether the preview itself modifies the reservation or what side effects occur. It also lacks details on error handling or permission requirements.
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 sentences, front-loaded with the core purpose and followed by the confirmation workflow. There is no redundant or filler content; every sentence adds value.
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?
The tool has 6 parameters, no output schema, and no annotations. The description explains the workflow but does not cover parameter semantics, expected output of the preview, or error conditions. An agent would struggle to construct valid calls or interpret results without additional context.
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 0%, so the description must explain the parameters. It only mentions confirmationToken and the concept of repeating identical parameters, but does not describe the meaning or usage of newCheckIn, newCheckOut, newRoomType, or specialRequests. This is a significant gap for an agent to call the tool correctly.
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 states a specific verb ('Preview') and a clear resource ('reservation changes'), distinguishing it from sibling tools like cancel_reservation or get_reservation. It also conveys the two-phase nature of the operation without ambiguity.
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 explains the workflow: preview first, then confirm with a token, and that changed parameters require a new preview. It provides clear context on when to call the tool and the confirmation step, though it does not explicitly list alternative tools or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recover_sessionA
Bring the same server browser forward to complete a challenge or login. Requires headed mode, which is the default.
| 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 must disclose behavior. It mentions 'Requires headed mode, which is the default', which is a useful behavioral requirement. However, it does not disclose what happens if the session is missing, whether the operation is safe or has side effects, or what the outcome is beyond 'complete a challenge or login'. It adds some context but leaves room for more 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?
Two sentences with no wasted words. The primary purpose is front-loaded, and the critical requirement (headed mode) is stated second. It is concise and well-structured.
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 zero-parameter tool with no output schema, the description covers the essential purpose and a key requirement. It could be more complete by explaining what a 'challenge' entails or what happens if no session exists, but for a simple recovery action it is largely sufficient.
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, so the schema imposes no burden. The description correctly omits parameter details, and the baseline for parameter semantics is 4 when there are no parameters to document.
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: bringing the same server browser forward to complete a challenge or login. It specifies the resource ('server browser') and the purpose, and it is distinct from sibling tools like 'login' which would initiate a new session. No ambiguity or tautology.
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 when to use it (when a challenge or login is needed) but does not explicitly compare to alternatives or state when not to use it. For example, it doesn't say 'use login instead for new sessions'. The guidance is present but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redeem_pointsB
Preview and book an exact award offer from a usePoints search. Only after explicit user approval pass confirmationToken. Never retry an unknown submission outcome.
| Name | Required | Description | Default |
|---|---|---|---|
| No | |||
| phone | No | ||
| rooms | No | ||
| adults | No | ||
| checkIn | No | ||
| hotelId | No | ||
| offerId | No | ||
| checkOut | No | ||
| children | No | ||
| lastName | No | ||
| roomCode | No | ||
| firstName | No | ||
| specialRequests | No | ||
| confirmationToken | No | ||
| governmentEligibilityConfirmed | No | ||
| specialRateEligibilityConfirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It discloses the need for user approval before confirmation and warns against retrying unknown outcomes. However, it does not describe the mutation's side effects, such as points deduction or reservation creation details, leaving significant behavioral unknowns.
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 sentences, front-loading the core purpose and then critical usage rules. It is concise and well-structured, with no fluff. However, the brevity sacrifices completeness, which is penalized elsewhere.
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 16 parameters, no schema descriptions, no output schema, and no annotations, the description is severely incomplete. It does not explain how preview and booking differ, what parameters are required for each scenario, or what the response contains. This is inadequate for an agent to call the tool correctly.
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 schema has 0% description coverage, and the description provides no parameter explanations beyond mentioning confirmationToken. With 16 parameters, none of which are self-explanatory from names alone (e.g., governmentEligibilityConfirmed, specialRateEligibilityConfirmed), this is a critical gap. The description fails to compensate for the missing schema 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 tool's function: preview and book an exact award offer from a usePoints search. It distinguishes itself from siblings like search_hotels and get_room_options by specifying the redemption context. The verb 'redeem' is implicit in the name but the description clarifies the specific action.
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 provides explicit conditions: only pass confirmationToken after explicit user approval, and never retry an unknown submission outcome. It implies the tool should be used after a usePoints search, giving context. However, it does not name alternative tools or explicitly state when not to use it, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_hotelsA
Search each selected specialRates category (or MCP environment defaults) and return all matching offers, grouped by category, with cancellation/deposit terms and eligibility. Government scope defaults to federal-only. Unknown categories are not sold out. No winner is selected: present the options to the user before select_room or checkout. Adults/children are per room.
| Name | Required | Description | Default |
|---|---|---|---|
| rooms | No | ||
| adults | No | ||
| checkIn | Yes | ||
| checkOut | Yes | ||
| children | No | ||
| maxPages | No | ||
| rateType | No | Deprecated alias. Do not combine with specialRates. | |
| maxResults | No | ||
| destination | Yes | ||
| specialRates | No | Categories to search separately. Overrides MARRIOTT_SPECIAL_RATES. All matching offers and cancellation terms are returned; none is selected automatically. | |
| corporateCode | No | Required for corporate_promo, or set MARRIOTT_CORPORATE_CODE. | |
| governmentScope | No | federal (default) excludes state-only and unverified government eligibility; all includes all verified government/military categories. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden, and it does well. It discloses that results are grouped by category, includes cancellation/deposit terms, that no winner is auto-selected (non-committal), that government scope defaults to federal-only, and that adults/children are per room. It does not cover pagination or result limits, but those are partially encoded in parameters. Overall, it adds substantial behavioral context beyond the schema.
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 dense paragraph with no wasted words. Each sentence adds value: the main purpose, the grouping and terms, the government default, the note about unknown categories, the no-winner caveat, and the per-room clarification. It is front-loaded with the core function and keeps clarifications brief. Not overly long for the complexity of the 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?
There is no output schema, so the description must describe return values, and it does: 'return all matching offers, grouped by category, with cancellation/deposit terms and eligibility.' It also covers key behavioral nuances like the default scope and the no-selection policy. It could add details on pagination (maxPages/maxResults) or error handling, but given the 12 parameters and the absence of an output schema, it is largely complete.
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 only 33% (4 of 12 parameters have descriptions). The description compensates by explaining key parameters: specialRates is 'searched separately' and returns all offers; governmentScope has a default and filtering logic; rateType is deprecated; adults/children are per room. This adds meaning that the schema lacks, especially for adults/children semantics and the specialRates search behavior.
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: 'Search each selected specialRates category ... and return all matching offers, grouped by category, with cancellation/deposit terms and eligibility.' It names the resource (hotels, implied by tool name and destination parameter) and provides a specific verb. It also differentiates from siblings by explicitly stating 'No winner is selected' and referencing select_room/checkout, which clarifies its role in the workflow.
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 gives concrete usage context: 'present the options to the user before select_room or checkout' tells when to use this tool versus the selection/checkout steps. It also clarifies defaults (government scope federal-only) and edge cases ('Unknown categories are not sold out'). However, it does not explicitly mention alternatives or when not to use it beyond the workflow sequence, which is slightly less explicit than ideal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_roomA
Select an exact offerId from search results. Legacy room codes require an unambiguous ratePlanCode. Does not submit a reservation.
| Name | Required | Description | Default |
|---|---|---|---|
| hotelId | No | ||
| offerId | No | ||
| roomCode | No | ||
| ratePlanCode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses that the tool does not submit a reservation and that legacy room codes require an unambiguous ratePlanCode. However, it does not mention side effects, state changes, idempotency, or authentication requirements, leaving gaps in the behavioral profile.
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, consisting of two sentences. The primary purpose is front-loaded in the first sentence, and the second adds a specific condition and a crucial clarification. Every word adds value with no 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 tool with 4 parameters, no output schema, and no annotations, the description is incomplete. It does not explain the role of hotelId, the response format, or the prerequisites for calling the tool (e.g., that an offerId must come from prior search results). While it gives key usage hints, an agent would still be uncertain about required inputs and expected output.
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 0%, so the description must explain all parameters. It clarifies offerId as the selection key and gives context to roomCode/ratePlanCode for legacy codes, but hotelId is not mentioned at all. This leaves a required-looking parameter unexplained, making the description insufficient for a 4-parameter tool.
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 selects an exact offerId from search results, which is a specific verb and resource. It also explicitly notes that it does not submit a reservation, distinguishing it from final checkout steps. This effectively differentiates it from siblings like checkout or add_extras.
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 after search results are obtained (from search results) and mentions a legacy room code condition, but it does not explicitly name alternatives or state when not to use it. The clarification that it does not submit a reservation hints at its role, but explicit routing to siblings is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statusA
Verify authentication. Launched sessions save cookies; attached Chrome sessions keep cookies in Chrome without exporting them.
| 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 adds useful context about cookie persistence across session types, which explains potential differences in authentication state. However, it does not specify what the tool returns (e.g., a boolean, a message), whether it has side effects beyond verification, or what happens if the user is not authenticated. It gives some behavioral insight but not complete 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 exceptionally concise: two sentences, with the primary purpose front-loaded in the first sentence and supplementary context in the second. There is no redundant language or filler. Every word contributes to understanding the tool's function and behavior.
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 simplicity of the tool (no parameters, no output schema), the description is mostly adequate but leaves a gap: it does not describe the return value or format. For a status verification tool, an agent would benefit from knowing whether the response is a simple boolean, an object with details, or an error message. The description implies verification but omits this detail, making it incomplete for fully autonomous 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?
The tool has zero parameters, and the schema is trivially 100% covered. Per the rubric, a baseline of 4 is appropriate when there are no parameters to explain. The description does not need to add parameter semantics, and it does not attempt to.
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 states a specific verb ('Verify') and resource ('authentication'), clearly distinguishing this tool from siblings like login, logout, and get_bonvoy_status. It immediately conveys that the tool checks authentication state, and the added cookie context clarifies the scope of what is being verified.
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 a clear use case—checking whether a user is authenticated—and the context of session/cookie handling gives relevant background. However, it does not explicitly state when to use this tool versus alternatives like login or logout, nor does it mention any exclusions or prerequisites. The intent is clear but not fully explicit.
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.
17 tool updates
v0.1.0- First observed
add_extras - First observed
cancel_reservation - First observed
check_in - First observed
checkout - First observed
get_bonvoy_status - First observed
get_hotel_details - First observed
get_reservation - First observed
get_room_options - First observed
get_stay_history - First observed
login - First observed
logout - First observed
modify_reservation - First observed
recover_session - First observed
redeem_points - First observed
search_hotels - First observed
select_room - First observed
status
TDQS
Scored across 17 tools
Most tools have clearly distinct purposes: reservation reads, auth flows, search, selection, checkout, and post-booking actions. However, search_hotels and get_room_options both return offers grouped by specialRates category, creating potential confusion about when to use one versus the other.
The majority of tools follow a consistent snake_case verb_noun pattern (get_reservation, search_hotels, cancel_reservation, etc.). A few exceptions like 'status', 'login', and 'logout' break the pattern but remain readable and predictable.
At 17 tools, the server is slightly above the ideal 3-15 range, but each tool maps to a distinct step in the Marriott booking and account management lifecycle. No tool feels redundant, and the count is justified by the breadth of functionality.
The tool set covers the full core workflow: authentication, hotel search, room options, selection, checkout, reservation management (modify/cancel/check-in), stay history, and loyalty status. The add_extras tool is explicitly a no-op stub, which is a minor dead end, but it transparently communicates non-support.
Maintenance
Related MCP Connectors
Search hotels, get live prices, and check out in chat. Guest search needs no sign-in.
Luxury hotel search, rate comparison, booking quotes, and secure checkout handoff.
Search MCP servers, agent skills and APIs for travel: hotel ID mapping, rates, rooms.
Hotel direct booking for VIP and corporate rates - upgrades and loyalty eligible, 100K+ hotels
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that enables AI agents to search Hilton hotels, manage reservations, and check Hilton Honors status through browser automation. It supports the full booking flow, points redemption, and digital key access via natural language commands.1623MIT
- AlicenseAqualityDmaintenanceEnables hotel search, booking, reservation management, and rewards tracking for IHG hotels via browser automation.12131MIT
- AlicenseAqualityBmaintenanceEnables AI agents to search hotels, check availability, manage reservations, and book rooms on Booking.com via browser automation.215315MIT
- AlicenseAqualityDmaintenanceMCP server for Marriott Hotels that enables AI agents to search hotels, manage reservations, check in, and interact with the Marriott Bonvoy loyalty program via browser automation.16218MIT