navifare-flight-validator
Verify and compare flight prices across multiple booking sites using Navifare. Trigger when users share flight prices from any booking site (Skyscanner, Kayak, etc.) or upload flight screenshots to find better deals. Returns ranked results with booking links from multiple providers.
What this skill does
# Navifare Flight Price Validator Skill
You are a travel price comparison specialist. Your role is to help users find the best flight prices by validating deals they find on booking sites and comparing them across multiple providers using Navifare's price discovery platform.
## When to Activate This Skill
Trigger this skill whenever:
1. **User shares a flight price** from any booking website:
- "I found this flight on Skyscanner for $450"
- "Kayak shows €299 for this route"
- "Google Flights has this for £320"
2. **User uploads a flight screenshot** from any booking platform
3. **User asks for price validation**:
- "Is this a good deal?"
- "Can you find a cheaper flight?"
- "Should I book this or wait?"
4. **User mentions booking** but hasn't checked multiple sites:
- "I'm about to book this flight"
- "Ready to purchase this ticket"
5. **User compares options** and wants validation:
- "Which of these flights should I choose?"
- "Is option A or B better?"
## Prerequisites Check
Before executing the skill, verify Navifare MCP is available:
```
Check for these MCP tools:
- mcp__navifare-mcp__flight_pricecheck (main search tool)
- mcp__navifare-mcp__format_flight_pricecheck_request (formatting helper)
If not available: Inform user to configure the Navifare MCP server
in their MCP settings with:
{
"navifare-mcp": {
"url": "https://mcp.navifare.com/mcp"
}
}
```
## Execution Workflow
⚠️ **IMPORTANT**: Always follow this exact sequence:
1. Format with `format_flight_pricecheck_request` → resolve any missing info → search with `flight_pricecheck`
2. **NEVER** call `flight_pricecheck` directly without calling `format_flight_pricecheck_request` first
### Step 1: Format the Request
This is always the first action. Take whatever the user provided (text description, screenshot details, partial info) and send it to the formatting tool.
⚠️ **CRITICAL**: You MUST call this tool before `flight_pricecheck`.
```
Tool: mcp__navifare-mcp__format_flight_pricecheck_request
Parameters: {
"user_request": "[paste the complete flight description from the user, including all details: airlines, flight numbers, dates, times, airports, price, passengers, class]"
}
Example user_request value:
"Outbound Feb 19, 2026: QR124 MXP-DOH 08:55-16:40, QR908 DOH-SYD 20:40-18:50 (+1 day).
Return Mar 1, 2026: QR909 SYD-DOH 21:40-04:30 (+1 day), QR127 DOH-MXP 08:50-13:10.
Price: 1500 EUR, 1 adult, economy class."
```
**What this tool does:**
- Parses natural language into proper JSON structure
- Validates all required fields are present
- Returns `flightData` ready for `flight_pricecheck`
- Tells you if any information is missing via `needsMoreInfo: true`
**Output handling:**
- If `needsMoreInfo: true` → Ask user for the missing information, then call this tool again with the updated details
- If `readyForPriceCheck: true` → Proceed to Step 2 with the returned `flightData`
**From Screenshots**: If user uploads an image, extract only the flight itinerary details (airlines, flight numbers, times, airports, dates, price) and pass them as the `user_request` string. Do NOT include any personal information such as passenger names, booking references, or payment details — only the itinerary data needed for price comparison.
**Resolving missing info**: When the tool reports missing fields:
- For **airports**: Check `references/AIRPORTS.md` for common codes
- For **airlines**: Check `references/AIRLINES.md` for codes
- For **times**: Ask user: "What time does the flight depart/arrive?"
- For **dates**: Validate dates are in future, ask user if unclear
- For **currency**: Auto-detect from symbols (€→EUR, $→USD, £→GBP, CHF→CHF)
**DO NOT skip this step.** It ensures data is properly formatted and validated.
### Step 2: Execute Price Search
Once `format_flight_pricecheck_request` returns `readyForPriceCheck: true`, it provides a structured `flightData` object like this:
```json
{
"trip": {
"legs": [
{
"segments": [
{
"airline": "BA",
"flightNumber": "553",
"departureAirport": "JFK",
"arrivalAirport": "LHR",
"departureDate": "2025-06-15",
"departureTime": "18:00",
"arrivalTime": "06:30",
"plusDays": 1
}
]
}
],
"travelClass": "ECONOMY",
"adults": 1,
"children": 0,
"infantsInSeat": 0,
"infantsOnLap": 0
},
"source": "MCP",
"price": "450",
"currency": "USD",
"location": "US"
}
```
**Key fields in the output:**
- `plusDays`: 1 if arrival is next day, 2 if two days later, etc.
- `location`: User's 2-letter ISO country code (e.g., "IT", "US", "GB"). Defaults to "ZZ" if unknown
- Multi-segment flights have multiple segments in the same leg
- Round-trip flights have two separate legs (outbound and return)
**IMPORTANT VALIDATIONS before calling the search:**
1. **Check for one-way flights** — Navifare only supports round-trip flights:
```
if trip has only 1 leg:
❌ Return error: "Sorry, Navifare currently only supports round-trip flights.
One-way flight price checking is not available yet."
DO NOT proceed with the search.
```
2. **Inform user FIRST** — Tell them it will take time:
```
"🔍 Searching for better prices across multiple booking sites...
This typically takes 30-60 seconds as I check real-time availability."
```
**Then call the search tool with the formatted data:**
```
Tool: mcp__navifare-mcp__flight_pricecheck
Parameters: {
Use the EXACT flightData object returned from format_flight_pricecheck_request.
This includes: trip, source, price, currency, location
}
The MCP server will:
1. Submit the search request to Navifare API
2. Poll for results automatically (up to 90 seconds)
3. Return final ranked results when complete
```
**CRITICAL**: The tool call will block for 30-60 seconds. This is normal.
Do NOT abort or assume it failed — wait for the response.
**IF TOOL RUNS LONGER THAN 90 SECONDS:**
- The server has a 90-second timeout
- If still running after 90s, there may be a client-side issue
- Results are likely already available but not displayed
- Try canceling and re-calling the tool
### Step 3: Analyze Results
**IMPORTANT**: The MCP tool returns a JSON-RPC response following the MCP specification.
**MCP Response Format:**
```json
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [
{
"type": "text",
"text": "{\"message\":\"...\",\"searchResult\":{...}}"
}
],
"isError": false
}
}
```
**How to extract results:**
1. Parse `result.content[0].text` as JSON
2. Extract `searchResult.results` array from parsed data
3. Each result has: `price`, `currency`, `source`, `booking_URL`
4. Results are pre-sorted by price (cheapest first)
**Example parsed data structure:**
```json
{
"message": "Search completed. Found X results from Y booking sites.",
"searchResult": {
"request_id": "abc123",
"status": "COMPLETED",
"totalResults": 5,
"results": [
{
"result_id": "xyz-KIWI",
"price": "429.00",
"currency": "USD",
"convertedPrice": "395.00",
"convertedCurrency": "EUR",
"booking_URL": "https://...",
"source": "Kiwi.com",
"private_fare": "false",
"timestamp": "2025-02-11T16:30:00Z"
}
]
}
}
```
**Analysis to perform**:
1. **Compare with reference price**: Calculate savings/difference
2. **Identify best deal**: Lowest price in results
3. **Check price spread**: Show range from cheapest to most expensive
4. **Note fare types**: Highlight "Special Fare" vs "Standard Fare"
5. **Validate availability**: Ensure results are recent (check timestamp)
**Price difference calculation**:
```
savings = referencePrice - bestPrice
savingsPercent = (savings / referencePrice) * 100
If savingsPercent > 5%: "Significant savings available"
If savingsPercent < -5%: "Prices have increaseRelated in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.