AI agents are starting to book rides, order food, and complete tasks inside apps. This walkthrough explores how Resy's existing customer journey maps to an MCP server that gives those agents structured, safe access to dining reservations.
Cardholder discovers restaurants through editorial content, SEO-driven articles, and curated lists on Resy.
Content & SEOFilters by date, party size, cuisine, location, and availability.
Structured QueryFrictionless mobile auth via SMS verification. Establishes identity and links to Amex cardholder profile.
AuthenticationSelect timeslot, hold reservation, confirm payment method, and finalize.
TransactionModify party size, change time, or cancel.
LifecycleEach of these five phases represents a distinct capability surface. When we build an MCP server, we're not exposing a monolithic API. We're giving AI agents a toolkit that mirrors how humans actually navigate the experience. The agent needs to discover, search, authenticate, transact, and manage, just like a person does.
The cardholder navigates Resy's UI, taps through filters, reads reviews, and confirms their own booking. Every decision has a visual confirmation step.
An AI agent traverses the same journey programmatically. It reads tool descriptions instead of UI labels, calls functions instead of tapping buttons, and needs guardrails instead of visual confirmations.
The MCP server mirrors the customer journey. Every tool maps to a journey phase, every parameter mirrors a UI input, and every access control replicates a visual gate (like the login screen or the "Confirm Booking" button).
Each journey phase is powered by specific API endpoints. These become the building blocks for MCP tool definitions.
id: string // Article identifier
{ title, body, restaurants[], tags[] }
category?: string
location?: string
{ articles: [{ id, title, summary }] }
type: "list" | "guide" | "featured"
location?: string
{ content: [{ title, items[], type }] }
city: string // e.g. "new-york-ny"
date: string // YYYY-MM-DD
seats: number
query?: string // e.g. "Pizza"
activeView?: string // "list" | "map"
{ restaurants: [{ id, name, cuisine,
rating, price_range, available_slots[] }] }
city: string // e.g. "new-york-ny"
slug: string // e.g. "lartusi"
date: string // YYYY-MM-DD
seats: number
{ name, description, cuisine, rating,
photos[], reviews[], menu_url,
available_timeslots: [{ id, time, type }] }
phone: string // E.164 format
{ sent: true, expires_in: 300 }
phone: string
code: string // 6-digit SMS code
{ token: "eyJhb...", user_id: "u_123",
expires_at: "2026-03-28T..." }
id: string // Timeslot identifier
{ id, restaurant_id, time, type,
deposit_required, cancellation_policy }
timeslot_id: string
hold_until: string // ISO timestamp
{ hold_id: "h_456", expires_at: "...",
status: "held" }
id: string // User profile ID
{ name, email, phone,
payment_methods: [{ id, last4, type }],
dietary_preferences[] }
token: string // Payment token
{ card_id, last4, brand, status }
restaurant_id: string
timeslot_id: string
party_size: number
payment_method_id: string
special_requests?: string
{ reservation_id: "r_789",
confirmation_code: "RESY-ABC123",
status: "confirmed" }
id: string
party_size?: number
timeslot_id?: string
special_requests?: string
{ reservation_id, status: "modified",
updated_fields[] }
id: string // Reservation identifier
{ status: "cancelled",
cancellation_fee: null,
refund_amount: 0.00 }
Notice the hold pattern in the Booking section: the reservation flow uses a two-step commit. POST /reservations/hold creates a temporary lock, then POST /reservations finalizes. This pattern is critical for agentic experiences: it lets an AI agent secure a timeslot while the cardholder confirms, without risking a lost booking or an unauthorized charge.
The Model Context Protocol turns Resy's APIs into tools that any AI agent can discover, understand, and invoke. Tool descriptions become "UX for machines."
The MCP server is a translation layer: it wraps existing APIs with tool metadata that agents can reason about.
APIs are built for developers who read docs. MCP tools are built for AI agents that read descriptions. The tool's description, parameter names, and schema are the interface.
An agent doesn't browse Resy's API docs. It reads tool definitions at runtime and decides what to call based on the user's intent.
Read-only access. Search restaurants, check availability, view details.
Agent suggests + holds. Cardholder confirms the final action.
Agent books, modifies, cancels on cardholder's behalf autonomously.
The agent can start a reservation, but it can't finish one alone. It places a temporary hold, then asks the cardholder to confirm. No confirmation, no booking. The cardholder always has the final say.
Cancelling a reservation at a premium restaurant can trigger fees of $500+. That's why changes and cancellations require the cardholder to re-confirm. The agent can suggest and prepare the action, but anything with financial consequences needs a human in the loop.
The trust model for agent-initiated financial actions in a regulated environment. What gets exposed, what stays internal, and how we protect the cardholder.
| Data Element | Expose to Partner Agents? | Rationale |
|---|---|---|
| Restaurant name, cuisine, location | Expose | Public information needed for search and recommendation |
| Available timeslots | Expose | Core functionality; agent needs this to facilitate booking |
| Pricing / deposit amounts | Expose | Cardholder must know costs before committing |
| Cardholder name (first name only) | Partial | Personalization without full PII exposure |
| Payment method (last 4 digits) | Partial | Confirmation display only, never full card number |
| Full cardholder profile | Internal Only | PII stays server-side. Agent sees tokenized references. |
| Payment processing details | Internal Only | Handled entirely by Resy MCP server; agent never touches payment rails |
| Reservation history / frequency | Internal Only | Behavioral data stays internal to avoid profiling by third parties |
The MCP server acts as a data firewall. Partner AI agents get exactly what they need to facilitate the experience, and nothing more. The agent never sees a full card number, never accesses raw payment rails, and never gets behavioral history that could be used for competitive profiling.
The reservation flow uses a two-phase commit: hold, then confirm. This is the key safety mechanism for agentic booking.
create_reservation → MCP server places a configurable hold (e.g., 5 minutes)Different agent interactions require different permission levels, controlled via OAuth scopes.
restaurants:read Search and view restaurants (any agent)availability:read Check timeslot availabilityreservations:read View existing reservationsreservations:write Create reservations (requires cardholder auth)reservations:manage Modify/cancel (requires re-confirmation)"You're authorizing actions on behalf of a cardholder through a third-party agent."
Three parties, three trust relationships:
Additional considerations for a regulated financial institution operating in the agentic space.
The MCP server should be paranoid by default. Start with the narrowest possible permissions, and expand only when the cardholder explicitly opts in. The same principle that governs card-not-present transactions applies here: higher risk of fraud means tighter controls.
Things I'd want to explore with the team:
Is the hold window configurable per restaurant, or platform-wide? High-demand spots might need shorter holds to avoid inventory lock-up.
Per-agent limits, per-cardholder limits, or both? How do you prevent a misbehaving agent from burning through availability?
How does Amex know which AI assistant is making a request? Does each partner get a unique identity, and can you revoke one without affecting others?
One-time blanket consent, or per-action? How granular should opt-in be before it becomes friction?
From informational tools today to fully agentic dining experiences tomorrow. The progression is deliberate: each stage builds trust and proves the model before unlocking the next.
AI agents can search restaurants, check availability, and view details on behalf of the cardholder. No actions are taken. The agent is purely a research assistant for dining decisions.
The agent can suggest options and place temporary holds, but the cardholder always confirms. The hold pattern is the safety mechanism: nothing commits without human approval. This is where we prove the trust model works.
With established trust and proven safety patterns, AI agents can book, modify, and cancel reservations autonomously. The cardholder sets preferences and constraints ("Italian, under $50pp, near my hotel") and the agent handles the rest, including rebooking if plans change.
The Amex agent doesn't operate alone. It coordinates with airline agents, hotel agents, and restaurant agents to orchestrate complete travel experiences. "Book dinner near my hotel the night before my morning flight" becomes a multi-agent conversation.
Google's Gemini agent can now take control of Android apps to book rides, order food, and complete multi-step tasks autonomously. Samsung's Galaxy S26 shipped with this capability in February 2026. The OS-level agent layer is here. Amex needs to be ready for when these agents interact with its services programmatically via MCP, not by screen-scraping the UI.
Samsung Unpacked February 2026: Gemini agent ordering food and booking rides on Galaxy S26
Whoever figures out the trust model for agent-initiated financial actions first wins the agentic finance space. Amex is uniquely positioned: you already have the cardholder trust, the merchant relationships, and now with Resy, the platform to prove it works.
Restaurant reservations are low-to-medium stakes ($50-$500 deposits). Perfect for building trust in agent-initiated financial actions before expanding to higher-stakes domains like travel or shopping.
Cancellation policies are well-defined and time-bound. If an agent makes a mistake, the blast radius is contained and the remedy path is clear.
When someone asks an AI to book a restaurant, the intent is unambiguous. Compare this to "buy me something nice": dining has structured inputs (date, time, party size) that reduce agent error.
Amex owns Resy. You control the API surface, the data model, and the trust boundaries. No third-party dependency for the initial proof of concept.
Resy is the proving ground. The patterns you build here (hold-before-commit, scoped OAuth for agents, cardholder re-confirmation for financial actions) become the template for agentic experiences across every Amex product: travel, shopping, financial planning. It all starts with "Book me a table for two on Friday."
I don't just talk about these tools. I build with them daily.
Claude Code runs on my Mac mini with a Channels integration to Telegram. I message it tasks, it executes them against my repos, and replies with results. This is how I manage QuietFeed and other projects conversationally.
Built an autonomous pipeline that scans LinkedIn twice daily, classifies roles using Claude Haiku and Gemini, and texts me matches. Runs at $0.06/day. Published a 4-part series on the build.
An RSS reader built with AI assistance. React + Supabase + Vercel. Claude Code handles feature development, bug fixes, and test coverage across 60+ test files. quietfeed.com
Native MCP integration for social media scheduling. I tell Claude what to post, and it handles the rest through Buffer's MCP server.
Delivered an AI-powered compliance copilot that guided power plant owners through plant profiles, compliance workflows, and cross-standard tasks, reducing manual effort and error rates.
Same pattern as building agent guardrails for financial actions. Compliance baked in from day one, not bolted on.
Defined and drove development of an LLM-powered AI assistant that answers homeowner questions conversationally and drives users toward HVAC replacement and repair conversions.
Conversational AI driving users toward transactions. The same flow an agent would take on Resy.
Increased platform security by implementing two-factor authentication and AI-driven fraud detection, reducing bot-driven attacks and strengthening customer trust.
Trust signals for automated transactions: detecting when a bot is acting vs. when a person authorized the action.
Created and launched co-branded partner sites reaching 11.5M users, enabling OpenID Connect-based authentication, pricing, feature gating, and theming for enterprise partnerships.
The OAuth token scoping model in the Guardrails tab is directly informed by this work.