Skip to main content
Glama
accessoticketing-mcp

accessoticketing-mcp

by chrischall

accessoticketing-mcp

CI npm

An MCP server for accesso Passport mobile ticket links — the URL a venue emails you after a purchase. Reads the order and every admission on it, the scannable barcodes, and Google Wallet save links.

accesso powers ticketing for a lot of theme parks, water parks, camps, museums and festivals, so one server covers all of them: the merchant is encoded in the link.

Developed and maintained by AI (Claude Code). Use at your own discretion.

What it needs

No login. These links carry their own credential — the oToken in the query string is what authorises the read. There is no account, no password, no browser session, and no bot wall.

WARNING

That also meansthe link is a secret. Anyone holding it can view and add the order's tickets. Treat it like a password: don't paste it into issues, logs or chats. This server redacts the tokens from its own output and error messages.

Related MCP server: tokenless-zendesk-mcp

Install

npx -y @chrischall/accessoticketing-mcp
// claude_desktop_config.json / .mcp.json
{
  "mcpServers": {
    "accessoticketing": {
      "command": "npx",
      "args": ["-y", "@chrischall/accessoticketing-mcp"],
      "env": { "ACCESSO_TICKET_URL": "https://media-engine.na3.accessoticketing.com/tickets/v1/..." }
    }
  }
}

ACCESSO_TICKET_URL is optional — it just saves passing url on every call. The server starts fine without it and reports the missing link on first use.

Variable

Required

Purpose

ACCESSO_TICKET_URL

no

Default ticket link, used when a tool is called without url.

ACCESSO_OUTPUT_DIR

no

Where accesso_save_barcodes writes PNGs. Defaults to cwd, or ~/Downloads when cwd is / (Claude Desktop).

ACCESSO_NO_FILE_OUTPUT

no

Set to 1 where the filesystem isn't the user's so barcodes return inline. Not needed on mcp-host: a hosted deployment (MCP_DATA_DIR / MCP_BLOB_BASE_URL set) is detected and never writes to disk.

Tools

Tool

Does

accesso_get_order

The order and every admission: product, participant, date, start time, instructions. Returns the slim per-ticket list by default; view: "full" for every parsed field.

accesso_get_ticket

One admission in full, by index.

accesso_save_barcodes

Locally, writes barcode PNGs and returns paths. Hosted, returns the images inline (with a download link for any past the size cap), or one expiring download link per barcode with inline: false. inline: true inlines anywhere.

accesso_get_wallet_passes

Google Wallet save links for the tickets.

accesso_resolve_link

Unwraps an email click-tracking link to the accesso URL it hides.

accesso_healthcheck

Confirms reachability and whether a default link is configured.

Nothing here mutates an order. Every tool is read-only except accesso_save_barcodes, which writes PNG files to disk (never overwriting one) on a local install, or to the host's blob store behind a signed, expiring link when hosted, unless asked for inline images.

> what do we have booked tomorrow?
9:00 AM   Tiny Trekkers Full-Day (Ages 4-7)   — one participant
9:00 AM   Whitewater Kayak Camp I: Intro      — two participants
all-day   Lunch / Snack / Early Drop-Off      — nine more admissions

Upgrading

next release

accesso_save_barcodes no longer writes to the server's disk on a hosted deployment (mcp-host). Local installs are unchanged: same files, same { outputDir, saved: [{ index, participant, packageName, path }] } result.

  • Hosted, inline: false (or a server with a writable disk AND a blob store, called without inline): returns { order, note, saved: [{ index, participant, packageName, barcodeText, url, expiresAt }] } — one signed download link per barcode, expiring at expiresAt. There is no outputDir and no path. Previously a hosted server without ACCESSO_NO_FILE_OUTPUT wrote the PNGs to the runner's disk and returned paths nobody could open.

  • Inline results (returned, tickets, …) gain linked: [{ …, url, expiresAt }] and linkNote when a blob store is available: barcodes past the inline size cap now come back as links instead of being dropped, so omittedForSize / omittedIndexes only appear when there is no blob store. With no blob store and inline: false (nowhere to save), the inline result carries a note saying so.

  • When not a single barcode fits the inline cap and there is no link or disk route, the tool now fails with a too_large error instead of returning an empty image list.

  • On a hosted deployment ACCESSO_NO_FILE_OUTPUT is no longer needed, and accesso_healthcheck reports filesPersist: false there.

Shell-out skill

Prefer a shell? skills/accesso-tickets/ does the same reading with curl and a dependency-free parser, no server required. It ships with the package.

Notes on the data

  • date / time are the merchant's local wall-clock strings with no timezone attached. They are passed through verbatim rather than converted.

  • Merchant-specific detail rows (Guest Number, Web Sales ID, …) are harvested generically into details, so a venue this was never tested against still works.

  • An expired link returns HTTP 200, not an error status — the server detects the body and says the link is expired rather than reporting zero tickets.

Development

npm install
npm run build
npm test
npm run test:coverage   # 100% thresholds, enforced in CI

See docs/ACCESSO-API.md for the captured request/response shapes and CLAUDE.md for repo conventions.

License

MIT

Available Tools

6 tools
accesso_get_orderA
Read-only

Read an accesso ticket link: the order number and every admission on it — product, participant, date, start time, barcode text, and the merchant instructions. Covers any accesso-powered venue (theme parks, camps, festivals). Needs no login; the emailed link is the credential.

Inputs: url, view, include_terms.

accesso_get_ticketA
Read-only

One admission from an accesso order in full detail, including the merchant instructions and (on request) the terms. Identify it by its index from accesso_get_order.

Inputs: index (required), url, include_terms.

accesso_get_wallet_passesA
Read-only

Google Wallet save links for the tickets on an accesso order. Open one on a phone to add that ticket to Google Wallet. Not every merchant enables passes.

Inputs: url, indexes.

accesso_healthcheckA
Read-only

Check that this server can reach accesso and whether a default ticket link is configured.

Inputs: url.

accesso_save_barcodesA

Save the scannable barcode images from an accesso order. Run locally, writes PNGs and returns their paths. Run remotely (hosted), returns the images inline by default, with a download link for any past the size cap; set inline to false for one expiring download link per barcode instead. Set inline to true to receive the images directly in any deployment.

Inputs: url, inline, indexes.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.1/5.0

    Scored across 6 tools

    Disambiguation4/5

    The tools mostly target distinct actions: order summary, single-ticket detail, barcode saving, wallet passes, link resolution, and health checking. `accesso_get_order` and `accesso_get_ticket` have some conceptual overlap, but the latter is clearly scoped to one admission identified by index.

    Naming Consistency4/5

    Almost all tools use the `accesso_verb_noun` pattern (`get_order`, `get_ticket`, `save_barcodes`, `resolve_link`). `accesso_healthcheck` is a minor deviation because it is a noun rather than a verb_noun name.

    Tool Count5/5

    Six tools is well-scoped for a focused ticket-link access server. Each tool covers a distinct operation without obvious redundancy.

    Completeness5/5

    The surface covers the core read-only workflow: resolving links, reading order and ticket details, saving barcode images, obtaining wallet passes, and checking connectivity. No obvious lifecycle gaps exist for this domain.

    Maintenance

    ActivityActive
    ResponsivenessUsually handled

    Related MCP Connectors

    Related MCP Servers