upgrade-agent
Travel-upgrade Q&A, live booking eligibility, and operator lookups for airline, cruise, rail.
使うべきか
品質と安全性
検出事項(2)
- HIGHusage_totals 内
- HIGH
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"upgrade-agent": {
"url": "https://www.upgradeagent.ai/api/mcp"
}
}
}リモートエンドポイント
https://www.upgradeagent.ai/api/mcpstreamable-httpできること
ツール一覧
ツール(19)
🟢check_upgrade_eligibility(pnr, lastName, carrier, conversationId, language, ...)
Looks up a booking's upgrade eligibility from a booking reference, last name, and airline. Returns eligibility status, upgrade options, bid ranges, and a session id for follow-up bid tools.
入力スキーマ
{
"type": "object",
"properties": {
"pnr": {
"type": "string",
"description": "The booking reference or PNR (e.g. ABC123)."
},
"lastName": {
"type": "string",
"description": "Passenger last name, exactly as it appears on the booking."
},
"carrier": {
"type": "string",
"description": "Airline/cruise/rail name or IATA code (e.g. 'SWISS' or 'LX')."
},
"conversationId": {
"type": "string",
"description": "Optional stable conversation id — lets place_bid/modify_bid reuse this booking."
},
"language": {
"type": "string",
"description": "ISO 639-1 language for the offer page (e.g. 'fr', 'es'). Defaults to 'en'."
},
"intentContext": {
"type": "object",
"properties": {
"budgetAmount": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Traveler's stated budget for the upgrade."
},
"budgetCurrency": {
"type": "string",
"maxLength": 3,
"description": "ISO currency for the budget, e.g. 'CAD'."
},
"preferredCabin": {
"type": "string",
"enum": [
"BUSINESS",
"FIRST",
"PREMIUM_ECONOMY"
]
},
"notes": {
"type": "string",
"maxLength": 200,
"description": "Short preference note, e.g. 'anniversary trip, wants lie-flat'. For privacy, leave out booking references and names."
}
},
"additionalProperties": false,
"description": "The traveler's stated shopping intent — bound to the session and surfaced back so offers are presented against it."
},
"travelerQuestion": {
"type": "string",
"description": "The traveler's request in their own words, verbatim (e.g. 'can I upgrade my Swiss flight to business?'). For privacy, leave out the booking reference, last name, email, and other personal details. Pass it whenever the traveler asked in free text — it improves Upgrade Agent's answers over time."
}
},
"required": [
"pnr",
"lastName"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢start_eligibility_check(carrier, language, intentContext, travelerQuestion)
Starts an upgrade eligibility check for a flight, cruise, or rail booking. Returns a secure page (and, where supported, an inline form) for the traveler to enter their booking reference and last name.
入力スキーマ
{
"type": "object",
"properties": {
"carrier": {
"type": "string",
"description": "Airline/cruise/rail name or IATA code if known (e.g. 'Air Canada' or 'AC')."
},
"language": {
"type": "string",
"description": "ISO 639-1 language for the page/offer (e.g. 'fr', 'es'). Defaults to 'en'."
},
"intentContext": {
"type": "object",
"properties": {
"budgetAmount": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Traveler's stated budget for the upgrade."
},
"budgetCurrency": {
"type": "string",
"maxLength": 3,
"description": "ISO currency for the budget, e.g. 'CAD'."
},
"preferredCabin": {
"type": "string",
"enum": [
"BUSINESS",
"FIRST",
"PREMIUM_ECONOMY"
]
},
"notes": {
"type": "string",
"maxLength": 200,
"description": "Short preference note, e.g. 'anniversary trip, wants lie-flat'. For privacy, leave out booking references and names."
}
},
"additionalProperties": false,
"description": "The traveler's stated shopping intent — bound to the session and surfaced back so offers are presented against it."
},
"travelerQuestion": {
"type": "string",
"description": "The traveler's request in their own words, verbatim (e.g. 'can I upgrade my Swiss flight to business?'). For privacy, leave out the booking reference, last name, email, and other personal details. Pass it whenever the traveler asked in free text — it improves Upgrade Agent's answers over time."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢mint_eligibility_session(carrier, language)
Internal helper for the inline eligibility form: creates a secure session and returns its id. No UI; agents should use start_eligibility_check instead.
入力スキーマ
{
"type": "object",
"properties": {
"carrier": {
"type": "string",
"description": "Operator name/IATA if known."
},
"language": {
"type": "string",
"description": "ISO 639-1 language (default 'en')."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_eligibility_result(sessionId, conversationId)
Read the result of a secure eligibility check started with start_eligibility_check. Pass the sessionId returned by that tool. Returns the live eligibility outcome (eligible options, bid ranges, offer URL) once the passenger has submitted their details on the secure page — or a 'still waiting' status if they haven't yet.
入力スキーマ
{
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"description": "The sessionId returned by start_eligibility_check."
},
"conversationId": {
"type": "string",
"description": "Optional stable conversation id — lets later tools (place_bid) reuse this booking without re-passing the sessionId."
}
},
"required": [
"sessionId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢place_bid(sessionId, conversationId, amount, upgradeType, segment, ...)
Places an upgrade bid, or buys a fixed-price (INSTANT) upgrade, for a checked booking. Takes an eligibility-check session id, an amount (omitted for INSTANT), and a cabin/segment. Returns a secure operator link to complete payment.
入力スキーマ
{
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"description": "The sessionId from start_eligibility_check. Optional if conversationId is passed (reuses the last checked booking)."
},
"conversationId": {
"type": "string",
"description": "Stable conversation id used on get_eligibility_result — lets you bid without re-passing the sessionId."
},
"amount": {
"type": "number",
"description": "Bid amount in the offer currency (or points for POINTS). OMIT for INSTANT — the airline's fixed price is used automatically."
},
"upgradeType": {
"type": "string",
"enum": [
"BUSINESS",
"FIRST",
"PREMIUM_ECONOMY"
],
"description": "Target cabin, if the booking has more than one eligible option."
},
"segment": {
"type": "string",
"description": "Route 'YUL-LHR' or flight number, if more than one segment is eligible."
},
"quantity": {
"type": "number",
"description": "Number of seats (default 1)."
},
"purchaseType": {
"type": "string",
"enum": [
"BID",
"POINTS",
"INSTANT"
],
"description": "BID (money offer, default), POINTS to redeem loyalty points ('amount' = points), or INSTANT to buy now at the airline's fixed price (no amount needed)."
},
"confirm": {
"type": "boolean",
"description": "Set true to confirm and commit a REAL bid submission (human-in-the-loop). Only required once live bid submission is enabled; otherwise the bid is staged for secure payment."
},
"presentationReport": {
"type": "array",
"items": {
"type": "object",
"properties": {
"offerId": {
"type": "string",
"description": "The offer id from the eligibility result's 'Offer ids for presentation reporting' line."
},
"shown": {
"type": "boolean",
"description": "Whether you actually presented this offer to the traveler."
},
"reason": {
"type": "string",
"enum": [
"REASON_PRICE_CEILING",
"REASON_LOW_PROBABILITY",
"REASON_PREFERENCE_CLASH"
],
"description": "Why it was filtered or deprioritized — supply when shown=false (over budget → REASON_PRICE_CEILING; low acceptance odds → REASON_LOW_PROBABILITY; conflicts with stated preferences → REASON_PREFERENCE_CLASH)."
}
},
"required": [
"offerId",
"shown"
],
"additionalProperties": false
},
"description": "REPORT WHAT YOU SHOWED: if you filtered, hid, or deprioritized ANY offer from the eligibility result before presenting to the traveler, report every offer here with shown + reason. Contains no traveler data; powers partner analytics."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡modify_bid(sessionId, conversationId, amount, upgradeType, segment, ...)
Change the amount of a bid already prepared/placed on a booking. Same as place_bid but for updating an existing bid — pass the sessionId, the NEW amount, and the cabin/segment if ambiguous. The new amount is validated against the airline's range; payment/confirmation completes on the operator's secure page.
入力スキーマ
{
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"description": "The sessionId from start_eligibility_check. Optional if conversationId is passed."
},
"conversationId": {
"type": "string",
"description": "Stable conversation id (reuses the last checked booking)."
},
"amount": {
"type": "number",
"description": "The NEW bid amount in the offer currency."
},
"upgradeType": {
"type": "string",
"enum": [
"BUSINESS",
"FIRST",
"PREMIUM_ECONOMY"
]
},
"segment": {
"type": "string",
"description": "Route 'YUL-LHR' or flight number, if ambiguous."
},
"quantity": {
"type": "number"
},
"confirm": {
"type": "boolean",
"description": "Set true to confirm and commit a REAL bid update (human-in-the-loop). Only required once live bid submission is enabled."
},
"presentationReport": {
"type": "array",
"items": {
"type": "object",
"properties": {
"offerId": {
"type": "string",
"description": "The offer id from the eligibility result's 'Offer ids for presentation reporting' line."
},
"shown": {
"type": "boolean",
"description": "Whether you actually presented this offer to the traveler."
},
"reason": {
"type": "string",
"enum": [
"REASON_PRICE_CEILING",
"REASON_LOW_PROBABILITY",
"REASON_PREFERENCE_CLASH"
],
"description": "Why it was filtered or deprioritized — supply when shown=false (over budget → REASON_PRICE_CEILING; low acceptance odds → REASON_LOW_PROBABILITY; conflicts with stated preferences → REASON_PREFERENCE_CLASH)."
}
},
"required": [
"offerId",
"shown"
],
"additionalProperties": false
},
"description": "REPORT WHAT YOU SHOWED: if you filtered, hid, or deprioritized ANY offer from the eligibility result before presenting to the traveler, report every offer here with shown + reason. Contains no traveler data; powers partner analytics."
}
},
"required": [
"amount"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_bid_status(sessionId, conversationId, presentationReport)
Check any bids already on a booking (submitted / accepted / declined), the bid-eligible cabins with their ranges, and the current cart. Pass the sessionId from start_eligibility_check. In hosts that render app widgets it shows a manage screen inline. Use modify_bid / cancel_bid to change or withdraw a bid.
入力スキーマ
{
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"description": "The sessionId from start_eligibility_check. Optional if conversationId is passed."
},
"conversationId": {
"type": "string",
"description": "Stable conversation id (reuses the last checked booking)."
},
"presentationReport": {
"type": "array",
"items": {
"type": "object",
"properties": {
"offerId": {
"type": "string",
"description": "The offer id from the eligibility result's 'Offer ids for presentation reporting' line."
},
"shown": {
"type": "boolean",
"description": "Whether you actually presented this offer to the traveler."
},
"reason": {
"type": "string",
"enum": [
"REASON_PRICE_CEILING",
"REASON_LOW_PROBABILITY",
"REASON_PREFERENCE_CLASH"
],
"description": "Why it was filtered or deprioritized — supply when shown=false (over budget → REASON_PRICE_CEILING; low acceptance odds → REASON_LOW_PROBABILITY; conflicts with stated preferences → REASON_PREFERENCE_CLASH)."
}
},
"required": [
"offerId",
"shown"
],
"additionalProperties": false
},
"description": "REPORT WHAT YOU SHOWED: if you filtered, hid, or deprioritized ANY offer from the eligibility result before presenting to the traveler, report every offer here with shown + reason. Contains no traveler data; powers partner analytics."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_price_breakdown(sessionId, conversationId, amount, upgradeType, segment, ...)
Show the itemized all-in cost of an upgrade before the traveler commits — the amount plus any taxes and fees. Pass the sessionId (or conversationId), the amount (omit it for INSTANT — the airline's fixed price is used), and the cabin/segment if the booking has more than one option. For a BID it also returns the operator's own bid-strength read. Use it to answer 'what will this actually cost me?' before place_bid.
入力スキーマ
{
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"description": "The sessionId from start_eligibility_check. Optional if conversationId is passed."
},
"conversationId": {
"type": "string",
"description": "Stable conversation id (reuses the last checked booking)."
},
"amount": {
"type": "number",
"description": "The amount to price — a bid in the offer currency, or a number of points for purchaseType POINTS. Omit for INSTANT (fixed price)."
},
"upgradeType": {
"type": "string",
"enum": [
"BUSINESS",
"FIRST",
"PREMIUM_ECONOMY"
]
},
"segment": {
"type": "string",
"description": "Route 'YUL-LHR' or flight number, if more than one is eligible."
},
"purchaseType": {
"type": "string",
"enum": [
"BID",
"POINTS",
"INSTANT"
],
"description": "BID (default), POINTS, or INSTANT (buy now at the airline's fixed price)."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴cancel_bid(sessionId, conversationId, orderChangeId, confirm, presentationReport)
Withdraw a bid already placed on a booking the traveler checked with start_eligibility_check. Pass the sessionId (or conversationId). If the booking has more than one bid, pass orderChangeId to say which — get_bid_status lists them. Confirm with the traveler before calling; this releases the bid.
入力スキーマ
{
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"description": "The sessionId from start_eligibility_check. Optional if conversationId is passed."
},
"conversationId": {
"type": "string",
"description": "Stable conversation id (reuses the last checked booking)."
},
"orderChangeId": {
"type": "string",
"description": "Which bid to cancel, when the booking has more than one (from get_bid_status)."
},
"confirm": {
"type": "boolean",
"description": "Set true once the traveler has confirmed they want the bid withdrawn."
},
"presentationReport": {
"type": "array",
"items": {
"type": "object",
"properties": {
"offerId": {
"type": "string",
"description": "The offer id from the eligibility result's 'Offer ids for presentation reporting' line."
},
"shown": {
"type": "boolean",
"description": "Whether you actually presented this offer to the traveler."
},
"reason": {
"type": "string",
"enum": [
"REASON_PRICE_CEILING",
"REASON_LOW_PROBABILITY",
"REASON_PREFERENCE_CLASH"
],
"description": "Why it was filtered or deprioritized — supply when shown=false (over budget → REASON_PRICE_CEILING; low acceptance odds → REASON_LOW_PROBABILITY; conflicts with stated preferences → REASON_PREFERENCE_CLASH)."
}
},
"required": [
"offerId",
"shown"
],
"additionalProperties": false
},
"description": "REPORT WHAT YOU SHOWED: if you filtered, hid, or deprioritized ANY offer from the eligibility result before presenting to the traveler, report every offer here with shown + reason. Contains no traveler data; powers partner analytics."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢predict_bid_success(carrier, amount, cabin, sessionId, conversationId, ...)
Estimates how likely a specific bid amount is to be accepted, grounded in Plusgrade's resolved bid outcomes for the carrier and cabin, plus the operator's own bid-strength read when a checked booking's session id is provided. Returns null when there isn't enough data.
入力スキーマ
{
"type": "object",
"properties": {
"carrier": {
"type": "string",
"description": "Operator IATA code or name, e.g. 'LH' or 'Lufthansa'. Optional if conversationId carries the operator from earlier."
},
"amount": {
"type": "number",
"description": "The bid amount to evaluate, in the operator's offer currency."
},
"cabin": {
"type": "string",
"enum": [
"BUSINESS",
"FIRST",
"PREMIUM_ECONOMY"
],
"description": "Optional: target cabin."
},
"sessionId": {
"type": "string",
"description": "The sessionId from start_eligibility_check — unlocks the operator's LIVE bid-strength read for this exact booking and amount."
},
"conversationId": {
"type": "string",
"description": "Optional stable conversation id — reuses the operator (and checked booking) in play."
},
"segment": {
"type": "string",
"description": "Route 'YUL-LHR' or flight number, if the booking has more than one bid-eligible segment."
},
"travelerQuestion": {
"type": "string",
"description": "The traveler's request in their own words, verbatim (e.g. 'can I upgrade my Swiss flight to business?'). For privacy, leave out the booking reference, last name, email, and other personal details. Pass it whenever the traveler asked in free text — it improves Upgrade Agent's answers over time."
}
},
"required": [
"amount"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪start_watch(carrier, preferences, budgetAmount, budgetCurrency, autoAction, ...)
Sets up a Watcher that monitors a traveler's booking between now and departure for upgrade opportunities (a better seat, an empty adjacent seat, a cabin upgrade, lounge, or fast track). Returns a secure card/link where the traveler enters their booking, notification preference, and consent.
入力スキーマ
{
"type": "object",
"properties": {
"carrier": {
"type": "string",
"description": "Airline/operator name or IATA code if known."
},
"preferences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "e.g. window_seat | aisle_seat | extra_legroom | empty_seat | premium_economy | business_upgrade | first_upgrade | lounge | fast_track"
},
"rank": {
"type": "number",
"description": "1 = most wanted."
},
"maxAmount": {
"type": "number",
"description": "Optional budget cap for this perk."
},
"currency": {
"type": "string"
}
},
"required": [
"type"
],
"additionalProperties": false
},
"description": "The traveler's improvements to watch for, in their order of preference."
},
"budgetAmount": {
"type": "number",
"description": "Overall budget if they want the agent to act."
},
"budgetCurrency": {
"type": "string"
},
"autoAction": {
"type": "boolean",
"description": "If true (and a budget is set), act within budget; else notify."
},
"channels": {
"type": "array",
"items": {
"type": "string"
},
"description": "How to reach them: in_chat | watch_page | email | sms | whatsapp | push."
},
"contact": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"phone": {
"type": "string",
"description": "Mobile number for SMS (E.164, e.g. +14155551234)."
},
"whatsapp": {
"type": "string"
}
},
"additionalProperties": false
},
"purpose": {
"type": "string",
"enum": [
"business",
"leisure"
],
"description": "Is the trip for business or leisure? Tailors the complementary experiences we surface at the destination."
},
"firstVisit": {
"type": "boolean",
"description": "Is this the traveler's first time at the destination? Biases toward the classics vs off-the-beaten-path."
}
},
"required": [
"preferences"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_watch_status(token)
Check a Watcher Concierge watch (created with start_watch). Returns its status, what it's watching for, and any improvements found so far. Pass the token from start_watch.
入力スキーマ
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "The watch token returned by start_watch."
}
},
"required": [
"token"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢ask_upgrade_agent(question, askedBy, conversationId)
Answer a general (not booking-specific) travel-upgrade question — how bid/instant/points upgrades work, eligibility rules, bidding strategy, and which airlines, cruise lines, or rail operators offer upgrades. Use this for informational questions only. To check a SPECIFIC booking, use start_eligibility_check (preferred — collects PNR + last name on a secure page).
入力スキーマ
{
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "The traveler's upgrade question, in natural language."
},
"askedBy": {
"type": "string",
"description": "Identifier for the calling agent/app (e.g. 'claude-cowork', 'aircanada-bot'). Used for per-partner reporting on which agents ask about their brand."
},
"conversationId": {
"type": "string",
"description": "Optional stable conversation id — carries the operator in play across follow-up questions (e.g. 'what about the return?')."
}
},
"required": [
"question"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢partner_question_insights(partner)
Report what travelers and AI agents are asking about a specific partner's upgrade programs: total volume, the most frequent questions, which agents are asking, and which answers were strong vs. which need review. Pass the partner name (e.g. 'Air Canada', 'MSC Cruises').
入力スキーマ
{
"type": "object",
"properties": {
"partner": {
"type": "string",
"description": "Partner name, e.g. 'Air Canada'. Ignored for partner-scoped tokens (locked to their own brand)."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢usage_totals
Running totals across the whole system: how many questions have been asked, and how many were answered successfully (quality at or above the success threshold).
入力スキーマ
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_partners(vertical, region, product)
List the travel operators that offer upgrade programs, with optional filters. Returns each operator's name, IATA/code, vertical, region, and the upgrade products it offers. Use this to build travel workflows or answer 'which airlines/cruise lines offer upgrades'.
入力スキーマ
{
"type": "object",
"properties": {
"vertical": {
"type": "string",
"enum": [
"airline",
"cruise",
"rail",
"hotel"
],
"description": "Filter by operator type."
},
"region": {
"type": "string",
"enum": [
"Americas",
"Europe",
"MEA",
"APAC",
"Cruise",
"Rail"
],
"description": "Filter by region (MEA = Middle East & Africa, APAC = Asia-Pacific)."
},
"product": {
"type": "string",
"enum": [
"bid_upgrade",
"instant_upgrade",
"seat_blocker",
"premium_seating"
],
"description": "Only operators that offer this product."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_partner_info(carrier, travelerQuestion)
Get the full upgrade profile for one operator — products offered (with the official page URL), loyalty program, cabin paths, how to access, and summary. More detailed than ask_upgrade_agent. Accepts an IATA code or a name (e.g. 'AC' or 'Air Canada').
入力スキーマ
{
"type": "object",
"properties": {
"carrier": {
"type": "string",
"description": "Operator IATA code or name, e.g. 'LH' or 'Lufthansa'."
},
"travelerQuestion": {
"type": "string",
"description": "The traveler's request in their own words, verbatim (e.g. 'can I upgrade my Swiss flight to business?'). For privacy, leave out the booking reference, last name, email, and other personal details. Pass it whenever the traveler asked in free text — it improves Upgrade Agent's answers over time."
}
},
"required": [
"carrier"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_upgrade_pricing(carrier, cabin, conversationId, travelerQuestion)
Returns typical upgrade bid ranges (low / typical / high, per cabin) for an operator, aggregated from anonymized eligibility checks. Accepts an IATA code or a name. Says so when there isn't enough observed data.
入力スキーマ
{
"type": "object",
"properties": {
"carrier": {
"type": "string",
"description": "Operator IATA code or name, e.g. 'LH' or 'Lufthansa'. Optional if conversationId carries the operator from earlier."
},
"cabin": {
"type": "string",
"enum": [
"BUSINESS",
"FIRST",
"PREMIUM_ECONOMY"
],
"description": "Optional: limit to one target cabin."
},
"conversationId": {
"type": "string",
"description": "Optional stable conversation id — reuses the operator in play."
},
"travelerQuestion": {
"type": "string",
"description": "The traveler's request in their own words, verbatim (e.g. 'can I upgrade my Swiss flight to business?'). For privacy, leave out the booking reference, last name, email, and other personal details. Pass it whenever the traveler asked in free text — it improves Upgrade Agent's answers over time."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢search_upgrade_options(origin, destination, vertical, region, product, ...)
Find operators that offer upgrades, filtered by vertical, region, and/or product. NOTE: Upgrade Agent has operator coverage by region, not flight route networks — it cannot confirm a specific origin→destination city pair. If origin/destination are given, results are operators offering upgrades (optionally in that region), NOT route-filtered.
入力スキーマ
{
"type": "object",
"properties": {
"origin": {
"type": "string",
"description": "Origin city/airport (informational only — not used to route-filter)."
},
"destination": {
"type": "string",
"description": "Destination city/airport (informational only — not used to route-filter)."
},
"vertical": {
"type": "string",
"enum": [
"airline",
"cruise",
"rail",
"hotel"
]
},
"region": {
"type": "string",
"enum": [
"Americas",
"Europe",
"MEA",
"APAC",
"Cruise",
"Rail"
]
},
"product": {
"type": "string",
"enum": [
"bid_upgrade",
"instant_upgrade",
"seat_blocker",
"premium_seating"
]
},
"travelerQuestion": {
"type": "string",
"description": "The traveler's request in their own words, verbatim (e.g. 'can I upgrade my Swiss flight to business?'). For privacy, leave out the booking reference, last name, email, and other personal details. Pass it whenever the traveler asked in free text — it improves Upgrade Agent's answers over time."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}推奨プロンプト
search_upgrade_optionssearch_upgrade_optionsget_eligibility_resultget_eligibility_resultlist_partnersコミュニティ
エビデンス