# Aviasurf

> Search and compare flight prices, calendars, airports, routes, and destinations with Aviasurf.

- name: com.aviasurf/mcp
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 79/100 flags: no-repository
- quality: 85/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.aviasurf%2Fmcp
- tools: https://api.protogrid.dev/v1/servers/com.aviasurf%2Fmcp/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

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


## Trust

- hygiene: 80
- liveness: 98
- freshness: 100
- provenance: 45
- drivers: +dns-namespace +reachable +uptime-96% +updated-17d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 85/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 9 of 9 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 6,348 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 50 (weight 15)

- pass `stability.changes`: 2 tool changes in 30 days
- fail `stability.rug_pull`: 1 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 9, about 6,348 tokens to load them all
- tool set hash: ed09bce0c3cccc1a91f756b81dc08616
- tools last changed: 2026-10-18T03:00:19.772Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.aviasurf/mcp.svg)](https://protogrid.dev/servers/com.aviasurf/mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-18 `destination_profile` added
  - Use this tool when the user asks what a place is like, when to visit, how warm its air or water is, how far the coast is, what national parks or museums are nearby, or when comparing destinations before choosing one. Climate values are 1991–2020 normals, not a forecast. Beach objects are not available; the tool provides only distance to the coastline and the derived beach_destination trait, meaning the coast is within 10 km and at least one month has water warmer than 20 °C. The nearest national park distance is measured to the park centre, not an entrance or boundary. museum_level=low means no notable museum signal, not that there are no museums. Missing fields mean the source has no measurement; do not invent values.
- 2026-10-18 `cheapest_destinations` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Find cached indicative fares from an origin and render interactive destination cards, optionally filtered locally by budget, geography, monthly air or water temperature, distance to the coast, island status, elevation, trip-duration suitability, or an Aviasurf destination group. Connect natural user requests to filters: 'mountains' or 'в горы' means elevation_min_m; 'weekend getaway' or 'на выходные' means trip_duration_band=weekend; 'islands' or 'на острова' means island=true; 'where can I swim?' or 'где купаться' means month plus water_temp_min. Prices are per adult. Temperature filters require month. Missing water data excludes a destination only when water_temp_min is requested. Historical significance, when present, is explicitly a sparse model estimate, not a measured fact. Always link the returned search_url from a short label in the answer language, for example "Check live prices on Aviasurf"; never paste the raw URL as text. Use group=russia explicitly for Russian domestic destinations.
  - after: Find cached indicative fares and filter destinations locally by geography, climate, coast, island, elevation or terrain relief, beach or hiking traits, culture, parks, population, connectivity, and route trip-duration suitability. Use population_level=low for quieter small-city options, but note that it is a global population band, not a measure of crowds or tourism: a small city may still be busy with visitors. Other low/medium/high values are also global bands, not ranks within a country; museum_level=low means no notable museum signal, not no museums. National-park distance is to the park centre. Monthly air and water filters require month. Prices are per adult. Always link the returned search_url from a short label; never paste the raw URL.

Full history: https://api.protogrid.dev/v1/servers/com.aviasurf%2Fmcp/changes

## Remotes

- https://mcp.aviasurf.com/mcp (streamable-http, auth none, reachable true, uptime30d 0.95522386)

## Packages

_none_

## Tools (9)

- `cheapest_destinations`: Find cached indicative fares and filter destinations locally by geography, climate, coast, island, elevation or terrain relief, beach or hiking traits, culture, parks, population, connectivity, and route trip-duration suitability. Use population_level=low for quieter small-city options, but note that it is a global population band, not a measure of crowds or tourism: a small city may still be busy with visitors. Other low/medium/high values are also global bands, not ranks within a country; museum_level=low means no notable museum signal, not no museums. National-park distance is to the park centre. Monthly air and water filters require month. Prices are per adult. Always link the returned search_url from a short label; never paste the raw URL.
- `compare_airports`: Compare cached indicative fare samples in an interactive airport comparison across airports of the origin city, destination city, or both. Prices are per adult. Always link the returned search_url from a short label in the answer language, for example "Check live prices on Aviasurf"; never paste the raw URL as text. Outbound and inbound are calculated separately. Missing prices mean no cached observation, not that no flight exists.
- `destination_profile`: Use this tool when the user asks what a place is like, when to visit, how warm its air or water is, how far the coast is, what national parks or museums are nearby, or when comparing destinations before choosing one. Climate values are 1991–2020 normals, not a forecast. Beach objects are not available; the tool provides only distance to the coastline and the derived beach_destination trait, meaning the coast is within 10 km and at least one month has water warmer than 20 °C. The nearest national park distance is measured to the park centre, not an entrance or boundary. museum_level=low means no notable museum signal, not that there are no museums. Missing fields mean the source has no measurement; do not invent values.
- `flight_prices`: Find cached indicative 'from' fares for a route and render interactive flight cards. Prices are per adult. These are historical observations, not live availability or booking offers. Always link the returned search_url from a short label in the answer language, for example "Check live prices on Aviasurf"; never paste the raw URL as text.
- `flight_prices_filtered`: Find cached indicative fares with baggage, cabin, direct-flight, budget, flexible-date, and trip-duration filters and render interactive flight cards. Prices are per adult. Always link the returned search_url from a short label in the answer language, for example "Check live prices on Aviasurf"; never paste the raw URL as text. Airline, departure-time, and transfer-count filters are applied only to the returned cache sample and are reported in query_coverage. Use flight_prices for requests that do not need these filters.
- `open_search`: Build an Aviasurf live-search URL with dates, passenger composition, cabin class, currency, and locale. Always link the returned search_url from a short label in the answer language, for example "Check live prices on Aviasurf"; never paste the raw URL as text. This opens live search; it does not confirm a fare or availability.
- `price_calendar`: Show cached indicative price observations in an interactive calendar by day, by month, or as observed departure/return date pairs. Prices are per adult. Every monthly row includes sample_size and sample_sufficient. A month with sample_sufficient=false is a limited cached observation, not a reliable monthly minimum or evidence of seasonality; state that limitation instead of drawing a seasonal conclusion. Always link the returned search_url from a short label in the answer language, for example "Check live prices on Aviasurf"; never paste the raw URL as text. Missing dates mean no cached observation, not that no flight exists.
- `resolve_place`: Resolve a city, airport, or country name to IATA/location candidates. Returns every plausible candidate instead of guessing, and includes airports for city candidates.
- `route_facts`: Summarize a cached fare sample in an interactive route profile: price statistics, airlines observed, travel duration, route distance, and city airports. Prices are per adult. Always link the returned search_url from a short label in the answer language, for example "Check live prices on Aviasurf"; never paste the raw URL as text. direct_seen means only that a nonstop option appeared in the sample; never infer that direct flights do not exist.
