Jetopolis
Airline strategy game 1950-2030: live worlds, leaders, historical airlines, aircraft prices
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"game": {
"url": "https://jetopolis.app/mcp"
}
}
}Remote endpoints
https://jetopolis.app/mcpstreamable-httpWhat it can do
Tool inventory
Tools (7)
🟢list_worlds(status, type, region, lang)
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.
Input Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"RUNNING",
"FINALE",
"FINISHED"
]
},
"type": {
"description": "STANDARD: 1 game day = 20 min, BLITZ: 5 min",
"type": "string",
"enum": [
"BLITZ",
"STANDARD",
"ENDLESS",
"PRIVATE"
]
},
"region": {
"description": "Server region of the world",
"type": "string",
"enum": [
"wnam",
"enam",
"weur",
"eeur",
"apac-ne",
"apac-se",
"oc"
]
},
"lang": {
"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": "string",
"maxLength": 10
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"asOf": {
"type": "string"
},
"worlds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"BLITZ",
"STANDARD",
"ENDLESS",
"PRIVATE"
]
},
"typeName": {
"type": "string"
},
"region": {
"type": "string",
"enum": [
"wnam",
"enam",
"weur",
"eeur",
"apac-ne",
"apac-se",
"oc"
]
},
"startYear": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"endYear": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"tickMinutes": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"gameDate": {
"type": "string"
},
"year": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"era": {
"type": "string"
},
"eraName": {
"type": "string"
},
"status": {
"type": "string"
},
"players": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"maxPlayers": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"active24h": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"url": {
"type": "string"
}
},
"required": [
"id",
"name",
"type",
"typeName",
"region",
"startYear",
"endYear",
"tickMinutes",
"gameDate",
"year",
"era",
"eraName",
"status",
"players",
"maxPlayers",
"active24h",
"url"
],
"additionalProperties": false
}
}
},
"required": [
"asOf",
"worlds"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_world(worldId, lang)
One Jetopolis world by id: the same card as in list_worlds plus finishedAt for a world that has ended.
Input Schema
{
"type": "object",
"properties": {
"worldId": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "World id from list_worlds"
},
"lang": {
"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": "string",
"maxLength": 10
}
},
"required": [
"worldId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"BLITZ",
"STANDARD",
"ENDLESS",
"PRIVATE"
]
},
"typeName": {
"type": "string"
},
"region": {
"type": "string",
"enum": [
"wnam",
"enam",
"weur",
"eeur",
"apac-ne",
"apac-se",
"oc"
]
},
"startYear": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"endYear": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"tickMinutes": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"gameDate": {
"type": "string"
},
"year": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"era": {
"type": "string"
},
"eraName": {
"type": "string"
},
"status": {
"type": "string"
},
"players": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"maxPlayers": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"active24h": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"url": {
"type": "string"
},
"finishedAt": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"name",
"type",
"typeName",
"region",
"startYear",
"endYear",
"tickMinutes",
"gameDate",
"year",
"era",
"eraName",
"status",
"players",
"maxPlayers",
"active24h",
"url",
"finishedAt"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢world_standings(worldId, limit, lang)
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.
Input Schema
{
"type": "object",
"properties": {
"worldId": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "World id from list_worlds"
},
"limit": {
"default": 20,
"type": "integer",
"minimum": 1,
"maximum": 50
},
"lang": {
"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": "string",
"maxLength": 10
}
},
"required": [
"worldId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"world": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"BLITZ",
"STANDARD",
"ENDLESS",
"PRIVATE"
]
},
"typeName": {
"type": "string"
},
"region": {
"type": "string",
"enum": [
"wnam",
"enam",
"weur",
"eeur",
"apac-ne",
"apac-se",
"oc"
]
},
"startYear": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"endYear": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"tickMinutes": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"gameDate": {
"type": "string"
},
"year": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"era": {
"type": "string"
},
"eraName": {
"type": "string"
},
"status": {
"type": "string"
},
"players": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"maxPlayers": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"active24h": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"url": {
"type": "string"
},
"finishedAt": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"name",
"type",
"typeName",
"region",
"startYear",
"endYear",
"tickMinutes",
"gameDate",
"year",
"era",
"eraName",
"status",
"players",
"maxPlayers",
"active24h",
"url",
"finishedAt"
],
"additionalProperties": false
},
"gameDate": {
"type": "string"
},
"asOf": {
"type": "string"
},
"standings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rank": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"name": {
"type": "string"
},
"code": {
"type": "string"
},
"hqIata": {
"type": "string"
},
"hqName": {
"type": "string"
},
"rating": {
"type": "number"
},
"fleet": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"routes": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"foundedOn": {
"type": "string"
},
"status": {
"type": "string"
},
"cardUrl": {
"type": "string"
}
},
"required": [
"rank",
"name",
"code",
"hqIata",
"hqName",
"rating",
"fleet",
"routes",
"foundedOn",
"status",
"cardUrl"
],
"additionalProperties": false
}
}
},
"required": [
"world",
"gameDate",
"asOf",
"standings"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢historical_airlines(year, country, region, kind, limit)
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.
Input Schema
{
"type": "object",
"properties": {
"year": {
"type": "integer",
"minimum": 1950,
"maximum": 2030,
"description": "Calendar year, 1950-2030"
},
"country": {
"description": "Home country of the airline, ISO 3166-1 alpha-2 (GB, US, FR)",
"type": "string",
"pattern": "^[A-Za-z]{2}$"
},
"region": {
"description": "Game region of the airline base",
"type": "string",
"enum": [
"wnam",
"enam",
"weur",
"eeur",
"apac-ne",
"apac-se",
"oc"
]
},
"kind": {
"description": "flag carrier, major, regional, low-cost or charter",
"type": "string",
"enum": [
"flag",
"major",
"regional",
"lowcost",
"charter"
]
},
"limit": {
"default": 50,
"description": "At most this many airlines",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": [
"year"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"year": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"total": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"airlines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"code": {
"type": [
"string",
"null"
]
},
"country": {
"type": "string"
},
"region": {
"type": "string",
"enum": [
"wnam",
"enam",
"weur",
"eeur",
"apac-ne",
"apac-se",
"oc"
]
},
"kind": {
"type": "string",
"enum": [
"flag",
"major",
"regional",
"lowcost",
"charter"
]
},
"since": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"until": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"servedCountries": {
"type": "array",
"items": {
"type": "string"
}
},
"confidence": {
"anyOf": [
{
"type": "string",
"enum": [
"high",
"medium",
"low"
]
},
{
"type": "null"
}
]
},
"networkKnown": {
"type": "boolean"
}
},
"required": [
"id",
"name",
"code",
"country",
"region",
"kind",
"since",
"until",
"servedCountries",
"confidence",
"networkKnown"
],
"additionalProperties": false
}
}
},
"required": [
"year",
"total",
"airlines"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢aircraft_catalog(year, category, manufacturer, query, limit, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"year": {
"description": "Only aircraft already in service in this year; also fills availabilityInYear",
"type": "integer",
"minimum": 1950,
"maximum": 2030
},
"category": {
"type": "string",
"enum": [
"PISTON",
"TURBOPROP",
"NARROWBODY",
"WIDEBODY",
"JUMBO",
"SST",
"REGIONAL_JET"
]
},
"manufacturer": {
"description": "Substring, case-insensitive",
"type": "string",
"minLength": 1,
"maxLength": 40
},
"query": {
"description": "Substring of the model name or id, case-insensitive (A320, 747, dc-3)",
"type": "string",
"minLength": 1,
"maxLength": 40
},
"limit": {
"default": 50,
"type": "integer",
"minimum": 1,
"maximum": 150
},
"lang": {
"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": "string",
"maxLength": 10
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"total": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"aircraft": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"manufacturer": {
"type": "string"
},
"model": {
"type": "string"
},
"category": {
"type": "string",
"enum": [
"PISTON",
"TURBOPROP",
"NARROWBODY",
"WIDEBODY",
"JUMBO",
"SST",
"REGIONAL_JET"
]
},
"categoryName": {
"type": "string"
},
"family": {
"type": "string"
},
"eisYear": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"eisPlanned": {
"type": "boolean"
},
"eopYear": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"seats": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"rangeKm": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"cruiseKmh": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"runwayRequiredM": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"listPriceUsdMlnAtEis": {
"type": "number"
},
"priceEstimated": {
"type": "boolean"
},
"availabilityInYear": {
"anyOf": [
{
"type": "string",
"enum": [
"new",
"used-only"
]
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"manufacturer",
"model",
"category",
"categoryName",
"family",
"eisYear",
"eisPlanned",
"eopYear",
"seats",
"rangeKm",
"cruiseKmh",
"runwayRequiredM",
"listPriceUsdMlnAtEis",
"priceEstimated",
"availabilityInYear"
],
"additionalProperties": false
}
}
},
"required": [
"total",
"aircraft"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢aircraft_price(model, 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.
Input Schema
{
"type": "object",
"properties": {
"model": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"description": "Aircraft id from aircraft_catalog (a320-200) or part of its name (A320, 747-400)"
},
"year": {
"type": "integer",
"minimum": 1950,
"maximum": 2030,
"description": "Game year to price the aircraft in"
}
},
"required": [
"model",
"year"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"year": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"match": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"eisYear": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"eopYear": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"eisPlanned": {
"type": "boolean"
},
"listPriceUsdMlnAtEis": {
"type": "number"
},
"priceUsdMlnNominal": {
"type": [
"number",
"null"
]
},
"priceUsdMln2024": {
"type": "number"
},
"priceEstimated": {
"type": "boolean"
},
"availability": {
"type": "string",
"enum": [
"not-yet",
"new",
"used-only"
]
}
},
"required": [
"id",
"name",
"eisYear",
"eopYear",
"eisPlanned",
"listPriceUsdMlnAtEis",
"priceUsdMlnNominal",
"priceUsdMln2024",
"priceEstimated",
"availability"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"candidates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"eisYear": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"eopYear": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"id",
"name",
"eisYear",
"eopYear"
],
"additionalProperties": false
}
},
"note": {
"type": "string"
}
},
"required": [
"year",
"match",
"candidates",
"note"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢how_to_start(lang)
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.
Input Schema
{
"type": "object",
"properties": {
"lang": {
"default": "en",
"type": "string",
"enum": [
"en",
"ru"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"lang": {
"type": "string",
"enum": [
"en",
"ru"
]
},
"title": {
"type": "string"
},
"pitch": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"type": "string"
}
},
"links": {
"type": "object",
"properties": {
"play": {
"type": "string"
},
"lobby": {
"type": "string"
},
"guides": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"title",
"url"
],
"additionalProperties": false
}
}
},
"required": [
"play",
"lobby",
"guides"
],
"additionalProperties": false
},
"facts": {
"type": "object",
"properties": {
"worldPace": {
"type": "string"
},
"guest": {
"type": "string"
}
},
"required": [
"worldPace",
"guest"
],
"additionalProperties": false
}
},
"required": [
"lang",
"title",
"pitch",
"steps",
"links",
"facts"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Community
Evidence