The remote SeatLayer MCP lets Claude, ChatGPT, another MCP host, or your own agent build and publish seating charts and run events in SeatLayer: prices, single-seat prices, sales, close times, channels, orders and reports. SeatLayer supplies deterministic tools, validation, rendering, and review gates; the connected host supplies the model.
What it covers
| Covered | Not covered |
|---|---|
| Building and editing charts: sections, rows, seats, tables, booths, GA areas, floors, zones, text, shapes, categories, and theme | Selling a seat or holding one for a buyer: buyers still buy through your checkout |
| Tracing a chart from a reference image, with confirmed counts and labels | Refunding or charging anyone: a refund or cancellation is only a request an org admin approves in Orders |
| Validation, buyer previews, 3D structure, and sightline scores | Payments, checkout settings, promo codes, and fees |
| Review and publication of an approved revision | Seasons, and cancelling a whole event with its refunds |
| Event Configurations: create, review, publish, and bind to an event | Webhooks, API keys, members, and billing |
| Event set-up, when allowed: create, edit and duplicate events, open, close and reopen sales, archive and delete | |
| Live event controls, when allowed: open, close, or hide sections, block and reserve seats, change seat categories, and move an event to the latest chart | |
| Prices, when allowed: event prices, ticket releases, when sections go on sale, checkout hold time, and how tables sell | |
| Reports, when allowed: sales, money, door counts, and the event log | |
| Orders, when allowed: find and read orders, resend tickets, and ask an admin to refund or cancel | |
| Sales channels, when allowed: allocations, channel prices and sale routes, pause and archive, buyer links and partner report links |
Selling stays with the Server API and your checkout. An agent connected through this server can prepare and publish the map buyers use and run events, but it cannot sell a seat, and it can’t refund or charge anyone.
Server URL: https://mcp.seatlayer.io/mcp, over Streamable HTTP. The
dashboard’s Agent connections page shows the URL for your environment.
For chat hosts such as Claude and ChatGPT, use
https://mcp.seatlayer.io/mcp?tools=build; see toolsets.
Choose a setup guide for Codex, Claude, or ChatGPT, and review the current capability matrix before enabling tools.
Claude Code
claude mcp add --transport http seatlayer https://mcp.seatlayer.io/mcpThen run /mcp in Claude Code to sign in. The server’s ready-made prompts
(see Pick a path) appear as slash commands, for example
/mcp__seatlayer__block-seats-safely.
Security boundary
A SeatLayer admin approves each connection on a consent screen. One tap on Allow gives the workspace shown and every permission below; Customize narrows it to one chart or turns permissions off. What a connection can reach:
- One chart, or every chart in this workspace. A workspace connection can list, select, and create charts in that workspace only.
- Chart work: build and edit, validate and review, and request publication.
- Manage live events allows closing sections and blocking seats on events that are already selling.
- Read reports allows reading an event’s history, its prices, and its sales, money and door counts, never a buyer’s details.
- Manage sales channels allows reading an event’s channels and their sales, moving seats between them, changing a channel’s name, sale route and prices, pausing and archiving it, and making buyer links and partner report links. It stands for the dashboard’s channel permissions.
- Set prices and releases allows changing an event’s prices, ticket releases and when its sections go on sale, each confirmed by the person in chat first.
- Create and run events allows creating, editing and duplicating events, and opening, closing and reopening their sales, archiving and deleting them, each change to an event on sale confirmed by the person in chat first.
- Change seat categories allows moving seats to another category on an event that is already selling.
- Look after orders allows finding and reading an event’s orders, with the buyer’s name and contact details, and resending tickets. It can only ask for a refund or cancellation: an org admin approves each one in the dashboard before any money moves.
Every call that uses one of the event checkboxes beyond Manage live events (such as Read reports or Manage sales channels) checks again that the person who connected the agent is still a member with a role that may do it in the dashboard (admin or designer for reports, prices, event set-up and orders, admin for sales channels). If not, the call is refused and the agent asks the person to reconnect.
The token cannot reach other workspaces, members, billing, or API keys, and reaches buyers’ details only through Look after orders. Event tools see only events created from the charts in scope: on a workspace connection, the events of every chart in the workspace, with no chart selected first. Access tokens expire after an hour and refresh tokens rotate. Each connection can make up to 300 tool calls per minute.
Compatible hosts need:
- remote Streamable HTTP MCP;
- protected-resource discovery;
- OAuth 2.1 authorization code flow with PKCE S256;
- the
resourceparameter and rotating refresh tokens; and - MCP image content for reference and preview inspection.
Never give the model a SeatLayer secret API key.
It asks you first
For an event on sale, the agent shows a plan and waits for your yes. A yes covers that plan only; if the seats change first, it plans again. A chart is published only after you approve its review. Your admins get one email about agent changes at most every 15 minutes per agent. History names the agent, and an agent’s chart publish can be undone in one click. Refunds need an admin: the agent can’t refund or charge anyone; it can ask, and an admin approves it in Orders.
Tools by area
The server offers only the tools the connection is allowed to use and the
toolset in its URL asks for, so a read-only, chart-only or
?tools=build connection sees fewer. Call get_capabilities for the list
your connection has.
| Area | Tools |
|---|---|
| Start and navigate | get_capabilities, get_chart (a summary for big charts), list_charts, select_chart, create_chart, get_venue_spec_format |
| Whole chart | build_from_venue_spec (a whole venue from one Venue Spec), build_simple_chart, build_semantic_venue, validate_current_chart, auto_fix_current_chart, render_preview, delete_chart_objects, manage_chart_floors |
| Rows and blocks | add_row_block, add_curved_rows, insert_seating_block, update_rows, relabel_rows, merge_rows, split_row, set_row_spacing, update_row_block_style, group_segmented_rows, update_segmented_row, ungroup_segmented_row, fill_section_with_rows, fill_sections_with_rows, repeat_section_radially, mirror_section_assembly, divide_section_with_aisles |
| Seats | get_row_seats, get_table_chairs, update_seats, reset_seats |
| Tables, booths, GA | add_table_array, update_tables, add_booth_array, update_booths, add_ga_area, update_ga_areas, join_ga_areas |
| Sections and zones | relabel_sections, update_sections, create_chart_zone, update_chart_zones, delete_chart_zone |
| Stage, landmarks and labels | add_stage, add_landmark (bar, entrance, exit, restrooms, screen and more, or a wayfinding icon), add_text, add_area (dance floor, desk) |
| Categories and look | update_chart_categories, create_chart_category, reorder_chart_categories, delete_chart_category, update_chart_theme, update_shapes, update_texts, update_stage_kinds, set_view_from_seat_fallback |
| Gates and step-free access | list_gates, place_gate, update_gate, set_object_entrance, add_step_free_route |
| Section review | get_section_work_queue, get_section_context, record_section_review |
| Reference images | begin_vision_probe, confirm_vision_probe, upload_reference_image, list_reference_images, get_reference_set, configure_reference_set, set_active_reference, read_reference_image, get_reference_overview, get_reference_tile, classify_reference_source, get_reference_source_classification, get_reference_regions, get_reference_region, submit_region_semantics, list_unresolved_reference_questions, diff_vs_reference, restore_reference_sections |
| Blueprint and capacity | propose_reference_blueprint, get_reference_blueprint, approve_reference_blueprint, compile_reference_skeleton, get_reference_capacity_draft, save_reference_capacity_draft, list_reference_capacity_questions, answer_reference_capacity_questions, plan_reference_capacity, render_reference_capacity_preview, apply_reference_capacity_plan, apply_reference_inventory |
| 3D and seat views | get_venue_3d_structure, score_sightlines, apply_suggested_restrictions, set_confidence_evidence, clear_confidence_evidence, approve_confidence_evidence, retract_confidence_evidence, get_confidence_coverage, list_view_evidence_reports, create_panorama_manifest_job, get_panorama_manifest_job |
| Review and publish | prepare_chart_review, get_chart_review, record_chart_review_decision, publish_reviewed_chart |
| Event Configurations | list_event_configurations, get_event_configuration, create_event_configuration, update_event_configuration, submit_event_configuration, approve_event_configuration, publish_event_configuration, activate_event_configuration, rollback_event_configuration, set_shape_configurations |
| Events (read) | find_events, get_seats, list_chart_events, get_event_sections, get_event_section_inventory, get_event_configuration_binding, get_event_chart_freshness |
| Event set-up | create_event, update_event, duplicate_event, get_event |
| Event reports | get_event_log, get_event_report |
| Event pricing | get_event_pricing |
| Orders | list_orders, find_order, get_order, get_order_timeline, resend_tickets, request_order_refund |
| Events (plan, then apply) | plan_inventory_change, apply_inventory_change, list_event_reservations |
| Sales channels (read) | list_channels, get_channel, get_channel_report, list_access_links, list_report_links |
| Events in setup (direct) | set_event_section_states, set_event_seat_blocks, update_event_chart, set_event_configuration_binding |
find_events searches the connection’s events by name, start date or sales
state, with sold, held, blocked and available seats, 20 at a time. get_seats
shows what chosen seats are now (free, held, booked, blocked, reserved under a
name, or off sale through the Event Configuration), chosen the same way
plan_inventory_change chooses them, up to 200 a page. It names a private
sales channel only for a connection that may read channels.
get_event_log and get_event_report need Read reports. The log lists
each change newest first with who made it: a member, a buyer route, the system,
or an agent connection by its name and the member who connected it.
The report gives seats by status and category with their booked value, money
taken by channel and payment method with refunds and discounts, bookings and
sales per day or hour, and door counts (checked in against expected). Neither
returns a buyer’s name, email, phone, order or door list.
An event is on sale once its sales leave setup (testable, live, paused or
ended), or as soon as a buyer holds or has bought a seat. Every change to an
event on sale goes through a plan the person agrees to in chat, however small.
The four direct tools work only while an event is still in setup: on an event
on sale they refuse with live_event_needs_plan and name the plan action and
its inputs to use instead. They need Manage live events, and moving an
event to the latest chart or binding a configuration also needs publishing.
To change an event on sale, the agent plans first. plan_inventory_change
takes an action and, for most actions, a selection by seat labels, rows,
sections or categories, up to 5,000 seats. It changes nothing and returns
counts, a breakdown per section and a plain summary, plus a plan id valid for
15 minutes. The agent shows the summary, and only after the person says yes in
chat calls apply_inventory_change with that plan id. Held and booked seats are
always skipped, seats that changed since the plan are left alone and listed,
the same plan id never applies twice, and only the connection that made a plan
can apply it. Event history records the change with the connection and the
reason.
| Action | What it does | Applying needs |
|---|---|---|
block, unblock |
Take the selected seats off sale, or put blocked ones back. A block can carry releaseAt, the time its seats go back on sale by themselves |
Manage live events |
unblock_all |
Put every seat blocked by hand back on sale, as Unblock all does. No selection. Named reservations and seats the Event Configuration blocks stay as they are | Manage live events |
reserve |
Keep the selected seats aside under a name, for example “Sponsor”, as a named reservation in the Control room | Manage live events |
release_reservation |
Put one reservation’s seats back on sale (reservationId from list_event_reservations), or every reservation’s ("all") |
Manage live events |
reassign_category |
Move the selected seats to another category of the event (categoryKey). The summary lists the price change per group of seats, old category and price to new. Tickets already held or sold keep their price |
Manage live events and Change seat categories, and an admin or designer role |
open_sections, close_sections, hide_sections |
Set whole sections open, closed (visible, not for sale) or hidden | Manage live events |
move_event_to_chart |
Move the event onto its chart’s latest published version. The summary lists the seats and sections the new version adds, removes or renames, the prices that change, and seats that leave a sales channel. Sold, held and blocked seats keep their state; a sold, held or blocked seat the new version leaves out is a blocker, as the dashboard’s Update event map refuses it. Refused at apply if the chart is published again or the event changed since the plan | Manage live events and publishing |
set_configuration_binding |
Bind a published Event Configuration version to the event (configuration: {id, version}), or remove it (null). The summary says which seats it takes off sale and gives back; a held or sold seat it would take off sale is a blocker |
Manage live events and publishing |
move_to_channel |
Move the selected seats to a sales channel (channelId), or back to the public sale ("public"), for example “give section 101 to the travel agency”. Held and booked seats keep their channel. The summary names the channel, where the seats come from, how the channel sells and at which prices |
Manage live events and Manage sales channels, and an admin role |
create_channel, update_channel |
Create a channel (channel.name, channel.accessIntent), or change its name, sale route, prices (channel.priceOverrides, the full new list) or close time (channel.salesEndAt: the channel stops selling on its own then, at or before the event’s online close; null removes it). Price changes are listed old → new per category. A sale-route switch on a channel buyers are using says how many buyer links it closes and how many open sessions keep running; the person’s yes acknowledges that |
the same |
pause_channel, unpause_channel |
Stop all sales of a channel’s seats, or resume them. Its seats stay with the channel. A channel whose close time has passed reads as paused (closedBy: "close_time"); unpausing it removes that close time, and the plan says so |
the same |
archive_channel |
Retire a channel and move its seats to destination ("public" or another channel). Refused while buyers hold its seats. Its buyer sessions end; cannot be undone |
the same |
create_access_link, rotate_access_link, delete_access_link |
Make, replace or revoke a buyer link for a channel sold through buyer links (link options, linkId, endActiveSessions). The summary says who can buy what through it, how many, at which prices and until when. The link itself is returned only in the apply result, once |
the same |
create_report_link, revoke_report_link |
Share a channel’s sales report with a partner through a link, or stop sharing it. The summary says exactly what the link shows; money only with link.includesBookedValue and Read reports. The link is returned only in the apply result, once |
the same |
Planning needs only read access, and the plan’s summary says which
permissions applying needs. Channel plans are the exception: their summaries
name partners, prices and links, so making one already needs Manage sales
channels and an admin role. The channel reads need the same;
get_channel_report shows money only with Read reports too. No channel tool
ever returns an existing link: a lost buyer link is replaced with
rotate_access_link. list_event_reservations lists an event’s named
reservations and its other blocked seats, grouped by reason, with who made
them; it needs Manage live events, and because it only reads, a read-only
connection with that permission lists it.
Publishing and approval tools need publish permission.
Reference, blueprint, and capacity tools need the reference-chart feature, and
Event Configurations need
that module on your account.
Event prices and sales setup
get_event_pricing reads one event’s prices per category and ticket type
(each the event’s own or the chart’s, and whether the chart has moved since),
what is held or booked, its ticket releases and what each has sold, when its
sections go on sale, the checkout hold time and how its tables sell. It needs
Set prices and releases or Read reports.
Changes go through the same plan, yes in chat, then apply as seat changes. Each runs the dashboard’s own save, and each plan is tied to the event as the person saw it: if someone changes the prices, releases or settings in between, applying is refused and nothing changes, and the agent plans again. Holds and bookings always keep the price already promised; new selections use the new one. On a free event the summary says there is no price change for buyers.
| Action | What it does | Applying needs |
|---|---|---|
set_event_prices |
Change the event’s own price for some categories or ticket types (prices). The summary lists each old and new price |
Manage live events and Set prices and releases, and an admin or designer role |
reset_event_prices_to_chart |
Put prices back on the chart’s current price, all or some categories | The same |
set_seat_prices |
Give the seats a selector names their own price (seatPrice: one price, or tiers with a price per ticket type). They keep their category, and their price wins over offers, channels and the ticket type’s price |
The same |
clear_seat_prices |
Put seats back on their ticket type’s price: the ones a selector names, or every seat with its own price |
The same |
set_ticket_releases |
Replace the event’s ticket releases (releases, the whole list in order) |
The same |
close_ticket_release |
End one release now (releaseId); what it sold keeps its price |
The same |
set_sales_window |
Per section: on sale now, at a time, or once a share of the rest has sold (windows) |
The same |
set_hold_ttl |
How long a buyer’s seats stay held at checkout (holdMinutes) |
Manage live events |
set_table_booking_mode |
Sell tables seat by seat, whole, as a party of a set size, or as the chart says (tables). Tables with held, booked or blocked seats are left out |
Manage live events |
Event set-up and sales
create_event makes a new event (show date) from a published chart, and
duplicate_event copies one to a new date with its prices, releases, blocks
and settings but no orders. Both make a draft in setup, nothing on sale, and a
retry makes one event, not two. create_event with mode: "test" makes a
test event: buyers pay with test payments and no real money moves. Give create_event a timezone; without
one, the event takes the usual zone of the chart’s other events, then the
workspace’s, then the organization’s. update_event changes a name, venue,
doors or end time, description, buyer page language, ticket limits
(maxTicketsPerOrder, maxTicketsPerBuyer) or external reference, and the
start date or time zone while the event is in setup.
get_event reads an event’s settings, sales state and seat counts, its
checkout (who runs it, the payment provider and whether it can take the
event’s payments, and the event page link once it is shared), and says
in plain words what still stops it going on sale, and what going live will
still need (sales.goLive). All four need Create and
run events.
Sales and the rest of an event’s life go through the same plan, yes in chat, then apply. Each plan is tied to the event as the person saw it, and planning lists every check applying will meet, so a plan with a blocker has no plan id.
| Action | What it does | Applying needs |
|---|---|---|
open_sales, close_sales, reopen_sales |
Put the event on sale, close online sales (the box office and door keep selling), or start them again. Opening runs the dashboard’s readiness checks first. On an event in its test window, close_sales stops the test window and puts the event back in setup; seats already booked stay booked |
Manage live events and Create and run events, and an admin or designer role |
set_sales_times |
Set, move or remove when online sales close on their own (salesCloseAt) and when the event ends on its own (autoEndAt), each a time with its offset, or null to remove it |
The same |
end_event |
End the event for good: every sale stops, the box office too. It cannot be undone | The same |
set_event_mode |
Switch the event between test mode and live mode (mode). Only an event with nothing sold, held, blocked or given to a channel can switch; the switch unassigns its payment provider |
Manage live events and Create and run events, and an admin role |
edit_live_event_date |
Move an event on sale to a new start (startsAt, optionally timezone); doors and end move with it |
The same |
archive_event, unarchive_event |
Archive the event, or restore an archived one | The same |
delete_event |
Delete an event; refused if anything was sold | The same |
Orders
list_orders, find_order (by order reference, ticket code, name, email,
phone or seat), get_order and get_order_timeline read an event’s orders,
including the buyer’s name and contact details. resend_tickets emails an
order’s tickets again to the address already on it, at most three times an
hour per order. All need Look after orders and an admin or designer role.
request_order_refund refunds and cancels nothing. It checks the order as the
dashboard’s Refund and Cancel buttons would, then returns a link that an org
admin opens on the Orders page to approve or decline; the link expires after
24 hours and works once. Approving runs the refund or cancellation under the
admin’s own sign-in. get_order_timeline shows the requests an agent made.
Toolsets
A host sends the name, description and inputs of every listed tool to the model on every turn. With every permission ticked, all 160 tools come to about 220 KB of definitions per turn. Most chat work (build a venue, change prices, add a bar, check and publish) needs far fewer, so the connection URL can pick a set:
| URL | Tools listed | Covers |
|---|---|---|
https://mcp.seatlayer.io/mcp?tools=build |
63, about 97 KB | Build, edit, price, check and publish charts, including build_from_venue_spec, the add_ tools, validate_current_chart, render_preview and the review and publish tools |
?tools=build,trace |
build plus 38 | Trace a floor-plan image section by section: reference images, regions, blueprints, capacity plans and section review |
?tools=build,3d |
build plus 12 | Heights, sightlines and seat-view evidence |
?tools=events |
up to 46, about 55 KB with every permission | Events and their Event Configurations: set-up, live controls, reports, prices, orders and the channel reads, plus get_capabilities, list_charts, select_chart and get_chart |
?tools=channels |
16, about 21 KB | Sales channels: the channel reads, the event tools a channel job needs (find_events, get_seats, list_chart_events, get_event_sections, get_event_section_inventory, plan_inventory_change, apply_inventory_change) and chart access. Needs Manage sales channels to list the channel reads |
?readonly=1 |
up to 59, about 58 KB with every permission | Only the tools that read: charts, checks, previews, events, event reports, prices, orders and sales channels, for reporting and questions. Combines with a set, for example ?tools=events&readonly=1 (up to 28 tools) |
?tools=discover |
10, about 7 KB | Discover mode: get_capabilities, the everyday reads (list_charts, select_chart, get_chart, list_chart_events) and the tools that find and run every other tool: search_tools, get_tool, run_read_tool, run_write_tool and report_missing_tool |
?tools=all, or the plain URL |
Up to 160 | Everything the connection may use. Connections made before toolsets keep every tool |
Sets combine with commas, for example ?tools=build,trace,3d. trace and
3d always bring build with them; events does not, so use
?tools=build,events to edit the chart as well. Unknown names are ignored.
Sign-in works the same with the query on the URL. A toolset only changes which tools are listed; the grant approved on the consent screen still decides what a call may do.
readonly=1 is the one option that also refuses calls. Tools that change a
chart or an event are not listed, and a call to one is refused whatever the
grant allows. Choosing a chart with select_chart still works. get_capabilities
reports readOnly: true. To make changes, reconnect without readonly=1. get_capabilities reports the sets. To add a
set, reconnect with a different ?tools= value.
In discover mode the agent finds the tool a request needs with
search_tools, reads its inputs with get_tool, and runs it with
run_read_tool or run_write_tool. A run is checked exactly like a direct
call: the grant, the Designer features, readonly=1 and the tool’s own
limits. Jobs no tool can do come back marked as not possible, with where to
do them instead, and report_missing_tool tells SeatLayer about the rest.
Discover mode combines with readonly=1 (9 tools, without run_write_tool)
and with a set, for example ?tools=discover,events.
Use ?tools=build in Claude and ChatGPT for everyday chart work. Use the
plain URL in Codex, or add ,trace when the agent will trace a floor plan.
Pick a path
get_capabilities returns a step-by-step playbook for each common job, and the
server offers the same jobs as ready-made prompts that hosts such as Claude show
in their prompt picker:
| Job | Prompt | Starts with |
|---|---|---|
| A new venue from a description | build_venue |
get_venue_spec_format, then build_from_venue_spec with checkOnly: true, then the build. See Venue Spec |
| A change to an existing chart | edit_chart |
get_chart, then the matching update_ tool |
| A chart from a floor-plan image | trace-floor-plan |
begin_vision_probe, then the reference steps below. Needs ?tools=build,trace or the plain URL |
| Checking and publishing | check_and_publish |
validate_current_chart, render_preview, prepare_chart_review |
| A client’s changes to a chart | apply-chart-feedback |
get_chart, the matching update_ tools, then validate_current_chart and the review |
| Publishing, then moving events on sale to the new version | publish-and-apply |
validate_current_chart, prepare_chart_review, then publish_reviewed_chart after you approve |
| Blocking, holding back or releasing seats on an event on sale | block-seats-safely |
find_events, then plan_inventory_change. apply_inventory_change runs only after your yes to that plan |
| The event on the day: door counts, sections, sales and orders | event-day-ops |
find_events. Every live change is planned and waits for your yes |
| A summary for your client | client-report |
find_events, then get_event_report. Reads only |
Each prompt takes an optional request in your own words. A connection lists
only the prompts it can carry out: ?tools=events lists the event prompts and
none of the chart ones, and a readonly=1 connection lists client-report
only. In a host without a prompt menu, ask in your own words; the agent follows
the same steps.
Stages, landmarks such as bars, entrances and exits, text labels and named areas such as a dance floor are added with words: beside the layout, in its centre, or beside a named section, row or table. Gates and step-free routes have their own tools (see the table above). Not possible over MCP yet: drawing section outlines, or placing anything at an exact position. Agents are told to say so and send the user to the Designer for those steps.
Tracing a floor plan, end to end
Negotiate capabilities
Call get_capabilities and follow the features reported by this deployment
instead of assuming a tool or schema from memory.
Authorize a chart or workspace
Select an existing chart or create an empty draft during OAuth, or grant the workspace and let the agent list or create charts.
Upload and classify private evidence
Keep immutable asset ids, inspect overview/detail tiles, classify every source, and configure one trace-ready geometry source plus role-limited supplemental evidence.
Confirm semantics
Record region meaning, labels, counts, confidence, and open questions. Pixel inference remains evidence until an authoritative person/source confirms sellable facts.
Compile deterministically
Select semantic intents and opaque region ids. SeatLayer code, not model coordinates, creates sections, paths, rows, aisles, and inventory.
Render and refine
Validate every floor, inspect buyer previews and reference diffs, make a bounded change, and repeat.
Review the exact revision
Prepare a packet bound to the current immutable chart hash. Inspect desktop and mobile buyer scenes plus reference evidence.
Publish only an approved unchanged revision
Record the human decision. A canPublish session may publish only the exact
approved revision; any change invalidates that approval.
Why it is not an image converter
A single vision response cannot guarantee:
- authoritative seat count or labels;
- correct accessibility and pricing;
- containment-safe geometry;
- readable buyer behavior at several zoom levels;
- exact revision review; or
- safe publication.
The MCP therefore separates evidence, semantic confirmation, deterministic geometry, machine validation, visual review, and publication.
Start with this prompt
Use the SeatLayer connector to build this seating chart with me.
Start with get_capabilities and follow the staged reference workflow.
Treat every uploaded image as evidence, not authoritative seat inventory.
Inspect the overview and all required detail tiles before interpreting a dense plan.
Record unresolved labels, counts, accessibility, and pricing as questions.
Use semantic tools and SeatLayer's deterministic compilers; do not invent coordinates.
After each bounded change, validate and render every floor.
Show me the buyer preview and reference alignment evidence.
Prepare the exact revision for review, but do not approve or publish without
my explicit decision.Agent implementation rules
- Use the newest
expectedUpdatedAton mutations to avoid overwriting concurrent edits. - Split large semantic region sets into bounded, disjoint calls and read back the merged canonical state.
- Do not let a supplemental source replace the configured geometry source.
- Do not create inventory from unconfirmed image counts or labels.
- Prefer semantic intents; public MCP tools intentionally exclude arbitrary geometry nudges and several Designer-only controls.
- Treat machine validation as necessary but insufficient for visual approval.
- Preserve published booking identities and safe-mode constraints.
- Wait out a plan that is still being read (see below); never treat it as a failure.
When a floor plan is still being read
SeatLayer reads an uploaded plan in the background, and a first read takes up to a minute. Until it finishes, the tools that need the read answer with this error:
{
"ok": false,
"error": {
"code": "reference_analysis_pending",
"state": "reading",
"retryable": true,
"retryAfterSeconds": 5,
"recoverWith": ["get_reference_regions"]
}
}The tools that answer this way are get_reference_regions,
get_reference_region, submit_region_semantics,
list_unresolved_reference_questions, diff_vs_reference,
restore_reference_sections, propose_reference_blueprint and
prepare_chart_review.
- Wait
retryAfterSeconds, then call the same tool again. Nothing was changed, so the retry is safe. reference_analysis_failed(withretryable: false) means the plan could not be read. Tell the person, and suggest uploading a clearer image or removing the plan. Don’t loop on it.- HTTP callers get the same code in a
409response, with aRetry-Afterheader while the plan is being read.
Human review gate
Before approval, verify:
- every floor and buyer scene is present;
- source overlays/diffs match the intended geometry;
- labels, capacity, accessibility, categories, and prices are authoritative;
- no private reference appears in buyer output;
- mobile and desktop interactions are readable;
- the revision hash still matches the prepared packet; and
- the reviewer understands the effect on new and existing events.
Definition of done
- OAuth scope is the intended chart or workspace, and only the boxes the job needs are ticked.
- Source classification and required tiles are complete.
- All inventory facts are confirmed.
- Deterministic validation passes on every floor.
- Buyer 2D/3D and mobile/desktop evidence is reviewed.
- Approval is attached to the exact unchanged revision.
- Publication is an explicit human-authorized action.
- The handoff records assumptions, open questions, and the published version.
Continue with reference plan import, sections and seat plans, or publishing and versioning.