Koskamo

Hotel Booking AI MCP

A public MCP server enabling consumer hotel search, live-rate retrieval, availability checks, booking, order management, and payment processing via the TourMind ToC endpoint.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Hotel Booking AI MCP logo, by TourMindCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by TourMind
MCP endpoint (Streamable HTTP)
https://api.tourmind.com/mcp/toc
Vendor documentation

What its tools do

11 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

11 of 11 have a description · 11 of 11 declare behavior hints · 11 of 11 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Perform public hotel search and availability checks
  • Retrieve live single-hotel and batch room rates
  • Execute hotel bookings and order management
  • Process payments for hotel reservations

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
tourmind-booking-toc 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
11 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Use TourMind tools for public hotel discovery and rates. Booking, order, cancellation, and payment tools require user_key. 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. After signing in, recheck the selected rate with the authenticated account and obtain confirmation of any changed price or cancellation policy before creating a booking.

Tools

11 advertised

batch_query_room_rates — Batch Query Room Rates
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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;只对超时等暂时失败项有限重试,不重复整批已成功项。无房属于成功空结果。 查询失败时先区分参数/鉴权错误和上游暂时失败:修正参数或重新授权后再调用,仅暂时失败可有限重试;不得把错误或空结果改述成成功。

batch_query_room_rates input schema
{
  "type": "object",
  "required": [
    "hotel_ids"
  ],
  "properties": {
    "adults": {
      "type": "integer",
      "description": "每房成人数,不是所有房间合计;相同入住配置应用于每间房。有效入住人数必须大于 0。 省略或 0 默认 1;负数无效。"
    },
    "children": {
      "type": "integer",
      "description": "每房儿童数,非负整数;省略或 0 表示无儿童,必须等于 children_ages 数组长度。"
    },
    "user_key": {
      "type": "string",
      "description": "由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
    },
    "hotel_ids": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "string"
      },
      "description": "每批 1–20 个 TourMind 酒店 ID 字符串;输出顺序与输入相同,每项失败独立返回。"
    },
    "room_count": {
      "type": "integer",
      "description": "相同入住配置的房间数;业务处理器将 0 按 1 间处理,负数无效。查询工具可省略;下单工具原有 MCP Schema 要求此字段存在。"
    },
    "check_in_date": {
      "type": "string",
      "description": "入住日期,YYYY-MM-DD。 省略/空字符串默认服务端当前日期的明天。"
    },
    "children_ages": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "integer"
      },
      "description": "每房儿童年龄数组,逐个为 0–17 岁整数;数组长度必须等于 children,同一组年龄应用于每间房。省略/null/[] 只适用于 children=0。"
    },
    "check_out_date": {
      "type": "string",
      "description": "离店日期,YYYY-MM-DD,必须晚于 check_in_date。 省略/空字符串默认入住次日。"
    }
  },
  "additionalProperties": false
}
batch_query_room_rates output schema
{
  "type": "object",
  "description": "返回字段说明(不增加校验约束;缺失、零值和 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",
  "additionalProperties": true
}
batch_query_room_rates annotations
{
  "title": "Batch Query Room Rates",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
cancel_booking — Cancel Booking
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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 不证明退款已到账。

cancel_booking input schema
{
  "type": "object",
  "required": [
    "user_key",
    "agent_ref_id"
  ],
  "properties": {
    "user_key": {
      "type": "string",
      "description": "由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
    },
    "agent_ref_id": {
      "type": "string",
      "description": "create_booking 返回的 TourMind 订单号,必须属于当前鉴权用户;不是酒店确认号或第三方支付订单号。"
    }
  },
  "additionalProperties": false
}
cancel_booking output schema
{
  "type": "object",
  "description": "返回字段说明(不增加校验约束;缺失、零值和 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",
  "additionalProperties": true
}
cancel_booking annotations
{
  "title": "Cancel Booking",
  "openWorldHint": true,
  "destructiveHint": true
}
check_room_availability — Check Room Availability
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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

check_room_availability input schema
{
  "type": "object",
  "required": [
    "hotel_id",
    "rate_code"
  ],
  "properties": {
    "adults": {
      "type": "integer",
      "description": "每房成人数,不是所有房间合计;相同入住配置应用于每间房。有效入住人数必须大于 0。 省略或 0 默认 1;负数无效。"
    },
    "children": {
      "type": "integer",
      "description": "每房儿童数,非负整数;省略或 0 表示无儿童,必须等于 children_ages 数组长度。"
    },
    "hotel_id": {
      "type": "string",
      "description": "TourMind 酒店 ID,数字字符串;从地点/酒店搜索返回取得,不使用 Google place_id。"
    },
    "user_key": {
      "type": "string",
      "description": "由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
    },
    "rate_code": {
      "type": "string",
      "description": "不透明报价代码,原样传递;验价使用 query_room_rates 返回值,下单使用 check_room_availability 最新返回值,酒店/日期/入住人数必须一致。"
    },
    "room_count": {
      "type": "integer",
      "description": "相同入住配置的房间数;业务处理器将 0 按 1 间处理,负数无效。查询工具可省略;下单工具原有 MCP Schema 要求此字段存在。"
    },
    "check_in_date": {
      "type": "string",
      "description": "入住日期,YYYY-MM-DD。 省略/空字符串默认服务端当前日期的明天。"
    },
    "children_ages": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "integer"
      },
      "description": "每房儿童年龄数组,逐个为 0–17 岁整数;数组长度必须等于 children,同一组年龄应用于每间房。省略/null/[] 只适用于 children=0。"
    },
    "check_out_date": {
      "type": "string",
      "description": "离店日期,YYYY-MM-DD,必须晚于 check_in_date。 省略/空字符串默认入住次日。"
    }
  },
  "additionalProperties": false
}
check_room_availability output schema
{
  "type": "object",
  "description": "返回字段说明(不增加校验约束;缺失、零值和 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",
  "additionalProperties": true
}
check_room_availability annotations
{
  "title": "Check Room Availability",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
check_skill_update — Check Skill Update
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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

check_skill_update input schema
{
  "type": "object",
  "required": [
    "current_version"
  ],
  "properties": {
    "current_version": {
      "type": "string",
      "description": "已安装 TourMind Skill 的语义版本,例如 1.0.0;没有安装 Skill 的 MCP 客户端不要编造版本。"
    }
  },
  "additionalProperties": false
}
check_skill_update output schema
{
  "type": "object",
  "description": "返回字段说明(不增加校验约束;缺失、零值和 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",
  "additionalProperties": true
}
check_skill_update annotations
{
  "title": "Check Skill Update",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
create_booking — Create Booking
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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 查最新状态。没有幂等键,超时/断线结果不明时不得自动重复下单,应先核实订单。

create_booking input schema
{
  "type": "object",
  "required": [
    "user_key",
    "hotel_id",
    "rate_code",
    "check_in_date",
    "check_out_date",
    "guest_name",
    "adults",
    "room_count",
    "currency",
    "total_price"
  ],
  "properties": {
    "rooms": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "object",
        "required": [
          "guests"
        ],
        "properties": {
          "guests": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "object",
              "required": [
                "firstName",
                "lastName"
              ],
              "properties": {
                "lastName": {
                  "type": "string",
                  "description": "入住人证件上的姓;须非空白,原始值最多 50 个 Unicode 字符,不能含控制字符。"
                },
                "firstName": {
                  "type": "string",
                  "description": "入住人证件上的名;须非空白,原始值最多 50 个 Unicode 字符,不能含控制字符。"
                }
              },
              "additionalProperties": false
            },
            "description": "本房间入住成人名单,至少 1 名且不超过 adults;不作为儿童年龄列表。"
          }
        },
        "additionalProperties": false
      },
      "description": "按房间分组的入住人,提供非空数组时长度必须等于有效 room_count;每房至少 1 名、最多 adults 名,优先于 guest_name。"
    },
    "adults": {
      "type": "integer",
      "description": "每房成人数,不是所有房间合计;相同入住配置应用于每间房。有效入住人数必须大于 0。 此入口不提供默认值;在使用入住条件时必须显式提供。"
    },
    "children": {
      "type": "integer",
      "description": "每房儿童数,非负整数;省略或 0 表示无儿童,必须等于 children_ages 数组长度。"
    },
    "currency": {
      "type": "string",
      "description": "核实报价的 ISO 4217 币种;订单实际以鉴权账号结算币种为准,本参数不改变账号币种。"
    },
    "hotel_id": {
      "type": "string",
      "description": "TourMind 酒店 ID,数字字符串;从地点/酒店搜索返回取得,不使用 Google place_id。"
    },
    "user_key": {
      "type": "string",
      "description": "由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
    },
    "rate_code": {
      "type": "string",
      "description": "不透明报价代码,原样传递;验价使用 query_room_rates 返回值,下单使用 check_room_availability 最新返回值,酒店/日期/入住人数必须一致。"
    },
    "guest_name": {
      "type": "string",
      "description": "入住人法定全名;现有 MCP Schema 要求该字段始终存在。未提供非空 rooms 时业务处理器按本字段解析姓名;rooms 非空时优先使用其姓名。"
    },
    "room_count": {
      "type": "integer",
      "description": "相同入住配置的房间数;业务处理器将 0 按 1 间处理,负数无效。查询工具可省略;下单工具原有 MCP Schema 要求此字段存在。"
    },
    "total_price": {
      "type": "number",
      "description": "最新验价的全部房间、整段入住总价,currency 主单位,必须大于 0;未含另列 Stripe 手续费。价格变化须先征得用户确认。"
    },
    "check_in_date": {
      "type": "string",
      "description": "入住日期,YYYY-MM-DD。 此入口不提供默认值;在使用入住条件时必须显式提供。"
    },
    "children_ages": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "integer"
      },
      "description": "每房儿童年龄数组,逐个为 0–17 岁整数;数组长度必须等于 children,同一组年龄应用于每间房。省略/null/[] 只适用于 children=0。"
    },
    "contact_email": {
      "type": "string",
      "description": "订单通知邮箱,可省略;应向用户核实,不编造。"
    },
    "contact_phone": {
      "type": "string",
      "description": "联系手机号,可带国家码;最多 32 字节,不允许换行。可省略。"
    },
    "check_out_date": {
      "type": "string",
      "description": "离店日期,YYYY-MM-DD,必须晚于 check_in_date。 此入口不提供默认值;在使用入住条件时必须显式提供。"
    }
  },
  "additionalProperties": false
}
create_booking output schema
{
  "type": "object",
  "description": "返回字段说明(不增加校验约束;缺失、零值和 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",
  "additionalProperties": true
}
create_booking annotations
{
  "title": "Create Booking",
  "openWorldHint": true,
  "destructiveHint": true
}
get_hotel_detail — Get Hotel Detail
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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

