Skip to main content
Glama

Server Details

Consumer hotel search, live rates, booking, order management, and payment via TourMind.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 76 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
tourmind-com/Hotel-Booking-AI-MCP
GitHub Stars
0

TDQS

A4.3/5.0

Scored across 11 tools

Disambiguation4/5

Most tools target a distinct resource+action, and the three rate-related tools (search_hotels / query_room_rates / check_room_availability) are separated by descriptions: discovery vs. per-hotel live rates vs. pre-booking re-verification. batch_query_room_rates vs. query_room_rates differs only by batching, which is a mild overlap, and check_skill_update is an unrelated meta-tool sitting in a booking domain but has an unmistakable purpose.

Naming Consistency5/5

Every name is snake_case verb_noun (search_hotels, get_hotel_detail, create_booking, query_booking, cancel_booking, pay_order), and the verb choice consistently signals read vs. write vs. destructive action. No camelCase or noun-only outliers.

Tool Count5/5

11 tools map cleanly onto the booking lifecycle (locate → search → detail → rates → verify → create → query → pay → cancel), which is a well-scoped set for this purpose. Nothing feels padded except arguably check_skill_update, which is still a single small utility.

Completeness4/5

The end-to-end path from location resolution through payment and cancellation is fully covered, including a required pre-booking price re-verification step. Gaps: no list-bookings tool (query_booking requires a known order number) and no modify/amend operation for dates, rooms, or guest details, which agents will hit in real ToC flows.

Available Tools

11 tools
batch_query_room_ratesBatch Query Room RatesA
Read-onlyIdempotent
Inspect

Get live room types and rate products for multiple hotels with partial-success results. 普通 ToC 酒店查询可匿名,user_key 可选;下单、订单查询、取消和支付需要客户端安全配置的 user_key。 每批 1–20 家酒店,逐项检查 ok/data.reason/reason;只对超时等暂时失败项有限重试,不重复整批已成功项。无房属于成功空结果。 查询失败时先区分参数/鉴权错误和上游暂时失败:修正参数或重新授权后再调用,仅暂时失败可有限重试;不得把错误或空结果改述成成功。

NameRequiredDescriptionDefault
adultsNo每房成人数,不是所有房间合计;相同入住配置应用于每间房。有效入住人数必须大于 0。 省略或 0 默认 1;负数无效。
childrenNo每房儿童数,非负整数;省略或 0 表示无儿童,必须等于 children_ages 数组长度。
user_keyNo由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。
hotel_idsYes每批 1–20 个 TourMind 酒店 ID 字符串;输出顺序与输入相同,每项失败独立返回。
room_countNo相同入住配置的房间数;业务处理器将 0 按 1 间处理,负数无效。查询工具可省略;下单工具原有 MCP Schema 要求此字段存在。
check_in_dateNo入住日期,YYYY-MM-DD。 省略/空字符串默认服务端当前日期的明天。
children_agesNo每房儿童年龄数组,逐个为 0–17 岁整数;数组长度必须等于 children,同一组年龄应用于每间房。省略/null/[] 只适用于 children=0。
check_out_dateNo离店日期,YYYY-MM-DD,必须晚于 check_in_date。 省略/空字符串默认入住次日。

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/idempotent/non-destructive, and the description adds substantial context beyond them: per-item partial-success semantics (ok/data.reason/reason), no-room as a successful empty result, limited retries only for transient failures, and an explicit prohibition on restating errors or empty results as success. This is unusually rich behavioral disclosure 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the verb+resource+partial-success framing before the operational rules. It is dense—mixing English and Chinese and packing auth, batching, retry, and error-handling into a few sentences—but every sentence carries operational meaning rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter batch query with auth nuance and partial-failure semantics, the description covers the essentials an agent needs: batching limits, auth requirements, per-item success/failure inspection, retry discipline, and no-room handling. An output schema exists so return-value detail need not be restated, and nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 8 parameters thoroughly. The description only reinforces auth semantics around user_key (optional for ToC queries, required for order/payment operations); it adds no format or constraint detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb+resource ('Get live room types and rate products') plus batch scope ('multiple hotels') and a distinguishing output trait ('partial-success results'). It separates itself from single-hotel/availability siblings implicitly via 'multiple hotels' but never names query_room_rates or check_room_availability explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states concrete usage conditions: anonymous ToC queries may omit user_key while booking/order/cancel/payment require it, and batches must be 1–20 hotels. It also prescribes retry policy ('只对超时等暂时失败项有限重试,不重复整批已成功项') and distinguishes no-room from failure. It does not explicitly compare against sibling tools like query_room_rates, leaving selection partly inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_bookingCancel BookingA
Destructive
Inspect

Cancel a booking owned by the authenticated account. Configure a valid TourMind user_key in a trusted local Skill or client integration that supplies the user_key tool argument. Do not ask users to paste user keys into chat. 普通 ToC 酒店查询可匿名,user_key 可选;下单、订单查询、取消和支付需要客户端安全配置的 user_key。 先查询订单,让用户明确确认具体订单及可能的取消费用后再取消。结果不明时先查订单,不盲目重复取消;refund_amount 不证明退款已到账。

NameRequiredDescriptionDefault
user_keyYes由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。
agent_ref_idYescreate_booking 返回的 TourMind 订单号,必须属于当前鉴权用户;不是酒店确认号或第三方支付订单号。

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and openWorldHint=true, and the description adds substantive context beyond that: cancellation may incur fees, 'refund_amount does not prove the refund has settled', and repeated cancels should not be attempted on ambiguous outcomes. Credential handling rules (configure via trusted local Skill, never ask users to paste keys in chat) are also disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first sentence and every later sentence carries real guidance (credentials, pre-cancel verification, retry caution, refund caveat). It is longer than strictly minimal and mixes English and Chinese, which slightly hurts scannability, but nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With destructiveHint annotations covering the safety profile and an output schema covering return values, the description fills the remaining gaps an agent needs for a destructive, credentialed mutation: prerequisite setup, confirmation workflow, retry policy, and refund interpretation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the description nevertheless adds operational meaning for user_key (client-configured credential, never collected in chat, optional for anonymous ToC lookups but mandatory for order/payment actions) and reinforces that agent_ref_id identifies a TourMind order belonging to the authenticated user.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Cancel) and resource (a booking), plus the scope constraint 'owned by the authenticated account'. No sibling performs cancellation, so it is unambiguously distinguishable from query_booking, create_booking and pay_order.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly prescribes querying the order and obtaining user confirmation of the specific order and possible cancellation fee before cancelling, and states the when-not case: if the result is unclear, re-query instead of blindly retrying. It also names the required prerequisite (a trusted client-supplied user_key) and excludes OAuth/ToB contexts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_room_availabilityCheck Room AvailabilityA
Read-onlyIdempotent
Inspect

Recheck the selected rate code, price, and inventory before booking. 普通 ToC 酒店查询可匿名,user_key 可选;下单、订单查询、取消和支付需要客户端安全配置的 user_key。 选择报价后、下单前必须用相同入住条件验价;读取 data.room_types[].rateInfos 的当前 rateCode/totalPrice/currencyCode、库存和取消政策。价格或政策变化须用户重新确认;验价不锁库存。 查询失败时先区分参数/鉴权错误和上游暂时失败:修正参数或重新授权后再调用,仅暂时失败可有限重试;不得把错误或空结果改述成成功。

NameRequiredDescriptionDefault
adultsNo每房成人数,不是所有房间合计;相同入住配置应用于每间房。有效入住人数必须大于 0。 省略或 0 默认 1;负数无效。
childrenNo每房儿童数,非负整数;省略或 0 表示无儿童,必须等于 children_ages 数组长度。
hotel_idYesTourMind 酒店 ID,数字字符串;从地点/酒店搜索返回取得,不使用 Google place_id。
user_keyNo由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。
rate_codeYes不透明报价代码,原样传递;验价使用 query_room_rates 返回值,下单使用 check_room_availability 最新返回值,酒店/日期/入住人数必须一致。
room_countNo相同入住配置的房间数;业务处理器将 0 按 1 间处理,负数无效。查询工具可省略;下单工具原有 MCP Schema 要求此字段存在。
check_in_dateNo入住日期,YYYY-MM-DD。 省略/空字符串默认服务端当前日期的明天。
children_agesNo每房儿童年龄数组,逐个为 0–17 岁整数;数组长度必须等于 children,同一组年龄应用于每间房。省略/null/[] 只适用于 children=0。
check_out_dateNo离店日期,YYYY-MM-DD,必须晚于 check_in_date。 省略/空字符串默认入住次日。

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses key behavior: price verification does not lock inventory, price or policy changes require user reconfirmation, and errors must not be restated as success. It also explains the auth boundary for user_key, adding meaningful context beyond readOnly/idempotent hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and the later sentences generally earn their place by covering auth, verification, output-field reading, reconfirmation, and error handling. The mixed English/Chinese structure and dense semicolon-separated clauses make it slightly less crisp than it could be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a pre-booking verification tool with nine parameters, rich annotations, and an output schema, the description covers when to use it, auth requirements, what to read from the response, reconfirmation rules, no inventory lock, and error handling. Nothing critical for correct use appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all nine parameters are already well documented in the schema. The description reinforces that user_key is optional for ordinary ToC queries and that the same stay conditions must be used, but it does not add syntax or format details beyond the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: recheck the selected rate code, price, and inventory before booking. It distinguishes this verification step from initial rate searching and from booking by tying it to a selected quote and the pre-booking stage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when this must be used: after selecting a quote and before placing an order, with the same stay conditions. It also gives clear conditions for reconfirmation and retry behavior, which directly guides correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_skill_updateCheck Skill UpdateA
Read-onlyIdempotent
Inspect

Check whether a newer TourMind Booking Skill version is available. 普通 ToC 酒店查询可匿名,user_key 可选;下单、订单查询、取消和支付需要客户端安全配置的 user_key。 仅在已知安装的 Skill 版本时调用;直接使用 MCP 的客户端无需伪造 Skill 版本。 查询失败时先区分参数/鉴权错误和上游暂时失败:修正参数或重新授权后再调用,仅暂时失败可有限重试;不得把错误或空结果改述成成功。

NameRequiredDescriptionDefault
current_versionYes已安装 TourMind Skill 的语义版本,例如 1.0.0;没有安装 Skill 的 MCP 客户端不要编造版本。

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and open-world. The description goes further with a concrete failure protocol: distinguish parameter/auth errors (fix params or re-auth, then retry) from transient upstream failures (limited retry only), and never reframe errors or empty results as success. That is real operational guidance beyond the structured fields, though the interjected user_key/anonymous-query sentence is unrelated to this tool and dilutes the message.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and the call-condition are front-loaded, which is good, but the sentence about anonymous ToC hotel queries and user_key requirements for booking/cancellation/payment belongs to other tools entirely and is dead weight here. The remaining content is dense but mixed-language and only loosely ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return values, and rich annotations cover the safety profile. Between them, purpose, call precondition, and failure handling are all covered, so an agent could invoke this correctly; only the meaning of a 'newer version' result and retry bounds remain implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single required parameter is fully documented in the schema, so the baseline is 3. The description only echoes the 'known installed version' constraint ('do not fabricate a version') and adds no format, comparison, or fallback semantics beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb and resource: check whether a newer TourMind Booking Skill version is available. That is unambiguous and clearly distinct from every sibling tool (booking, rates, search). It stops short of naming the version-comparison semantics (how 'newer' is determined), which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second line is an explicit precondition ('call only when the installed Skill version is known') paired with an explicit exclusion ('MCP clients that use the tools directly need not fabricate a Skill version'). The applicability boundary is stated outright rather than inferred, and no sibling offers an alternative path that would need mentioning.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_bookingCreate BookingA
Destructive
Inspect

Create a hotel booking from a verified rate. Configure a valid TourMind user_key in a trusted local Skill or client integration that supplies the user_key tool argument. Do not ask users to paste user keys into chat. 普通 ToC 酒店查询可匿名,user_key 可选;下单、订单查询、取消和支付需要客户端安全配置的 user_key。 先验价并让用户确认酒店、日期、每房入住人、总价/币种、餐食和取消费用,再创建订单。下单不代表支付或酒店确认;使用 query_booking 查最新状态。没有幂等键,超时/断线结果不明时不得自动重复下单,应先核实订单。

NameRequiredDescriptionDefault
roomsNo按房间分组的入住人,提供非空数组时长度必须等于有效 room_count;每房至少 1 名、最多 adults 名,优先于 guest_name。
adultsYes每房成人数,不是所有房间合计;相同入住配置应用于每间房。有效入住人数必须大于 0。 此入口不提供默认值;在使用入住条件时必须显式提供。
childrenNo每房儿童数,非负整数;省略或 0 表示无儿童,必须等于 children_ages 数组长度。
currencyYes核实报价的 ISO 4217 币种;订单实际以鉴权账号结算币种为准,本参数不改变账号币种。
hotel_idYesTourMind 酒店 ID,数字字符串;从地点/酒店搜索返回取得,不使用 Google place_id。
user_keyYes由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。
rate_codeYes不透明报价代码,原样传递;验价使用 query_room_rates 返回值,下单使用 check_room_availability 最新返回值,酒店/日期/入住人数必须一致。
guest_nameYes入住人法定全名;现有 MCP Schema 要求该字段始终存在。未提供非空 rooms 时业务处理器按本字段解析姓名;rooms 非空时优先使用其姓名。
room_countYes相同入住配置的房间数;业务处理器将 0 按 1 间处理,负数无效。查询工具可省略;下单工具原有 MCP Schema 要求此字段存在。
total_priceYes最新验价的全部房间、整段入住总价,currency 主单位,必须大于 0;未含另列 Stripe 手续费。价格变化须先征得用户确认。
check_in_dateYes入住日期,YYYY-MM-DD。 此入口不提供默认值;在使用入住条件时必须显式提供。
children_agesNo每房儿童年龄数组,逐个为 0–17 岁整数;数组长度必须等于 children,同一组年龄应用于每间房。省略/null/[] 只适用于 children=0。
contact_emailNo订单通知邮箱,可省略;应向用户核实,不编造。
contact_phoneNo联系手机号,可带国家码;最多 32 字节,不允许换行。可省略。
check_out_dateYes离店日期,YYYY-MM-DD,必须晚于 check_in_date。 此入口不提供默认值;在使用入住条件时必须显式提供。

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description discloses important operational behavior: booking does not equal payment or hotel confirmation, status must be checked with query_booking, there is no idempotency key, and timeout/ambiguous outcomes require verification rather than automatic retry. It also explains the user_key security model and that users must not paste keys into chat.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the action, then proceeds through credential setup, usage prerequisites, and failure handling. Although it is bilingual, each sentence contributes distinct safety or workflow information for a high-stakes 15-parameter booking tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the mutation risk, 15 parameters, output schema, and annotations, the description is complete enough to call the tool correctly. It covers prerequisites, confirmation requirements, user_key security, non-idempotent retry behavior, and the need to query status after creation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already carries detailed parameter semantics. The description adds workflow context around verified rates and user confirmation but does not meaningfully expand individual parameter meanings beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states the specific action and resource: create a hotel booking from a verified rate. It distinguishes this mutation from payment and hotel confirmation, and points to query_booking for status checks, so an agent can separate it from pay_order, cancel_booking, and query_booking.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly requires verifying the rate and getting user confirmation of hotel, dates, guests, total price/currency, meals, and cancellation fees before creating the booking. It also states the user_key setup requirement and warns not to automatically retry after a timeout or disconnect because no idempotency key exists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_hotel_detailGet Hotel DetailA
Read-onlyIdempotent
Inspect

