Skip to content

ai.upgradeagent/upgrade-agent

by upgradeagent.ai · remote · no sign-in to list tools · v1.1.0 · published by ai.upgradeagent

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

Deletes · 1Changes · 11

21 tools: 1 can delete or cancel things, 11 change things and 9 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http upgrade-agent https://www.upgradeagent.ai/api/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "cancel_bid" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "cancel_bid" says "cancel": a word for removing or ending something.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

21 tools

Deletes or cancels 1Claude Code: deny
  • cancel_bidWithdraw a bid already placed on a booking the traveler checked with start_eligibility_check.1 finding

    Why it is in this group

    • The name "cancel_bid" says "cancel": a word for removing or ending something.
    • The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "cancel_bid" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "cancel_bid" says "cancel": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
Changes things 11Claude Code: ask
  • ask_upgrade_agentAnswer a general (not booking-specific) travel-upgrade question — how bid/instant/points upgrades work, eligibility rules, bidding strategy, and which airlines, cruise lines, or ra…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
    • title: Ask Upgrade Agent
  • check_upgrade_eligibilityLooks up a booking's upgrade eligibility from a booking reference and last name, and airline.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • mint_eligibility_sessionInternal helper for the inline eligibility form: creates a secure session and returns its id.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Internal helper for the inline eligibility form: creates a secure session and returns its id. No UI; agents should use start_eligibility_check instead.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • modify_bidChange the amount of a bid already prepared/placed on a booking.No findings

    Why it is in this group

    • The name "modify_bid" says "modify": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • partner_question_insightsPer-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/client…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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').

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Partner Question Insights
  • partner_visibility_reportAI 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 c…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Partner Visibility Report
  • place_bidPlaces an upgrade bid, or buys a fixed-price (INSTANT) upgrade, for a checked booking.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • predict_bid_successEstimates 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 book…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • start_eligibility_checkStarts an upgrade eligibility check for a flight, cruise, or rail booking.No findings

    Why it is in this group

    • The name "start_eligibility_check" says "start": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • start_watchSets 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 tr…No findings

    Why it is in this group

    • The name "start_watch" says "start": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • usage_totalsRunning totals across the whole system: how many questions have been asked, and how many were answered successfully (quality at or above the success threshold).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Usage Totals
Only reads 9Claude Code: allow
  • get_bid_statusCheck any bids already on a booking (submitted / accepted / declined), the bid-eligible cabins with their ranges, and the current cart.No findings

    Why it is in this group

    • The name "get_bid_status" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_eligibility_resultRead the result of a secure eligibility check started with start_eligibility_check.No findings

    Why it is in this group

    • The name "get_eligibility_result" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Get Eligibility Result
  • get_offer_eventsPoll 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…No findings

    Why it is in this group

    • The name "get_offer_events" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_partner_infoGet the full upgrade profile for one operator — products offered (with the official page URL), loyalty program, cabin paths, how to access, and summary.No findings

    Why it is in this group

    • The name "get_partner_info" says "get": a word for reading.
    Description, as the server wrote it
    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').

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Get Partner Info
  • get_price_breakdownShow the itemized all-in cost of an upgrade before the traveler commits — the amount plus any taxes and fees.No findings

    Why it is in this group

    • The name "get_price_breakdown" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_upgrade_pricingReturns typical upgrade bid ranges (low / typical / high, per cabin) for an operator, aggregated from anonymized eligibility checks.No findings

    Why it is in this group

    • The name "get_upgrade_pricing" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Get Upgrade Pricing
  • get_watch_statusCheck a Watcher Concierge watch (created with start_watch).No findings

    Why it is in this group

    • The name "get_watch_status" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Get Watch Status
  • list_partnersList the travel operators that offer upgrade programs, with optional filters.No findings

    Why it is in this group

    • The name "list_partners" says "list": a word for reading.
    Description, as the server wrote it
    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'.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: List Upgrade Partners
  • search_upgrade_optionsFinds operators that offer upgrades.No findings

    Why it is in this group

    • The name "search_upgrade_options" says "search": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Search Upgrade Options

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.1.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http upgrade-agent https://www.upgradeagent.ai/api/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__upgrade-agent__get_eligibility_result",
      "mcp__upgrade-agent__get_bid_status",
      "mcp__upgrade-agent__get_offer_events",
      "mcp__upgrade-agent__get_price_breakdown",
      "mcp__upgrade-agent__get_watch_status",
      "mcp__upgrade-agent__get_partner_info",
      "mcp__upgrade-agent__get_upgrade_pricing",
      "mcp__upgrade-agent__list_partners",
      "mcp__upgrade-agent__search_upgrade_options"
    ],
    "ask": [
      "mcp__upgrade-agent__check_upgrade_eligibility",
      "mcp__upgrade-agent__start_eligibility_check",
      "mcp__upgrade-agent__mint_eligibility_session",
      "mcp__upgrade-agent__place_bid",
      "mcp__upgrade-agent__modify_bid",
      "mcp__upgrade-agent__predict_bid_success",
      "mcp__upgrade-agent__start_watch",
      "mcp__upgrade-agent__ask_upgrade_agent",
      "mcp__upgrade-agent__partner_question_insights",
      "mcp__upgrade-agent__partner_visibility_report",
      "mcp__upgrade-agent__usage_totals"
    ],
    "deny": [
      "mcp__upgrade-agent__cancel_bid"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as upgrade-agent. Review it before you use it.