get_hotel_detail input schema
{
  "type": "object",
  "required": [
    "hotel_id"
  ],
  "properties": {
    "hotel_id": {
      "type": "string",
      "description": "TourMind 酒店 ID,数字字符串;从地点/酒店搜索返回取得,不使用 Google place_id。"
    },
    "language": {
      "type": "string",
      "description": "酒店图片查询语言,省略默认 zh-CN;直接传给图片服务,不承诺全部酒店文字翻译,也不改变 web_url 的固定 zh-CN 语言。"
    },
    "user_key": {
      "type": "string",
      "description": "由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
    }
  },
  "additionalProperties": false
}
get_hotel_detail output schema
{
  "type": "object",
  "description": "返回字段说明(不增加校验约束;缺失、零值和 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",
  "additionalProperties": true
}
get_hotel_detail annotations
{
  "title": "Get Hotel Detail",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
pay_order — Pay Order
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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 的客户端。

pay_order input schema
{
  "type": "object",
  "required": [
    "user_key",
    "agent_ref_id",
    "payment_method"
  ],
  "properties": {
    "user_key": {
      "type": "string",
      "description": "由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
    },
    "agent_ref_id": {
      "type": "string",
      "description": "create_booking 返回的 TourMind 订单号,必须属于当前鉴权用户;不是酒店确认号或第三方支付订单号。"
    },
    "payment_method": {
      "type": "string",
      "description": "精确枚举:Stripe、微信支付、支付宝、支付宝AI付。后三种仅 CNY;支付宝AI付需千问原生收银台,返回 prepay_id,不是可点击支付链接。"
    }
  },
  "additionalProperties": false
}
pay_order output schema
{
  "type": "object",
  "description": "返回字段说明(不增加校验约束;缺失、零值和 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",
  "additionalProperties": true
}
pay_order annotations
{
  "title": "Pay Order",
  "openWorldHint": true,
  "destructiveHint": true
}
query_booking — Query Booking
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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 表示已支付待确认,不能再次支付。 查询失败时先区分参数/鉴权错误和上游暂时失败:修正参数或重新授权后再调用,仅暂时失败可有限重试;不得把错误或空结果改述成成功。

query_booking input schema
{
  "type": "object",
  "required": [
    "user_key",
    "agent_ref_id"
  ],
  "properties": {
    "user_key": {
      "type": "string",
      "description": "由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
    },
    "agent_ref_id": {
      "type": "string",
      "description": "create_booking 返回的 TourMind 订单号,必须属于当前鉴权用户;不是酒店确认号或第三方支付订单号。"
    }
  },
  "additionalProperties": false
}
query_booking output schema
{
  "type": "object",
  "description": "返回字段说明(不增加校验约束;缺失、零值和 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",
  "additionalProperties": true
}
query_booking annotations
{
  "title": "Query Booking",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
query_room_rates — Query Room Rates
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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

query_room_rates input schema
{
  "type": "object",
  "required": [
    "hotel_id"
  ],
  "properties": {
    "adults": {
      "type": "integer",
      "description": "每房成人数,不是所有房间合计;相同入住配置应用于每间房。有效入住人数必须大于 0。 省略或 0 默认 1;负数无效。"
    },
    "children": {
      "type": "integer",
      "description": "每房儿童数,非负整数;省略或 0 表示无儿童,必须等于 children_ages 数组长度。"
    },
    "hotel_id": {
      "type": "string",
      "description": "TourMind 酒店 ID,数字字符串;从地点/酒店搜索返回取得,不使用 Google place_id。"
    },
    "user_key": {
      "type": "string",
      "description": "由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
    },
    "room_count": {
      "type": "integer",
      "description": "相同入住配置的房间数;业务处理器将 0 按 1 间处理,负数无效。查询工具可省略;下单工具原有 MCP Schema 要求此字段存在。"
    },
    "check_in_date": {
      "type": "string",
      "description": "入住日期,YYYY-MM-DD。 省略/空字符串默认服务端当前日期的明天。"
    },
    "children_ages": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "integer"
      },
      "description": "每房儿童年龄数组,逐个为 0–17 岁整数;数组长度必须等于 children,同一组年龄应用于每间房。省略/null/[] 只适用于 children=0。"
    },
    "check_out_date": {
      "type": "string",
      "description": "离店日期,YYYY-MM-DD,必须晚于 check_in_date。 省略/空字符串默认入住次日。"
    }
  },
  "additionalProperties": false
}
query_room_rates output schema
{
  "type": "object",
  "description": "返回字段说明(不增加校验约束;缺失、零值和 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",
  "additionalProperties": true
}
query_room_rates annotations
{
  "title": "Query Room Rates",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
search_hotels — Search Hotels
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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

search_hotels input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "description": "仅关键词模糊搜索生效;省略或 0 使用 20;服务端未定义最大值,负值直接交给搜索服务处理,不应传负值。区域/坐标搜索固定最多取 20 个候选再实时筛选。"
    },
    "adults": {
      "type": "integer",
      "description": "每房成人数,不是所有房间合计;相同入住配置应用于每间房。有效入住人数必须大于 0。 省略或 0 默认 1;负数无效。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。"
    },
    "keyword": {
      "type": "string",
      "description": "地点或酒店名称。search_location 必填非空白文本;search_hotels 中关键词模式优先于 region_id,坐标模式优先于关键词。"
    },
    "children": {
      "type": "integer",
      "description": "每房儿童数,非负整数;省略或 0 表示无儿童,必须等于 children_ages 数组长度。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。"
    },
    "latitude": {
      "type": [
        "null",
        "number"
      ],
      "description": "搜索中心纬度,-90 至 90 度;使用坐标模式必须同时提供 longitude 和 radius_km。"
    },
    "user_key": {
      "type": "string",
      "description": "由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
    },
    "longitude": {
      "type": [
        "null",
        "number"
      ],
      "description": "搜索中心经度,-180 至 180 度;使用坐标模式必须同时提供 latitude 和 radius_km。"
    },
    "radius_km": {
      "type": [
        "null",
        "number"
      ],
      "description": "搜索半径,公里,必须大于 0;没有自动默认值,可显式使用 search_location 建议值。"
    },
    "region_id": {
      "type": "string",
      "description": "TourMind 区域 ID 数字字符串。没有坐标且 keyword 为空时使用区域模式;地区名称须先 search_location 解析。"
    },
    "room_count": {
      "type": "integer",
      "description": "相同入住配置的房间数;业务处理器将 0 按 1 间处理,负数无效。查询工具可省略;下单工具原有 MCP Schema 要求此字段存在。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。"
    },
    "lowest_price": {
      "type": "integer",
      "description": "最低预算:CNY 元的整数,全部房间、整段入住总价口径;省略或非正数不启用下限。当前候选过滤比较缓存累计单房价格,未按 room_count 折算,并不保证最终实时总价满足预算;最终必须按验价总价核对。"
    },
    "check_in_date": {
      "type": "string",
      "description": "入住日期,YYYY-MM-DD。 省略/空字符串默认服务端当前日期的明天。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。"
    },
    "children_ages": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "integer"
      },
      "description": "每房儿童年龄数组,逐个为 0–17 岁整数;数组长度必须等于 children,同一组年龄应用于每间房。省略/null/[] 只适用于 children=0。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。"
    },
    "highest_price": {
      "type": "integer",
      "description": "最高预算:CNY 元的整数,全部房间、整段入住总价口径;省略或非正数不启用上限。当前候选过滤比较缓存累计单房价格,未按 room_count 折算,并不保证最终实时总价满足预算;最终必须按验价总价核对。"
    },
    "location_name": {
      "type": "string",
      "description": "区域或坐标中心的可读名称,用于结果范围说明,不替代 region_id/坐标。"
    },
    "check_out_date": {
      "type": "string",
      "description": "离店日期,YYYY-MM-DD,必须晚于 check_in_date。 省略/空字符串默认入住次日。 仅区域/坐标搜索使用;关键词搜索忽略入住条件。"
    }
  },
  "additionalProperties": false
}
search_hotels output schema
{
  "type": "object",
  "description": "返回字段说明(不增加校验约束;缺失、零值和 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",
  "additionalProperties": true
}
search_hotels annotations
{
  "title": "Search Hotels",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
search_location — Search Location
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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。 查询失败时先区分参数/鉴权错误和上游暂时失败:修正参数或重新授权后再调用,仅暂时失败可有限重试;不得把错误或空结果改述成成功。

search_location input schema
{
  "type": "object",
  "required": [
    "keyword"
  ],
  "properties": {
    "keyword": {
      "type": "string",
      "description": "地点或酒店名称。search_location 必填非空白文本;search_hotels 中关键词模式优先于 region_id,坐标模式优先于关键词。"
    },
    "user_key": {
      "type": "string",
      "description": "由可信本地客户端配置的 TourMind 用户凭证;勿让用户在聊天中粘贴。普通 ToC 查询可省略,订单/支付操作必填;OAuth 与 ToB 不接受此字段。"
    }
  },
  "additionalProperties": false
}
search_location output schema
{
  "type": "object",
  "description": "返回字段说明(不增加校验约束;缺失、零值和 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",
  "additionalProperties": true
}
search_location annotations
{
  "title": "Search Location",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1029 ms
95th percentile latency
1029 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1029 ms · metadata changed · 11 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http hotel-booking-ai-mcp https://api.tourmind.com/mcp/toc

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add hotel-booking-ai-mcp --url https://api.tourmind.com/mcp/toc

Cursor

Merge this server into .cursor/mcp.json in your project, then enable hotel-booking-ai-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "hotel-booking-ai-mcp": {
      "url": "https://api.tourmind.com/mcp/toc"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "hotel-booking-ai-mcp": {
      "type": "streamableHttp",
      "url": "https://api.tourmind.com/mcp/toc",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start hotel-booking-ai-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "hotel-booking-ai-mcp": {
      "type": "http",
      "url": "https://api.tourmind.com/mcp/toc"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http hotel-booking-ai-mcp https://api.tourmind.com/mcp/toc

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://api.tourmind.com/mcp/toc

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "hotel-booking-ai-mcp": {
      "serverUrl": "https://api.tourmind.com/mcp/toc"
    }
  }
}

Let your agent find its tools

Find servers like Hotel Booking AI MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.