# Czartery MCP

> Polish charter flight search across Rainbow, Itaka and TUI operators, prices in PLN.

- name: ai.wondel/czartery
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 80/100 flags: no-repository
- quality: 84/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/ai.wondel%2Fczartery
- tools: https://api.protogrid.dev/v1/servers/ai.wondel%2Fczartery/tools

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

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "czartery": {
      "type": "http",
      "url": "https://mcp.wondel.ai/czartery/mcp"
    }
  }
}
```


## Trust

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

## Quality 84/100 (new)

### protocol: 100 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- pass `protocol.list_ttl`: tool list is cacheable (ttlMs 3600000)

### 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: 71 (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
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: rainbow_search_charters (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); tui_search_charters (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); rainbow_search_outbound (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 1,630 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

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

- n/a `stability.changes`, `stability.rug_pull`: tool history recorded for 5 of the 7 days needed

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

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

- tools: 4, about 1,630 tokens to load them all
- tool set hash: ce3bdfa121504ace6dd6863464b6b8bf
- badge: [![protogrid quality](https://protogrid.dev/badge/ai.wondel/czartery.svg)](https://protogrid.dev/servers/ai.wondel/czartery)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://mcp.wondel.ai/czartery/mcp (streamable-http, auth none, reachable true, uptime30d 0.8333333)

## Packages

_none_

## Tools (4)

- `itaka_search_charters`: Charter flight itineraries from Itaka.pl between a Polish origin and a charter destination: each itinerary carries full legs (airports, dates, times, carrier, stops), per-person and total price, and a direct booking URL. Prices are charter seat prices in PLN. Only supports Itaka's fixed airport list — the error message lists valid codes when one is unsupported. Result shape: { source, fetchedAt, query, search_url, route, total_pages, current_page, total_rates, count, itineraries: [...] } — the list key is `itineraries`. Each: { trip_type, price_total, price_per_person, currency, booking_url, outbound, return_flight }, where outbound/return_flight are { departure: { city, airport_code, date, time, carrier, flight_number }, arrival: { city, airport_code, date, time }, duration_minutes, stops } and `return_flight` is null on a one-way.
- `rainbow_search_charters`: Charter flight destinations sold by Rainbow Tours (biletyczarterowe.r.pl) matching optional destination/origin/date filters: per destination you get the country, region, nearest departure date, baggage allowance and the lowest per-person price. Prices are charter seat prices in PLN. Use rainbow_search_outbound for day-by-day flights to one destination. Result shape: { source, fetchedAt, query, search_url, count, flights: [...], price_range: { min, max } } — the list key is `flights`, but each entry is a DESTINATION, not a single flight: { destination, destination_iata, country, region, departure_date, price_per_person, currency, baggage_kg }.
- `rainbow_search_outbound`: Day-by-day outbound charter flights to ONE Rainbow destination in a date window: per day the cheapest price and every flight with origin, departure time, airline, flight number, baggage and per-person/total price. Prices are charter seat prices in PLN. Get destination codes from rainbow_search_charters. Result shape: { source, fetchedAt, query, search_url, destination, period, days_with_flights, days: [...] } — the list key is `days`, one entry per calendar day: { date, cheapest_price, flights: [{ origin, destination, departure_time, price_per_person, total_price, currency, airline_code, flight_number, cabin_baggage_kg, checked_baggage_kg, meals_included }] }. A day with no flights is simply absent.
- `tui_search_charters`: Charter destinations sold on TUI.pl for a stay-length window, with per-person and total prices: filter by origin/destination airports and trip duration in days. Prices are charter seat prices in PLN. Result shape: { source, fetchedAt, query, search_url, passengers, duration, count, destinations: [...] } — the list key is `destinations`. Each: { destination_name, airport_code, country, per_person_price, total_price, currency }. There are no per-flight times here; TUI only publishes a destination price.
