# Jinko MCP (remote · mcp.gojinko.com)

Turn your ChatGPT to a super travel agent

- Trust score: 68/100 (medium)
- Change this week: +4
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-04

## Components

- remote · `mcp.gojinko.com`: 68/100 (this document), [markdown](https://verifymcp.io/servers/com-gojinko-mcp-jinko/mcp.md), [page](https://verifymcp.io/servers/com-gojinko-mcp-jinko/mcp)

## Channel facts

- Endpoint: `https://mcp.gojinko.com`
- Transports: `streamable-http, sse`
- Auth: `none`
- Version: `0.0.1`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-04.

- **Endpoint Security**: 63/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (trip).
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 66/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 13766 tokens (~983/item across 14 items; 7 tools + 7 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 30/100
  - Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.
  - Supports UI / widget rendering.

## Install

### Claude

```bash
claude mcp add --transport http com-gojinko-mcp-jinko https://mcp.gojinko.com/
```

### Codex

```toml
[mcp_servers.com-gojinko-mcp-jinko]
url = "https://mcp.gojinko.com/"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-gojinko-mcp-jinko": {
      "type": "remote",
      "url": "https://mcp.gojinko.com/",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-gojinko-mcp-jinko --url https://mcp.gojinko.com/ --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-gojinko-mcp-jinko:
    url: "https://mcp.gojinko.com/"
```

### Other

```json
{
  "mcpServers": {
    "com-gojinko-mcp-jinko": {
      "type": "http",
      "url": "https://mcp.gojinko.com/"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-04 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-01 (score 66, −1)

- [functional] Schema quality: excellent → good

### 2026-07-31 (score 67, +2)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 65, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-28 (score 64, +2)

No change was recorded against any check on this day. Schema Quality & AI Usability went from 62 to 66. Other categories moved too: Stability & Change Management rose 4.

### 2026-07-27 (score 62, −1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 63)

First indexed and scored.

## MCP tools (7)

### `flight_calendar` (~2037 tokens)

Search flights between a known origin and destination using cached pricing. Use this tool whenever the user specifies BOTH where they are flying FROM and where they are flying TO.

WHEN TO USE THIS TOOL (CRITICAL):
\- The user provides both an origin AND a destination (city or airport)
\- Examples: "Paris to Barcelona", "JFK to CDG", "London to NYC for a weekend"
\- Supports loose / flexible dates: single dates, date arrays, date ranges, stay_days
\- ALSO the right tool for "cheapest flight", "best flight", "find me a flight", "cheapest date" phrasings — this tool returns the cheapest cached itineraries for the given route and window.

WHEN TO USE find_destination INSTEAD:
\- The user does NOT specify a destination: "Where should I go from Paris?", "Best deals from NYC"
\- The user wants inspiration: "Beach destinations from London", "Cheap flights from SF"

WHEN TO USE flight_search INSTEAD:
\- The user has committed to EXACT dates — both a single departure date AND a single return date for one specific route.
\- Example: "Paris → NYC, June 17 → June 26"
\- flight_search hits live pricing (each call has a cost) and is the step immediately before booking. Use it only once route + both dates are locked in.
\- **TRIP-CONTEXT DATES COUNT AS EXACT.** If a trip is already in context with a HOTEL, the hotel's check-in and check-out ARE the exact departure/return dates the user wants — even if they don't restate the dates in the message. In that case use flight_search (not flight_calendar) with the hotel's check-in as departure_date and check-out as return_date. Examples: cart has hotel May 8 → May 10 in Madrid; user says "add a flight from Paris" → flight_search with PAR→MAD, dep=2026-05-08, ret=2026-05-10. The trip cross-sell hint confirms this — when it points you at flight_search, follow it.

IMPORTANT:
  All dates in query parameters (departure_dates, departure_date_ranges, return_dates, return_date_ranges) MUST be in the future. Never use past dates.
  Please fill as much as…

Input parameters:

- `cabin_class` (string): Cabin class preference. Options: "economy" (standard economy), "premium_economy" (enhanced economy with more space/amenities), "business" (business class), "first" (first class). When specified, only…
- `currency` (string): ISO 4217 currency code for displaying prices (e.g. "EUR", "USD", "GBP"). Infer from the user's country or locale. If the user mentions a specific currency, use that.
- `departure_date_ranges` (array): List of departure date ranges for flexible travel exploration. Use when user says "next month", "spring", or wants to discover deals across multiple date periods with OR logic. Example: [{start: "202…
- `departure_dates` (array): List of specific departure dates in ISO 8601 format (YYYY-MM-DD). Use for searching multiple specific dates with OR logic. Example: ["2025-12-15", "2025-12-16", "2025-12-17"] for flexible date search…
- `destination` (string, required): REQUIRED: Single origin airport IATA code or IATA City Code. Example for IATA airport code : "LGW" for Gatwick in London, "SFO" for San Francisco. Example for IATA city code : "LHR" for London, "BJS"…
- `direct_only` (boolean): Only show direct/nonstop flights. When true, only flights with no stops are returned. Use for fastest travel or when layovers are not desired.
- `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. Infer from the user's language and location context.
- `max_price` (number): Maximum total price per person in specified currency. Helps find flights within budget. Example: 500 means flights up to $500/€500/£500 per person depending on currency.
- `origin` (string, required): REQUIRED: Single origin airport IATA code or IATA City Code. Example for IATA airport code : "JFK" for John F.Kennedy in New York, "LAX" for Los Angeles. Example for IATA city code : "NYC" for New Yo…
- `return_date_ranges` (array): List of return date ranges for flexible round-trip exploration. Use when user wants flexibility on return timing across multiple periods with OR logic. Example: [{start: "2025-12-22", end: "2025-12-2…
- `return_dates` (array): List of specific return dates for round-trip flights (YYYY-MM-DD). Use for searching multiple return date options with OR logic. Must be after departure dates. Example: ["2025-12-22", "2025-12-23", "…
- `sort_by` (string): Sort results by this criteria. Default: lowest (best deals first). Options: lowest (cheapest flights), recommendation (best overall value considering price, duration, and stops).
- `stay_days` (integer): Exact number of days to stay at destination. Used with departure_date to calculate return date automatically. Example: 7 for a week-long trip, 3 for a weekend getaway.
- `stay_days_range` (object): Flexible stay duration range. Use when user wants flexibility in trip length (e.g., "5 to 10 days"). Cannot be combined with exact stay_days or return_date. Example: {min: 5, max: 10}
- `trip_type` (string, required): REQUIRED: Trip type: "oneway" for one-way flights or "roundtrip" for round-trip flights.
- `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 to understand the user's intent and cont…

Output parameters:

- `availableAirlines` (array)
- `destination` (object)
- `emissionsInfo` (object)
- `error_message` (string)
- `flights` (array)
- `hasMore` (boolean)
- `priceRange` (object)
- `searchQuery` (object)
- `status` (string)
- `totalFlights` (number)

### `find_destination` (~2297 tokens)

Discover travel destinations when the user does NOT know where to go. This is a destination EXPLORATION tool.

WHEN TO USE THIS TOOL (CRITICAL):
\- The user does NOT specify a destination: "Where should I go?", "Best deals from NYC"
\- The user wants inspiration based on criteria: "Beach destinations", "Somewhere warm", "Cheap flights from SF"
\- The user wants to compare multiple destination options from their origin
\- The user previously asked for destination recommendations and wants pricing for those options

WHEN NOT TO USE THIS TOOL — USE flight_calendar INSTEAD:
\- The user specifies BOTH an origin AND a destination → use flight_calendar
\- Examples that should use flight_calendar, NOT this tool:
  • "Flights from Paris to Barcelona" → flight_calendar
  • "Find me a flight from JFK to CDG" → flight_calendar
  • "Cheapest flight from LA to Miami in June" → flight_calendar
  • "Paris to BCN for a weekend in April" → flight_calendar
  • "What are the cheapest dates to go to NYC from Paris?" → flight_calendar
\- If the user names a specific city/airport as destination, that means they KNOW where to go → flight_calendar

IMPORTANT - DATES:
  All dates in query parameters (departure_dates, departure_date_ranges, return_dates, return_date_ranges) MUST be in the future. Never use past dates.
  Please fill as much as possible search parameters based on user intent to get best results.

IMPORTANT - RE-CALL THIS TOOL when the user:
\- Asks for a different type of destination (beach, city trip, ski, etc.)
\- Asks for different dates while still exploring
\- The user is already in fullscreen mode in the widget

CORE FUNCTIONALITY:
\- REQUIRED: User's origin location (LLM identifies ALL nearby airports)
\- OPTIONAL: Destination filtering by specific airports/cities OR omit for global discovery mode
\- Destination Discovery Mode: When destinations is omitted/empty, searches ALL destinations globally
\- Flexible dates and stay durations for exploring options
\- Filter by budget, direct f…

Input parameters:

- `cabin_class` (string): Preferred cabin class. Options: "economy", "premium_economy", "business", or "first". Filters results accordingly.
- `currency` (string): ISO 4217 currency code for displaying prices (e.g. "EUR", "USD", "GBP"). Infer from the user's country or locale. If the user mentions a specific currency, use that.
- `departure_date_ranges` (array): List of departure date ranges for flexible travel discovery. Use when the user mentions periods like “next month” or “spring.” Supports multiple non-contiguous ranges (OR logic). Example: [{start: "2…
- `departure_dates` (array): List of specific departure dates in ISO 8601 format (YYYY-MM-DD). Use for searching multiple specific dates with OR logic. Example: ["2025-12-15", "2025-12-16", "2025-12-17"] for flexible date search…
- `destinations` (array): OPTIONAL. Array of destination IATA codes (3-letter uppercase), representing either airports or cities. When a city code is provided, the LLM MUST expand it to include all associated airports. Exampl…
- `direct_only` (boolean): When true, only returns nonstop (direct) flights. Useful for avoiding layovers or minimizing total travel time.
- `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. Infer from the user's language and location context.
- `max_price` (number): Maximum total price per passenger, the currency is user default currency. Filters out results exceeding the limit. Example: 500 = limit of $500/€500/£500 per person.
- `origins` (array, required): REQUIRED. Array of origin IATA codes (3-letter uppercase), representing either airports or cities where the trip starts. The LLM MUST detect and include all relevant nearby airports or city codes bas…
- `return_date_ranges` (array): List of return date ranges for flexible round-trip searches. Supports multiple return windows. Example: [{start: "2025-12-22", end: "2025-12-25"}, {start: "2025-12-29", end: "2026-01-02"}].
- `return_dates` (array): List of specific return dates for round-trip searches (YYYY-MM-DD). Must be after the corresponding departure dates. Supports multiple options (OR logic). Example: ["2025-12-22", "2025-12-23", "2025-…
- `sort_by` (string): Sorting preference for search results. Options: "lowest" (cheapest first, default) or "recommendation" (best overall balance of price, duration, and stops).
- `stay_days` (integer): Exact number of days to stay at the destination. Used with a departure date to automatically compute the return date. Example: 7 = one-week trip; 3 = weekend getaway.
- `stay_days_range` (object): Range of acceptable trip durations for flexible planning (e.g., “5 to 10 days”). Cannot be combined with stay_days or explicit return_date. Example: {min: 5, max: 10}.
- `trip_type` (string, required): REQUIRED. Type of trip: "oneway" for single-leg flights, or "roundtrip" for return flights.
- `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 to understand the user's intent and cont…

Output parameters:

- `availableAirlines` (array)
- `destinations` (array)
- `emissionsInfo` (object)
- `error_message` (string)
- `hasMore` (boolean)
- `origins`
- `priceRange` (object)
- `searchQuery` (object)
- `status` (string)
- `totalDestinations` (number)
- `totalFlights` (number)

### `flight_search` (~2379 tokens)

Live flight tool with two modes. EACH CALL HITS LIVE PRICING — not for loose or flexible date queries (use flight_calendar for those).

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 filters on the same call: direct_only, cabin_class, max_price, include_carriers, exclude_carriers, 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 17 to June 26" → { search: { origin: "PAR", destination: "NYC", departure_date: "2026-06-17", return_date: "2026-06-26" } }
  ✓ "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", direct_only: true, 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" } }
  ✓ 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", direct_only: true }, trip_id: "trip_xxx" }
\- Only ONE departure_date and at most ONE return_date. No arrays, n…

Input parameters:

- `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 actually want. Infer from the strongest sign…
- `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.
- `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 flight_calendar / find_destination cal…
- `search` (object): Live search for a single precise route + date(s) with optional filters (direct_only, cabin_class, max_price, include_carriers, exclude_carriers). Use only when the user has committed to ONE specific…
- `traveler_counts` (object): Traveler counts. Defaults to 1 adult.
- `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 user has NOT pivoted to a different trip…
- `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 to understand the user's intent and cont…

Output parameters:

- `error_code` (string)
- `error_message` (string)
- `flights` (array)
- `hasMore` (boolean)
- `hint` (string)
- `priceRange` (object)
- `quoted_offer`
- `searchQuery` (object)
- `status` (string)
- `totalFlights` (number)

### `hotel_search` (~2908 tokens)

Search live hotel inventory and rates worldwide.

REQUIRED:
\- destination: object — two distinct modes. Mode A (rate lookup): { hotel_name (+ optional country_code, city_name) } or { hotel_ids }. Mode B (hotel search): { query }, { city_name + country_code }, { latitude + longitude (+ radius_km) }, or { place_id }.
\- checkin, checkout: YYYY-MM-DD
\- occupancy: either occupancies[] (one entry per room) OR shorthand { adults, children?, rooms? }

TWO MODES — pick deliberately:

MODE A (rate lookup — the user named a specific hotel):
\- { hotel_name }: free-text hotel name ("Hotel Calimala", "The St. Regis Rome", "Hôtel Costes"). Server fuzzy-matches against a 1.74M-hotel catalog. ALWAYS pair with country_code AND city_name when known — lookup precision drops sharply on common names without scope. Returns 422 HOTEL_NAME_LOW_CONFIDENCE if no candidate scores ≥ 0.7; see "ERROR HANDLING" below.
\- { hotel_ids }: re-shop a known set (from a prior search result).
In Mode A: filters are ignored (user named the property), and the response includes nearby_alternatives — up to 5 hotels within ~2km of the matched property in the same response shape so the user can compare.

MODE B (hotel search — the user is exploring a destination):
\- { query }: unambiguous cities or well-known POIs only ("Paris", "Times Square"). Provider AI search returns 0 for islands ("Menorca", "Santorini", "Mykonos"), regions ("Tuscany", "Provence", "Bavaria"), countries, archipelagos. Do NOT use { query } for those.
\- { city_name + country_code }: when the user named a city, even if ambiguous. Best when the destination has a primary city ("Mahón, ES" for Menorca; "Florence, IT" for Tuscany).
\- { latitude + longitude + radius_km }: when the destination is an area, island, or region with no obvious primary city. radius_km up to 50.
\- { place_id }: when you already have an upstream Place ID.
If the user names something non-city (an island, region, archipelago, neighborhood), DO NOT pass it as { query } — pick…

Input parameters:

- `adults` (integer): Shorthand: total adults across all rooms. Use ONLY when there is no ambiguity (1 or 2 adults = single room). For 3+ adults, or odd splits, ask the user how they want to split rooms and pass occupanci…
- `checkin` (string, required): Check-in date (YYYY-MM-DD).
- `checkout` (string, required): Check-out date (YYYY-MM-DD).
- `children` (array): Shorthand: ages of all children across all rooms. If children are present, prefer occupancies[] so the caller controls which room each child goes in (ages affect pricing and some providers reject inv…
- `currency` (string): ISO 4217 currency code (e.g. "EUR", "USD", "GBP", "JPY"). ALWAYS set this — omitting it falls back to USD which is rarely what users actually want. Infer from the strongest signal available: (1) the…
- `destination` (object, required): Destination — provide exactly one shape. Two distinct modes: MODE A (rate lookup — you know which hotel):   • { hotel_ids } to re-shop a known set.   • { hotel_name, country_code?, city_name? } when…
- `filters` (object): Optional filter overrides applied on top of the tenant default filter set.
- `guest_nationality` (string): Guest nationality (ISO 3166-1 alpha-2, uppercase, e.g. "FR"). Affects rate availability + tax handling at search time. Separate from traveler nationality used for booking documents.
- `occupancies` (array): One entry per room (structured). PREFERRED whenever the party is larger than 2 adults or has children — it removes ambiguity about how guests are split across rooms. Example: [{ "adults": 2 }, { "adu…
- `rooms` (integer): Shorthand: number of rooms (BFF auto-distributes adults + children). Use when the user named a room count but not the per-room split.
- `trip_id` (string): Existing trip_id to associate this search with. Unified (cart-widget) tool only — the DevPlatform variant accepts the field for schema consistency but ignores it (no widget surface). Forward whenever…
- `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 to understand the user's intent and cont…

Output parameters:

- `error` (string)
- `error_message` (string)
- `hasMore` (boolean)
- `hint` (string)
- `hotels` (array)
- `searchQuery`
- `status` (string)
- `totalHotels` (number)
- `trip_id` (string)

### `hotel_details` (~528 tokens)

Rich metadata (gallery, facilities, policies, per-room details) for a single hotel — called by the hotel widget on fullscreen open.

\**Cost: 1 credit per call.**

Input parameters:

- `checkin` (string): Check-in date (YYYY-MM-DD). Accepted for future cache-key alignment; currently unused by the BFF.
- `checkout` (string): Check-out date (YYYY-MM-DD). Accepted for future cache-key alignment; currently unused by the BFF.
- `hotel_id` (string, required): Hotel ID (from a prior hotel_search offer).
- `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 to understand the user's intent and cont…

Output parameters:

- `error` (string)
- `status` (string)

### `trip` (~2391 tokens)

Unified tool for managing a trip (shopping cart). Supports flights and hotels in the same cart. Actions are determined by which objects you provide.

SCHEMA:
{
  trip_id?: string,           // Existing trip ID (omit to create new)
  offer_id?: string,          // (Legacy) Offer ID — now auto-encoded into trip_item_token by flight_search
  add_item?: { ... },         // Add a flight or hotel to the trip
  remove_item?: { ... },      // Remove an item from the trip
  upsert_travelers?: { ... }, // Set travelers (replaces all)
  idempotency_key?: string    // Prevent duplicate processing
}

ACTIONS:

1\. ADD ITEM (add_item object):
   \- Flight: trip_item_token from flight_search (offer__* format, contains encoded offer_id)
   \- Hotel: offer_id from hotel_search (htl_* format, use directly as trip_item_token)
{
  "add_item": {
    "trip_item_token": "offer__1:0-2-0",  // Flight token from flight_search
    // OR: "htl_abc123..."                // Hotel token from hotel_search
    "traveler_ids": ["traveler_1", "traveler_2"]   // Optional: associate travelers
  }
}

2\. REMOVE ITEM (remove_item object):
{
  "trip_id": "trip_xxx",
  "remove_item": {
    "item_id": "item_123"  // From trip.trip_items[].id
  }
}

3\. UPSERT TRAVELERS (upsert_travelers object):
{
  "trip_id": "trip_xxx",
  "upsert_travelers": {
    "travelers": [
      { "traveler_id": "saved_1", "is_lead": true },  // Pre-saved traveler
      { "identity": { ... } }                          // Or inline details
    ],
    "contact": {                                       // Optional trip contact
      "email": "john@example.com",
      "phone": "+1-555-123-4567"
    }
  }
}

TRAVELER ENTRY OPTIONS:
• { traveler_id: "id" } - Use pre-saved traveler
• { traveler_id: "id", is_lead: true } - Pre-saved as lead
• { identity: {...}, passport?: {...} } - Inline details

WORKFLOW:
1\. flight_calendar → Returns flights with offer_token
2\. flight_search → Returns fare options with trip_item_token (offer_id encoded inside…

Input parameters:

- `add_item` (object): Add a flight or hotel to the trip. Use trip_item_token from flight_search (offer__* format) or offer_id from hotel_search (htl_* format).
- `idempotency_key` (string): Idempotency key to prevent duplicate processing
- `offer_id` (string): Deprecated: offer_id is now encoded into trip_item_token by flight_search. Only needed for legacy tokens without encoded offer_id.
- `payment_type` (string): Payment flow type: "checkout" for Stripe Checkout (default), "intent" for Payment Intent.
- `remove_item` (object): Remove an item from the trip by its ID.
- `schedule_quote` (boolean): Schedule a fresh quote on the current cart state. Triggers async re-pricing on the BFF — the response returns immediately with the new quoted_cart_id; poll trip(get) until status === "held" (quote co…
- `select_ancillaries` (object): Select ancillaries (bags, seats, meals) for a quoted trip item. Uses full-replacement semantics — send all desired selections.
- `trip_id` (string): ID of an existing trip. If not provided, a new trip will be created.
- `upsert_travelers` (object): Set travelers on the trip. Replaces all existing travelers (idempotent operation).
- `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 to understand the user's intent and cont…

Output parameters:

- `actions_performed` (array)
- `error_code` (string)
- `error_message` (string)
- `hint` (string)
- `recommended_products` (array)
- `saved_travelers` (array)
- `status` (string)
- `trip`
- `trip_item_id` (string)

### `book` (~1147 tokens)

Unified tool for booking a trip. Actions are determined by which object you provide.

SCHEMA:
{
  create?: {                      // Initiate booking
    trip_id: string,              // Required: ID of the trip to book
    buyer_contact?: {             // Optional: buyer contact info
      email: string,
      phone?: string
    }
  },
  status?: {                      // Check booking status
    booking_id: string            // Required: ID of the booking to check
  },
  idempotency_key?: string        // Prevent duplicate processing
}

ACTIONS:

1\. CREATE BOOKING (create object):
Quotes the trip and returns a Stripe Checkout URL for payment authorization.
{
  "create": {
    "trip_id": "trip_xxx"
  }
}

Returns:
{
  "checkout_session": {
    "id": "cs_xxx",
    "url": "https://checkout.stripe.com/...",  // Open this URL for payment
    "expires_at": "2026-01-08T15:30:00Z"
  },
  "pending_booking": {
    "id": "bkg_xxx",
    "status": "awaiting_payment",
    "trip_id": "trip_xxx"
  }
}

2\. CHECK STATUS (status object):
Retrieves booking status. If payment is authorized but fulfillment hasn't started,
automatically triggers fulfillment.
{
  "status": {
    "booking_id": "bkg_xxx"
  }
}

Returns: Full booking object with status, items, passengers, totals, payment info.

PREREQUISITES:
• Trip must have at least one item (use trip tool with add_item)
• Trip must have travelers assigned (use trip tool with upsert_travelers)
• Trip must pass validation

WORKFLOW (flights):
1\. flight_calendar → offer_token
2\. flight_search → trip_item_token
3\. trip(add_item) → trip created
4\. trip(upsert_travelers) → travelers set
5\. book(create={trip_id}) → checkout URL

WORKFLOW (hotels):
1\. hotel_search → htl_* offer_id
2\. trip(add_item, trip_item_token=htl_*) → trip created
3\. trip(upsert_travelers) → travelers set
4\. book(create={trip_id}) → checkout URL

Flights and hotels can be in the same trip (single checkout).
After book(create), poll with book(status={booking_id}) for confir…

Input parameters:

- `create` (object): Initiate booking for a trip. Quotes the trip and returns a Stripe Checkout URL for payment. Mutually exclusive with `status` — provide exactly one action per call.
- `idempotency_key` (string): Idempotency key to prevent duplicate processing
- `status` (object): Check the status of an existing booking. If payment is authorized, triggers fulfillment automatically. Mutually exclusive with `create` — provide exactly one action per call.
- `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 to understand the user's intent and cont…

Output parameters:

- `action` (string)
- `booking`
- `checkout_session`
- `error_code` (string)
- `error_message` (string)
- `hint` (string)
- `pending_booking`
- `quoted_offer`
- `status` (string)
- `trip`

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-gojinko-mcp-jinko/mcp#diagnostics

## Score history

- 2026-08-04: 68
- 2026-08-03: 67
- 2026-08-02: 67
- 2026-08-01: 66
- 2026-07-31: 67
- 2026-07-30: 65
- 2026-07-29: 64
- 2026-07-28: 64
- 2026-07-27: 62
- 2026-07-26: 63

## Links

- Remote endpoint: https://mcp.gojinko.com/
- Website: https://gojinko.com/
- Changelog RSS feed: https://verifymcp.io/servers/com-gojinko-mcp-jinko/mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-gojinko-mcp-jinko/mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-gojinko-mcp-jinko/mcp
