gatedXP MCP exposes event discovery, ticket listing, and marketplace actions for AI agents over Streamable HTTP.
POST http://mcp.xp.tickets/mcp (Gated (Bearer required))MCP_AUTH_REQUIRED.error_code: "AUTH_REQUIRED" or "SESSION_EXPIRED" — clients should reconnect / re-authorise XP.GET /healthDrop these into the matching MCP host config to connect.
Settings > Integrations > Add custom connector. Paste the URL; Claude completes the OAuth handshake on first protected call.
Gated (signed in)
http://mcp.xp.tickets/mcp// ~/.cursor/mcp.json — Cursor reads this on launch.
{
"mcpServers": {
"xp-pro": {
"url": "http://mcp.xp.tickets/mcp"
}
}
}
Apps SDK / custom connector. ChatGPT triggers OAuth automatically
off the 401 + WWW-Authenticate challenge.
Gated (signed in)
http://mcp.xp.tickets/mcp// VS Code (Copilot Chat) — settings.json or .vscode/mcp.json
{
"mcp": {
"servers": {
"xp-pro": {
"type": "http",
"url": "http://mcp.xp.tickets/mcp"
}
}
}
}
Agent panel › Manage MCP Servers ›
View raw config opens mcp_config.json.
Antigravity uses serverUrl (not url like
Cursor) and completes OAuth automatically off the 401 +
WWW-Authenticate challenge — no static token required.
If auto-OAuth stalls, add
"headers": { "Authorization": "Bearer <token>" }
as a fallback.
Gated (signed in)
// Antigravity 2.0.1 — Agent panel ▸ Manage MCP Servers ▸ View raw config
{
"mcpServers": {
"xp-pro": {
"serverUrl": "http://mcp.xp.tickets/mcp"
}
}
}
Copy-paste recipes. Keep $SESSION = the
Mcp-Session-Id response header from
initialize; reuse it on every follow-up call in the
same session.
# Acquire $TOKEN via OAuth 2.1 + PKCE first (see OAuth & Discovery).
curl -i -X POST http://mcp.xp.tickets/mcp \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"demo","version":"1.0"}}}'
# tools/list returns the full surface once authenticated.
curl -X POST http://mcp.xp.tickets/mcp \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H "Mcp-Session-Id: $SESSION" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
# Authenticated tool. 401 if bearer missing/invalid; 403 if a
# Waitlist Approval tool is called without Waitlist Approval.
curl -X POST http://mcp.xp.tickets/mcp \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H "Mcp-Session-Id: $SESSION" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_my_tickets","arguments":{}}}'
Streamable HTTP rules: every request must include
Accept: application/json, text/event-stream. Capture the
Mcp-Session-Id response header from initialize and
echo it on every subsequent call in the same session.
get_ticket_listings.min_price_cents/max_price_cents,
make_offer_on_listing.amount_cents,
create_price_alert.max_price_cents,
get_price_alert_link.max_price_cents.list_open_listings.min_amount/max_amount and
response amount_raw fields.amount_display,
*_usd) are human-readable strings — never re-parse._meta.context.today from the most recent tool
response instead of guessing. _meta.context.tz_offset is
the server's UTC offset; resolve against the user's timezone when
known.WWW-Authenticate: Bearer ... resource_metadata="…"
— bearer missing/invalid/revoked. Restart OAuth or refresh the token.
Distinct flavors: error="invalid_token"
(refresh) vs no error attr (start fresh OAuth).data.error == "missing_role" means the caller
needs Waitlist Approval. Direct the user to
xp.tickets/mcp/claude.error_code: "AUTH_REQUIRED" /
"SESSION_EXPIRED": the bearer was
accepted by the MCP server but rejected upstream. The server rewrites
these into a transport 401 so MCP clients refresh — handle the same
as case 1.scope_enforcement.py).insufficient_scope.Status: disabled
buy_tickets supports two payment rails selected by the
rail argument:
rail="privy" — XP-managed Privy wallet. Default for
users who signed in with an XP identity.rail="x402" — agent-held Solana wallet over the
x402 protocol with
USDC. Two-turn flow: preview returns an x402.accepts[0]
PaymentRequirements envelope; settle accepts a base64
payment_proof.Live network and mint are advertised in the quote envelope when the rail is enabled — trust accepts[0] over any static value.
# Turn 1 — preview (no wallet)
buy_tickets(event_id=<id>, uvid=<uvid>, quantity=<n>,
confirm=False, rail="x402")
# → returns x402.accepts[0] (PaymentRequirements) + facilitators_available
# You sign accepts[0] locally with your own Solana wallet (see signer below).
# Turn 2 — settle (optionally pick a facilitator id from facilitators_available)
buy_tickets(event_id=<id>, uvid=<uvid>, quantity=<n>,
confirm=True, rail="x402", payment_proof="<b64>",
facilitator="payai") # or another id from facilitators_available
XP does not ship a signing client. You hold the buyer keypair; build
the signed envelope locally per the x402 v2 SVM exact
scheme spec.
Reference shape in TypeScript:
// Inputs: accepts (= preview.x402.accepts[0]) + your Solana Keypair `buyer`.
// Output: base64 string → pass as `payment_proof` on the settle turn.
import {
ComputeBudgetProgram, Connection, Keypair, PublicKey,
TransactionMessage, VersionedTransaction,
} from "@solana/web3.js"
import {
createTransferCheckedInstruction, getAssociatedTokenAddressSync,
} from "@solana/spl-token"
const conn = new Connection(SOLANA_RPC_URL, "confirmed")
const mint = new PublicKey(accepts.asset)
const payTo = new PublicKey(accepts.payTo)
const amount = BigInt(accepts.amount) // micro-USDC, 6 decimals
const USDC_DECIMALS = 6
// Facilitator-sponsored fees: read feePayer from envelope. When present,
// buyer signs ONLY the transfer authority; facilitator co-signs gas at
// /settle. When absent (legacy buyer-pays-fees), buyer pays gas too.
const feePayer = new PublicKey(accepts.extra?.feePayer ?? buyer.publicKey)
const buyerAta = getAssociatedTokenAddressSync(mint, buyer.publicKey)
const payToAta = getAssociatedTokenAddressSync(mint, payTo)
// Pre-flight (recommended): assert buyer ATA balance ≥ amount, merchant ATA
// exists, and — only when buyer === feePayer — buyer has SOL for gas.
// Instructions MUST follow the x402 SVM exact order:
// [ComputeBudget.setComputeUnitLimit, setComputeUnitPrice, TransferChecked].
// No ATA-create. Token-2022 is allowed by the spec but verify facilitator support.
const ix = [
ComputeBudgetProgram.setComputeUnitLimit({ units: 20_000 }),
ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1 }),
createTransferCheckedInstruction(
buyerAta, mint, payToAta, buyer.publicKey, amount, USDC_DECIMALS,
),
]
const { blockhash } = await conn.getLatestBlockhash("confirmed")
const msg = new TransactionMessage({
payerKey: feePayer, // facilitator's pubkey when sponsored
recentBlockhash: blockhash,
instructions: ix,
}).compileToV0Message()
const tx = new VersionedTransaction(msg)
tx.sign([buyer]) // partial sign — leave feePayer slot empty
const envelope = {
x402Version: 2,
scheme: accepts.scheme,
network: accepts.network,
payload: { transaction: Buffer.from(tx.serialize()).toString("base64") },
accepted: accepts,
extensions: {},
}
const payment_proof = Buffer.from(JSON.stringify(envelope), "utf-8").toString("base64")
// → pass payment_proof to buy_tickets(confirm=True, rail="x402", payment_proof, ...)
Adapt to your language of choice (Python: solana-py /
solders; Rust: solana-sdk). The on-the-wire
shape is what matters; XP only consumes the base64 payment_proof
string.
Each preview returns a facilitators_available list with
the registered facilitator ids; the agent picks one per call by passing
facilitator=<id>. Ids match
^[a-z][a-z0-9_]*$ and double as the human-readable handle.
The signed payment_proof is identical across facilitators
modulo the extra.feePayer slot. No auto-fallback
— on failure (FACILITATOR_UNAVAILABLE /
SETTLE_UNKNOWN), re-preview with a different
facilitator id and re-sign.
text://help/x402-paymentsEndpoints published for MCP clients that perform Dynamic Client Registration (DCR) and the OAuth 2.1 + PKCE handshake. Sourced from config.py.
| Purpose | URL |
|---|---|
| Authorization | https://xp.tickets/xp-mcp/authorize |
| Token exchange | https://api.xp.tickets/mcp/token |
| Dynamic Client Registration | https://api.xp.tickets/oauth/register |
| Token revocation | https://api.xp.tickets/oauth/revoke |
| JWKS | https://api.xp.tickets/.well-known/jwks.json |
| UserInfo | https://api.xp.tickets/mcp/userinfo |
Issuer: https://api.xp.tickets · Audience: xp-mcp
Published scopes_supported: openid mcp read:tickets read:account write:tickets write:listings read:bids write:bids email profile
| Access tier | Role required | Coverage | Tools |
|---|---|---|---|
| Open Access | (none) | Discovery — events, venues, performers, ticket listings, price-alert links. No auth required. | auth_status, get_event_details, get_price_alert_link, get_ticket_listings, get_venue_details, list_price_alert_sections, search_events, search_performers, search_venues |
| Authenticated | (none) | Caller's XP account — tickets, purchases, favorites, wallet, alerts. Bearer token + OAuth scope. | buy_tickets, cancel_my_price_alert, create_listing_alert, create_price_alert, delete_listing_alert, get_my_bids, get_my_referral_kickbacks, get_my_tickets, get_my_wallet, get_user_account, list_listing_alerts, list_my_favorites, list_my_price_alerts |
| Waitlist Approval | Waitlist Approval | Open-listing offers and acceptance. Requires Waitlist Approval. | accept_offer, cancel_my_offer, get_my_listing_status, get_open_listing, list_my_listings, list_open_listings, make_offer_on_listing, reject_offer |
Waitlist Approval is the only XP entitlement that affects MCP access beyond OAuth scopes. Grant it via xp.tickets/mcp/claude. Role checks fire at tools/call on the gated deploy; on the public deploy the Waitlist Approval surface is unreachable.
OAuth scopes define what an issued token is allowed to call.
| Scope | Runtime tool coverage |
|---|---|
openid | Client ID Access |
mcp | Baseline MCP transport access (required for MCP requests) |
read:tickets | get_event_details, get_price_alert_link, get_ticket_listings, get_venue_details, list_price_alert_sections, search_events, search_performers, search_venues |
read:account | get_my_referral_kickbacks, get_my_tickets, get_my_wallet, get_user_account, list_listing_alerts, list_my_favorites, list_my_price_alerts |
write:tickets | buy_tickets, create_listing_alert, create_price_alert, delete_listing_alert |
write:listings | accept_offer, reject_offer |
read:bids | get_my_bids, get_my_listing_status, get_open_listing, list_my_listings, list_open_listings |
write:bids | cancel_my_offer, make_offer_on_listing |
email | No runtime tool mapping currently |
profile | No runtime tool mapping currently |
Every call requires a valid Bearer; anonymous → 401 + WWW-Authenticate. tools/list / prompts/list / resources/list expose all categories to any authenticated caller. Waitlist Approval is enforced at tools/call / prompts/get / resources/read for Waitlist Approval surfaces.
WWW-Authenticate / PRM: http://mcp.xp.tickets/.well-known/oauth-protected-resource/mcp
| Tool | Name | Description | Auth required | Mode |
|---|---|---|---|---|
accept_offer | Accept Offer | From XP's connected resale + primary order book. Two-phase write on the XP live offer book. Use when an authenticated seller wants to accept a specific bid on their listing (e.g. 'accept the $200 offer on my tickets'). Call with `confirm=False` first to preview which offer will be accepted; call with `confirm=True` only after the user explicitly approves. Acceptance is irreversible. Do not use without the two-phase preview-then-confirm flow. Only confirm=True submissions return success=true. Requires auth and write:listings scope. Do not use for casual ticket buyers; this is the seller-side and power-user marketplace surface. For standard ticket purchases, use `search_events` and `get_ticket_listings`. | Yes (OAuth scope + Waitlist Approval) | Write (destructive) |
auth_status | Auth Status | Use ONLY when the user explicitly asks whether they are signed in to the XP marketplace (e.g. 'am I logged in?', 'am I connected to my tickets?'), or after a protected tool already returned AUTH_REQUIRED and the user wants the current state re-checked. Do NOT call this as a preflight before account / my tickets / wallet / favorites / referral / price alert tools — calling auth_status first swallows the 401 those tools would emit on the connected order book and prevents the MCP client from triggering OAuth. Always call the requested protected tool directly; the client will start sign-in on 401. Read-only. Returns authenticated boolean, tier roles, and a wallet flag — never raw tokens. | No | Read |
buy_tickets | Buy Tickets | Use when the user wants tickets to an event on the XP marketplace (connected order book). Two payment rails are supported: 'privy' (default; server-signed USDC transfer from the user's delegated Privy embedded wallet) and 'x402' (agent-signed Solana USDC transfer via the x402 protocol — use only if the caller can build and sign Solana x402 'exact' payloads). Requires `write:tickets` scope (and `read:account` for the balance preflight when using granular scopes). Call once with confirm=false to preview the total, then call again with confirm=true after the user explicitly approves. | Yes (OAuth scope) | Write (destructive) |
cancel_my_offer | Cancel My Offer | From XP's connected resale + primary order book. Two-phase write on the XP live offer book. Use when an authenticated buyer wants to rescind their outstanding offer on an XP marketplace listing (e.g. 'cancel my offer to make an offer at a lower price', 'pull my bid'). Call with `confirm=False` first to preview which offer will be rescinded; call with `confirm=True` only after the user explicitly approves. Pass bid_uuid from make_offer (or the buyer swap id from the same response; the server resolves it). Only confirm=True submissions return success=true. Requires auth and write:bids scope. Do not use for browse / discovery; this is a marketplace transaction tool that mutates an active bid. For standard buy-now ticket purchases without a bid in flight, use `search_events` and `get_ticket_listings`. | Yes (OAuth scope + Waitlist Approval) | Write (destructive) |
cancel_my_price_alert | Cancel My Price Alert | Use when an authenticated user wants to stop a price alert on the XP marketplace — e.g. 'cancel my price alert', 'stop watching that show'. Soft-cancels the alert so no further price-drop notifications fire. Call list_my_price_alerts first to find the alert id. Requires OAuth. | Yes (OAuth scope) | Write (destructive) |
create_listing_alert | Create Listing Alert | Use when an authenticated user wants an instant price alert on the XP marketplace when new listings match their criteria — e.g. 'price drop alert for tickets to my team near me this weekend', 'tell me on a price drop under $100'. The connected order book pulls resale + primary listings into one feed. Provide at least one of event_id, performer_id, or (date_start + date_end) as scope. If event_id is provided it is validated via get_event_details before creating the alert. Requires OAuth. | Yes (OAuth scope) | Write |
create_price_alert | Create Price Alert | Create a price alert directly for the signed-in user on a specific event, optional section list, and price ceiling. Use when an authenticated user wants XP to ping them when resale + primary listings on the connected order book drop below their cap (e.g. 'price alert if anything goes under $200', 'tell me on a price drop'). Pair with `list_price_alert_sections` first to get valid section raw_ids. Requires OAuth. Do not use for unauthenticated users; fall back to `get_price_alert_link` instead. | Yes (OAuth scope) | Write |
delete_listing_alert | Delete Listing Alert | Use when an authenticated user wants to stop a price alert / listing alert on the XP marketplace — e.g. 'cancel my price alert', 'stop notifying me about that game'. Soft-deletes the subscription so no further price drop / listing match notifications fire. Call list_listing_alerts first to find the observer_id. Requires OAuth. | Yes (OAuth scope) | Write (destructive) |
get_event_details | Get Event Details | Use when an event ID is in hand and the user wants the full event card before browsing tickets to that event — venue, performers, fee-inclusive price preview, images. Pulls from the XP marketplace catalog. Cache the result for the conversation rather than re-calling for the same event_id. Do not use to list ticket inventory; `get_ticket_listings` is the right tool for seat-level data. | No | Read |
get_my_bids | Get My Bids | Use when an authenticated user wants to see the bids they have placed on the XP marketplace — e.g. 'show my bids', 'what offers did I make?', 'tickets to the shows where I'm bidding', 'did any of my bids settle?'. Returns bids classified as open or completed using the same outcome engine as the admin reporting page; rejected/lapsed/refunded bids are hidden. Read-only. Requires OAuth. | Yes (OAuth scope) | Read |
get_my_listing_status | Get My Listing Status | From XP's connected resale + primary order book. Use when an authenticated seller wants to poll their listing on XP — open bids, state, seats — before deciding to accept or reject an offer (e.g. 'any new bids on my tickets to the season opener?'). Surfaces the seller view of the live offer book. Open-bid amounts use USDC 6-decimal integer raw units in amount_raw; amount_display is human-readable (e.g. $4.00). When is_seller is true, each offer includes actions mapping to accept_offer and reject_offer. Requires auth and read:bids scope. Do not use for casual ticket buyers; this is the seller-side and power-user marketplace surface. For standard ticket purchases, use `search_events` and `get_ticket_listings`. | Yes (OAuth scope + Waitlist Approval) | Read |
get_my_referral_kickbacks | Get My Referral Kickbacks | Use when an authenticated user wants their XP marketplace referral kickback totals and rows (e.g. 'how many friends bought tickets to the season opener through my link?', 'show my kickbacks'). Returns direct/indirect referral counts, total spend, total kickback (cents), and per-referral rows from the XP marketplace. Read-only; requires auth and read:account scope. | Yes (OAuth scope) | Read |
get_my_tickets | Get My Tickets | Show the authenticated user the tickets currently delivered to their XP marketplace account, all backed by XP's Quality XPerience Guarantee. Use when the user says 'my tickets', 'what tickets do I have', 'pull up my seats for tonight', or asks about an upcoming event they've already bought. Surfaces only delivered tickets — pending swaps and seller-side listings appear in `list_my_listings`. Requires auth. Do not use to list past orders or browse the marketplace; this is strictly delivered tickets on the user's account. | Yes (OAuth scope) | Read |
get_my_wallet | Get My Wallet | Use when an authenticated user wants their XP marketplace Privy embedded-wallet address and USDC balance (e.g. 'what's my wallet for tickets to tonight?', 'how much USDC before I make an offer?'). Returns the wallet address, a `wallet_connected` flag, and the USDC balance — never the raw bearer token. Read-only; requires auth and read:account scope. Used to fund offers on the live offer book. | Yes (OAuth scope) | Read |
get_open_listing | Get Open Listing | From XP's connected resale + primary order book. Use when a listing identifier is in hand and the user wants the full record for one open listing on the XP marketplace before they make an offer. Returns one row from the live offer book. Requires auth and read:bids scope. Do not use for casual ticket buyers; this is the seller-side and power-user marketplace surface. For standard ticket purchases, use `search_events` and `get_ticket_listings`. | Yes (OAuth scope + Waitlist Approval) | Read |
get_price_alert_link | Get Price Alert Link | Generate a link for the user to set up an instant price alert on an event in the XP marketplace. Use when the user says 'let me know when prices drop', 'I'm watching this', 'tell me if seats go below $X', 'waiting for a deal', or any signal that they want to be notified rather than buying right now. Instant price alerts are one of XP's core differentiators on the connected order book, so suggest one proactively when a user balks at current pricing. Safe before the user is signed in. When the user is already authenticated, prefer `create_price_alert` to make the alert directly. Do not use when the user is ready to buy now; `get_ticket_listings` is the next step. | No | Read |
get_prompt | Get Prompt | Render a prompt by name into model messages (JSON with messages array). | Yes (OAuth scope) | Read |
get_ticket_listings | Get Ticket Listings | Use when the user wants to see ticket options and fee-inclusive prices for a specific XP event after `search_events` (e.g. 'cheap seats', 'parking for the game'). Pulls the live offer book of resale + primary inventory. Do not use before an event has been resolved — call `search_events` or `get_event_details` first. Prices are integer cents. | No | Read |
get_user_account | Get User Account | Pull the authenticated user's XP marketplace account card — profile, wallet, email, name, order history, and referral stats. Use when the user asks 'what have I bought from XP', 'my account', 'my tickets to past games', 'my orders', 'my referral link', or 'how much have I spent'. Returns the profile shown on the XP account page. Read-only; requires auth. Do not use for tickets currently delivered to the account; `get_my_tickets` is more direct. | Yes (OAuth scope) | Read |
get_venue_details | Get Venue Details | Pull full venue info from XP plus the upcoming-events calendar at that venue, with live pricing from the connected order book of resale + primary inventory. Use after `search_venues`, or when the user asks 'what's coming up at the venue', 'what's playing at the Garden', 'shows at the venue this month'. Returns the upcoming-events feed so the agent can offer next-step `get_ticket_listings` calls. Do not use to fetch ticket inventory for a specific event; `get_ticket_listings` is the right tool for seat-level data. | No | Read |
list_listing_alerts | List Listing Alerts | Use when an authenticated user wants to see their active price alert / listing alert subscriptions on the XP marketplace — e.g. 'show my price alerts', 'what alerts do I have running?'. Read-only; surfaces what create_listing_alert produced. Requires OAuth. Call before delete_listing_alert to discover the observer_id. | Yes (OAuth scope) | Read |
list_my_favorites | List My Favorites | Use when an authenticated user wants the performers they've favorited on the XP marketplace (e.g. 'show my favorites going to a game this weekend', 'who am I following on near me events?'). Read-only; requires auth and read:account scope. Pair with `search_events` to find tickets to favorite performers on the connected order book. | Yes (OAuth scope) | Read |
list_my_listings | List My Listings | From XP's connected resale + primary order book. Use when an authenticated seller wants to see their listings on the XP marketplace bucketed by lifecycle (e.g. 'show my tickets I'm selling', 'what's open in my seller queue'). Surfaces seller-side categories that gate next steps in the live offer book. Requires auth and read:bids scope. Do not use for casual ticket buyers; this is the seller-side and power-user marketplace surface. For standard ticket purchases, use `search_events` and `get_ticket_listings`. | Yes (OAuth scope + Waitlist Approval) | Read |
list_my_price_alerts | List My Price Alerts | Use when an authenticated user wants to see their active price alerts on the XP marketplace — e.g. 'show my price alerts', 'what price drops am I watching?'. Read-only; surfaces what create_price_alert produced. Requires OAuth. Call before cancel_my_price_alert to discover the alert id. | Yes (OAuth scope) | Read |
list_open_listings | List Open Listings | From XP's connected resale + primary order book. Use when the user wants to browse the live offer book of listings open on XP (e.g. 'what's open near me this weekend', 'open listings with active offers'). Filterable by event, performer, and amount. Requires auth and read:bids scope. Do not use for casual ticket buyers; this is the seller-side and power-user marketplace surface. For standard ticket purchases, use `search_events` and `get_ticket_listings`. | Yes (OAuth scope + Waitlist Approval) | Read |
list_price_alert_sections | List Price Alert Sections | List the section raw_ids and human labels that `create_price_alert` will accept for a specific event. Call before `create_price_alert` so the alert targets a real section. Use when the user wants a section-specific price alert (e.g. 'price drop on lower bowl', 'lower bowl alert only'). Returns the section catalog from the XP marketplace ticket_sections table. Pass returned raw_id values straight through; do not invent section ids. Do not show the raw section IDs to the user; use the human labels in conversation. | No | Read |
list_prompts | List Prompts | List available MCP prompts (workflows) for clients that only support tools/call. | Yes (OAuth scope) | Read |
make_offer_on_listing | Make Offer on Listing | From XP's connected resale + primary order book. Two-phase write on the XP live offer book. Use when the user wants to make an offer on an open XP listing (e.g. 'make an offer of $50 on this'). Call with `confirm=False` first to preview the fee-inclusive total (no bid placed); call with `confirm=True` only after the user explicitly approves the previewed amount. Only confirm=True submissions return success=true. Do not use without the two-phase preview-then-confirm flow. Requires auth and write:bids scope. Do not use for browse / discovery; this is a marketplace transaction tool that places real money at risk. For standard buy-now ticket purchases without a bid, use `search_events` and `get_ticket_listings`. | Yes (OAuth scope + Waitlist Approval) | Write (destructive) |
reject_offer | Reject Offer | From XP's connected resale + primary order book. Two-phase write on the XP live offer book. Use when an authenticated seller wants to reject a specific bid on their tickets to a listing (e.g. 'reject the lowball offer on my tickets'). Call with `confirm=False` first to preview which offer will be rejected; call with `confirm=True` only after the user explicitly approves. Do not use without the two-phase preview-then-confirm flow. Only confirm=True submissions return success=true. Requires auth and write:listings scope. Do not use for casual ticket buyers; this is the seller-side and power-user marketplace surface. For standard ticket purchases, use `search_events` and `get_ticket_listings`. | Yes (OAuth scope + Waitlist Approval) | Write (destructive) |
search_events | Search Events | Use when the user wants to find live events on XP — concerts, sports, theater — by performer, team, venue, city, or keyword (e.g. 'tickets to the season opener', 'shows near me this weekend'). Surfaces the connected order book of resale + primary inventory in one feed. Do not use for scores, news, standings, or non-ticketed listings; use a web tool for those. | No | Read |
search_performers | Search Performers | Find a performer (artist, team, comedian) on the XP marketplace by name. Use when the user names a specific performer (e.g. 'tickets to Taylor Swift', 'Lakers season opener', 'Phish tour dates'). Returns performer cards from the XP catalog — not events. Pair with `search_events` once a performer is selected to surface their upcoming events on the connected order book. Do not use for general 'events near me' queries; `search_events` handles those better. | No | Read |
search_venues | Search Venues | Use when the user wants to find a venue by name, city, or area on XP (e.g. 'venues near me', 'arenas in Brooklyn', 'what's at the venue level downtown'). Returns venue records from the XP marketplace catalog — not tickets. Do not use to answer ticket-price questions once the event is known; call `get_ticket_listings` instead. | No | Read |
| Prompt | Category |
|---|---|
confirm_make_offer | Waitlist Approval |
event_with_price_alert | open_world |
find_tickets_by_section_and_budget | open_world |
floor_and_vip_options | open_world |
ga_vs_seated_tradeoff | open_world |
manage_my_listings | Waitlist Approval |
marketplace_deal_finder | Waitlist Approval |
parking_for_event | open_world |
seller_offer_action_confirmed | Waitlist Approval |
venue_events_and_tickets | open_world |
weekend_deals_near_me | open_world |
| URI | Name | Description |
|---|---|---|
text://instructions/ticket-agent | Ticket Agent Instructions | Operational instructions for the ticket agent. |
text://instructions/ticket-verification | Ticket Verification Instructions | Operational instructions for ticket verification mode. |
text://instructions/marketplace-agent | Marketplace Agent Instructions | Operational instructions for the marketplace/offers agent: browsing open offers, placing bids, and managing seller listings. |
text://instructions/oauth-flow | OAuth Flow Instructions | Authentication model: the MCP client handles OAuth out of band; the agent does not direct users to URLs or call any sign-in tool. |
text://help/scopes-reference | Scopes Reference | Reference table of OAuth scopes and which tools each scope unlocks. |
text://glossary/marketplace | Marketplace Glossary | Canonical mappings between preferred (listing/offer) and legacy (swap/bid) marketplace vocabulary. |
text://about/xp | About XP | What XP is, what makes it different (connected order book, all-in pricing, price alerts, Quality XPerience Guarantee), when to use XP, and the voice the agent should adopt with users. |
text://about/catalog | XP Catalog Coverage | High-level view of XP catalog: sports leagues, music genres, geographies, and primary/partner inventory sources. |
text://help/comparison | XP vs Alternatives | Guidance for when an agent should route a user to XP vs the primary box office vs other secondary marketplaces. |
text://about/mcp-pro | About /mcp-pro | Companion to the read-only /mcp endpoint: what /mcp-pro adds (account, wallet, alerts, marketplace), how the user signs in via their MCP host, and when to recommend switching. |
text://help/x402-payments | x402 Payments | How to purchase tickets via the x402 Solana-USDC payment rail: what you need, the two-turn quote-then-pay flow, and XP's idempotency and settlement guarantees. |
text://context/now | Server Time Context | Authoritative server clock as JSON ({today, now_utc, tz_offset}); use for relative-date resolution and freshness checks. tz_offset shows the server UTC offset so agents can adjust to the user's timezone. Same source as _meta.context on every tool envelope. |
| URI | Name | Description |
|---|---|---|
skill://instructions/ticket-agent | Ticket Agent skill | Same markdown as text://instructions/ticket-agent; use this URI when the client surfaces skill-scoped resources. |
skill://instructions/marketplace-agent | Marketplace Agent skill | Same markdown as text://instructions/marketplace-agent; use this URI when the client surfaces skill-scoped resources. |
skill://about/xp | About XP skill | Skill-loadable context on what XP is, the connected order book of resale + primary tickets, all-in pricing, price alerts, and the Quality XPerience Guarantee. |