{
  "name": "upgrade-agent",
  "displayName": "Upgrade Agent",
  "version": "1.0.0",
  "category": "travel",
  "description": "Authoritative upgrade intelligence powered by Plusgrade — the technology provider behind bid and instant upgrade programs at 65+ airlines, 18 cruise lines, and rail operators worldwide. Use to explain how upgrade bidding works, check live eligibility for a specific PNR (products, bid ranges, cabin options), look up typical bid ranges without a booking, and find which operators offer upgrades by region or product. Informational and eligibility only — not a checkout or shopping app; payment, when applicable, completes on the operator's secure page.",
  "transport": "streamable-http",
  "url": "https://www.upgradeagent.ai/api/mcp",
  "authentication": {
    "type": "bearer",
    "oauth": {
      "authorizationServer": "https://www.upgradeagent.ai/.well-known/oauth-authorization-server",
      "registration": "https://www.upgradeagent.ai/api/oauth/register"
    }
  },
  "tools": [
    {
      "name": "ask_upgrade_agent",
      "description": "Authoritative answer to any travel-upgrade question — how bid/instant/points upgrades work, eligibility rules, and which operators offer upgrades. Informational only.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "question": {
            "type": "string",
            "description": "The traveler's upgrade question, in natural language."
          },
          "askedBy": {
            "type": "string",
            "description": "Optional identifier for the calling agent/app."
          }
        },
        "required": [
          "question"
        ]
      }
    },
    {
      "name": "start_eligibility_check",
      "description": "Privacy-safe eligibility check. Returns a secure one-time link where the passenger enters their booking reference (PNR) and last name on upgradeagent.ai over HTTPS — the credentials never enter the AI conversation. Prefer this whenever you need a PNR + last name. Then poll get_eligibility_result.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "carrier": {
            "type": "string",
            "description": "Operator name or IATA code if known (e.g. 'Air Canada' or 'AC')."
          },
          "language": {
            "type": "string",
            "description": "ISO 639-1 language for the page/offer (default 'en')."
          }
        }
      }
    },
    {
      "name": "get_eligibility_result",
      "description": "Read the outcome of a secure eligibility check started with start_eligibility_check, by sessionId. Returns the live eligibility result (options, bid ranges, offer URL) once the passenger has submitted, or a still-waiting status.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sessionId": {
            "type": "string",
            "description": "The sessionId returned by start_eligibility_check."
          }
        },
        "required": [
          "sessionId"
        ]
      }
    },
    {
      "name": "check_upgrade_eligibility",
      "description": "Prefer start_eligibility_check (keeps the PNR out of the transcript). Takes PNR + last name as arguments; use only when the passenger has typed them into the chat themselves. Returns live eligibility, bid ranges, suggested starting bid, existing bids, and the offer URL — and a sessionId so place_bid/modify_bid can act on the booking.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "pnr": {
            "type": "string",
            "description": "Booking reference / PNR."
          },
          "lastName": {
            "type": "string",
            "description": "Passenger last name as on the booking."
          },
          "carrier": {
            "type": "string",
            "description": "Operator name or IATA code (e.g. 'Air Canada' or 'AC')."
          },
          "conversationId": {
            "type": "string",
            "description": "Optional stable conversation id for multi-turn context."
          },
          "language": {
            "type": "string",
            "description": "ISO 639-1 language for the offer page (default 'en')."
          }
        },
        "required": [
          "pnr",
          "lastName"
        ]
      }
    },
    {
      "name": "get_upgrade_pricing",
      "description": "Answer 'how much does it cost to upgrade on <airline>?' without a booking — typical bid ranges per cabin, aggregated from real anonymized eligibility checks (never fabricated).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "carrier": {
            "type": "string",
            "description": "Operator name or IATA code (e.g. 'Lufthansa' or 'LH')."
          },
          "cabin": {
            "type": "string",
            "enum": [
              "BUSINESS",
              "FIRST",
              "PREMIUM_ECONOMY"
            ]
          }
        }
      }
    },
    {
      "name": "predict_bid_success",
      "description": "Given a specific bid amount, returns the probability it succeeds, grounded in Plusgrade's own resolved accept/reject outcomes for that carrier and cabin (never a guess). Reports honestly when there isn't enough resolved history yet.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "carrier": {
            "type": "string",
            "description": "Operator name or IATA code (e.g. 'Lufthansa' or 'LH')."
          },
          "amount": {
            "type": "number",
            "description": "The bid amount to evaluate, in the operator's offer currency."
          },
          "cabin": {
            "type": "string",
            "enum": [
              "BUSINESS",
              "FIRST",
              "PREMIUM_ECONOMY"
            ]
          }
        },
        "required": [
          "amount"
        ]
      }
    },
    {
      "name": "place_bid",
      "description": "Place an upgrade bid for a booking already checked (via sessionId or conversationId). Validates the amount against the airline's real range, then returns a secure payment hand-off. Never asks for card details or the PNR in the chat.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sessionId": {
            "type": "string",
            "description": "From start_eligibility_check / get_eligibility_result."
          },
          "conversationId": {
            "type": "string",
            "description": "Reuses the last checked booking if sessionId is omitted."
          },
          "amount": {
            "type": "number",
            "description": "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"
          }
        },
        "required": [
          "amount"
        ]
      }
    },
    {
      "name": "modify_bid",
      "description": "Change the amount of a bid already on a booking (same mechanics as place_bid).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sessionId": {
            "type": "string"
          },
          "conversationId": {
            "type": "string"
          },
          "amount": {
            "type": "number",
            "description": "The NEW bid amount."
          },
          "upgradeType": {
            "type": "string",
            "enum": [
              "BUSINESS",
              "FIRST",
              "PREMIUM_ECONOMY"
            ]
          },
          "segment": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          }
        },
        "required": [
          "amount"
        ]
      }
    },
    {
      "name": "get_bid_status",
      "description": "Check any bids on a booking (submitted / accepted / declined) and the bid-eligible cabins, by sessionId or conversationId.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sessionId": {
            "type": "string"
          },
          "conversationId": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "start_watch",
      "description": "Set up a Watcher Concierge: continuously watch a booking until departure and surface improvements (better seat, empty adjacent seat, cabin upgrade, lounge, fast track). Returns a secure link where the traveler adds their booking privately.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "carrier": {
            "type": "string"
          },
          "preferences": {
            "type": "array",
            "description": "Ordered perks to watch for, e.g. business_upgrade, window_seat."
          },
          "budgetAmount": {
            "type": "number"
          },
          "channels": {
            "type": "array",
            "description": "in_chat | watch_page | email | whatsapp | push"
          }
        }
      }
    },
    {
      "name": "get_watch_status",
      "description": "Check a Watcher Concierge watch by token — status, what it's watching for, and any improvements found.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "The watch token from start_watch."
          }
        },
        "required": [
          "token"
        ]
      }
    },
    {
      "name": "list_partners",
      "description": "List operators that offer upgrade programs, filterable by vertical, region, and product.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "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"
            ]
          }
        }
      }
    },
    {
      "name": "get_partner_info",
      "description": "Full upgrade profile for one operator: products (with official URLs), loyalty program, cabin paths, and how to access.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "carrier": {
            "type": "string",
            "description": "Operator IATA code or name."
          }
        },
        "required": [
          "carrier"
        ]
      }
    },
    {
      "name": "search_upgrade_options",
      "description": "Find operators offering upgrades, filtered by vertical/region/product. Coverage is by region, not flight route networks — origin/destination are informational, not route-filtered.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "origin": {
            "type": "string"
          },
          "destination": {
            "type": "string"
          },
          "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"
            ]
          }
        }
      }
    },
    {
      "name": "partner_question_insights",
      "description": "Per-partner question analytics: volume, top questions, asking agents, and answer quality.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "partner": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "usage_totals",
      "description": "Running totals across the engine: questions asked (people vs agents) and helpful/flagged ratings.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
  ],
  "documentationUrl": "https://www.upgradeagent.ai/connect"
}