upgrade-agent

Quote, bid and confirm travel upgrades: eligibility, bid range, place/modify/cancel, instant buy.

我該用這個嗎

品質與安全性

A
說明品質
99%
結構描述完整度
90%
命名品質
93%
汙染風險
80%
權限相符程度
100%
協定合規性
100%

發現項目(2)

  • HIGHTool description contains system tag or marker在 usage_totals 中
  • HIGHTool poisoning patterns detected

根據工具定義與協定合規性的自動化分析。

上下文成本

~6,923Token(工具定義)
~2.8 KB典型回應大小
顯著的注意力影響(128k 上下文的 5.41%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "upgrade-agent": {
      "url": "https://www.upgradeagent.ai/api/mcp"
    }
  }
}

遠端端點

https://www.upgradeagent.ai/api/mcpstreamable-http

它能做什麼

工具清單

工具(21)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟢check_upgrade_eligibility(pnr, lastName, carrier, conversationId, language, ...)

Looks up a booking's upgrade eligibility from a booking reference and 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 the assistant'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 the assistant'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_offer_events(sessionId, conversationId, since, limit)

Poll for bid-outcome changes on a checked booking without re-running a status check: an ordered log of events (offer.status_changed, offer.accepted, offer.declined, offer.cancelled, checkout.paid) with the offer reference, new and previous status, amount and cabin. Pass the sessionId (or conversationId) and, on later calls, the `since` cursor from the previous response to get only what's new. Bids settle 24–72h before departure, so poll periodically (or subscribe via REST POST /api/v1/webhooks) instead of asking the traveler to check back. Empty means no change observed yet.

輸入結構描述

{
  "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)."
    },
    "since": {
      "type": "string",
      "description": "Return only events after this: the `nextCursor` from a previous call, or an ISO-8601 timestamp."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 200,
      "description": "Max events to return (default 50)."
    }
  },
  "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 resolved bid outcomes for the carrier 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 the assistant'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, window)

Per-partner analytics report: what travelers and AI agents are asking about a specific partner's upgrade programs (by intent, by route, most frequent questions, which agents/clients are asking), the AI-check → bid → paid conversion funnel by channel, AI visibility (share of answer per engine, what agents say, where answers are wrong), open content gaps and observed bid ranges. Text summary plus the full report object in structuredContent. Pass the partner name (e.g. 'Air Canada', 'MSC Cruises').

輸入結構描述

{
  "type": "object",
  "properties": {
    "partner": {
      "type": "string",
      "description": "Partner name, slug or IATA code, e.g. 'Air Canada'. Ignored for partner-scoped tokens (locked to their own brand)."
    },
    "window": {
      "type": "string",
      "enum": [
        "7d",
        "30d",
        "90d"
      ],
      "description": "Report window (default 30d)."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢partner_visibility_report(partner, window)

AI visibility for one partner's upgrade program: share of answer across the answer engines (ChatGPT, Claude, Perplexity, Gemini) for prompts about that partner, which domains get cited instead, what the agents say about the program, and where the answers are wrong (community claims that contradict the program's facts, plus engine excerpts flagged for human review). Partner-scoped tokens are locked to their own brand.

輸入結構描述

{
  "type": "object",
  "properties": {
    "partner": {
      "type": "string",
      "description": "Partner name, slug or IATA code. Ignored for partner-scoped tokens."
    },
    "window": {
      "type": "string",
      "enum": [
        "7d",
        "30d",
        "90d"
      ],
      "description": "Report window (default 30d)."
    }
  },
  "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#"
}
🟢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 the assistant's answers over time."
    }
  },
  "required": [
    "carrier"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_upgrade_pricing(carrier, cabin, origin, destination, conversationId, ...)

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. With an origin and destination airport, the ranges are scoped to that route when observed data exists there (either direction), otherwise the operator-wide ranges are returned and labelled as such. 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."
    },
    "origin": {
      "type": "string",
      "description": "Optional origin airport IATA code (e.g. 'YUL') — scopes the ranges to a route."
    },
    "destination": {
      "type": "string",
      "description": "Optional destination airport IATA code (e.g. 'LHR') — scopes the ranges to a route."
    },
    "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 the assistant's answers over time."
    }
  },
  "additionalProperties": false,
  "$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#"
}
🟢search_upgrade_options(origin, destination, date, cabin, vertical, ...)

Finds operators that offer upgrades. With an origin and destination airport (IATA codes, e.g. YUL and LHR) the result is route-level: carriers with observed upgrade pricing on that airport pair (per-cabin ranges from anonymized checks, either direction), carriers confirmed by operator inventory where that upstream is enabled, and carriers whose hub or home country is at one end of the route — the last group is labelled as a hub match that is not confirmed and carries no pricing. Without a route, the result is the operator list filtered by vertical, region, and/or product.

輸入結構描述

{
  "type": "object",
  "properties": {
    "origin": {
      "type": "string",
      "description": "Origin airport IATA code (e.g. 'YUL'). With destination, filters to that route."
    },
    "destination": {
      "type": "string",
      "description": "Destination airport IATA code (e.g. 'LHR'). With origin, filters to that route."
    },
    "date": {
      "type": "string",
      "description": "Optional travel date (YYYY-MM-DD) — used for live inventory confirmation when that upstream is enabled."
    },
    "cabin": {
      "type": "string",
      "enum": [
        "BUSINESS",
        "FIRST",
        "PREMIUM_ECONOMY"
      ],
      "description": "Optional: limit observed route pricing to one target cabin."
    },
    "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 the assistant's answers over time."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

建議的提示詞

search_research
Search for information about [topic] using upgrade-agent
預期的工具: search_upgrade_options
find_specific
Find [specific item] using upgrade-agent
預期的工具: search_upgrade_options
retrieve_data
Get details about [item] from upgrade-agent
預期的工具: get_eligibility_result
fetch_info
Fetch [information type] using upgrade-agent
預期的工具: get_eligibility_result
list_items
List all [items] available in upgrade-agent
預期的工具: list_partners

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本21 個工具
已驗證未記錄版本19 個工具
已驗證未記錄版本19 個工具