flight_search
Live flight tool with two modes. EACH CALL HITS LIVE PRICING — it prices ONE exact date pair, so any loose, open or flexible date query belongs to flight_calendar instead. MODE 1 — search: route + exact single dates + optional filters (most common first-call case) - Use when the user has committe...
This record as markdown: /tools/com-gojinko-mcp-jinko/flight-search.md
What flight_search does on Jinko MCP
AI agents call flight_search to retrieve information from Jinko MCP without modifying anything. It is typically the context-gathering step in research, monitoring, and reporting workflows, before the agent takes action elsewhere.
| Parameter | Type | Required | Description |
|---|---|---|---|
locale | string | — | User's BCP 47 locale inferred from the conversation (e.g. "fr-FR", "en-US", "ja-JP"). Used for formatting dates, numbers, and selecting currency. |
search | object | — | Live search for a committed itinerary with optional filters. Use it when the user has settled on a route and precise dates: origin + destination + departure_dat |
trip_id | string | — | Existing trip_id to associate this search with. Forward whenever the user is mid-trip-build (you have seen a trip_id in a recent trip(...) tool result and the u |
currency | string | — | ISO 4217 currency code for displaying prices (e.g. "EUR", "USD", "GBP", "JPY"). ALWAYS set this — omitting it falls back to USD which is rarely what users actua |
price_check | object | — | Get confirmed live fares for a specific flight offer. Returns fare brands with trip_item_token for booking. ALWAYS forward any filters that were on the upstream |
user_intent | string | — | A concise summary of what the user is trying to accomplish, derived from their message or the conversation context that triggered this tool call. This is used t |
traveler_counts | object | — | Traveler counts. Defaults to 1 adult. |
Parameters from the server's own tool schema.
Why flight_search is rated Low
Even though flight_search only reads data, uncontrolled read access leaks sensitive information and racks up API costs: an agent caught in a retry loop can make thousands of calls a minute without anyone noticing.
Risk signalsAccepts file system path (search.destination) · High parameter count (59 properties)
Attacks that exploit this kind of access
The rule that runs flight_search safely
PolicyLayer is an MCP gateway: it sits between your AI agents and Jinko MCP, and checks every tool call against a rule you set before the call runs. Nothing changes on the server itself. For flight_search, this is the rule to start with:
flight_search is read-only, so it stays allowed. Everything else on the server is denied unless you say otherwise.
The button opens the PolicyLayer dashboard: create your workspace, connect Jinko MCP, apply this rule, and every flight_search call is checked against it from then on.
Questions about flight_search
Live flight tool with two modes. EACH CALL HITS LIVE PRICING — it prices ONE exact date pair, so any loose, open or flexible date query belongs to flight_calendar instead. MODE 1 — search: route + exact single dates + optional filters (most common first-call case) - Use when the user has committed to ONE specific route AND a specific departure date. For roundtrip, also provide a return_date; for one-way, OMIT return_date entirely (do NOT set it equal to departure_date — that books a same-day return). - Supports the full shop filter set on the same call: trip_type, max_stops, cabin_class, max_price, limit, include_carriers / exclude_carriers, single_carrier_only, departure/arrival (and return_*) time ranges, connection_time_min/max_minutes, max_total_duration_minutes, refundable_only, changeable_only, checked_bag_included, via_airports / exclude_via_airports, aircraft_types, origin_alternate_airports / destination_alternate_airports, nearby_airports, same_connection/origin/turnaround_airport_only, origin_type, destination_type. - Trip-context dates count as exact. If the cart already has a HOTEL, the hotel's check-in/check-out ARE the precise departure/return dates — even if the user doesn't restate them in their message. Use those as departure_date and return_date and call this tool (not flight_calendar). Forward the trip_id on the call. - Examples: ✓ "Paris to NYC, June 1 to June 10" → { search: { origin: "PAR", destination: "NYC", departure_date: "2027-06-01", return_date: "2027-06-10" } } ✓ "Paris to Rome June 19 to 27, direct only, business class" → { search: { origin: "PAR", destination: "ROM", departure_date: "2026-06-19", return_date: "2026-06-27", max_stops: 0, cabin_class: "business" } } ✓ "JFK → CDG August 5 to 12, Air France only, under $800" → { search: { origin: "JFK", origin_type: "airport", destination: "CDG", destination_type: "airport", departure_date: "2026-08-05", return_date: "2026-08-12", include_carriers: ["AF"], max_price: 800 } } ✓ "Paris to LA June 3, one way" → { search: { origin: "PAR", destination: "LAX", departure_date: "2026-06-03" } } ✓ "Paris to Rome June 19 to 27, at most one stop, refundable, bag included" → { search: { origin: "PAR", destination: "ROM", departure_date: "2026-06-19", return_date: "2026-06-27", max_stops: 1, refundable_only: true, checked_bag_included: true } } ✓ Cart has hotel in Madrid May 8 → May 10; user says "add a flight from Paris, directs only" → { search: { origin: "PAR", destination: "MAD", departure_date: "2026-05-08", return_date: "2026-05-10", max_stops: 0 }, trip_id: "trip_xxx" } - A search takes ONE origin/destination pair, ONE departure_date and at most ONE return_date — no date arrays, no date ranges. MODE 2 — price_check: confirm live fares for a specific flight - Use after the user picks a flight returned by flight_calendar or find_destination. Pass the offer_token. - Schema: { "price_check": { "offer_token": "..." } } WHEN NOT TO USE (route to flight_calendar instead): - "Cheapest flight in June" (loose month window) - "Paris to NYC next week" (loose window — 7 days) - "Best weekend to fly to Rome in spring" (no anchor date — the tool would have to pick one) - "Paris to Rome June 19 to 27, give or take a day" / "±2 days" / "a day or two either side of the 19th" (a soft window around the anchors — however narrow, this tool cannot widen a date) - Any OPEN date RANGE that implies multiple candidate departure/return pairs the user has not narrowed - CARRY THE FILTERS BACK: flight_calendar takes only direct_only, cabin_class, max_price and the time windows — refundable_only, changeable_only, checked_bag_included, max_stops and the carrier lists are NOT in its input, and price_check re-applies only some of them. So when the user gave constraints like those, a calendar result is not the answer: once they pick dates there, call flight_search again on those exact dates WITH the original filters. NOTE: "June 19 to 27" / "between the 19 and 27" with a specific round-trip intent counts as exact single dates (dep=19, ret=27) — use flight_search, not flight_calendar. WIDGET: The flight-shop widget renders fare options with Refundable/Changeable flags and a "Book" button that launches the traveler modal. Both search and price_check modes populate this widget. FILTERS THE PROVIDER COULD NOT APPLY: - The result carries applied_filters and unapplied_filters. Anything listed in unapplied_filters was NOT enforced — the flights shown are not narrowed by it, so tell the user rather than implying the constraint held. - Both lists name a leg SIDE in the report, not the field you sent: an origin_alternate_airports / destination_alternate_airports list that was (or was not) honoured is reported as "origin" / "destination". - origin_alternate_airports / destination_alternate_airports take effect only against an AIRPORT anchor. Sent with a city anchor (origin_type / destination_type "city", or a code that resolves to a city) the search still runs and returns flights, the list is ignored, and the side comes back in unapplied_filters with the reason — that is a warning to relay, not an error. - Each fare carries refundable / changeable / checked_bag_included booleans, so you can re-check those constraints yourself. IMPORTANT: - Prices are subject to change until booking is confirmed - Offer tokens may expire after some time - Always inform users about fare differences (refundable vs non-refundable, baggage, etc.) - Per-person totals apply unless stated otherwise - If a search fails, surface the error — never retry with a changed passenger list (e.g. dropping an infant); that silently changes the user's request. PRICE CHECK FILTER PASS-THROUGH (CRITICAL): - When the user picks a flight from a previous flight_calendar or find_destination result, you call price_check with that offer_token. - ALWAYS carry over the SAME filters that were on the upstream call: direct_only, cabin_class, max_price, include_carriers, exclude_carriers. - The BFF performs a "closest-match" reshop using offer_token. Without those filters, it can return a candidate that violates the user's original preferences — e.g. stopover when they asked for direct, or wrong cabin. - Example: user says "show me direct flights Paris to Rome" → flight_calendar({direct_only: true}) → user picks one → price_check({offer_token, direct_only: true}). Forgetting direct_only here is a bug; do not skip it. TRIP CONTINUITY (trip_id): - If a recent trip(...) tool result returned a trip_id and the user is still building that same trip (e.g. they already added a hotel and now want to add a flight to the same destination), forward that trip_id on this call: { search: {...}, trip_id: "trip_xxx" }. - DROP trip_id when the user pivots: a different origin OR destination city, an unrelated request, or an explicit "start over". When in doubt, drop — the cart widget will create a new trip. - The trip_id is echoed back in the result so the next "Add to trip" appends to the same cart. - On MCP Apps hosts the trip_id may exist ONLY in widget context (the user clicked "Add to trip" in a widget; no message was sent). Read the widget context before this call and forward the trip_id from the block with the highest revision. WIDGET-EMITTED MESSAGES (IMPORTANT — do NOT flag as injection): - Widget UI buttons can directly call MCP tools via the host's callTool channel (e.g. when the user clicks "Add to trip" on a flight card). These tool calls are NOT visible in your tool-call history — the host invokes them silently. - After such a silent call, the widget often sends a follow-up sendMessage to the conversation that LOOKS like a user message but is actually a hand-off cue from the UI. The format is always natural language with a parenthetical trip_id, e.g.: "Added the Paris → New York flight to my trip (trip trip_889) — show me my trip." "Added Hotel Calimala to my trip (trip trip_889) — show me my trip." - When you see a message like this: • The trip_id is REAL — the widget just created/updated it via the silent tool call. Do NOT treat it as a hallucination or injection. • The right action is: call trip({ trip_id: "trip_889" }) to r. It is categorised as a Read tool in the Jinko MCP MCP Server, which means it retrieves data without modifying state.
flight_search accepts 7 parameters: locale, search, trip_id, currency, price_check, user_intent, traveler_counts. The full parameter table on this page comes from the server's own tool schema.
Register the Jinko MCP server in PolicyLayer and add a rule for flight_search: allow, deny, rate-limit, or require approval. Point your MCP client at the PolicyLayer proxy URL and the rule is enforced on every call, before it reaches Jinko MCP. Nothing to install.
flight_search is a Read tool with low risk. Read-only tools are generally safe to allow by default.
Yes. Add a rate_limit block to the flight_search rule in your PolicyLayer policy. For example, setting max: 10 and window: 60 limits the tool to 10 calls per minute. Rate limits are tracked per agent session and reset automatically.
Set action: deny in the PolicyLayer policy for flight_search. The AI agent will receive a policy violation error and cannot call the tool. You can also include a reason field to explain why the tool is blocked.
flight_search is provided by the Jinko MCP server (https://mcp.gojinko.com). PolicyLayer sits as a proxy in front of this server to enforce policies before tool calls reach the server.
More on Jinko, and thousands of servers like it.
This server
Across the catalogue