Get static hotel details, facilities, rooms, policies, and images. 普通 ToC 酒店查询可匿名,user_key 可选;下单、订单查询、取消和支付需要客户端安全配置的 user_key。 使用已解析的 hotel_id 获取静态设施、政策、图片;不据此判断实时库存。 查询失败时先区分参数/鉴权错误和上游暂时失败:修正参数或重新授权后再调用,仅暂时失败可有限重试;不得把错误或空结果改述成成功。

NameRequiredDescriptionDefault
hotel_idYesTourMind 酒店 ID,数字字符串;从地点/酒店搜索返回取得,不使用 Google place_id。
languageNo酒店图片查询语言,省略默认 zh-CN;直接传给图片服务,不承诺全部酒店文字翻译,也不改变 web_url 的固定 zh-CN 语言。
user_keyNo由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real value on top: anonymous ToC queries without user_key, required user_key only for booking/payment flows, and a strong rule not to restate errors or empty results as success. It does not discuss rate limits or caching of static data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose and the static-vs-live distinction are front-loaded, but the description mixes languages and includes auth rules for ordering/payment/cancellation, which are not operations this read-only tool performs, adding noise for the agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation; the description covers scope, auth necessity, and failure handling sufficiently for a read-only detail lookup. Minor gaps are the absence of any caching or freshness note for 'static' data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so hotel_id provenance (not a Google place_id) and user_key optionality are already documented there. The description adds only the framing of user_key as safety-config-supplied, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get static hotel details, facilities, rooms, policies, and images') and the qualifier 'static' plus '不据此判断实时库存' separates it from rate/availability siblings such as check_room_availability and query_room_rates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Tells the agent to call it with an already-resolved hotel_id and explicitly warns not to use it for real-time inventory, which routes to the rate/availability tools. It also gives error-triage guidance (fix params/re-auth vs. limited retry on transient failure). It never names a sibling or alternative explicitly, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pay_orderPay OrderA
Destructive
Inspect

Create a payment request for a booking owned by the authenticated account. CNY WeChat Pay and Alipay return a one-time device-aware payment link. 支付宝AI付 returns prepay_id and expires_at for Qwen batchPay; requires the user's cashier confirmation and server-side order status verification. Configure a valid TourMind user_key in a trusted local Skill or client integration that supplies the user_key tool argument. Do not ask users to paste user keys into chat. 普通 ToC 酒店查询可匿名,user_key 可选;下单、订单查询、取消和支付需要客户端安全配置的 user_key。 先查询订单,仅在待支付且用户确认支付方式、币种、订单金额及 Stripe 另收手续费后发起。生成链接/预支付信息不表示支付成功,需用户完成收银台并查询订单核实。超时或状态不明先查订单,不自动重复支付。支付宝AI付仅适用于支持千问 batchPay 的客户端。

NameRequiredDescriptionDefault
user_keyYes由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。
agent_ref_idYescreate_booking 返回的 TourMind 订单号,必须属于当前鉴权用户;不是酒店确认号或第三方支付订单号。
payment_methodYes精确枚举:Stripe、微信支付、支付宝、支付宝AI付。后三种仅 CNY;支付宝AI付需千问原生收银台,返回 prepay_id,不是可点击支付链接。

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say destructive=true and openWorld=true; the description goes well beyond by disclosing auth requirements (user_key must come from a trusted local client, never pasted in chat; required for payment, optional for anonymous ToC search), the fact that a returned link/prepay info is not proof of payment, and that server-side order verification is needed. It also flags a distinct Stripe surcharge and channel currency restrictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Critical warnings are front-loaded, but the text is long and mixes Chinese and English, repeating constraints (user_key handling, Alipay AI pay limits appear twice, and the schema repeats much of the same guidance). Several sentences could be merged without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world payment tool with an output schema present, the description covers when to call, what each channel returns, auth provisioning, and non-idempotency risk — essentially everything an agent needs. The main completeness weakness is that the bilingual split could leave a monolingual agent with only part of the guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema: semantics of the one-time device-aware link for WeChat/Alipay versus prepay_id + expires_at for Alipay AI pay, and the identity constraint that agent_ref_id must belong to the authenticated user. Some of this overlaps the schema text, keeping it below 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: 'Create a payment request for a booking owned by the authenticated account.' It also names the exact artifact returned per payment channel (device-aware link vs. prepay_id), which distinguishes it from create_booking, query_booking and cancel_booking among the siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit preconditions (query the order first, only when status is pending payment and the user has confirmed method, currency, amount, and Stripe surcharge) plus exclusions (do not auto-retry on timeout/unknown status; Alipay AI pay only for Qwen batchPay-capable clients). Both 'when to use' and 'when not to use' are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_bookingQuery BookingA
Read-onlyIdempotent
Inspect

Query a booking owned by the authenticated account. Configure a valid TourMind user_key in a trusted local Skill or client integration that supplies the user_key tool argument. Do not ask users to paste user keys into chat. 普通 ToC 酒店查询可匿名,user_key 可选;下单、订单查询、取消和支付需要客户端安全配置的 user_key。 仅查询当前账号拥有的 TourMind 订单号;核实付款和酒店确认均使用本工具返回的状态。PENDING 表示已支付待确认,不能再次支付。 查询失败时先区分参数/鉴权错误和上游暂时失败:修正参数或重新授权后再调用,仅暂时失败可有限重试;不得把错误或空结果改述成成功。

NameRequiredDescriptionDefault
user_keyYes由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。
agent_ref_idYescreate_booking 返回的 TourMind 订单号,必须属于当前鉴权用户;不是酒店确认号或第三方支付订单号。

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/openWorldHint, and the description adds value well beyond them: the PENDING status semantics (paid, awaiting confirmation, must not be paid again), the auth model (user_key supplied by a trusted local Skill, never pasted into chat), and retry policy on failures. It also warns against rephrasing errors or empty results as success, which is a real agent failure mode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and the user_key handling rule are front-loaded, but the same user_key / trusted-client instruction appears in the English text, again in the Chinese text, and a third time in the schema, making the block noticeably redundant. The language mixing also adds parsing overhead without adding information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description covers everything else an agent needs: ownership restriction on the order number, auth sourcing for user_key, status interpretation, and failure/retry handling. Nothing required to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are fully documented in the schema, including that user_key may be omitted for ToC queries and that agent_ref_id is not a hotel confirmation or third-party payment number. The description restates rather than extends that information. Baseline 3 is appropriate when the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (query a booking) and scopes it to bookings owned by the authenticated account, identified by the agent_ref_id returned from create_booking. It also implicitly separates itself from pay_order by declaring PENDING means already paid. It stops short of naming sibling alternatives (create_booking, cancel_booking, query_room_rates) explicitly, so differentiation is only partial.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for when user_key is optional (anonymous ToC hotel search) versus mandatory (ordering, order query, cancellation, payment), and instructs using this tool to verify payment and hotel confirmation. Error handling guidance — distinguish param/auth errors from transient upstream failure, retry only the latter — is concrete and actionable. No explicit 'use X instead of this tool' routing is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_room_ratesQuery Room RatesA
Read-onlyIdempotent
Inspect

Get live room types and rate products for a hotel and stay. 普通 ToC 酒店查询可匿名,user_key 可选;下单、订单查询、取消和支付需要客户端安全配置的 user_key。 先确定酒店和入住条件,返回 data.room_types[].products;选择符合成人/儿童和餐食政策的报价后验价。产品摘要未提供 maxChildren,缺失不等于不接待儿童,必须按实际儿童人数/年龄验价。 查询失败时先区分参数/鉴权错误和上游暂时失败:修正参数或重新授权后再调用,仅暂时失败可有限重试;不得把错误或空结果改述成成功。

NameRequiredDescriptionDefault
adultsNo每房成人数,不是所有房间合计;相同入住配置应用于每间房。有效入住人数必须大于 0。 省略或 0 默认 1;负数无效。
childrenNo每房儿童数,非负整数;省略或 0 表示无儿童,必须等于 children_ages 数组长度。
hotel_idYesTourMind 酒店 ID,数字字符串;从地点/酒店搜索返回取得,不使用 Google place_id。
user_keyNo由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。
room_countNo相同入住配置的房间数;业务处理器将 0 按 1 间处理,负数无效。查询工具可省略;下单工具原有 MCP Schema 要求此字段存在。
check_in_dateNo入住日期,YYYY-MM-DD。 省略/空字符串默认服务端当前日期的明天。
children_agesNo每房儿童年龄数组,逐个为 0–17 岁整数;数组长度必须等于 children,同一组年龄应用于每间房。省略/null/[] 只适用于 children=0。
check_out_dateNo离店日期,YYYY-MM-DD,必须晚于 check_in_date。 省略/空字符串默认入住次日。

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses that ToC queries are anonymous and user_key is optional while booking/payment require it, distinguishes parameter/auth errors from transient upstream failures, prescribes limited retries only for transient failures, and warns against restating errors/empty results as success. It also flags that a missing maxChildren does not mean children are rejected — a non-obvious caveat not captured by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in one clean English sentence, followed by dense but purposeful guidance. The mixed Chinese/English is information-dense and mostly earns its place, though the volume of operational instruction is heavier than a pure selection aid needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be fully explained, and the description still touches data.room_types[].products. Combined with annotations covering safety and 100% schema coverage, the definition gives an agent enough to call it correctly; only explicit sibling differentiation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 eight parameters in detail (per-room adults, children_ages length matching children, date defaults). The description reinforces the user_key optionality nuance but adds little parameter semantics beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb and resource ('Get live room types and rate products for a hotel and stay') and even names the return shape (data.room_types[].products). However, it does not distinguish this tool from close siblings like check_room_availability or batch_query_room_rates, which an agent must otherwise infer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It establishes the preceding step ('先确定酒店和入住条件') and the follow-on step (select a quote matching adult/child and meal policy, then verify price), giving clear workflow context. It stops short of explicitly excluding or routing to alternative sibling tools for availability vs. rates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_hotelsSearch HotelsA
Read-onlyIdempotent
Inspect

Search candidate hotels by region, coordinates and radius, or fuzzy keyword. 普通 ToC 酒店查询可匿名,user_key 可选;下单、订单查询、取消和支付需要客户端安全配置的 user_key。 任一非 null 坐标参数会选择坐标模式,必须齐全提供经纬度与正半径;否则非空 keyword 走模糊匹配,否则必须给 region_id。区域/坐标结果已实时筛选,关键词结果仅供定位。预算最终按验价总价核对,不能用每晚参考价代替订单总价。 查询失败时先区分参数/鉴权错误和上游暂时失败:修正参数或重新授权后再调用,仅暂时失败可有限重试;不得把错误或空结果改述成成功。

NameRequiredDescriptionDefault
limitNo仅关键词模糊搜索生效;省略或 0 使用 20;服务端未定义最大值,负值直接交给搜索服务处理,不应传负值。区域/坐标搜索固定最多取 20 个候选再实时筛选。
adultsNo每房成人数,不是所有房间合计;相同入住配置应用于每间房。有效入住人数必须大于 0。 省略或 0 默认 1;负数无效。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。
keywordNo地点或酒店名称。search_location 必填非空白文本;search_hotels 中关键词模式优先于 region_id,坐标模式优先于关键词。
childrenNo每房儿童数,非负整数;省略或 0 表示无儿童,必须等于 children_ages 数组长度。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。
latitudeNo搜索中心纬度,-90 至 90 度;使用坐标模式必须同时提供 longitude 和 radius_km。
user_keyNo由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。
longitudeNo搜索中心经度,-180 至 180 度;使用坐标模式必须同时提供 latitude 和 radius_km。
radius_kmNo搜索半径,公里,必须大于 0;没有自动默认值,可显式使用 search_location 建议值。
region_idNoTourMind 区域 ID 数字字符串。没有坐标且 keyword 为空时使用区域模式;地区名称须先 search_location 解析。
room_countNo相同入住配置的房间数;业务处理器将 0 按 1 间处理,负数无效。查询工具可省略;下单工具原有 MCP Schema 要求此字段存在。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。
lowest_priceNo最低预算:CNY 元的整数,全部房间、整段入住总价口径;省略或非正数不启用下限。当前候选过滤比较缓存累计单房价格,未按 room_count 折算,并不保证最终实时总价满足预算;最终必须按验价总价核对。
check_in_dateNo入住日期,YYYY-MM-DD。 省略/空字符串默认服务端当前日期的明天。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。
children_agesNo每房儿童年龄数组,逐个为 0–17 岁整数;数组长度必须等于 children,同一组年龄应用于每间房。省略/null/[] 只适用于 children=0。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。
highest_priceNo最高预算:CNY 元的整数,全部房间、整段入住总价口径;省略或非正数不启用上限。当前候选过滤比较缓存累计单房价格,未按 room_count 折算,并不保证最终实时总价满足预算;最终必须按验价总价核对。
location_nameNo区域或坐标中心的可读名称,用于结果范围说明,不替代 region_id/坐标。
check_out_dateNo离店日期,YYYY-MM-DD,必须晚于 check_in_date。 省略/空字符串默认入住次日。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent/openWorld annotations it discloses that region and coordinate results are already filtered in real time whereas keyword results are only for locating, that budget filtering compares cached per-room prices and does not guarantee the final total, and that temporary upstream failures are the only retryable case. The only gap is a lack of detail on pagination or result shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the purpose, then mode rules, then auth, then the budget caveat, then error handling; every sentence carries operative content. It is dense and slightly long, with some overlap against the schema's own descriptions, but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a 16-parameter tool with an output schema, the description covers the mode routing, authentication requirements, budget caveat, and error-retry policy, which is everything an agent needs beyond the schema. Return values correctly need not be explained because the output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, yet the description adds cross-parameter meaning the schema cannot express, such as coordinate mode being triggered by any single non-null coordinate field and keyword taking precedence over region_id while coordinates take precedence over keyword. Most individual parameter definitions remain in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names a specific verb and resource and enumerates the three search modes (region / coordinates+radius / fuzzy keyword), so an agent immediately knows what the tool does. It never names an alternative sibling by name, so the differentiation is implicit rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives the exact mode-selection precedence: any non-null coordinate parameter forces coordinate mode and requires lat/lon/positive radius, otherwise a non-empty keyword triggers fuzzy matching, otherwise region_id is mandatory. It also states when user_key is required (booking/order/cancel/pay) versus optional for anonymous ToC queries, and when to retry versus fix parameters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_locationSearch LocationA
Read-onlyIdempotent
Inspect

