flashpass-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@flashpass-mcp Create a draft manifest MMTJ → KSAN Dec 1 at 0900, me pilot, Ana pax"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
flashpass-mcp
An unofficial MCP server for FlashPass, the eAPIS / border-crossing manifest service for US and Mexico flights.
Through it, an AI assistant such as Claude can read your FlashPass address book, add passengers, and create or change manifest drafts. Submitting to CBP stays a deliberate manual step on flashpass.net.
Not affiliated with or endorsed by FlashPass / Lobo Labs. It drives the regular web app with your own account, the same way you would in a browser.
Tools
Tool | What it does | Writes? |
| List saved persons (pilots, crew, passengers) with ids. Optional name filter. | – |
| All fields of a person, including travel documents. | – |
| Add a person to the address book. | ✔ |
| Change only the fields you pass. | ✔ |
| Aircraft with ids. | – |
| Change model, color, call sign, CBP decal, operator, owner. | ✔ |
| Manifests with route, leg, status, arrival date. | – |
| Flight fields and occupants. | – |
| New manifest with occupants. Saved, not submitted. | ✔ |
| Change aircraft, times or airports; add or remove occupants. Saved, not submitted. | ✔ |
On purpose, there is no submit-to-CBP tool and no delete tool.
Field names are FlashPass's own form fields (FirstName, DepartureAirport, ArrivalTime…). Dropdowns accept human values ("Mexico", "Passport", a tail number, a person's name), and the server maps them to FlashPass's internal option ids. Dates use MM/DD/YYYY and times use local HHMM.
Example prompts:
"Add my friend Ana López, born 03/14/1988 in Monterrey, Mexican passport G1234567 expiring 05/2031."
"Create a draft manifest MMTJ → KSAN on Dec 1 at 0900 local, arriving 0945, with me as pilot and Ana as pax, using my Home address."
"Push the Dec 1 manifest departure to 1100 and remove Ana."
Related MCP server: @striderlabs/mcp-alaska
Setup
Requirements:
Node.js 23.6+, which runs the
.tsfile directly with no build step.Google Chrome installed. It is used headless, only to log in.
git clone https://github.com/arturodz/flashpass-mcp.git
cd flashpass-mcp
npm install
cp .env.example .env # then fill in your FlashPass username and passwordClaude Code
claude mcp add flashpass --scope user -- node /absolute/path/to/flashpass-mcp/server.tsClaude Desktop / other MCP clients
{
"mcpServers": {
"flashpass": {
"command": "node",
"args": ["/absolute/path/to/flashpass-mcp/server.ts"],
"env": { "FLASHPASS_USER": "you@example.com", "FLASHPASS_PASS": "…" }
}
}
}Credentials come from environment variables first, then from .env next to server.ts. The session cookie is cached in auth/cookie.txt with mode 600. Both .env and auth/ are git-ignored.
Smoke test
npm run smoke # list tools
npm run smoke -- list_manifests # call a read-only tool
npm run smoke -- get_person '{"id":"123456"}'How it works
FlashPass is built on the PRADO PHP framework. It has no JSON API. Every page is server-rendered, and every action is a postback: a POST to the same URL carrying all form fields, the hidden PRADO_PAGESTATE, and PRADO_POSTBACK_TARGET (the control that was "clicked"). This server maps each MCP tool to those request patterns and makes them with plain fetch. The only cookie it needs is the session's PHPSESSID.
Tool | Requests ( |
login | Headless Chrome: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Details:
Login uses a real browser because the login form is protected by Cloudflare Turnstile. The check passes normally for a real Chrome; nothing is bypassed. After login everything is plain HTTP. If the session expires, the server logs in again once and retries.
Each postback chains page state. The server serializes the form the way a browser would: no buttons, only checked radios and checkboxes, the selected option of each dropdown. It applies your changes and posts. Each
AddOccupantresponse carries the newPRADO_PAGESTATE, which the next request uses.Success is detected by navigation. A successful Save navigates away from the Add/Edit page. If the page stays, the server returns FlashPass's visible validator messages. One example: "Emergency Contact can't be on the flight."
Requests run one at a time (a single global queue) to keep load on flashpass.net minimal.
For the FlashPass team
This was built as a pilot's convenience tool and is shared with you openly. A few things would make an integration like this sturdier, and kinder to your servers:
A small authenticated JSON API, or even just per-user API tokens. That would remove the need for a headless browser at login and for scraping HTML tables.
Stable ids on grid rows and validators. Today rows are matched by link URLs (
&id=) and Remove buttons by generated control ids (DataGrid_ctl2_ctl4).An explicit "draft" vs "ready to submit" status. Saved, unsubmitted manifests currently show as
Ready.
If you'd prefer this didn't exist, or want changes to how it talks to FlashPass, open an issue and it'll be handled promptly.
License
MIT
Available Tools
10 toolscreate_manifest_draftA
Create a new manifest as a DRAFT (saved, NOT submitted to CBP/eAPIS). Submitting stays a manual step on flashpass.net.
Inputs: fields (required), occupants (required).
create_personB
Add a new person (passenger/crew) to the FlashPass address book.
Inputs: fields (required).
get_manifestBRead-only
Get a manifest: flight fields and occupants (name, duty, US address).
Inputs: id (required).
get_personBRead-only
Get all fields of a saved person, including travel documents.
Inputs: id (required).
list_aircraftCRead-only
List aircraft with ids.
Inputs: no named parameters.
list_manifestsARead-only
List manifests with id, aircraft, route, leg, status and arrival date.
Inputs: no named parameters.
list_personsBRead-only
List saved persons (passengers/crew) with their ids.
Inputs: search.
update_aircraftC
Change aircraft fields (Model, Color, CallSign, DecalNumber, Operator, Owner).
Inputs: id (required), fields (required).
update_manifestA
Change a manifest: flight fields (aircraft, times, airports…), add and/or remove occupants. Saves only; never submits to CBP. If the manifest was already submitted, it must be re-submitted manually.
Inputs: id (required), fields, add_occupants, remove_occupants.
update_personB
Change fields of an existing person. Only the fields you pass are changed.
Inputs: id (required), fields (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Each tool targets a distinct resource+action pair across three clear resource groups (persons, aircraft, manifests), so an agent can pick the right one in most cases. The only soft boundary is between create_manifest_draft and update_manifest, which both touch flight fields and occupants; the descriptions clarify that one creates a new draft and the other mutates an existing manifest, but the split is not as crisp as the rest.
Every tool follows the same snake_case verb_resource pattern (list_persons, get_person, create_person, update_person, list_aircraft, update_aircraft, list_manifests, get_manifest, update_manifest). The only qualifier is the descriptive _draft suffix on create_manifest_draft, which stays within the convention and aids readability.
Ten tools is well-scoped for a domain with three resource types, and each tool maps to a real operation (list/get/create/update) rather than padding. Nothing looks redundant or missing purely for count reasons.
Persons have near-full CRUD but no delete; aircraft only support list and update (no create or get), and manifests lack any delete operation. Submission to CBP/eAPIS is explicitly left as a manual web step, which is a deliberate boundary but still means an agent asking to 'submit a manifest' hits a dead end.
Maintenance
Related MCP Connectors
Read and update your Everway trips and itineraries from any MCP-compatible AI assistant.
MCPs that do tasks on any website. Search flights, book, shop, check accounts and fill in forms.
Connect your First AI Employee workspace to review authorized business records, including contacts, tasks, calls, bookings, forms and reports. Prepare supported changes as an exact preview for approval before applying them. OAuth sign-in is required; available tools depend on account permissions, enabled products and access. Website: https://firstaiemployee.com/ . Setup: https://developer.firstaiemployee.com/mcp/
Read, AI-create, and edit your Gisti checklists in plain language from any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides AI assistants with real-time aircraft tracking, FAA registration, and OpenSky flight data through the Model Context Protocol.1MIT
- AlicenseAqualityDmaintenanceMCP server enabling AI assistants to interact with Alaska Airlines services via browser automation, including flight search, booking management, check-in, and mileage plan access.1211 npmMIT
- AlicenseBqualityDmaintenanceEnables AI assistants to query flight routes, real-time flight tracking, weather, and transfer flights via standardized MCP tools.10MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to query and act on SAP CAP travel domain data (travels, bookings, customers, agencies) via MCP tools, including unbound actions and security-aware access.-