For agents
Built to be called, not just browsed.
SceneF is movie showtimes across 56 regions of California, Florida and Hawaii— chains, indies, and repertory houses — verified against each theater’s own calendar and served in whatever shape your caller speaks: MCP tools, plain JSON, stable URLs, or calendar feeds. Same dataset everywhere. If you can fetch, you can book a movie night.
In ChatGPT
The same listings as a ready-made GPT — ask it what’s playing and it answers from the live board, ticket links included: SceneF — Movie Showtimes in the GPT store.
The MCP server
Registry com.scenef/showtimes (official MCP registry) URL https://scenef.com/mcp Transport Streamable HTTP
- scenef_whats_playing
- Everything on tonight, or any night, grouped by venue.
- scenef_search_showtimes
- Filter by film, venue, night, format, or time window.
- scenef_theater_info
- One venue: address, discounts, amenities, ticketing notes.
- scenef_film_details
- One film: runtime, credits, trailer, and where it plays.
- scenef_plan_movie_night
- Ranked picks against a preference profile, with reasons.
- scenef_discounts
- Every standing discount in the city, by venue and day.
- scenef_coming_soon
- What enters the calendar over the coming weeks.
- scenef_now
- The dataset heartbeat: generated-at, counts, source health.
- scenef_accuracy
- The verification record as numbers you can quote, failures included.
- scenef_resolve_board
- A city, ZIP, neighborhood or alias to the board that covers it — or a refusal that says which kind of no.
In Claude
Listed in Claude’s connector directory, which is the short way in: find SceneF there and add it in one step.
https://claude.ai/directory/scenef
Or connect the same server by hand: Settings → Connectors → Add custom connector, and paste the URL. There is nothing to authorise: it is public, read-only, and every tool is annotated as such, so Claude runs a showtime lookup without asking permission each time.
https://scenef.com/mcp
Three things worth asking it:
What's playing at the Roxie tonight? Plan me a movie night Friday — 35mm, nothing before 7pm. Which theaters in San Francisco have a cheap night this week?
Answers are grounded in the board and carry their own provenance: ask for the confidence on a showtime and it will tell you which system reported it and when it was last checked.
The URL grammar
Every page is a stable, guessable URL. Fetch it as a human or a machine; the address means the same thing.
https://scenef.com/ tonight, every screen https://scenef.com/week the next seven nights https://scenef.com/film/design-for-living-1933 one film, everywhere it plays https://scenef.com/theaters every venue: discounts, amenities https://scenef.com/go/8abd241fcafb ticket redirect for a screening id
Ticket links are always /go/<screeningId> — never a raw vendor URL — so a link that worked yesterday still resolves after a theater reshuffles its box office.
Bring your own profile
Append preferences to any listing URL or API call. Preferences rank; they never hide — a ranked-down show is still on the page.
- likes
- Genres to favor, comma-separated. likes=horror,thriller
- no
- Genres to avoid. no=matinee is also read as a time rule.
- window
- One of matinee, early, evening, late.
- home
- Venue ids to nudge upward. home=roxie,balboa
- formats
- Screening tags to favor. formats=35mm,70mm,imax
- discounts
- discounts=only keeps shows with a standing discount. It is the one profile param that filters rather than ranks, so any other value is a 400.
A worked example:
https://scenef.com/week?likes=horror,thriller&no=matinee&window=late&home=roxie,balboa&formats=35mm
A parameter this feed cannot honor is reported, never ignored. The two halves differ: a DATA parameter (venue, night, film, when, region, compact, discounts) that carries an unusable value returns 400 with nothing applied, because the answer would be the wrong shape. A RANKING parameter (likes, no, window, home, formats) is named in profile.ignored[] and the board is still served, because a profile never hides a showtime and refusing a correct answer over its order would be its own dishonesty.
The APIs
All GET, all CORS-open, no keys. Every JSON payload carries data_as_of, canonical scenef.com URLs, and the attribution line “Showtimes via SceneF.com”.
/api/listings — The whole board as JSON. Accepts the same profile params.
curl -s "https://scenef.com/api/listings?likes=horror&window=late"
/api/listings → notable — Tonight's scarcity facts with evidence — measured seat counts, final nights, lone prints, posted discounts, live elements. Facts, never taste; lead with them for what-to-see-tonight.
curl -s "https://scenef.com/api/listings?when=tonight&compact=1" | jq .notable
/ask — One natural-language question, one grounded JSON answer. Check understood first: false means nothing in the question was recognised and results[] is the default board, not an answer. warnings[] says what could not be honored; interpreted.matched and interpreted.ignored name the terms that did and did not produce a filter.
curl -s "https://scenef.com/ask?q=what+is+in+the+Mission+tonight" | jq '{understood, warnings, interpreted}'/api/listings → region — Explicit only, never geo-guessed, so the same request always answers the same way. Omit it for San Francisco — which is what every caller predating the parameter receives. Accepted values are the 56 lit regions; anything else is a 400 carrying the valid list.
curl -s "https://scenef.com/api/listings?region=sf&when=tonight&compact=1" | jq .counts
/api/changes — What changed since a timestamp: added, moved, gone.
curl -s "https://scenef.com/api/changes?since=2026-08-01"
/api/accuracy — Our own verification record: checks run, checks failed, pass rate.
curl -s "https://scenef.com/api/accuracy"
/openapi.json — The machine-readable contract for everything above.
curl -s "https://scenef.com/openapi.json"
/api/evals — Our own graded answers, in public, so you can score us.
curl -s "https://scenef.com/api/evals"
Accuracy, provable
Accuracy is the product, so it is computed and published rather than asserted. Every screening carries how well it is known and where it came from. Every verification run we make is counted in public — including the ones that failed, and the ones that never got to run.
- venue-published
- Read from the theater's own ticketing system, published feed, or public calendar.
- corroborated
- Two independent sources report the same showtime.
- single-source
- One licensed aggregator reports it and nothing contradicts it.
- disputed
- Sources disagree about this showtime. It is published with the disagreement attached.
Every screening in /api/listings carries:
confidence venue-published | corroborated | single-source | disputed source_tier venue-api | public-feed | verified-scrape | licensed-feed sources every source that reported this exact showtime verified_at ISO time this listing last passed a check note present only when sources disagree
And the record itself — site-wide and per venue, computed per request and held five minutes at the edge:
curl -s "https://scenef.com/api/accuracy"
A check that could not run — a bot wall, a client-rendered page, a network failure — is graded unreachable and kept out of the pass rate. It is not evidence either way, and counting it as a pass would be the exact overclaim the record exists to prevent. The pass rate is confirmed over confirmed-plus-missing, and it reads null rather than a hundred percent when nothing gradeable has run.
The seam we will not paper over: chain showtimes — AMC, Regal, Apple Cinemas — are licensed from an aggregator rather than read from the theater, because those houses challenge every machine that asks them directly. They are labeled licensed-feed, they carry the weakest claim on this site, and the chain’s own box office is the last word on a same-day change.
Calendar feeds
Live .ics for anything worth subscribing to. Swap https:// for webcal:// to subscribe in a calendar app instead of downloading a file.
https://scenef.com/feeds/screening/8abd241fcafb one show, one VEVENT https://scenef.com/feeds/theater/roxie that house's next 14 nights https://scenef.com/feeds/genre/horror a genre, every screen, 14 nights
The widget
Tonight’s board on any site: one dependency-free script tag that renders the listings, links films back here, and adds ScreeningEvent structured data to the host page. Configure it at scenef.com/widget.
<script async src="https://scenef.com/widget.js" data-venue="roxie"></script>
One rule: the “Listings by SceneF” credit the widget renders is structural — embeds keep it visible.
The integrity line
Ranking is payout-blind. Ticket links go to the box office that actually sells that show — the theater’s own site almost everywhere; a named ticketing partner where the theater has no bookable page of its own (the exceptions and reasons are public in our methodology). No ticket link pays SceneF anything today: no affiliate program is live, and every link goes to the vendor unwrapped. If that changes, this line changes with it — the programs are named on /status before the first wrapped link ships, and what appears on the board, and where, is never for sale either way.None of them buy a place on the board: what appears, and where, is settled before any payout is known — a screening rises because it fits the profile, never because anyone paid. Your reader’s price never changes.
The dataset regenerates daily with rolling verification through the day, and every payload tells you exactly how old it is. Per-venue health, last verified times, and source tiers are public on the status board; the method behind them is on the methodology page.
Building on this surface, hit a contract gap, or want a firmer SLA? Write the desk: info@scenef.com.
