Skip to content

SeatLayer MCP

What the SeatLayer MCP server covers, every tool grouped by area, the OAuth boundary, and the staged workflow for building a chart.

Updated View as Markdown

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/mcp

Then 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 resource parameter 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

designer-agent-prompt.txttext
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 expectedUpdatedAt on 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 (with retryable: 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 409 response, with a Retry-After header while the plan is being read.

Human review gate

Before approval, verify:

  1. every floor and buyer scene is present;
  2. source overlays/diffs match the intended geometry;
  3. labels, capacity, accessibility, categories, and prices are authoritative;
  4. no private reference appears in buyer output;
  5. mobile and desktop interactions are readable;
  6. the revision hash still matches the prepared packet; and
  7. 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.

Navigation

Type to search…

↑↓ navigate↵ selectEsc close