MCP Server

Jetopolis

app.jetopolis/game
Gaming Public & reachable MCP 2025-11-25

What this MCP does

Provides data and guidance for the Jetopolis airline strategy game, including worlds, standings, aircraft, historical airlines and aircraft prices.

aircraft_catalog
Aircraft catalog
Aircraft types of the game catalog: seats in two classes, range, cruise speed, required runway, entry into service and end of production, and the list price in millions of US dollars of the entry-into-service year. With year, only types already flying that year are returned and availabilityInYear says whether they are sold new or only on the used market.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'lang': {'type': 'string', 'maxLength': 10, 'description': 'Language for the human-readable labels next to keys, one of the 25 game locales (en, ru, de, fr, es, ja, zh-CN and others); unknown values fall back to English'}, 'year': {'type': 'integer', 'maximum': 2030, 'minimum': 1950, 'description': 'Only aircraft already in service in this year; also fills availabilityInYear'}, 'limit': {'type': 'integer', 'default': 50, 'maximum': 150, 'minimum': 1}, 'query': {'type': 'string', 'maxLength': 40, 'minLength': 1, 'description': 'Substring of the model name or id, case-insensitive (A320, 747, dc-3)'}, 'category': {'enum': ['PISTON', 'TURBOPROP', 'NARROWBODY', 'WIDEBODY', 'JUMBO', 'SST', 'REGIONAL_JET'], 'type': 'string'}, 'manufacturer': {'type': 'string', 'maxLength': 40, 'minLength': 1, 'description': 'Substring, case-insensitive'}}}
Output schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['total', 'aircraft'], 'properties': {'total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'aircraft': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'manufacturer', 'model', 'category', 'categoryName', 'family', 'eisYear', 'eisPlanned', 'eopYear', 'seats', 'rangeKm', 'cruiseKmh', 'runwayRequiredM', 'listPriceUsdMlnAtEis', 'priceEstimated', 'availabilityInYear'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'model': {'type': 'string'}, 'seats': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'family': {'type': 'string'}, 'eisYear': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'eopYear': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'rangeKm': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'category': {'enum': ['PISTON', 'TURBOPROP', 'NARROWBODY', 'WIDEBODY', 'JUMBO', 'SST', 'REGIONAL_JET'], 'type': 'string'}, 'cruiseKmh': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'eisPlanned': {'type': 'boolean'}, 'categoryName': {'type': 'string'}, 'manufacturer': {'type': 'string'}, 'priceEstimated': {'type': 'boolean'}, 'runwayRequiredM': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'availabilityInYear': {'anyOf': [{'enum': ['new', 'used-only'], 'type': 'string'}, {'type': 'null'}]}, 'listPriceUsdMlnAtEis': {'type': 'number'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
aircraft_price
Aircraft price in a game year
In-game catalogue price of a new aircraft in a given year: the entry-into-service price inflated by US CPI to nominal dollars of that year, and the same price in 2024 dollars. Accepts an id from aircraft_catalog or part of the name; when several types match and the year does not settle it, returns candidates to choose from.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['model', 'year'], 'properties': {'year': {'type': 'integer', 'maximum': 2030, 'minimum': 1950, 'description': 'Game year to price the aircraft in'}, 'model': {'type': 'string', 'maxLength': 40, 'minLength': 1, 'description': 'Aircraft id from aircraft_catalog (a320-200) or part of its name (A320, 747-400)'}}}
Output schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['year', 'match', 'candidates', 'note'], 'properties': {'note': {'type': 'string'}, 'year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'match': {'anyOf': [{'type': 'object', 'required': ['id', 'name', 'eisYear', 'eopYear', 'eisPlanned', 'listPriceUsdMlnAtEis', 'priceUsdMlnNominal', 'priceUsdMln2024', 'priceEstimated', 'availability'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'eisYear': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'eopYear': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'eisPlanned': {'type': 'boolean'}, 'availability': {'enum': ['not-yet', 'new', 'used-only'], 'type': 'string'}, 'priceEstimated': {'type': 'boolean'}, 'priceUsdMln2024': {'type': 'number'}, 'priceUsdMlnNominal': {'type': ['number', 'null']}, 'listPriceUsdMlnAtEis': {'type': 'number'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'eisYear', 'eopYear'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'eisYear': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'eopYear': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}}}, 'additionalProperties': False}
get_world
One world
One Jetopolis world by id: the same card as in list_worlds plus finishedAt for a world that has ended.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['worldId'], 'properties': {'lang': {'type': 'string', 'maxLength': 10, 'description': 'Language for the human-readable labels next to keys, one of the 25 game locales (en, ru, de, fr, es, ja, zh-CN and others); unknown values fall back to English'}, 'worldId': {'type': 'string', 'maxLength': 64, 'minLength': 1, 'description': 'World id from list_worlds'}}}
Output schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'name', 'type', 'typeName', 'region', 'startYear', 'endYear', 'tickMinutes', 'gameDate', 'year', 'era', 'eraName', 'status', 'players', 'maxPlayers', 'active24h', 'url', 'finishedAt'], 'properties': {'id': {'type': 'string'}, 'era': {'type': 'string'}, 'url': {'type': 'string'}, 'name': {'type': 'string'}, 'type': {'enum': ['BLITZ', 'STANDARD', 'ENDLESS', 'PRIVATE'], 'type': 'string'}, 'year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'region': {'enum': ['wnam', 'enam', 'weur', 'eeur', 'apac-ne', 'apac-se', 'oc'], 'type': 'string'}, 'status': {'type': 'string'}, 'endYear': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'eraName': {'type': 'string'}, 'players': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'gameDate': {'type': 'string'}, 'typeName': {'type': 'string'}, 'active24h': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'startYear': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'finishedAt': {'type': ['string', 'null']}, 'maxPlayers': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'tickMinutes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
historical_airlines
Historical airlines of a year
Real airlines that operated in a given year (1950-2030) as the game knows them: name, IATA code when reliably known, home country and region, type, years of operation, and the countries each one served that year. Network data has decade precision: a country listed for the 1960s may have been added mid-decade. servedCountries lists destinations from home; when networkKnown is false only the home country is known. Sorted by the airline size in the dataset.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['year'], 'properties': {'kind': {'enum': ['flag', 'major', 'regional', 'lowcost', 'charter'], 'type': 'string', 'description': 'flag carrier, major, regional, low-cost or charter'}, 'year': {'type': 'integer', 'maximum': 2030, 'minimum': 1950, 'description': 'Calendar year, 1950-2030'}, 'limit': {'type': 'integer', 'default': 50, 'maximum': 100, 'minimum': 1, 'description': 'At most this many airlines'}, 'region': {'enum': ['wnam', 'enam', 'weur', 'eeur', 'apac-ne', 'apac-se', 'oc'], 'type': 'string', 'description': 'Game region of the airline base'}, 'country': {'type': 'string', 'pattern': '^[A-Za-z]{2}$', 'description': 'Home country of the airline, ISO 3166-1 alpha-2 (GB, US, FR)'}}}
Output schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['year', 'total', 'airlines'], 'properties': {'year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'airlines': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'code', 'country', 'region', 'kind', 'since', 'until', 'servedCountries', 'confidence', 'networkKnown'], 'properties': {'id': {'type': 'string'}, 'code': {'type': ['string', 'null']}, 'kind': {'enum': ['flag', 'major', 'regional', 'lowcost', 'charter'], 'type': 'string'}, 'name': {'type': 'string'}, 'since': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'until': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'region': {'enum': ['wnam', 'enam', 'weur', 'eeur', 'apac-ne', 'apac-se', 'oc'], 'type': 'string'}, 'country': {'type': 'string'}, 'confidence': {'anyOf': [{'enum': ['high', 'medium', 'low'], 'type': 'string'}, {'type': 'null'}]}, 'networkKnown': {'type': 'boolean'}, 'servedCountries': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}}, 'additionalProperties': False}
how_to_start
How to start playing
How to start playing Jetopolis: the steps from the first click to the first route, the world pace and links to the game and its guides. English or Russian.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'lang': {'enum': ['en', 'ru'], 'type': 'string', 'default': 'en'}}}
Output schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['lang', 'title', 'pitch', 'steps', 'links', 'facts'], 'properties': {'lang': {'enum': ['en', 'ru'], 'type': 'string'}, 'facts': {'type': 'object', 'required': ['worldPace', 'guest'], 'properties': {'guest': {'type': 'string'}, 'worldPace': {'type': 'string'}}, 'additionalProperties': False}, 'links': {'type': 'object', 'required': ['play', 'lobby', 'guides'], 'properties': {'play': {'type': 'string'}, 'lobby': {'type': 'string'}, 'guides': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'url'], 'properties': {'url': {'type': 'string'}, 'title': {'type': 'string'}}, 'additionalProperties': False}}}, 'additionalProperties': False}, 'pitch': {'type': 'string'}, 'steps': {'type': 'array', 'items': {'type': 'string'}}, 'title': {'type': 'string'}}, 'additionalProperties': False}
list_worlds
Live worlds
Public Jetopolis worlds open right now: name, server region, pace (Standard: 1 game day = 20 real minutes, Blitz: 5), start and end year, current game date and era, players and seats, players active in the last 24 hours, and a link to open the world. Worlds never pause.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'lang': {'type': 'string', 'maxLength': 10, 'description': 'Language for the human-readable labels next to keys, one of the 25 game locales (en, ru, de, fr, es, ja, zh-CN and others); unknown values fall back to English'}, 'type': {'enum': ['BLITZ', 'STANDARD', 'ENDLESS', 'PRIVATE'], 'type': 'string', 'description': 'STANDARD: 1 game day = 20 min, BLITZ: 5 min'}, 'region': {'enum': ['wnam', 'enam', 'weur', 'eeur', 'apac-ne', 'apac-se', 'oc'], 'type': 'string', 'description': 'Server region of the world'}, 'status': {'enum': ['RUNNING', 'FINALE', 'FINISHED'], 'type': 'string'}}}
Output schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['asOf', 'worlds'], 'properties': {'asOf': {'type': 'string'}, 'worlds': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'type', 'typeName', 'region', 'startYear', 'endYear', 'tickMinutes', 'gameDate', 'year', 'era', 'eraName', 'status', 'players', 'maxPlayers', 'active24h', 'url'], 'properties': {'id': {'type': 'string'}, 'era': {'type': 'string'}, 'url': {'type': 'string'}, 'name': {'type': 'string'}, 'type': {'enum': ['BLITZ', 'STANDARD', 'ENDLESS', 'PRIVATE'], 'type': 'string'}, 'year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'region': {'enum': ['wnam', 'enam', 'weur', 'eeur', 'apac-ne', 'apac-se', 'oc'], 'type': 'string'}, 'status': {'type': 'string'}, 'endYear': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'eraName': {'type': 'string'}, 'players': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'gameDate': {'type': 'string'}, 'typeName': {'type': 'string'}, 'active24h': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'startYear': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'maxPlayers': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'tickMinutes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}}}, 'additionalProperties': False}
world_standings
World leaders
Player airlines of a world ranked by rating: airline name and two-letter code, home base, rating, aircraft in service, open routes, founding date, status and a link to the public airline card. Updated once per game day of that world. Cash, fares and profit are private to each player and are never returned.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['worldId'], 'properties': {'lang': {'type': 'string', 'maxLength': 10, 'description': 'Language for the human-readable labels next to keys, one of the 25 game locales (en, ru, de, fr, es, ja, zh-CN and others); unknown values fall back to English'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1}, 'worldId': {'type': 'string', 'maxLength': 64, 'minLength': 1, 'description': 'World id from list_worlds'}}}
Output schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['world', 'gameDate', 'asOf', 'standings'], 'properties': {'asOf': {'type': 'string'}, 'world': {'type': 'object', 'required': ['id', 'name', 'type', 'typeName', 'region', 'startYear', 'endYear', 'tickMinutes', 'gameDate', 'year', 'era', 'eraName', 'status', 'players', 'maxPlayers', 'active24h', 'url', 'finishedAt'], 'properties': {'id': {'type': 'string'}, 'era': {'type': 'string'}, 'url': {'type': 'string'}, 'name': {'type': 'string'}, 'type': {'enum': ['BLITZ', 'STANDARD', 'ENDLESS', 'PRIVATE'], 'type': 'string'}, 'year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'region': {'enum': ['wnam', 'enam', 'weur', 'eeur', 'apac-ne', 'apac-se', 'oc'], 'type': 'string'}, 'status': {'type': 'string'}, 'endYear': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'eraName': {'type': 'string'}, 'players': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'gameDate': {'type': 'string'}, 'typeName': {'type': 'string'}, 'active24h': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'startYear': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'finishedAt': {'type': ['string', 'null']}, 'maxPlayers': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'tickMinutes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}, 'gameDate': {'type': 'string'}, 'standings': {'type': 'array', 'items': {'type': 'object', 'required': ['rank', 'name', 'code', 'hqIata', 'hqName', 'rating', 'fleet', 'routes', 'foundedOn', 'status', 'cardUrl'], 'properties': {'code': {'type': 'string'}, 'name': {'type': 'string'}, 'rank': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'fleet': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'hqIata': {'type': 'string'}, 'hqName': {'type': 'string'}, 'rating': {'type': 'number'}, 'routes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'status': {'type': 'string'}, 'cardUrl': {'type': 'string'}, 'foundedOn': {'type': 'string'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
Added
how_to_start
Sept. 30, 2026, 2:40 a.m.
Added
aircraft_price
Sept. 30, 2026, 2:40 a.m.
Added
aircraft_catalog
Sept. 30, 2026, 2:40 a.m.
Added
historical_airlines
Sept. 30, 2026, 2:40 a.m.
Added
world_standings
Sept. 30, 2026, 2:40 a.m.
Added
get_world
Sept. 30, 2026, 2:40 a.m.
Added
list_worlds
Sept. 30, 2026, 2:40 a.m.