SceneF

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.