protogrid

Search / io.github.dimabalony/whentofly

whentofly

not classified

whentofly: flexible-date economy/business flight search + price-level context for AI agents

v1.0.3 · active · repository · website · descriptor JSON · versions

Not classified yet.The remote endpoints have not been probed successfully, or the listing has nothing to connect to.
Quality88good
Trust64of 100
Uptime, 30 days76%
Latency p50957 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "whentofly": {
      "type": "http",
      "url": "https://whentofly.io/mcp?ch=mcp-registry"
    }
  }
}
claude mcp add --transport http whentofly https://whentofly.io/mcp?ch=mcp-registry
[mcp_servers.whentofly]
url = "https://whentofly.io/mcp?ch=mcp-registry"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "whentofly": {
      "type": "remote",
      "url": "https://whentofly.io/mcp?ch=mcp-registry",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "whentofly": {
      "type": "http",
      "url": "https://whentofly.io/mcp?ch=mcp-registry"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=whentofly&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vd2hlbnRvZmx5LmlvL21jcD9jaD1tY3AtcmVnaXN0cnkifQ%3D%3D"
}
{
  "servers": {
    "whentofly": {
      "type": "http",
      "url": "https://whentofly.io/mcp?ch=mcp-registry"
    }
  }
}
{
  "mcpServers": {
    "whentofly": {
      "httpUrl": "https://whentofly.io/mcp?ch=mcp-registry"
    }
  }
}
extensions:
  "whentofly":
    enabled: true
    name: "whentofly"
    type: streamable_http
    uri: "https://whentofly.io/mcp?ch=mcp-registry"
    timeout: 300

Quality 88 / 100good

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene93 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • warn
    tools.description_length1 tools have descriptions over 1,024 characters, which crowds the context
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations2 of 2 tools declare readOnlyHint or destructiveHint
  • pass
    tools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
  • pass
    tools.token_costabout 2,869 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability100 · weight 15
  • pass
    stability.changesno tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

2 tools, about 2,869 tokens to load them all · tool set 428fa2af16cd · checked 2026-10-20 12:13 UTC

Tool changes

No tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 64 / 100

unreachable
provenance90
liveness0
freshness85
hygiene100

+repository +namespace-matches-repo +website -unreachable(7 failures) ~updated-73d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://whentofly.io/mcp?ch=mcp-registry streamable-httpnoneno (7 failures)76%957 ms2025-11-252026-10-08

Tools (2)

search_flightsread-onlyFind the cheapest round-trip across a FLEXIBLE multi-month date window with a min/max trip length — e.g. "10–15 days, anytime Sep–Nov". Search a broad date window rather than requiring the traveler to choose exact dates first. First call the search_locations MCP tool for city or airport names, then pass each returned airport:AAA or city:AAA value unchanged as origin/destination (explicit legacy IATA codes remain supported). Dates are OPTIONAL: add an earliest/latest window when the traveler has one, or omit them (or give just one side) and a sensible default window is searched — metadata.window_defaulted says so and query echoes the window used, so a dateless call always returns flights instead of an error. Add min/max trip duration; get back a ranked list of the cheapest fares (with booking links) plus a price verdict — an honest read of whether the cheapest fare is low, typical, or high versus the route's usual price, or unknown when we lack a usable typical-price band (a price-level read, not a buy-now-or-wait timing prediction). Non-economy requests may return action-bound Google Flights seller quotes or separate route-price evidence in metadata.route_price_check. For a specific route, set checked_bags=1 when the traveler needs one checked bag, then inspect each result's price_basis; anywhere discovery does not support baggage pricing. Checked-bag searches still run seller enrichment but set the fare-only verdict and metadata.route_price_check to null; verify=full does not override that boundary. Use it for any flight question where the dates are flexible, unknown, or the user wants the cheapest time to fly. If a window comes back thin or cannot fit the return, the search widens it one step itself and reports that in metadata.hints — no second call needed. A city:/airport: prefix that contradicts its code (city:CDG names an airport, airport:PAR names a city) is likewise searched as the identity the catalog does know, with a selector_corrected entry in metadata.hints naming the requested and used tokens. Dates already in the past get the same treatment: a window that only STARTS in the past is searched from today with a window_clamped entry in metadata.hints, and a window that has already ENDED is not searched at all — the results are empty and a window_in_past entry names a suggested window to ask for instead, so do not retry the same dates. If metadata.refresh_hint is present, this response shipped without something a repeat call can add: issue the same call again immediately (do not sleep or poll) and read refresh_hint.action for what will be included. If you can wait longer for that best-effort cross-check, set verify=full. It uses a longer ~35s budget, but never treats a different airline, itinerary, gate, or booking URL as verification of the displayed offer. Pass sellers=false when the traveler wants the price picture but is not booking through this answer: it skips the live seller-quote wave, so the ranked calendar fares, booking links and metadata.route_price_check still come back but metadata.seller_enrichment_status is `skipped` and no seller quote, seller-level baggage fee or direct seller action is resolved. Provider failure, unavailability, or a spend cap can still return only cached indicators; always inspect metadata.seller_enrichment_status (`applied` means complete date-pair coverage put Serp-derived seller data in results; `complete` means the selected plan and action resolution completed without such data entering results; `partial` means date-pair or direct-action coverage has gaps though valid seller data may still rank; `skipped` is reserved for response surfaces where enrichment does not apply) and metadata.seller_enrichment_coverage. That object reports the theoretical query-valid date pairs and how many were targeted/searched; it is not exhaustive provider inventory. Default requests target at most three pairs, while explicit verify=full targets at most seven with bounded longer budgets. Inspect metadata.freshness, and metadata.route_price_check.
search_locationsread-onlyResolve a city or airport name or code before searching flights. Returns typed values such as city:SHA to search every catalog airport in Shanghai or airport:SHA for Hongqiao only. Pass the selected value unchanged to search_flights. Ask the traveler when multiple results are plausible.

Schemas: list_tools.

Official server.json
{
  "name": "io.github.dimabalony/whentofly",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://whentofly.io/mcp?ch=mcp-registry",
      "type": "streamable-http"
    }
  ],
  "version": "1.0.3",
  "repository": {
    "url": "https://github.com/dimabalony/whentofly-mcp",
    "source": "github"
  },
  "websiteUrl": "https://whentofly.io",
  "description": "whentofly: flexible-date economy/business flight search + price-level context for AI agents"
}