Resolve a region, point of interest, landmark, shopping mall, or hotel name to TourMind regions, hotels, or coordinates. 普通 ToC 酒店查询可匿名,user_key 可选;下单、订单查询、取消和支付需要客户端安全配置的 user_key。 先用此工具解析用户地点/酒店名,再用返回的 ID 或坐标搜索酒店;不得编造 ID。 查询失败时先区分参数/鉴权错误和上游暂时失败:修正参数或重新授权后再调用,仅暂时失败可有限重试;不得把错误或空结果改述成成功。

NameRequiredDescriptionDefault
keywordYes地点或酒店名称。search_location 必填非空白文本;search_hotels 中关键词模式优先于 region_id,坐标模式优先于关键词。
user_keyNo由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/idempotent/non-destructive, and the description adds substantial context beyond them: anonymous ToC queries work without user_key, while booking/order/cancel/payment operations require a client-configured user_key. It also discloses the error taxonomy and retry policy, which annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The tool's own behavior is front-loaded and the key sequencing rule appears early. The auth paragraph spends several clauses on booking/order/payment operations that this read-only tool never performs, which is slightly off-target but still fast to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and the description covers the remaining agent-critical points: required sequencing with search_hotels, the no-fabricated-IDs constraint, auth requirements, and how to handle failures. Nothing essential to invoking it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters in detail (non-blank keyword, user_key sourcing and when it is required). The description restates the user_key optionality for ToC lookups, which is marginally useful but largely duplicates the schema, so it lands at the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb (resolve) plus the exact resource types (region, POI, landmark, mall, hotel name) and the output form (TourMind regions, hotels, coordinates). The follow-up sentence explicitly separates this from search_hotels by stating this tool resolves names first and search_hotels consumes the resulting IDs/coordinates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the intended sequence ('use this tool first to resolve the location/hotel name, then search hotels with the returned ID or coordinates'), forbids fabricating IDs, and gives explicit failure-handling guidance (distinguish parameter/auth errors from transient upstream failures; retry only transient ones a limited number of times).

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.

  1. 11 tool updates
    • Changedbatch_query_room_rates9 fields changed
      • changedInput schema / properties / adults / description
        Previous value: -"Number of adults in each room"New value: +"每房成人数,不是所有房间合计;相同入住配置应用于每间房。有效入住人数必须大于 0。 省略或 0 默认 1;负数无效。"
      • changedInput schema / properties / check_in_date / description
        Previous value: -"Check-in date in YYYY-MM-DD format"New value: +"入住日期,YYYY-MM-DD。 省略/空字符串默认服务端当前日期的明天。"
      • changedInput schema / properties / check_out_date / description
        Previous value: -"Check-out date in YYYY-MM-DD format"New value: +"离店日期,YYYY-MM-DD,必须晚于 check_in_date。 省略/空字符串默认入住次日。"
      • changedInput schema / properties / children / description
        Previous value: -"Number of children in each room"New value: +"每房儿童数,非负整数;省略或 0 表示无儿童,必须等于 children_ages 数组长度。"
      • changedInput schema / properties / children_ages / description
        Previous value: -"Ages of the children in each room, each from 0 to 17"New value: +"每房儿童年龄数组,逐个为 0–17 岁整数;数组长度必须等于 children,同一组年龄应用于每间房。省略/null/[] 只适用于 children=0。"
      • changedInput schema / properties / hotel_ids / description
        Previous value: -"TourMind hotel identifiers to query"New value: +"每批 1–20 个 TourMind 酒店 ID 字符串;输出顺序与输入相同,每项失败独立返回。"
      • changedInput schema / properties / room_count / description
        Previous value: -"Number of rooms using the same occupancy"New value: +"相同入住配置的房间数;业务处理器将 0 按 1 间处理,负数无效。查询工具可省略;下单工具原有 MCP Schema 要求此字段存在。"
      • changedInput schema / properties / user_key / description
        Previous value: -"Optional TourMind user key for authenticated ToC access"New value: +"由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
      • addedOutput schema / description
        Added value: +"返回字段说明(不增加校验约束;缺失、零值和 null 按各字段说明解释):\n返回值 [object] 必有字段=ok: 业务响应信封;字段缺失表示没有提供,不能自动补零。数组的 null 与 [] 都不含条目,但 null 不承诺完成了该部分查询。\n返回值.data [object] 必有字段=results,summary: 逐酒店结果及汇总;外层 ok=true 仍可能有部分或全部酒店失败。\n返回值.data.results [array]: 输入顺序的酒店结果,每项独立处理。\n返回值.data.results[] [object] 必有字段=hotel_id,ok: 与输入 hotel_ids 同序的一项结果。ok=true 且 data.reason=no_matching_live_room 为成功空结果;ok=false 时返回 reason/error,省略 data。\n返回值.data.results[].data [object] 必有字段=room_types,total,stripe_payment_fee_notice: 房价查询结果。非空返回 room_types/total/手续费说明;空结果增加 reason。\n返回值.data.results[].data.reason [string] 取值=[\"no_matching_live_room\"]: 仅成功空结果出现,表示当前没有匹配的实时房价。\n返回值.data.results[].data.room_types [array]: 实时房型列表;空数组表示该入住条件下没有匹配报价。\n返回值.data.results[].data.room_types[] [object] 必有字段=name,products\n返回值.data.results[].data.room_types[].basic_room_image [string]: 房型图片 URL。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.results[].data.room_types[].bed_type_desc [string]: 床型说明。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.results[].data.room_types[].name [string]: 名称。\n返回值.data.results[].data.room_types[].name_cn [string]: 中文名称。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.results[].data.room_types[].products [null|array]: 按入住容量、餐食和取消政策归并的报价产品列表。\n返回值.data.results[].data.room_types[].products[] [object] 必有字段=max_occupancy,meal_type,meal_count,cancellation_policy,rate\n返回值.data.results[].data.room_types[].products[].cancellation_policy [object] 必有字段=type,effective_non_refundable: 汇总取消政策;仍须在下单前验价。\n返回值.data.results[].data.room_types[].products[].cancellation_policy.advanced_hour [integer]: 供应商取消提前小时数;以实际截止时间为准,不自行重新推算。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.results[].data.room_types[].products[].cancellation_policy.effective_non_refundable [boolean]: 是否已按不可退款处理,包括原不可退、缺少取消信息或截止时间已过。\n返回值.data.results[].data.room_types[].products[].cancellation_policy.free_cancel_deadline [string]: 免费取消截止时间,通常 RFC3339,按返回的时区/UTC 偏移解释,不按客户端当地时间替换;若没有时区或无法解析,不承诺免费取消。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.results[].data.room_types[].products[].cancellation_policy.type [string] 取值=[\"non_refundable\",\"free_cancel_before_deadline\"]: 取消类型:non_refundable=当前不可退款;free_cancel_before_deadline=截止前可免费取消。\n返回值.data.results[].data.room_types[].products[].max_occupancy [integer]: 每房成人上限,不是成人加儿童的总上限;儿童额外上限见 maxChildren。缺失表示未提供,不能按零处理;零值也不能用于推断可以无限入住,须按实际入住人数验价。\n返回值.data.results[].data.room_types[].products[].meal_count [integer]: 供应商提供的成人餐食份数,辅助解释 meal_type;零或未提供份数不能覆盖已知餐食类型,例如类型 4 仍为双早。不要据此推断儿童餐食。\n返回值.data.results[].data.room_types[].products[].meal_type [string]: 餐食类型字符串编码:1=不含餐;2=早餐(份数见 meal_count/mealCount);3=1份早餐;4=2份早餐;5=3份早餐;6=4份早餐;7=5份早餐;8=6份早餐;9=7份早餐;10=8份早餐;11=午餐;12=晚餐;13=午餐和晚餐;14=半膳(早餐加午餐或晚餐);15=全膳(早餐、午餐、晚餐);16=一价全包;17=膳食自理(厨房设施,并非自助餐);18=早餐和午餐;19=早餐和晚餐。meal_count/mealCount 补充份数,零值不能覆盖已知餐食类型;空串或未识别编码表示类型未知,不推断为不含餐。\n返回值.data.results[].data.room_types[].products[].rate [object] 必有字段=rate_code,currency,total_price,per_night_price,payment_type,is_on_request,stripe_payment_fee: 该产品最低总价对应的报价。\n返回值.data.results[].data.room_types[].products[].rate.currency [string]: 金额币种 ISO 4217。\n返回值.data.results[].data.room_types[].products[].rate.is_on_request [boolean]: true 表示需向供应商申请确认,非即时确认;false 也不表示已预留库存或已下单。\n返回值.data.results[].data.room_types[].products[].rate.payment_type [integer]: 报价支付类型:1=预付,5=到店支付;当前生成器返回 1。不是 pay_order.payment_method,不可作为支付方式调用。\n返回值.data.results[].data.room_types[].products[].rate.per_night_price [number]: 平均每房每晚价,currency 主单位;不是整段入住总价,不含另列 Stripe 手续费。\n返回值.data.results[].data.room_types[].products[].rate.rate_code [string]: 不透明报价代码,保持原样;必须用相同酒店、日期和入住人数验价后下单。\n返回值.data.results[].data.room_types[].products[].rate.stripe_payment_fee [object] 必有字段=fee_rate,fee_amount,payable_amount,currency,notice: 选择 Stripe 时另收的支付处理费用;不包含在房价总额中。\n返回值.data.results[].data.room_types[].products[].rate.stripe_payment_fee.currency [string]: 金额币种 ISO 4217。\n返回值.data.results[].data.room_types[].products[].rate.stripe_payment_fee.fee_amount [number]: Stripe 手续费金额,currency 主单位,已经按服务端精度取整。\n返回值.data.results[].data.room_types[].products[].rate.stripe_payment_fee.fee_rate [number]: 手续费比例,当前 0.035 即 3.5%。\n返回值.data.results[].data.room_types[].products[].rate.stripe_payment_fee.notice [string]: 费用来源及用途说明。\n返回值.data.results[].data.room_types[].products[].rate.stripe_payment_fee.payable_amount [number]: 订单金额加 Stripe 手续费后的实际应付总额,currency 主单位;尚未支付。\n返回值.data.results[].data.room_types[].products[].rate.total_price [number]: 全部房间、整段入住的订单总价,使用对应币种主单位(如 CNY 元),不是分;未包含另列的 Stripe 手续费,酒店到店收取费用以政策及 exclusions 为准。\n返回值.data.results[].data.room_types[].room_type_code [string]: 房型代码。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.results[].data.stripe_payment_fee_notice [string]: Stripe 另收手续费的说明;不代表已选择 Stripe 或已支付。\n返回值.data.results[].data.total [integer]: 返回房型数,不是产品数。空结果为 0。\n返回值.data.results[].data.web_url [string]: 酒店结果浏览链接,不是价格锁定、订单或支付凭证。仅在成功签发链接时返回;有效期见 web_url_expires_at,可在有效期内重复访问。当前 MCP 不接收链接语言参数,签发语言固定 zh-CN;get_hotel_detail.language 仅控制图片查询语言。\n返回值.data.results[].data.web_url_expires_at [string]: 链接到期时间,RFC3339,保留返回的 UTC 偏移;缺失表示未签发链接。\n返回值.data.results[].data.web_url_one_time [boolean] 取值=[false]: 酒店浏览链接当前为 false,可重复访问直到到期;不同于支付 one_time。\n返回值.data.results[].error [string]: 本酒店查询失败说明。\n返回值.data.results[].hotel_id [string]: 本项酒店 ID,与输入一致。\n返回值.data.results[].ok [boolean]: 本酒店查询是否成功,不代表有可售房。\n返回值.data.results[].reason [string] 取值=[\"invalid_request\",\"hotel_not_found\",\"upstream_timeout\",\"upstream_error\",\"hotel_detail_unavailable\"]: 失败原因:invalid_request=参数无效,hotel_not_found=酒店不存在,upstream_timeout=上游超时,upstream_error=上游失败,hotel_detail_unavailable=酒店详情不可用。成功空结果的 no_matching_live_room 位于 data.reason;批量逐项判断,不把一项失败当成整批失败。\n返回值.data.results[] 的分支 1:\n返回值.data.results[] 必有字段=data\n返回值.data.results[].ok 取值=[true]\n返回值.data.results[] 的分支 2:\n返回值.data.results[] 必有字段=reason,error\n返回值.data.results[].ok 取值=[false]\n返回值.data.summary [object] 必有字段=total,matched,empty,failed: 酒店计数,total=matched+empty+failed。\n返回值.data.summary.empty [integer]: 查询成功但无匹配房价的酒店数。\n返回值.data.summary.failed [integer]: 查询失败的酒店数。\n返回值.data.summary.matched [integer]: 有实时房价的酒店数。\n返回值.data.summary.total [integer]: 请求酒店数。\n返回值.error [string]: 业务失败说明,不作为可重试或成功的唯一依据。\n返回值.error_code [string]: 鉴权等机器可读错误码,仅在错误路径提供。\n返回值.ok [boolean]: 业务是否成功。false 时读取 error/reason;工具执行错误也可能通过 MCP isError 返回而没有 structuredContent。\n返回值.reason [string] 取值=[\"invalid_request\",\"hotel_not_found\",\"upstream_timeout\",\"upstream_error\",\"hotel_detail_unavailable\"]: 失败原因:invalid_request=参数无效,hotel_not_found=酒店不存在,upstream_timeout=上游超时,upstream_error=上游失败,hotel_detail_unavailable=酒店详情不可用。成功空结果的 no_matching_live_room 位于 data.reason;批量逐项判断,不把一项失败当成整批失败。\n返回值 的分支 1:\n返回值 必有字段=data\n返回值.ok 取值=[true]\n返回值 的分支 2:\n返回值 必有字段=error,reason\n返回值.ok 取值=[false]\n"
    • Changedcancel_booking3 fields changed
      • changedInput schema / properties / agent_ref_id / description
        Previous value: -"TourMind booking reference"New value: +"create_booking 返回的 TourMind 订单号,必须属于当前鉴权用户;不是酒店确认号或第三方支付订单号。"
      • changedInput schema / properties / user_key / description
        Previous value: -"TourMind user key required for authenticated ToC order access"New value: +"由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
      • addedOutput schema / description
        Added value: +"返回字段说明(不增加校验约束;缺失、零值和 null 按各字段说明解释):\n返回值 [object] 必有字段=ok: 业务响应信封;字段缺失表示没有提供,不能自动补零。数组的 null 与 [] 都不含条目,但 null 不承诺完成了该部分查询。\n返回值.data [object] 必有字段=agent_ref_id,status,status_cn,total_amount,cancel_fee,currency,message: 取消处理结果;退款金额不等于退款已到账。\n返回值.data.agent_ref_id [string]: TourMind 订单号。\n返回值.data.cancel_fee [number]: 取消费用,currency 主单位;零表示本次计算无取消费。\n返回值.data.currency [string]: 订单金额币种。\n返回值.data.message [string]: 取消处理和退款说明。\n返回值.data.payment_method [string]: 原支付方式;未发生支付时可能省略。\n返回值.data.refund_amount [number]: 尚需退款金额,currency 主单位;仅特定已付款取消结果返回,缺失不等于零或已到账。\n返回值.data.status [string] 取值=[\"UNPAID\",\"PENDING\",\"CONFIRMED\",\"CANCELLED\",\"CONFIRM_FAILED\"]: 取消处理后的状态:UNPAID=待支付;PENDING=已支付待确认;CONFIRMED=已确认;CANCELLED=已取消;CONFIRM_FAILED=确认失败。仅发起取消不保证状态已变为 CANCELLED。\n返回值.data.status_cn [string]: 取消后订单状态中文说明。\n返回值.data.total_amount [number]: 全部房间、整段入住的订单总价,使用对应币种主单位(如 CNY 元),不是分;未包含另列的 Stripe 手续费,酒店到店收取费用以政策及 exclusions 为准。\n返回值.error [string]: 业务失败说明,不作为可重试或成功的唯一依据。\n返回值.error_code [string]: 鉴权等机器可读错误码,仅在错误路径提供。\n返回值.ok [boolean]: 业务是否成功。false 时读取 error/reason;工具执行错误也可能通过 MCP isError 返回而没有 structuredContent。\n返回值.reason [string] 取值=[\"invalid_request\",\"hotel_not_found\",\"upstream_timeout\",\"upstream_error\",\"hotel_detail_unavailable\"]: 失败原因:invalid_request=参数无效,hotel_not_found=酒店不存在,upstream_timeout=上游超时,upstream_error=上游失败,hotel_detail_unavailable=酒店详情不可用。成功空结果的 no_matching_live_room 位于 data.reason;批量逐项判断,不把一项失败当成整批失败。\n返回值 的分支 1:\n返回值 必有字段=data\n返回值.ok 取值=[true]\n返回值 的分支 2:\n返回值 必有字段=error,reason\n返回值.ok 取值=[false]\n"
    • Changedcheck_room_availability10 fields changed
      • changedInput schema / properties / adults / description
        Previous value: -"Number of adults in each room"New value: +"每房成人数,不是所有房间合计;相同入住配置应用于每间房。有效入住人数必须大于 0。 省略或 0 默认 1;负数无效。"
      • changedInput schema / properties / check_in_date / description
        Previous value: -"Check-in date in YYYY-MM-DD format"New value: +"入住日期,YYYY-MM-DD。 省略/空字符串默认服务端当前日期的明天。"
      • changedInput schema / properties / check_out_date / description
        Previous value: -"Check-out date in YYYY-MM-DD format"New value: +"离店日期,YYYY-MM-DD,必须晚于 check_in_date。 省略/空字符串默认入住次日。"
      • changedInput schema / properties / children / description
        Previous value: -"Number of children in each room"New value: +"每房儿童数,非负整数;省略或 0 表示无儿童,必须等于 children_ages 数组长度。"
      • changedInput schema / properties / children_ages / description
        Previous value: -"Ages of the children in each room, each from 0 to 17"New value: +"每房儿童年龄数组,逐个为 0–17 岁整数;数组长度必须等于 children,同一组年龄应用于每间房。省略/null/[] 只适用于 children=0。"
      • changedInput schema / properties / hotel_id / description
        Previous value: -"TourMind hotel identifier"New value: +"TourMind 酒店 ID,数字字符串;从地点/酒店搜索返回取得,不使用 Google place_id。"
      • changedInput schema / properties / rate_code / description
        Previous value: -"Rate code returned by query_room_rates"New value: +"不透明报价代码,原样传递;验价使用 query_room_rates 返回值,下单使用 check_room_availability 最新返回值,酒店/日期/入住人数必须一致。"
      • changedInput schema / properties / room_count / description
        Previous value: -"Number of rooms using the same occupancy"New value: +"相同入住配置的房间数;业务处理器将 0 按 1 间处理,负数无效。查询工具可省略;下单工具原有 MCP Schema 要求此字段存在。"
      • changedInput schema / properties / user_key / description
        Previous value: -"Optional TourMind user key for authenticated ToC access"New value: +"由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
      • addedOutput schema / description
        Added value: +"返回字段说明(不增加校验约束;缺失、零值和 null 按各字段说明解释):\n返回值 [object] 必有字段=ok: 业务响应信封;字段缺失表示没有提供,不能自动补零。数组的 null 与 [] 都不含条目,但 null 不承诺完成了该部分查询。\n返回值.data [object] 必有字段=room_types,total: 原始验价结果,保留 camelCase 的 rateInfos;不同于报价查询的 products。验价不锁库存。\n返回值.data.room_types [array|null]: 验价房型及房价。\n返回值.data.room_types[] [object] 必有字段=roomTypeCode,name,nameCN,bedTypeId,rateInfos\n返回值.data.room_types[].areaRange [string]: 房间面积范围,平方米。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].bedTypeDesc [string]: 床型说明。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].bedTypeDescCN [string]: 床型中文说明。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].bedTypeId [integer]: 内部标准床型 ID;零不能用于推断床型。\n返回值.data.room_types[].bedWidth [string]: 已核实床宽,米;缺失表示未知。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].hasWindow [null|boolean]: 是否有窗;明确 false 表示无窗,缺失/null 表示未知。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].name [string]: 名称。\n返回值.data.room_types[].nameCN [string]: 中文名称。\n返回值.data.room_types[].rateInfos [null|array]: 原始验价报价列表;与查询的 products 结构不同,null/空数组表示没有返回报价。\n返回值.data.room_types[].rateInfos[] [object] 必有字段=roomTypeName,roomTypeNameCN,bedTypeDesc,bedTypeDescCN,bedTypes,bedTypesCN,bedTypeId,rateCode,name,allotment,maxOccupancy,maxChildren,paymentType,currencyCode,totalPrice,discountedPrice,perNightPrice,totalTaxAndFee,mealInfo,refundable,isOTAForbidden,packageRate,dcTag,currencyCodeFX,totalPriceFX,perNightPriceFX,isOnRequest\n返回值.data.room_types[].rateInfos[].allotment [integer]: 本次报价通过库存检查的房间数,当前实现填写请求的 room_count,并非供应商全部剩余库存;不锁库存,不能用它推断最大可订数量。零不表示无限库存。\n返回值.data.room_types[].rateInfos[].bedTypeDesc [string]: 床型说明。\n返回值.data.room_types[].rateInfos[].bedTypeDescCN [string]: 床型中文说明。\n返回值.data.room_types[].rateInfos[].bedTypeId [integer]: 内部标准床型 ID;零不能用于推断床型。\n返回值.data.room_types[].rateInfos[].bedTypes [null|array]: 可选床型说明列表;null 表示未提供。\n返回值.data.room_types[].rateInfos[].bedTypes[] [string]\n返回值.data.room_types[].rateInfos[].bedTypesCN [null|array]: 可选床型中文说明列表;null 表示未提供。\n返回值.data.room_types[].rateInfos[].bedTypesCN[] [string]\n返回值.data.room_types[].rateInfos[].benefits [null|array]: 报价礼遇列表。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].benefits[] [object] 必有字段=label,desc,tags\n返回值.data.room_types[].rateInfos[].benefits[].desc [string]: 说明文本。\n返回值.data.room_types[].rateInfos[].benefits[].label [string]: 礼遇类别:luxury、virtuoso、stay_n_pay_m。\n返回值.data.room_types[].rateInfos[].benefits[].payDays [integer]: 连住优惠计费天数。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].benefits[].stayDays [integer]: 连住天数,仅适用连住优惠。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].benefits[].tags [null|array]: 礼遇细项标签列表。\n返回值.data.room_types[].rateInfos[].benefits[].tags[] [string]\n返回值.data.room_types[].rateInfos[].cancelPolicyInfos [null|array]: 取消罚则时段;缺失/null/空数组不构成可免费取消的承诺。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].cancelPolicyInfos[] [object] 必有字段=startDateTime,currencyCode\n返回值.data.room_types[].rateInfos[].cancelPolicyInfos[].amount [null|number]: 金额,所在对象 currency/currencyCode 的主单位;cancelPolicyInfos 中表示该时段取消费用。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].cancelPolicyInfos[].currencyCode [string]: 金额币种 ISO 4217。\n返回值.data.room_types[].rateInfos[].cancelPolicyInfos[].endDateTime [string]: 罚则结束时间,保留返回的时区;缺失表示未提供该时段终点。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].cancelPolicyInfos[].nightCount [null|integer]: 罚款折合晚数,未提供时不按零处理。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].cancelPolicyInfos[].startDateTime [string]: 罚则起始时间,通常 RFC3339 含时区;首段起始时间对应免费取消截止。保留返回的时区;缺时区或无法解析时不猜测。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo [null|object] 必有字段=Total,BaseRate,TaxAndServiceFee,SalesTax,PerRoomBaseRate,HotelFees: 供应商原始计费明细,保留 PascalCase 字段;整数金额为供应商内部计费口径,不直接当成 MCP 展示主单位金额;下单使用 totalPrice/currencyCode。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.BaseRate [integer]: 供应商原始总房费,内部整数计费口径。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.HotelFees [null|array]: 酒店当地额外收取费用,不包含在该计费对象 Total 中;整数金额使用供应商内部口径。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.HotelFees[] [object] 必有字段=desc,amount,currency\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.HotelFees[].amount [integer]: 供应商原始酒店额外费用整数金额,内部计费口径;不能直接当展示元。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.HotelFees[].currency [string]: 金额币种 ISO 4217。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.HotelFees[].desc [string]: 说明文本。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.PerRoomBaseRate [integer]: 供应商原始单间房费,内部整数计费口径。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.SalesTax [integer]: 供应商原始销售税,内部整数计费口径。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.TaxAndServiceFee [integer]: 供应商原始税及服务费,内部整数计费口径。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.Total [integer]: 供应商原始含税总金额,内部整数计费口径;不代替 totalPrice。\n返回值.data.room_types[].rateInfos[].currencyCode [string]: 金额币种 ISO 4217。\n返回值.data.room_types[].rateInfos[].currencyCodeFX [string]: 换算展示币种 ISO 4217;空串表示未提供。\n返回值.data.room_types[].rateInfos[].dailyPrices [null|array]: 逐入住日期价格明细。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].dailyPrices[] [object] 必有字段=stayDate,price\n返回值.data.room_types[].rateInfos[].dailyPrices[].price [number]: 该入住日每房价格,所属报价币种主单位;不是全部房间整段入住总价。\n返回值.data.room_types[].rateInfos[].dailyPrices[].stayDate [string]: 入住日期 YYYY-MM-DD。\n返回值.data.room_types[].rateInfos[].dcTag [boolean]: 直签报价标记。\n返回值.data.room_types[].rateInfos[].discountedPrice [number]: 优惠券后金额,currencyCode 主单位;仅大于零表示可用券后价,零不表示免费。\n返回值.data.room_types[].rateInfos[].essentialInformation [null|array]: 供应商重要提示列表;下单前需展示影响入住或费用的条款。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].essentialInformation[] [string]\n返回值.data.room_types[].rateInfos[].isOTAForbidden [boolean]: 该报价是否禁止 OTA 销售。\n返回值.data.room_types[].rateInfos[].isOnRequest [boolean]: true 表示需向供应商申请确认,非即时确认;false 不表示已预留库存。\n返回值.data.room_types[].rateInfos[].maxChildren [integer]: 每房额外儿童上限,独立于成人上限 maxOccupancy;供应商未提供正数上限时当前实现使用请求儿童数。缺失表示未提供,零也不能单独证明酒店不接待儿童,须以实际年龄和人数验价。\n返回值.data.room_types[].rateInfos[].maxDurationForBookingConfirmMinutes [null|integer]: 需申请确认报价的最大等待时间,分钟;仅配置存在时返回,缺失不能自行承诺固定确认时限。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].maxOccupancy [integer]: 每房成人上限,不是成人加儿童的总上限;儿童额外上限见 maxChildren。缺失表示未提供,不能按零处理;零值也不能用于推断可以无限入住,须按实际入住人数验价。\n返回值.data.room_types[].rateInfos[].mealInfo [object] 必有字段=mealType,mealCount,mealChildCount: 餐食类型与成人/儿童份数。\n返回值.data.room_types[].rateInfos[].mealInfo.mealChildCount [integer]: 供应商提供的儿童餐食份数,不代表儿童入住容量;零不能改变已知餐食类型。\n返回值.data.room_types[].rateInfos[].mealInfo.mealCount [integer]: 供应商提供的成人餐食份数,辅助解释 mealType;零不覆盖已知类型,如类型 4 仍为双早。儿童份数另见 mealChildCount。\n返回值.data.room_types[].rateInfos[].mealInfo.mealType [string]: 餐食类型字符串编码:1=不含餐;2=早餐(份数见 meal_count/mealCount);3=1份早餐;4=2份早餐;5=3份早餐;6=4份早餐;7=5份早餐;8=6份早餐;9=7份早餐;10=8份早餐;11=午餐;12=晚餐;13=午餐和晚餐;14=半膳(早餐加午餐或晚餐);15=全膳(早餐、午餐、晚餐);16=一价全包;17=膳食自理(厨房设施,并非自助餐);18=早餐和午餐;19=早餐和晚餐。meal_count/mealCount 补充份数,零值不能覆盖已知餐食类型;空串或未识别编码表示类型未知,不推断为不含餐。\n返回值.data.room_types[].rateInfos[].name [string]: 名称。\n返回值.data.room_types[].rateInfos[].packageRate [boolean]: 是否套餐报价。\n返回值.data.room_types[].rateInfos[].paxRooms [null|array]: 报价中的每组房间入住人数及每日价格。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].paxRooms[] [object] 必有字段=roomCount,adults,children,dailyPriceInfo\n返回值.data.room_types[].rateInfos[].paxRooms[].adults [integer]: 每房成人数。\n返回值.data.room_types[].rateInfos[].paxRooms[].children [integer]: 每房儿童数。\n返回值.data.room_types[].rateInfos[].paxRooms[].childrenAges [null|array]: 每房儿童年龄,0–17 岁,与 children 个数一致;缺失不是年龄为零。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].paxRooms[].childrenAges[] [integer]\n返回值.data.room_types[].rateInfos[].paxRooms[].dailyPriceInfo [null|array]: 入住日期逐日价格明细。\n返回值.data.room_types[].rateInfos[].paxRooms[].dailyPriceInfo[] [object] 必有字段=date,price,taxAndFee\n返回值.data.room_types[].rateInfos[].paxRooms[].dailyPriceInfo[].date [string]: 入住日期 YYYY-MM-DD。\n返回值.data.room_types[].rateInfos[].paxRooms[].dailyPriceInfo[].price [number]: 该入住日每房价格,所属报价币种主单位;不是全部房间整段入住总价。\n返回值.data.room_types[].rateInfos[].paxRooms[].dailyPriceInfo[].taxAndFee [number]: 该日期税费,所属报价币种主单位,不应在含税总价上重复累加。\n返回值.data.room_types[].rateInfos[].paxRooms[].roomCount [integer]: 本组相同入住人数的房间数。\n返回值.data.room_types[].rateInfos[].paymentType [integer]: 报价支付类型:1=预付,5=到店支付;当前生成器返回 1。不是 pay_order.payment_method。\n返回值.data.room_types[].rateInfos[].perNightPrice [number]: 平均每房每晚价,currencyCode 主单位;不是整段入住总价,不含另列 Stripe 手续费。\n返回值.data.room_types[].rateInfos[].perNightPriceFX [number]: 换算后的平均每房每晚展示价,currencyCodeFX 主单位。\n返回值.data.room_types[].rateInfos[].priceDetail [null|object] 必有字段=total,currency,baseRate,dailyBase,inclusions,exclusions: 价格组成;inclusions 已含、exclusions 不含,避免重复计费。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].priceDetail.baseRate [number]: 价格明细基础房费,currency 主单位。\n返回值.data.room_types[].rateInfos[].priceDetail.currency [string]: 金额币种 ISO 4217。\n返回值.data.room_types[].rateInfos[].priceDetail.dailyBase [null|array]: 逐日基础房费。\n返回值.data.room_types[].rateInfos[].priceDetail.dailyBase[] [object] 必有字段=stayDate,price\n返回值.data.room_types[].rateInfos[].priceDetail.dailyBase[].price [number]: 该入住日每房价格,所属报价币种主单位;不是全部房间整段入住总价。\n返回值.data.room_types[].rateInfos[].priceDetail.dailyBase[].stayDate [string]: 入住日期 YYYY-MM-DD。\n返回值.data.room_types[].rateInfos[].priceDetail.exclusions [null|array]: 未包含在总价中的费用,可能到店支付。\n返回值.data.room_types[].rateInfos[].priceDetail.exclusions[] [object] 必有字段=type,name,amount,currency\n返回值.data.room_types[].rateInfos[].priceDetail.exclusions[].amount [number]: 金额,所在对象 currency/currencyCode 的主单位;cancelPolicyInfos 中表示该时段取消费用。\n返回值.data.room_types[].rateInfos[].priceDetail.exclusions[].currency [string]: 金额币种 ISO 4217。\n返回值.data.room_types[].rateInfos[].priceDetail.exclusions[].name [string]: 名称。\n返回值.data.room_types[].rateInfos[].priceDetail.exclusions[].type [integer]: 供应商费用类别整数代码;具体收费含义以同项 name 和金额为准。\n返回值.data.room_types[].rateInfos[].priceDetail.inclusions [null|array]: 已包含在总价中的费用。\n返回值.data.room_types[].rateInfos[].priceDetail.inclusions[] [object] 必有字段=type,name,amount,currency\n返回值.data.room_types[].rateInfos[].priceDetail.inclusions[].amount [number]: 金额,所在对象 currency/currencyCode 的主单位;cancelPolicyInfos 中表示该时段取消费用。\n返回值.data.room_types[].rateInfos[].priceDetail.inclusions[].currency [string]: 金额币种 ISO 4217。\n返回值.data.room_types[].rateInfos[].priceDetail.inclusions[].name [string]: 名称。\n返回值.data.room_types[].rateInfos[].priceDetail.inclusions[].type [integer]: 供应商费用类别整数代码;具体收费含义以同项 name 和金额为准。\n返回值.data.room_types[].rateInfos[].priceDetail.total [number]: 价格明细总额,currency 主单位。\n返回值.data.room_types[].rateInfos[].rateCode [string]: 验价后的不透明报价代码;下单使用这个值。\n返回值.data.room_types[].rateInfos[].recommendedPrice [null|number]: 建议售价,currencyCode 主单位,不是已核实的应付金额。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].refundable [boolean]: 供应商是否标记可退款;true 不等于当前免费取消,还需检查 cancelPolicyInfos 截止时间和费用。\n返回值.data.room_types[].rateInfos[].roomTypeName [string]: 房型名称。\n返回值.data.room_types[].rateInfos[].roomTypeNameCN [string]: 房型中文名称。\n返回值.data.room_types[].rateInfos[].supplierName [string]: 供应商名称。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].totalPrice [number]: 全部房间、整段入住的订单总价,使用对应币种主单位(如 CNY 元),不是分;未包含另列的 Stripe 手续费,酒店到店收取费用以政策及 exclusions 为准。\n返回值.data.room_types[].rateInfos[].totalPriceFX [number]: 全部房间整段入住的换算展示总价,currencyCodeFX 主单位;不替代结算金额。\n返回值.data.room_types[].rateInfos[].totalTaxAndFee [number]: 报价所含税费合计,currencyCode 主单位;并非所有到店费用,避免在总价上重复相加。\n返回值.data.room_types[].roomTypeCode [string]: 房型代码。\n返回值.data.total [integer]: 返回房型数量。\n返回值.error [string]: 业务失败说明,不作为可重试或成功的唯一依据。\n返回值.error_code [string]: 鉴权等机器可读错误码,仅在错误路径提供。\n返回值.ok [boolean]: 业务是否成功。false 时读取 error/reason;工具执行错误也可能通过 MCP isError 返回而没有 structuredContent。\n返回值.reason [string] 取值=[\"invalid_request\",\"hotel_not_found\",\"upstream_timeout\",\"upstream_error\",\"hotel_detail_unavailable\"]: 失败原因:invalid_request=参数无效,hotel_not_found=酒店不存在,upstream_timeout=上游超时,upstream_error=上游失败,hotel_detail_unavailable=酒店详情不可用。成功空结果的 no_matching_live_room 位于 data.reason;批量逐项判断,不把一项失败当成整批失败。\n返回值 的分支 1:\n返回值 必有字段=data\n返回值.ok 取值=[true]\n返回值 的分支 2:\n返回值 必有字段=error,reason\n返回值.ok 取值=[false]\n"
    • Changedcheck_skill_update2 fields changed
      • changedInput schema / properties / current_version / description
        Previous value: -"Installed Skill semantic version, for example 1.0.0"New value: +"已安装 TourMind Skill 的语义版本,例如 1.0.0;没有安装 Skill 的 MCP 客户端不要编造版本。"
      • addedOutput schema / description
        Added value: +"返回字段说明(不增加校验约束;缺失、零值和 null 按各字段说明解释):\n返回值 [object] 必有字段=ok,skill_update: Skill 更新提示位于顶层 skill_update,没有 data 字段。\n返回值.ok [boolean] 取值=[true]: 更新检查成功。\n返回值.skill_update [object] 必有字段=available,display_to_user,latest_version: Skill 版本更新提示。\n返回值.skill_update.available [boolean]: 是否有更新版本。\n返回值.skill_update.display_to_user [boolean]: 是否应向用户展示更新提示。\n返回值.skill_update.latest_version [string]: 最新已发布 Skill 版本。\n返回值.skill_update.message [string]: 面向用户的结果说明。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.skill_update.release_source_url [string]: Skill 官方发布来源链接。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n"
    • Changedcreate_booking19 fields changed
      • changedInput schema / properties / adults / description
        Previous value: -"Number of adults in each room"New value: +"每房成人数,不是所有房间合计;相同入住配置应用于每间房。有效入住人数必须大于 0。 此入口不提供默认值;在使用入住条件时必须显式提供。"
      • changedInput schema / properties / check_in_date / description
        Previous value: -"Check-in date in YYYY-MM-DD format"New value: +"入住日期,YYYY-MM-DD。 此入口不提供默认值;在使用入住条件时必须显式提供。"
      • changedInput schema / properties / check_out_date / description
        Previous value: -"Check-out date in YYYY-MM-DD format"New value: +"离店日期,YYYY-MM-DD,必须晚于 check_in_date。 此入口不提供默认值;在使用入住条件时必须显式提供。"
      • changedInput schema / properties / children / description
        Previous value: -"Number of children in each room"New value: +"每房儿童数,非负整数;省略或 0 表示无儿童,必须等于 children_ages 数组长度。"
      • changedInput schema / properties / children_ages / description
        Previous value: -"Ages of the children in each room, each from 0 to 17"New value: +"每房儿童年龄数组,逐个为 0–17 岁整数;数组长度必须等于 children,同一组年龄应用于每间房。省略/null/[] 只适用于 children=0。"
      • changedInput schema / properties / contact_email / description
        Previous value: -"Contact email for booking status notifications"New value: +"订单通知邮箱,可省略;应向用户核实,不编造。"
      • changedInput schema / properties / contact_phone / description
        Previous value: -"Contact phone including country code"New value: +"联系手机号,可带国家码;最多 32 字节,不允许换行。可省略。"
      • changedInput schema / properties / currency / description
        Previous value: -"Three-letter booking currency code"New value: +"核实报价的 ISO 4217 币种;订单实际以鉴权账号结算币种为准,本参数不改变账号币种。"
      • changedInput schema / properties / guest_name / description
        Previous value: -"Guest full legal name"New value: +"入住人法定全名;现有 MCP Schema 要求该字段始终存在。未提供非空 rooms 时业务处理器按本字段解析姓名;rooms 非空时优先使用其姓名。"
      • changedInput schema / properties / hotel_id / description
        Previous value: -"TourMind hotel identifier"New value: +"TourMind 酒店 ID,数字字符串;从地点/酒店搜索返回取得,不使用 Google place_id。"
      • changedInput schema / properties / rate_code / description
        Previous value: -"Verified rate code returned by check_room_availability"New value: +"不透明报价代码,原样传递;验价使用 query_room_rates 返回值,下单使用 check_room_availability 最新返回值,酒店/日期/入住人数必须一致。"
      • changedInput schema / properties / room_count / description
        Previous value: -"Number of rooms using the same occupancy"New value: +"相同入住配置的房间数;业务处理器将 0 按 1 间处理,负数无效。查询工具可省略;下单工具原有 MCP Schema 要求此字段存在。"
      • changedInput schema / properties / rooms / description
        Previous value: -"Named guests grouped by room; when supplied length must equal room_count"New value: +"按房间分组的入住人,提供非空数组时长度必须等于有效 room_count;每房至少 1 名、最多 adults 名,优先于 guest_name。"
      • addedInput schema / properties / rooms / items / properties / guests / description
        Added value: +"本房间入住成人名单,至少 1 名且不超过 adults;不作为儿童年龄列表。"
      • addedInput schema / properties / rooms / items / properties / guests / items / properties / firstName / description
        Added value: +"入住人证件上的名;须非空白,原始值最多 50 个 Unicode 字符,不能含控制字符。"
      • addedInput schema / properties / rooms / items / properties / guests / items / properties / lastName / description
        Added value: +"入住人证件上的姓;须非空白,原始值最多 50 个 Unicode 字符,不能含控制字符。"
      • changedInput schema / properties / total_price / description
        Previous value: -"Verified total booking price"New value: +"最新验价的全部房间、整段入住总价,currency 主单位,必须大于 0;未含另列 Stripe 手续费。价格变化须先征得用户确认。"
      • changedInput schema / properties / user_key / description
        Previous value: -"TourMind user key required for authenticated ToC booking"New value: +"由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
      • addedOutput schema / description
        Added value: +"返回字段说明(不增加校验约束;缺失、零值和 null 按各字段说明解释):\n返回值 [object] 必有字段=ok: 业务响应信封;字段缺失表示没有提供,不能自动补零。数组的 null 与 [] 都不含条目,但 null 不承诺完成了该部分查询。\n返回值.data [object] 必有字段=agent_ref_id,total_price,currency,status,message: 订单创建结果,不代表支付成功。\n返回值.data.agent_ref_id [string]: TourMind 订单号;用于后续查询、支付和取消,不是酒店确认号。\n返回值.data.currency [string]: 账号结算币种,ISO 4217。\n返回值.data.message [string]: 订单创建结果及下一步支付说明。\n返回值.data.status [string] 取值=[\"confirmed\"]: 创建接口固定返回 confirmed,不能据此认定已付款或供应商已确认;以 query_booking 状态为准。\n返回值.data.total_price [number]: 全部房间、整段入住的订单总价,使用对应币种主单位(如 CNY 元),不是分;未包含另列的 Stripe 手续费,酒店到店收取费用以政策及 exclusions 为准。\n返回值.error [string]: 业务失败说明,不作为可重试或成功的唯一依据。\n返回值.error_code [string]: 鉴权等机器可读错误码,仅在错误路径提供。\n返回值.ok [boolean]: 业务是否成功。false 时读取 error/reason;工具执行错误也可能通过 MCP isError 返回而没有 structuredContent。\n返回值.reason [string] 取值=[\"invalid_request\",\"hotel_not_found\",\"upstream_timeout\",\"upstream_error\",\"hotel_detail_unavailable\"]: 失败原因:invalid_request=参数无效,hotel_not_found=酒店不存在,upstream_timeout=上游超时,upstream_error=上游失败,hotel_detail_unavailable=酒店详情不可用。成功空结果的 no_matching_live_room 位于 data.reason;批量逐项判断,不把一项失败当成整批失败。\n返回值 的分支 1:\n返回值 必有字段=data\n返回值.ok 取值=[true]\n返回值 的分支 2:\n返回值 必有字段=error,reason\n返回值.ok 取值=[false]\n"
    • Changedget_hotel_detail4 fields changed
      • changedInput schema / properties / hotel_id / description
        Previous value: -"TourMind hotel identifier"New value: +"TourMind 酒店 ID,数字字符串;从地点/酒店搜索返回取得,不使用 Google place_id。"
      • changedInput schema / properties / language / description
        Previous value: -"Response language, defaults to zh-CN"New value: +"酒店图片查询语言,省略默认 zh-CN;直接传给图片服务,不承诺全部酒店文字翻译,也不改变 web_url 的固定 zh-CN 语言。"
      • changedInput schema / properties / user_key / description
        Previous value: -"Optional TourMind user key for authenticated ToC access"New value: +"由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
      • addedOutput schema / description
        Added value: +"返回字段说明(不增加校验约束;缺失、零值和 null 按各字段说明解释):\n返回值 [object] 必有字段=ok: 业务响应信封;字段缺失表示没有提供,不能自动补零。数组的 null 与 [] 都不含条目,但 null 不承诺完成了该部分查询。\n返回值.data [object] 必有字段=hotel,rooms: 静态酒店和房型资料,不是库存或实时价格。\n返回值.data.hotel [object] 必有字段=hotel_id,name,descriptions: 酒店静态详情,包括设施、图片和入住政策。\n返回值.data.hotel.address [string]: 酒店地址。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.address_cn [string]: 中文酒店地址。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.amenities [string]: 酒店设施文本。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.amenities_hotel [null|array]: 酒店设施项目。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.amenities_hotel[] [object] 必有字段=id,name,value\n返回值.data.hotel.amenities_hotel[].id [string]: 设施或属性标识。\n返回值.data.hotel.amenities_hotel[].name [string]: 名称。\n返回值.data.hotel.amenities_hotel[].value: 供应商设施属性值,类型随设施而异,可为标量、数组、对象或 null;不能把 null 当 false。\n返回值.data.hotel.amenities_room [null|array]: 房间设施项目。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.amenities_room[] [object] 必有字段=id,name,value\n返回值.data.hotel.amenities_room[].id [string]: 设施或属性标识。\n返回值.data.hotel.amenities_room[].name [string]: 名称。\n返回值.data.hotel.amenities_room[].value: 供应商设施属性值,类型随设施而异,可为标量、数组、对象或 null;不能把 null 当 false。\n返回值.data.hotel.checkin [null|object] 必有字段=begin_time,end_time,instructions,special_instructions,min_age: 酒店当地入住规则。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.checkin.begin_time [string]: 酒店当地办理入住开始时间。\n返回值.data.hotel.checkin.end_time [string]: 酒店当地办理入住结束时间。\n返回值.data.hotel.checkin.instructions [string]: 入住须知。\n返回值.data.hotel.checkin.min_age [string]: 办理入住的最低年龄说明。\n返回值.data.hotel.checkin.special_instructions [string]: 特殊入住要求。\n返回值.data.hotel.checkout [null|object] 必有字段=time: 酒店当地退房规则。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.checkout.time [string]: 酒店当地退房时间。\n返回值.data.hotel.country [string]: 国家名称。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.country_code [string]: 国家代码。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.descriptions [object] 必有字段=Location,Headline,BusinessAmenities,Rooms,Attractions: 酒店详细介绍,保留原始字段大小写。\n返回值.data.hotel.descriptions.Attractions [string]: 周边景点介绍。\n返回值.data.hotel.descriptions.BusinessAmenities [string]: 商务设施介绍。\n返回值.data.hotel.descriptions.Headline [string]: 酒店介绍摘要。\n返回值.data.hotel.descriptions.Location [string]: 位置介绍。\n返回值.data.hotel.descriptions.Rooms [string]: 房间介绍。\n返回值.data.hotel.fees [null|object] 必有字段=mandatory,optional: 可能的强制或可选到店费用说明。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.fees.mandatory [string]: 强制收取费用说明,核对是否另付。\n返回值.data.hotel.fees.optional [string]: 可选服务收费说明。\n返回值.data.hotel.hotel_id [integer]: TourMind 酒店数字 ID;作为后续工具输入时用字符串。\n返回值.data.hotel.hotel_image [string]: 酒店主图 URL。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.hotel_images [null|array]: 酒店图片 URL 列表。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.hotel_images[] [string]\n返回值.data.hotel.image_groups [null|array]: 按类别分组的图片。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.image_groups[] [object] 必有字段=caption,images\n返回值.data.hotel.image_groups[].caption [string]: 图片分组标题。\n返回值.data.hotel.image_groups[].category [integer]: 图片类别代码。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.image_groups[].images [null|array]: 图片列表。\n返回值.data.hotel.image_groups[].images[] [object] 必有字段=hero_image,links\n返回值.data.hotel.image_groups[].images[].hero_image [boolean]: 是否主图。\n返回值.data.hotel.image_groups[].images[].links [object]: 图片尺寸到下载链接信息的映射。\n返回值.data.hotel.image_groups[].images[].links.* [object]\n返回值.data.hotel.image_groups[].images[].links.*.href [string]: 图片原始 URL。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.image_groups[].images[].links.*.local_href [string]: 本地镜像图片 URL。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.image_groups[].images[].links.*.method [string]: 下载图片的 HTTP 方法。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.latitude [string]: 纬度,单位度;详情返回数字字符串,搜索返回 number。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.location_desc [string]: 位置说明。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.longitude [string]: 经度,单位度;详情返回数字字符串,搜索返回 number。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.name [string]: 名称。\n返回值.data.hotel.name_cn [string]: 中文名称。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.policies [null|object] 必有字段=know_before_you_go: 酒店通用政策,不代替订单取消政策。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.policies.know_before_you_go [string]: 入住前需知政策。\n返回值.data.hotel.policy_description [string]: 酒店政策文本,不代替具体报价取消政策。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.property_description [string]: 酒店介绍。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.region_id [integer]: TourMind 地域 ID;搜索结果可能为字符串,详情为整数,以 Schema 类型为准。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.region_name_long [string]: 完整地域名称。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.region_name_long_cn [string]: 完整地域中文名称。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.room_desc [string]: 房间说明。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.star_rating [integer]: 酒店星级,未提供或零值不等于零星酒店。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotel.telephone [string]: 酒店联系电话。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.rooms [array|null]: 静态房型列表;null 或空数组不等于实时无房。\n返回值.data.rooms[] [object] 必有字段=room_id,name\n返回值.data.rooms[].area_range [string]: 房间面积范围,平方米。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.rooms[].basic_room_image [string]: 房型图片 URL。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.rooms[].bed_type [integer]: 内部标准床型 ID。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.rooms[].bed_type_desc [string]: 床型说明。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.rooms[].bed_type_desc_cn [string]: 床型中文说明。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.rooms[].name [string]: 名称。\n返回值.data.rooms[].name_cn [string]: 中文名称。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.rooms[].occupancy [integer]: 静态房型入住容量参考,不替代当前报价的成人/儿童容量及验价。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.rooms[].room_id [string]: 静态房型 ID。\n返回值.error [string]: 业务失败说明,不作为可重试或成功的唯一依据。\n返回值.error_code [string]: 鉴权等机器可读错误码,仅在错误路径提供。\n返回值.ok [boolean]: 业务是否成功。false 时读取 error/reason;工具执行错误也可能通过 MCP isError 返回而没有 structuredContent。\n返回值.reason [string] 取值=[\"invalid_request\",\"hotel_not_found\",\"upstream_timeout\",\"upstream_error\",\"hotel_detail_unavailable\"]: 失败原因:invalid_request=参数无效,hotel_not_found=酒店不存在,upstream_timeout=上游超时,upstream_error=上游失败,hotel_detail_unavailable=酒店详情不可用。成功空结果的 no_matching_live_room 位于 data.reason;批量逐项判断,不把一项失败当成整批失败。\n返回值 的分支 1:\n返回值 必有字段=data\n返回值.ok 取值=[true]\n返回值 的分支 2:\n返回值 必有字段=error,reason\n返回值.ok 取值=[false]\n"
    • Changedpay_order4 fields changed
      • changedInput schema / properties / agent_ref_id / description
        Previous value: -"TourMind booking reference"New value: +"create_booking 返回的 TourMind 订单号,必须属于当前鉴权用户;不是酒店确认号或第三方支付订单号。"
      • changedInput schema / properties / payment_method / description
        Previous value: -"Payment method: Stripe, 微信支付, 支付宝, or 支付宝AI付 (Qwen native cashier; returns prepay_id, not pay_url)"New value: +"精确枚举:Stripe、微信支付、支付宝、支付宝AI付。后三种仅 CNY;支付宝AI付需千问原生收银台,返回 prepay_id,不是可点击支付链接。"
      • changedInput schema / properties / user_key / description
        Previous value: -"TourMind user key required for authenticated ToC payment"New value: +"由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
      • addedOutput schema / description
        Added value: +"返回字段说明(不增加校验约束;缺失、零值和 null 按各字段说明解释):\n返回值 [object] 必有字段=ok: 业务响应信封;字段缺失表示没有提供,不能自动补零。数组的 null 与 [] 都不含条目,但 null 不承诺完成了该部分查询。\n返回值.data [object]: 按 payment_method 区分支付结果。应付金额见 Stripe payable_amount;微信/支付宝以订单及收银台为准。必须查询订单确认支付结果。\n返回值.data 的分支 1:\n返回值.data [object] 必有字段=agent_ref_id,payment_method,pay_url,message,expires_at,one_time: 微信/支付宝支付链接。\n返回值.data.agent_ref_id [string]: TourMind 订单号。\n返回值.data.expires_at [string]: 支付链接到期时间 RFC3339,含时区。\n返回值.data.message [string]: 支付操作说明。\n返回值.data.one_time [boolean] 取值=[true]: 支付链接只可使用一次。\n返回值.data.pay_url [string]: 用户完成支付的 URL;生成链接不代表付款成功。支付宝AI付为空字符串,使用 prepay_id 调起专用收银台。\n返回值.data.payment_method [string] 取值=[\"微信支付\",\"支付宝\"]: 仅 CNY 订单支持。\n返回值.data 的分支 2:\n返回值.data [object] 必有字段=agent_ref_id,payment_method,pay_url,message,request_id,third_party_order_no,order_amount,stripe_payment_fee: Stripe 支付链接及费用。\n返回值.data.agent_ref_id [string]: TourMind 订单号。\n返回值.data.message [string]: 支付操作说明。\n返回值.data.order_amount [number]: 全部房间、整段入住的订单总价,使用对应币种主单位(如 CNY 元),不是分;未包含另列的 Stripe 手续费,酒店到店收取费用以政策及 exclusions 为准。\n返回值.data.pay_url [string]: 用户完成支付的 URL;生成链接不代表付款成功。支付宝AI付为空字符串,使用 prepay_id 调起专用收银台。\n返回值.data.payment_method [string] 取值=[\"Stripe\"]: Stripe 信用卡支付。\n返回值.data.request_id [string]: 支付服务请求 ID,用于关联支付请求。\n返回值.data.stripe_payment_fee [object] 必有字段=fee_rate,fee_amount,payable_amount,currency,notice: Stripe 另收手续费及含手续费的应付金额。\n返回值.data.stripe_payment_fee.currency [string]: 金额币种 ISO 4217。\n返回值.data.stripe_payment_fee.fee_amount [number]: Stripe 手续费金额,currency 主单位,已经按服务端精度取整。\n返回值.data.stripe_payment_fee.fee_rate [number]: 手续费比例,当前 0.035 即 3.5%。\n返回值.data.stripe_payment_fee.notice [string]: 费用来源及用途说明。\n返回值.data.stripe_payment_fee.payable_amount [number]: 订单金额加 Stripe 手续费后的实际应付总额,currency 主单位;尚未支付。\n返回值.data.third_party_order_no [string]: 支付平台订单号,与 TourMind 订单号不同。\n返回值.data 的分支 3:\n返回值.data [object] 必有字段=agent_ref_id,payment_method,pay_url,message,request_id,third_party_order_no,prepay_id,expires_at: 支付宝AI付预支付信息。\n返回值.data.agent_ref_id [string]: TourMind 订单号。\n返回值.data.expires_at [string]: 预支付信息到期时间 RFC3339,含时区。\n返回值.data.message [string]: 支付操作说明。\n返回值.data.pay_url [string] 取值=[\"\"]: 用户完成支付的 URL;生成链接不代表付款成功。支付宝AI付为空字符串,使用 prepay_id 调起专用收银台。\n返回值.data.payment_method [string] 取值=[\"支付宝AI付\"]: 仅 CNY,千问原生收银台。\n返回值.data.prepay_id [string]: 千问 batchPay 所需预支付标识,不是成功付款凭证。\n返回值.data.request_id [string]: 支付服务请求 ID,用于关联支付请求。\n返回值.data.third_party_order_no [string]: 支付平台订单号,与 TourMind 订单号不同。\n返回值.error [string]: 业务失败说明,不作为可重试或成功的唯一依据。\n返回值.error_code [string]: 鉴权等机器可读错误码,仅在错误路径提供。\n返回值.ok [boolean]: 业务是否成功。false 时读取 error/reason;工具执行错误也可能通过 MCP isError 返回而没有 structuredContent。\n返回值.reason [string] 取值=[\"invalid_request\",\"hotel_not_found\",\"upstream_timeout\",\"upstream_error\",\"hotel_detail_unavailable\"]: 失败原因:invalid_request=参数无效,hotel_not_found=酒店不存在,upstream_timeout=上游超时,upstream_error=上游失败,hotel_detail_unavailable=酒店详情不可用。成功空结果的 no_matching_live_room 位于 data.reason;批量逐项判断,不把一项失败当成整批失败。\n返回值 的分支 1:\n返回值 必有字段=data\n返回值.ok 取值=[true]\n返回值 的分支 2:\n返回值 必有字段=error,reason\n返回值.ok 取值=[false]\n"
    • Changedquery_booking3 fields changed
      • changedInput schema / properties / agent_ref_id / description
        Previous value: -"TourMind booking reference"New value: +"create_booking 返回的 TourMind 订单号,必须属于当前鉴权用户;不是酒店确认号或第三方支付订单号。"
      • changedInput schema / properties / user_key / description
        Previous value: -"TourMind user key required for authenticated ToC order access"New value: +"由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
      • addedOutput schema / description
        Added value: +"返回字段说明(不增加校验约束;缺失、零值和 null 按各字段说明解释):\n返回值 [object] 必有字段=ok: 业务响应信封;字段缺失表示没有提供,不能自动补零。数组的 null 与 [] 都不含条目,但 null 不承诺完成了该部分查询。\n返回值.data [object] 必有字段=agent_ref_id,status,status_cn,hotel_id,hotel_name,room_type,check_in,check_out,room_count,total_price,currency,contact_name,hotel_confirmation_no,order_date: 当前账号所属订单的最新状态。\n返回值.data.agent_ref_id [string]: TourMind 订单号。\n返回值.data.check_in [string]: 入住日期 YYYY-MM-DD。\n返回值.data.check_out [string]: 离店日期 YYYY-MM-DD。\n返回值.data.contact_name [string]: 订单联系人姓名。\n返回值.data.currency [string]: 订单金额币种,ISO 4217。\n返回值.data.hotel_confirmation_no [string]: 酒店确认号;空字符串表示尚未提供,不应编造。\n返回值.data.hotel_id [integer]: 酒店 ID;传回工具时转换为字符串。\n返回值.data.hotel_name [string]: 订单酒店名称。\n返回值.data.order_date [string]: 订单创建时间 YYYY-MM-DD HH:mm:ss,接口未携带时区,不自行补 UTC。\n返回值.data.room_count [integer]: 预订房间数。\n返回值.data.room_type [string]: 预订房型。\n返回值.data.status [string] 取值=[\"UNPAID\",\"PENDING\",\"CONFIRMED\",\"CANCELLED\",\"CONFIRM_FAILED\"]: UNPAID=待支付;PENDING=待确认,不应重复支付;CONFIRMED=已确认;CANCELLED=已取消;CONFIRM_FAILED=确认失败。\n返回值.data.status_cn [string]: 订单状态中文说明。\n返回值.data.total_price [number]: 全部房间、整段入住的订单总价,使用对应币种主单位(如 CNY 元),不是分;未包含另列的 Stripe 手续费,酒店到店收取费用以政策及 exclusions 为准。\n返回值.error [string]: 业务失败说明,不作为可重试或成功的唯一依据。\n返回值.error_code [string]: 鉴权等机器可读错误码,仅在错误路径提供。\n返回值.ok [boolean]: 业务是否成功。false 时读取 error/reason;工具执行错误也可能通过 MCP isError 返回而没有 structuredContent。\n返回值.reason [string] 取值=[\"invalid_request\",\"hotel_not_found\",\"upstream_timeout\",\"upstream_error\",\"hotel_detail_unavailable\"]: 失败原因:invalid_request=参数无效,hotel_not_found=酒店不存在,upstream_timeout=上游超时,upstream_error=上游失败,hotel_detail_unavailable=酒店详情不可用。成功空结果的 no_matching_live_room 位于 data.reason;批量逐项判断,不把一项失败当成整批失败。\n返回值 的分支 1:\n返回值 必有字段=data\n返回值.ok 取值=[true]\n返回值 的分支 2:\n返回值 必有字段=error,reason\n返回值.ok 取值=[false]\n"
    • Changedquery_room_rates9 fields changed
      • changedInput schema / properties / adults / description
        Previous value: -"Number of adults in each room"New value: +"每房成人数,不是所有房间合计;相同入住配置应用于每间房。有效入住人数必须大于 0。 省略或 0 默认 1;负数无效。"
      • changedInput schema / properties / check_in_date / description
        Previous value: -"Check-in date in YYYY-MM-DD format"New value: +"入住日期,YYYY-MM-DD。 省略/空字符串默认服务端当前日期的明天。"
      • changedInput schema / properties / check_out_date / description
        Previous value: -"Check-out date in YYYY-MM-DD format"New value: +"离店日期,YYYY-MM-DD,必须晚于 check_in_date。 省略/空字符串默认入住次日。"
      • changedInput schema / properties / children / description
        Previous value: -"Number of children in each room"New value: +"每房儿童数,非负整数;省略或 0 表示无儿童,必须等于 children_ages 数组长度。"
      • changedInput schema / properties / children_ages / description
        Previous value: -"Ages of the children in each room, each from 0 to 17"New value: +"每房儿童年龄数组,逐个为 0–17 岁整数;数组长度必须等于 children,同一组年龄应用于每间房。省略/null/[] 只适用于 children=0。"
      • changedInput schema / properties / hotel_id / description
        Previous value: -"TourMind hotel identifier"New value: +"TourMind 酒店 ID,数字字符串;从地点/酒店搜索返回取得,不使用 Google place_id。"
      • changedInput schema / properties / room_count / description
        Previous value: -"Number of rooms using the same occupancy"New value: +"相同入住配置的房间数;业务处理器将 0 按 1 间处理,负数无效。查询工具可省略;下单工具原有 MCP Schema 要求此字段存在。"
      • changedInput schema / properties / user_key / description
        Previous value: -"Optional TourMind user key for authenticated ToC access"New value: +"由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
      • addedOutput schema / description
        Added value: +"返回字段说明(不增加校验约束;缺失、零值和 null 按各字段说明解释):\n返回值 [object] 必有字段=ok: 业务响应信封;字段缺失表示没有提供,不能自动补零。数组的 null 与 [] 都不含条目,但 null 不承诺完成了该部分查询。\n返回值.data [object] 必有字段=room_types,total,stripe_payment_fee_notice: 房价查询结果。非空返回 room_types/total/手续费说明;空结果增加 reason。\n返回值.data.reason [string] 取值=[\"no_matching_live_room\"]: 仅成功空结果出现,表示当前没有匹配的实时房价。\n返回值.data.room_types [array]: 实时房型列表;空数组表示该入住条件下没有匹配报价。\n返回值.data.room_types[] [object] 必有字段=name,products\n返回值.data.room_types[].basic_room_image [string]: 房型图片 URL。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].bed_type_desc [string]: 床型说明。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].name [string]: 名称。\n返回值.data.room_types[].name_cn [string]: 中文名称。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].products [null|array]: 按入住容量、餐食和取消政策归并的报价产品列表。\n返回值.data.room_types[].products[] [object] 必有字段=max_occupancy,meal_type,meal_count,cancellation_policy,rate\n返回值.data.room_types[].products[].cancellation_policy [object] 必有字段=type,effective_non_refundable: 汇总取消政策;仍须在下单前验价。\n返回值.data.room_types[].products[].cancellation_policy.advanced_hour [integer]: 供应商取消提前小时数;以实际截止时间为准,不自行重新推算。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].products[].cancellation_policy.effective_non_refundable [boolean]: 是否已按不可退款处理,包括原不可退、缺少取消信息或截止时间已过。\n返回值.data.room_types[].products[].cancellation_policy.free_cancel_deadline [string]: 免费取消截止时间,通常 RFC3339,按返回的时区/UTC 偏移解释,不按客户端当地时间替换;若没有时区或无法解析,不承诺免费取消。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].products[].cancellation_policy.type [string] 取值=[\"non_refundable\",\"free_cancel_before_deadline\"]: 取消类型:non_refundable=当前不可退款;free_cancel_before_deadline=截止前可免费取消。\n返回值.data.room_types[].products[].max_occupancy [integer]: 每房成人上限,不是成人加儿童的总上限;儿童额外上限见 maxChildren。缺失表示未提供,不能按零处理;零值也不能用于推断可以无限入住,须按实际入住人数验价。\n返回值.data.room_types[].products[].meal_count [integer]: 供应商提供的成人餐食份数,辅助解释 meal_type;零或未提供份数不能覆盖已知餐食类型,例如类型 4 仍为双早。不要据此推断儿童餐食。\n返回值.data.room_types[].products[].meal_type [string]: 餐食类型字符串编码:1=不含餐;2=早餐(份数见 meal_count/mealCount);3=1份早餐;4=2份早餐;5=3份早餐;6=4份早餐;7=5份早餐;8=6份早餐;9=7份早餐;10=8份早餐;11=午餐;12=晚餐;13=午餐和晚餐;14=半膳(早餐加午餐或晚餐);15=全膳(早餐、午餐、晚餐);16=一价全包;17=膳食自理(厨房设施,并非自助餐);18=早餐和午餐;19=早餐和晚餐。meal_count/mealCount 补充份数,零值不能覆盖已知餐食类型;空串或未识别编码表示类型未知,不推断为不含餐。\n返回值.data.room_types[].products[].rate [object] 必有字段=rate_code,currency,total_price,per_night_price,payment_type,is_on_request,stripe_payment_fee: 该产品最低总价对应的报价。\n返回值.data.room_types[].products[].rate.currency [string]: 金额币种 ISO 4217。\n返回值.data.room_types[].products[].rate.is_on_request [boolean]: true 表示需向供应商申请确认,非即时确认;false 也不表示已预留库存或已下单。\n返回值.data.room_types[].products[].rate.payment_type [integer]: 报价支付类型:1=预付,5=到店支付;当前生成器返回 1。不是 pay_order.payment_method,不可作为支付方式调用。\n返回值.data.room_types[].products[].rate.per_night_price [number]: 平均每房每晚价,currency 主单位;不是整段入住总价,不含另列 Stripe 手续费。\n返回值.data.room_types[].products[].rate.rate_code [string]: 不透明报价代码,保持原样;必须用相同酒店、日期和入住人数验价后下单。\n返回值.data.room_types[].products[].rate.stripe_payment_fee [object] 必有字段=fee_rate,fee_amount,payable_amount,currency,notice: 选择 Stripe 时另收的支付处理费用;不包含在房价总额中。\n返回值.data.room_types[].products[].rate.stripe_payment_fee.currency [string]: 金额币种 ISO 4217。\n返回值.data.room_types[].products[].rate.stripe_payment_fee.fee_amount [number]: Stripe 手续费金额,currency 主单位,已经按服务端精度取整。\n返回值.data.room_types[].products[].rate.stripe_payment_fee.fee_rate [number]: 手续费比例,当前 0.035 即 3.5%。\n返回值.data.room_types[].products[].rate.stripe_payment_fee.notice [string]: 费用来源及用途说明。\n返回值.data.room_types[].products[].rate.stripe_payment_fee.payable_amount [number]: 订单金额加 Stripe 手续费后的实际应付总额,currency 主单位;尚未支付。\n返回值.data.room_types[].products[].rate.total_price [number]: 全部房间、整段入住的订单总价,使用对应币种主单位(如 CNY 元),不是分;未包含另列的 Stripe 手续费,酒店到店收取费用以政策及 exclusions 为准。\n返回值.data.room_types[].room_type_code [string]: 房型代码。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.stripe_payment_fee_notice [string]: Stripe 另收手续费的说明;不代表已选择 Stripe 或已支付。\n返回值.data.total [integer]: 返回房型数,不是产品数。空结果为 0。\n返回值.data.web_url [string]: 酒店结果浏览链接,不是价格锁定、订单或支付凭证。仅在成功签发链接时返回;有效期见 web_url_expires_at,可在有效期内重复访问。当前 MCP 不接收链接语言参数,签发语言固定 zh-CN;get_hotel_detail.language 仅控制图片查询语言。\n返回值.data.web_url_expires_at [string]: 链接到期时间,RFC3339,保留返回的 UTC 偏移;缺失表示未签发链接。\n返回值.data.web_url_one_time [boolean] 取值=[false]: 酒店浏览链接当前为 false,可重复访问直到到期;不同于支付 one_time。\n返回值.error [string]: 业务失败说明,不作为可重试或成功的唯一依据。\n返回值.error_code [string]: 鉴权等机器可读错误码,仅在错误路径提供。\n返回值.ok [boolean]: 业务是否成功。false 时读取 error/reason;工具执行错误也可能通过 MCP isError 返回而没有 structuredContent。\n返回值.reason [string] 取值=[\"invalid_request\",\"hotel_not_found\",\"upstream_timeout\",\"upstream_error\",\"hotel_detail_unavailable\"]: 失败原因:invalid_request=参数无效,hotel_not_found=酒店不存在,upstream_timeout=上游超时,upstream_error=上游失败,hotel_detail_unavailable=酒店详情不可用。成功空结果的 no_matching_live_room 位于 data.reason;批量逐项判断,不把一项失败当成整批失败。\n返回值 的分支 1:\n返回值 必有字段=data\n返回值.ok 取值=[true]\n返回值 的分支 2:\n返回值 必有字段=error,reason\n返回值.ok 取值=[false]\n"
    • Changedsearch_hotels17 fields changed
      • changedInput schema / properties / adults / description
        Previous value: -"Number of adults in each room"New value: +"每房成人数,不是所有房间合计;相同入住配置应用于每间房。有效入住人数必须大于 0。 省略或 0 默认 1;负数无效。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。"
      • changedInput schema / properties / check_in_date / description
        Previous value: -"Check-in date in YYYY-MM-DD format"New value: +"入住日期,YYYY-MM-DD。 省略/空字符串默认服务端当前日期的明天。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。"
      • changedInput schema / properties / check_out_date / description
        Previous value: -"Check-out date in YYYY-MM-DD format"New value: +"离店日期,YYYY-MM-DD,必须晚于 check_in_date。 省略/空字符串默认入住次日。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。"
      • changedInput schema / properties / children / description
        Previous value: -"Number of children in each room"New value: +"每房儿童数,非负整数;省略或 0 表示无儿童,必须等于 children_ages 数组长度。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。"
      • changedInput schema / properties / children_ages / description
        Previous value: -"Ages of the children in each room, each from 0 to 17"New value: +"每房儿童年龄数组,逐个为 0–17 岁整数;数组长度必须等于 children,同一组年龄应用于每间房。省略/null/[] 只适用于 children=0。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。"
      • changedInput schema / properties / highest_price / description
        Previous value: -"Maximum total price filter"New value: +"最高预算:CNY 元的整数,全部房间、整段入住总价口径;省略或非正数不启用上限。当前候选过滤比较缓存累计单房价格,未按 room_count 折算,并不保证最终实时总价满足预算;最终必须按验价总价核对。"
      • changedInput schema / properties / keyword / description
        Previous value: -"Hotel name or location keyword when region_id and coordinates are unavailable"New value: +"地点或酒店名称。search_location 必填非空白文本;search_hotels 中关键词模式优先于 region_id,坐标模式优先于关键词。"
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude of the search center"New value: +"搜索中心纬度,-90 至 90 度;使用坐标模式必须同时提供 longitude 和 radius_km。"
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum fuzzy hotel matches"New value: +"仅关键词模糊搜索生效;省略或 0 使用 20;服务端未定义最大值,负值直接交给搜索服务处理,不应传负值。区域/坐标搜索固定最多取 20 个候选再实时筛选。"
      • changedInput schema / properties / location_name / description
        Previous value: -"Human-readable location used to describe the search scope"New value: +"区域或坐标中心的可读名称,用于结果范围说明,不替代 region_id/坐标。"
      • changedInput schema / properties / longitude / description
        Previous value: -"Longitude of the search center"New value: +"搜索中心经度,-180 至 180 度;使用坐标模式必须同时提供 latitude 和 radius_km。"
      • changedInput schema / properties / lowest_price / description
        Previous value: -"Minimum total price filter"New value: +"最低预算:CNY 元的整数,全部房间、整段入住总价口径;省略或非正数不启用下限。当前候选过滤比较缓存累计单房价格,未按 room_count 折算,并不保证最终实时总价满足预算;最终必须按验价总价核对。"
      • changedInput schema / properties / radius_km / description
        Previous value: -"Search radius in kilometers"New value: +"搜索半径,公里,必须大于 0;没有自动默认值,可显式使用 search_location 建议值。"
      • changedInput schema / properties / region_id / description
        Previous value: -"TourMind region identifier"New value: +"TourMind 区域 ID 数字字符串。没有坐标且 keyword 为空时使用区域模式;地区名称须先 search_location 解析。"
      • changedInput schema / properties / room_count / description
        Previous value: -"Number of rooms using the same occupancy"New value: +"相同入住配置的房间数;业务处理器将 0 按 1 间处理,负数无效。查询工具可省略;下单工具原有 MCP Schema 要求此字段存在。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。"
      • changedInput schema / properties / user_key / description
        Previous value: -"Optional TourMind user key for authenticated ToC access"New value: +"由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
      • addedOutput schema / description
        Added value: +"返回字段说明(不增加校验约束;缺失、零值和 null 按各字段说明解释):\n返回值 [object] 必有字段=ok: 业务响应信封;字段缺失表示没有提供,不能自动补零。数组的 null 与 [] 都不含条目,但 null 不承诺完成了该部分查询。\n返回值.data [object] 必有字段=hotels,total: 酒店候选结果;关键词命中不表示实时有房,预算最终以验价总价核对。\n返回值.data.hotels [array]: 本次匹配酒店。\n返回值.data.hotels[]: 区域/坐标模式返回 hotel_name/min_price;模糊关键词模式返回 name/has_invrate,没有价格。\n返回值.data.hotels[] 的分支 1:\n返回值.data.hotels[] [object] 必有字段=hotel_id,hotel_name,star_rating,min_price,currency_code,distance_km: 区域/坐标模式酒店,最多 20 个候选经实时筛选。\n返回值.data.hotels[].address [string]: 地址。\n返回值.data.hotels[].address_cn [string]: 中文地址。\n返回值.data.hotels[].currency_code [string]: min_price 对应币种 ISO 4217,不保证为 CNY。\n返回值.data.hotels[].distance_km [number]: 距搜索中心距离,公里;区域搜索的零值不表示酒店就在用户位置。\n返回值.data.hotels[].hotel_id [integer]: 酒店 ID,传回工具时使用字符串。\n返回值.data.hotels[].hotel_image [string]: 酒店图片 URL。\n返回值.data.hotels[].hotel_name [string]: 酒店名称。\n返回值.data.hotels[].hotel_name_cn [string]: 中文酒店名称。\n返回值.data.hotels[].min_price [number]: 当前区域/坐标搜索经过实时筛选后的最低每房每晚参考价,currency_code 主单位;初始候选/预算筛选来自缓存,不能当成最终可下单价或全部房间整段总价。下单前必须查询并验价。\n返回值.data.hotels[].star_rating [integer]: 酒店星级;零可能表示未评级。\n返回值.data.hotels[] 的分支 2:\n返回值.data.hotels[] [object] 必有字段=hotel_id,name,has_invrate\n返回值.data.hotels[].address [string]: 酒店地址。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotels[].address_cn [string]: 中文酒店地址。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotels[].city_name [string]: 城市名称。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotels[].country [string]: 国家名称。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotels[].country_code [string]: 国家代码。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotels[].has_invrate [boolean]: 缓存中存在价格信息的标记,不代表当前实时有房或可下单。\n返回值.data.hotels[].highlights [object]: 搜索高亮片段,键为字段名,值为高亮文本。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotels[].highlights.* [string]\n返回值.data.hotels[].hotel_id [integer]: TourMind 酒店数字 ID;作为后续工具输入时用字符串。\n返回值.data.hotels[].latitude [number]: 纬度,单位度;详情返回数字字符串,搜索返回 number。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotels[].longitude [number]: 经度,单位度;详情返回数字字符串,搜索返回 number。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotels[].name [string]: 名称。\n返回值.data.hotels[].name_cn [string]: 中文名称。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotels[].region_id [string]: TourMind 地域 ID;搜索结果可能为字符串,详情为整数,以 Schema 类型为准。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotels[].region_name [string]: 地域名称。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotels[].region_name_cn [string]: 地域中文名称。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotels[].region_name_long [string]: 完整地域名称。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotels[].region_name_long_cn [string]: 完整地域中文名称。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.hotels[].star_rating [integer]: 酒店星级,未提供或零值不等于零星酒店。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.search_scope [string]: 区域或坐标搜索范围;关键词模式不返回。\n返回值.data.total [integer]: 本次返回酒店数,不是整个地区酒店总数。\n返回值.data.web_url [string]: 酒店结果浏览链接,不是价格锁定、订单或支付凭证。仅在成功签发链接时返回;有效期见 web_url_expires_at,可在有效期内重复访问。当前 MCP 不接收链接语言参数,签发语言固定 zh-CN;get_hotel_detail.language 仅控制图片查询语言。\n返回值.data.web_url_expires_at [string]: 链接到期时间,RFC3339,保留返回的 UTC 偏移;缺失表示未签发链接。\n返回值.data.web_url_one_time [boolean] 取值=[false]: 酒店浏览链接当前为 false,可重复访问直到到期;不同于支付 one_time。\n返回值.error [string]: 业务失败说明,不作为可重试或成功的唯一依据。\n返回值.error_code [string]: 鉴权等机器可读错误码,仅在错误路径提供。\n返回值.ok [boolean]: 业务是否成功。false 时读取 error/reason;工具执行错误也可能通过 MCP isError 返回而没有 structuredContent。\n返回值.reason [string] 取值=[\"invalid_request\",\"hotel_not_found\",\"upstream_timeout\",\"upstream_error\",\"hotel_detail_unavailable\"]: 失败原因:invalid_request=参数无效,hotel_not_found=酒店不存在,upstream_timeout=上游超时,upstream_error=上游失败,hotel_detail_unavailable=酒店详情不可用。成功空结果的 no_matching_live_room 位于 data.reason;批量逐项判断,不把一项失败当成整批失败。\n返回值 的分支 1:\n返回值 必有字段=data\n返回值.ok 取值=[true]\n返回值 的分支 2:\n返回值 必有字段=error,reason\n返回值.ok 取值=[false]\n"
    • Changedsearch_location3 fields changed
      • changedInput schema / properties / keyword / description
        Previous value: -"Region, point of interest, landmark, shopping mall, or hotel name"New value: +"地点或酒店名称。search_location 必填非空白文本;search_hotels 中关键词模式优先于 region_id,坐标模式优先于关键词。"
      • changedInput schema / properties / user_key / description
        Previous value: -"Optional TourMind user key for authenticated ToC access"New value: +"由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
      • addedOutput schema / description
        Added value: +"返回字段说明(不增加校验约束;缺失、零值和 null 按各字段说明解释):\n返回值 [object] 必有字段=ok: 业务响应信封;字段缺失表示没有提供,不能自动补零。数组的 null 与 [] 都不含条目,但 null 不承诺完成了该部分查询。\n返回值.data [object] 必有字段=regions,hotels,place: 地点匹配;各类别可能为空,不编造 ID 或坐标。\n返回值.data.hotels [array|null]: 酒店列表,无结果时为 null。\n返回值.data.hotels[] [object] 必有字段=hotel_id,name: 匹配酒店,非实时可售性结果。\n返回值.data.hotels[].address [string]: 地址。\n返回值.data.hotels[].country [string]: 国家。\n返回值.data.hotels[].hotel_id [integer]: 酒店 ID,调用其他工具时使用字符串。\n返回值.data.hotels[].name [string]: 酒店名。\n返回值.data.hotels[].name_cn [string]: 酒店中文名。\n返回值.data.hotels[].region_id [string]: 区域 ID。\n返回值.data.hotels[].region_name [string]: 区域名。\n返回值.data.hotels[].star_rating [integer]: 酒店星级;缺失表示未知。\n返回值.data.place [object|null] 必有字段=place_id,name,latitude,longitude,source,recommended_radius_km,search_scope: 首个匹配 POI;null 表示没有提供 POI,可使用 regions/hotels。\n返回值.data.place.formatted_address [string]: 地点完整地址。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.place.latitude [number]: 纬度,单位度;详情返回数字字符串,搜索返回 number。\n返回值.data.place.longitude [number]: 经度,单位度;详情返回数字字符串,搜索返回 number。\n返回值.data.place.name [string]: 名称。\n返回值.data.place.place_id [string]: Google 地点标识,不是 TourMind hotel_id/region_id。\n返回值.data.place.recommended_radius_km [number]: 建议搜索半径,公里;调用搜索时需要显式传 radius_km,不是搜索服务默认值。\n返回值.data.place.search_scope [string]: 地点与推荐半径的文字说明。\n返回值.data.place.source [string]: 坐标来源,当前为 google。\n返回值.data.place.types [null|array]: Google 地点类别列表。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.place.types[] [string]\n返回值.data.regions [array|null]: 行政区域列表,无结果时为 null。\n返回值.data.regions[] [object] 必有字段=region_id,name: 匹配行政区域,使用返回 ID 继续搜索。\n返回值.data.regions[].country [string]: 国家名称。\n返回值.data.regions[].full_name [string]: 完整区域路径。\n返回值.data.regions[].full_name_cn [string]: 中文完整区域路径。\n返回值.data.regions[].hotel_count [integer]: 区域酒店数;缺失表示未提供,不能当成零。\n返回值.data.regions[].latitude [number]: 纬度,度。\n返回值.data.regions[].longitude [number]: 经度,度。\n返回值.data.regions[].name [string]: 区域名称。\n返回值.data.regions[].name_cn [string]: 中文名称。\n返回值.data.regions[].region_id [integer]: 区域 ID,传回 region_id 时用字符串。\n返回值.data.regions[].region_type [string]: 地区类型,由地域服务提供。\n返回值.error [string]: 业务失败说明,不作为可重试或成功的唯一依据。\n返回值.error_code [string]: 鉴权等机器可读错误码,仅在错误路径提供。\n返回值.ok [boolean]: 业务是否成功。false 时读取 error/reason;工具执行错误也可能通过 MCP isError 返回而没有 structuredContent。\n返回值.reason [string] 取值=[\"invalid_request\",\"hotel_not_found\",\"upstream_timeout\",\"upstream_error\",\"hotel_detail_unavailable\"]: 失败原因:invalid_request=参数无效,hotel_not_found=酒店不存在,upstream_timeout=上游超时,upstream_error=上游失败,hotel_detail_unavailable=酒店详情不可用。成功空结果的 no_matching_live_room 位于 data.reason;批量逐项判断,不把一项失败当成整批失败。\n返回值 的分支 1:\n返回值 必有字段=data\n返回值.ok 取值=[true]\n返回值 的分支 2:\n返回值 必有字段=error,reason\n返回值.ok 取值=[false]\n"
  2. 2 tool updates
    • Changedcreate_booking2 fields changed
      • addedInput schema / properties / contact_phone
        Added value: +{
        +  "description": "Contact phone including country code",
        +  "type": "string"
        +}
      • addedInput schema / properties / rooms
        Added value: +{
        +  "description": "Named guests grouped by room; when supplied length must equal room_count",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "guests": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "firstName": {
        +              "type": "string"
        +            },
        +            "lastName": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "firstName",
        +            "lastName"
        +          ],
        +          "type": "object"
        +        },
        +        "type": [
        +          "null",
        +          "array"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "guests"
        +    ],
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
    • Changedpay_order1 field changed
      • changedInput schema / properties / payment_method / description
        Previous value: -"Payment method: Stripe, 微信支付, or 支付宝"New value: +"Payment method: Stripe, 微信支付, 支付宝, or 支付宝AI付 (Qwen native cashier; returns prepay_id, not pay_url)"
  3. 4 tool updates
    • Changedcancel_booking1 field changed
      • changedInput schema / properties / user_key / description
        Previous value: -"TourMind user key required for authenticated ToC booking operations"New value: +"TourMind user key required for authenticated ToC order access"
    • Changedcreate_booking1 field changed
      • changedInput schema / properties / user_key / description
        Previous value: -"TourMind user key required for authenticated ToC booking operations"New value: +"TourMind user key required for authenticated ToC booking"
    • Changedpay_order1 field changed
      • changedInput schema / properties / user_key / description
        Previous value: -"TourMind user key required for authenticated ToC booking operations"New value: +"TourMind user key required for authenticated ToC payment"
    • Changedquery_booking1 field changed
      • changedInput schema / properties / user_key / description
        Previous value: -"TourMind user key required for authenticated ToC booking operations"New value: +"TourMind user key required for authenticated ToC order access"
  4. 5 tool updates
    • Addedbatch_query_room_rates
    • Changedcheck_room_availability4 fields changed
      • changedInput schema / properties / adults / description
        Previous value: -"Number of adults per room"New value: +"Number of adults in each room"
      • addedInput schema / properties / children
        Added value: +{
        +  "description": "Number of children in each room",
        +  "type": "integer"
        +}
      • addedInput schema / properties / children_ages
        Added value: +{
        +  "description": "Ages of the children in each room, each from 0 to 17",
        +  "items": {
        +    "type": "integer"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • changedInput schema / properties / room_count / description
        Previous value: -"Number of rooms"New value: +"Number of rooms using the same occupancy"
    • Changedcreate_booking4 fields changed
      • changedInput schema / properties / adults / description
        Previous value: -"Number of adults per room"New value: +"Number of adults in each room"
      • addedInput schema / properties / children
        Added value: +{
        +  "description": "Number of children in each room",
        +  "type": "integer"
        +}
      • addedInput schema / properties / children_ages
        Added value: +{
        +  "description": "Ages of the children in each room, each from 0 to 17",
        +  "items": {
        +    "type": "integer"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • changedInput schema / properties / room_count / description
        Previous value: -"Number of rooms"New value: +"Number of rooms using the same occupancy"
    • Changedquery_room_rates4 fields changed
      • changedInput schema / properties / adults / description
        Previous value: -"Number of adults per room"New value: +"Number of adults in each room"
      • addedInput schema / properties / children
        Added value: +{
        +  "description": "Number of children in each room",
        +  "type": "integer"
        +}
      • addedInput schema / properties / children_ages
        Added value: +{
        +  "description": "Ages of the children in each room, each from 0 to 17",
        +  "items": {
        +    "type": "integer"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • changedInput schema / properties / room_count / description
        Previous value: -"Number of rooms"New value: +"Number of rooms using the same occupancy"
    • Changedsearch_hotels4 fields changed
      • changedInput schema / properties / adults / description
        Previous value: -"Number of adults per room"New value: +"Number of adults in each room"
      • addedInput schema / properties / children
        Added value: +{
        +  "description": "Number of children in each room",
        +  "type": "integer"
        +}
      • addedInput schema / properties / children_ages
        Added value: +{
        +  "description": "Ages of the children in each room, each from 0 to 17",
        +  "items": {
        +    "type": "integer"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • changedInput schema / properties / room_count / description
        Previous value: -"Number of rooms"New value: +"Number of rooms using the same occupancy"
  5. 10 tool updates
    • First observedcancel_booking
    • First observedcheck_room_availability
    • First observedcheck_skill_update
    • First observedcreate_booking
    • First observedget_hotel_detail
    • First observedpay_order
    • First observedquery_booking
    • First observedquery_room_rates
    • First observedsearch_hotels
    • First observedsearch_location

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    Official MCP server for MAQAMI, a hotel and flight booking platform with 3M+ hotels. Search live hotel rates and flights, look up places, airports and hotel details, then prebook and book. Remote Streamable HTTP endpoint, no API key required.
    41
    86 npm
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to search and book hotels globally with real-time pricing and inventory from over 2 million properties.
    46
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables MCP clients to search hotel availability, validate rates, create and retrieve bookings, simulate or execute cancellations, and browse destinations and hotel content through the Hotelbeds Booking and Content APIs. Includes a surface-and-reconfirm booking flow that re-validates live prices with a tolerance before confirming.
    9
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.