{
  "openapi": "3.1.0",
  "info": {
    "title": "accsly.io agent API",
    "version": "1.0.0",
    "summary": "Read-only price data of accsly.io: VPS/VDS, shared hosting and dedicated plans of 2,000+ hosts, and ready-made accounts across shops.",
    "description": "accsly.io compares prices; it does not sell servers or accounts. Plan prices are read on the hosts' own sites and refreshed hourly; order_url / buy_url links lead to the seller. Prices follow the language of the URL (RUB on /ru, USD on /en, EUR on /de, /es, /pt, TRY on /tr). Overview for language models: https://accsly.io/llms.txt (full: https://accsly.io/llms-full.txt). The same data as MCP tools: https://accsly.io/mcp (Streamable HTTP, no auth). Please keep to about one request a second.",
    "contact": {
      "name": "accsly.io",
      "url": "https://accsly.io/promo"
    }
  },
  "externalDocs": {
    "description": "llms.txt — site overview for language models",
    "url": "https://accsly.io/llms.txt"
  },
  "servers": [
    {
      "url": "https://accsly.io"
    }
  ],
  "tags": [
    {
      "name": "VPS"
    },
    {
      "name": "Accounts"
    },
    {
      "name": "Markdown pages"
    },
    {
      "name": "MCP"
    }
  ],
  "paths": {
    "/{locale}/vps": {
      "get": {
        "operationId": "searchVps",
        "tags": [
          "VPS"
        ],
        "summary": "Search VPS/VDS plans",
        "description": "The VPS finder. With format=json: plans matching the filters, 10 a page, cheapest first by default. The same parameters work on /{locale}/hosting (shared hosting) and /{locale}/dedicated.",
        "parameters": [
          {
            "name": "locale",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ru",
                "en",
                "de",
                "tr",
                "es",
                "pt"
              ]
            },
            "description": "Site language; also the price currency."
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "md"
              ]
            },
            "description": "json = the search as data (10 plans a page); md = the page as Markdown. Without it the HTML page."
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 60
            },
            "description": "Free text over plan and host names, disk type, virtualization («aeza», «timeweb nvme»; Cyrillic spellings are matched too)."
          },
          {
            "name": "price",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Maximum monthly price in the locale currency (RUB on /ru, USD on /en, EUR on /de, /es, /pt, TRY on /tr)."
          },
          {
            "name": "price_min",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Minimum monthly price in the locale currency."
          },
          {
            "name": "ram",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Minimum RAM, GB."
          },
          {
            "name": "cpu",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Minimum vCPU cores."
          },
          {
            "name": "ghz",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Minimum core frequency, GHz."
          },
          {
            "name": "disk",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Minimum disk, GB."
          },
          {
            "name": "port",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Minimum port speed, Mbit/s."
          },
          {
            "name": "sites",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Shared hosting: at least this many sites."
          },
          {
            "name": "db",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Shared hosting: at least this many databases."
          },
          {
            "name": "traffic",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^(unlim|\\d+(\\.\\d+)?)$"
            },
            "description": "«unlim» = unmetered traffic, or a minimum in TB."
          },
          {
            "name": "disk_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ssd",
                "nvme",
                "hdd"
              ]
            },
            "description": "ssd = SSD or NVMe, nvme = NVMe only, hdd."
          },
          {
            "name": "region",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "abroad",
                "eu",
                "cis",
                "asia",
                "america"
              ]
            },
            "description": "abroad = outside Russia, eu, cis, asia, america."
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Server locations (any of them), ISO 3166-1 alpha-2, comma-separated. Values: RU, NL, DE, FI, US, PL, FR, GB, KZ, TR, LV, EE, LT, SE, CH, CZ, BG, MD, RO, AT, ES, IT, GR, HU, SK, RS, BE, DK, NO, IE, IS, PT, HR, SI, ME, MK, AL, CY, UA, BY, AM, GE, UZ, KG, IL, AE, HK, SG, JP, KR, CN, IN, ID, MY, TH, PK, AU, CA, MX, BR, AR, CL, CO, PE, EC, BO, CR, GT, PR, ZA, LU, LI, BA, TW, VN, PH, KH, MM, BD, NP, SA, QA, BH, KW, OM, IQ, EG, NG, NZ, AQ, AZ, MT, LA, IR, LB, PA, PY, UY, CW, KE, CG, MA, GH.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "os",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Operating systems offered (all of them). Values: linux, windows, freebsd, iso.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "virt",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Virtualization (any of them). Values: kvm, openvz, lxc, hyperv, vmware, xen.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "pay",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Payment methods (any of them): card_ru = Russian MIR card, sbp = Russian fast payments, card_world = non-Russian card. Values: card_ru, sbp, card_world, crypto, yoomoney, webmoney, paypal, invoice.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "opt",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Required features (all of them); hourly = hourly billing, smtp = port 25 open. Values: ipv6, ddos, hourly, trial, moneyback, win_license, panel, no_kyc, smtp, api, instant, ru_clients, gpu, ssl, mail, ru_support, rub.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "host",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Host slugs (any of them), as in host_page URLs."
            }
          },
          {
            "name": "jur",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Country of the host's legal entity, ISO codes; «!RU» = not Russia."
            }
          },
          {
            "name": "distro",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "OS templates (crawl data). Values: ubuntu, debian, almalinux, rocky, centos, fedora, opensuse, arch, oracle, alpine, cloudlinux, kali, astra, mikrotik, pfsense, proxmox, win2016, win2019, win2022, win2025, win10, win11.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "panel",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Control panels (crawl data). Values: cpanel, plesk, directadmin, ispmanager, fastpanel, hestiacp, cyberpanel, aapanel, webmin, cloudpanel.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "chip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "CPU families (crawl data). Values: ryzen, epyc, xeon, xeon_gold, intel_core.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "city",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Data-centre cities. Values: moscow, saint-petersburg, novosibirsk, kazan, yekaterinburg, amsterdam, frankfurt, falkenstein, nuremberg, helsinki, london, paris, warsaw, stockholm, riga, bucharest, sofia, madrid, milan, istanbul, almaty, dubai, new-york, los-angeles, miami, dallas, chicago, ashburn, seattle, toronto, tokyo, sydney, mumbai, sao-paulo.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "coin",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Accepted cryptocurrencies. Values: usdt, btc, eth, ltc, xmr, ton, trx.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "card",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "GPU models. Values: rtx-pro-6000, h100, a100, l40s, l4, a10, t4, a16, a2, rtx-4000-ada, v100, named.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "task",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "vpn",
                "site",
                "bot",
                "games",
                "windows",
                "docker",
                "storage",
                "proxy",
                "parsing",
                "db",
                "mail",
                "dev",
                "ai",
                "game-minecraft",
                "game-cs2",
                "game-cs16",
                "game-rust",
                "game-palworld",
                "game-ark",
                "game-valheim",
                "game-dayz",
                "game-gta5",
                "game-samp",
                "game-terraria",
                "game-zomboid",
                "game-7dtd",
                "game-gmod",
                "game-satisfactory",
                "game-enshrouded",
                "game-factorio",
                "game-vrising",
                "game-unturned",
                "game-l4d2",
                "game-dst",
                "game-arma3"
              ]
            },
            "description": "Preset filter of a typical job (vpn = corporate VPN, site, bot, games, windows, docker, storage, proxy, parsing, db, mail, dev, ai) or a game server (game-minecraft…). Explicit parameters override it."
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "hosting",
                "dedicated"
              ]
            },
            "description": "On /{locale}/vps: 301 to /{locale}/hosting or /{locale}/dedicated with the other parameters kept."
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "enum": [
                1,
                3,
                6,
                12
              ]
            },
            "description": "Billing period in months the price is computed for (1 = monthly)."
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "price",
                "price_desc",
                "ram_value",
                "cpu_value",
                "disk_value",
                "ram",
                "disk",
                "ghz",
                "ram_value_rev",
                "cpu_value_rev",
                "disk_value_rev",
                "ram_rev",
                "disk_rev",
                "ghz_rev"
              ]
            },
            "description": "price (default), price_desc, ram_value / cpu_value / disk_value = cheapest per GB RAM / core / GB disk, ram, disk, ghz; «_rev» reverses a field."
          },
          {
            "name": "one",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            },
            "description": "At most one plan per host."
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500
            },
            "description": "Page of the result (format=json: 10 plans a page)."
          }
        ],
        "responses": {
          "200": {
            "description": "format=json: the search result; format=md: the landing as Markdown.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VpsSearchResult"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "301": {
            "description": "Renamed landing, or kind=hosting|dedicated on /vps."
          },
          "302": {
            "description": "A landing that exists only in Russian, asked in another language."
          }
        }
      }
    },
    "/{locale}/vps/{landing}": {
      "get": {
        "operationId": "searchVpsLanding",
        "tags": [
          "VPS"
        ],
        "summary": "A ready-made VPS selection (landing)",
        "description": "A landing is the finder with a preset filter: for-docker, for-website, for-game-server, germany, netherlands, cheap, nvme, 4-gb-ram, nvme-germany… (list: https://accsly.io/en/vps/all). Query parameters add to or override the preset. Shared hosting landings live at /{locale}/hosting/{path} (wordpress, cheap, russia…), dedicated at /{locale}/dedicated/{path}, GPU servers at /{locale}/gpu/{path}.",
        "parameters": [
          {
            "name": "locale",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ru",
                "en",
                "de",
                "tr",
                "es",
                "pt"
              ]
            },
            "description": "Site language; also the price currency."
          },
          {
            "name": "landing",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+$"
            },
            "description": "Landing slug."
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "md"
              ]
            },
            "description": "json = the search as data (10 plans a page); md = the page as Markdown. Without it the HTML page."
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 60
            },
            "description": "Free text over plan and host names, disk type, virtualization («aeza», «timeweb nvme»; Cyrillic spellings are matched too)."
          },
          {
            "name": "price",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Maximum monthly price in the locale currency (RUB on /ru, USD on /en, EUR on /de, /es, /pt, TRY on /tr)."
          },
          {
            "name": "price_min",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Minimum monthly price in the locale currency."
          },
          {
            "name": "ram",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Minimum RAM, GB."
          },
          {
            "name": "cpu",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Minimum vCPU cores."
          },
          {
            "name": "ghz",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Minimum core frequency, GHz."
          },
          {
            "name": "disk",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Minimum disk, GB."
          },
          {
            "name": "port",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Minimum port speed, Mbit/s."
          },
          {
            "name": "sites",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Shared hosting: at least this many sites."
          },
          {
            "name": "db",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "description": "Shared hosting: at least this many databases."
          },
          {
            "name": "traffic",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^(unlim|\\d+(\\.\\d+)?)$"
            },
            "description": "«unlim» = unmetered traffic, or a minimum in TB."
          },
          {
            "name": "disk_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ssd",
                "nvme",
                "hdd"
              ]
            },
            "description": "ssd = SSD or NVMe, nvme = NVMe only, hdd."
          },
          {
            "name": "region",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "abroad",
                "eu",
                "cis",
                "asia",
                "america"
              ]
            },
            "description": "abroad = outside Russia, eu, cis, asia, america."
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Server locations (any of them), ISO 3166-1 alpha-2, comma-separated. Values: RU, NL, DE, FI, US, PL, FR, GB, KZ, TR, LV, EE, LT, SE, CH, CZ, BG, MD, RO, AT, ES, IT, GR, HU, SK, RS, BE, DK, NO, IE, IS, PT, HR, SI, ME, MK, AL, CY, UA, BY, AM, GE, UZ, KG, IL, AE, HK, SG, JP, KR, CN, IN, ID, MY, TH, PK, AU, CA, MX, BR, AR, CL, CO, PE, EC, BO, CR, GT, PR, ZA, LU, LI, BA, TW, VN, PH, KH, MM, BD, NP, SA, QA, BH, KW, OM, IQ, EG, NG, NZ, AQ, AZ, MT, LA, IR, LB, PA, PY, UY, CW, KE, CG, MA, GH.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "os",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Operating systems offered (all of them). Values: linux, windows, freebsd, iso.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "virt",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Virtualization (any of them). Values: kvm, openvz, lxc, hyperv, vmware, xen.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "pay",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Payment methods (any of them): card_ru = Russian MIR card, sbp = Russian fast payments, card_world = non-Russian card. Values: card_ru, sbp, card_world, crypto, yoomoney, webmoney, paypal, invoice.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "opt",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Required features (all of them); hourly = hourly billing, smtp = port 25 open. Values: ipv6, ddos, hourly, trial, moneyback, win_license, panel, no_kyc, smtp, api, instant, ru_clients, gpu, ssl, mail, ru_support, rub.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "host",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Host slugs (any of them), as in host_page URLs."
            }
          },
          {
            "name": "jur",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Country of the host's legal entity, ISO codes; «!RU» = not Russia."
            }
          },
          {
            "name": "distro",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "OS templates (crawl data). Values: ubuntu, debian, almalinux, rocky, centos, fedora, opensuse, arch, oracle, alpine, cloudlinux, kali, astra, mikrotik, pfsense, proxmox, win2016, win2019, win2022, win2025, win10, win11.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "panel",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Control panels (crawl data). Values: cpanel, plesk, directadmin, ispmanager, fastpanel, hestiacp, cyberpanel, aapanel, webmin, cloudpanel.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "chip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "CPU families (crawl data). Values: ryzen, epyc, xeon, xeon_gold, intel_core.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "city",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Data-centre cities. Values: moscow, saint-petersburg, novosibirsk, kazan, yekaterinburg, amsterdam, frankfurt, falkenstein, nuremberg, helsinki, london, paris, warsaw, stockholm, riga, bucharest, sofia, madrid, milan, istanbul, almaty, dubai, new-york, los-angeles, miami, dallas, chicago, ashburn, seattle, toronto, tokyo, sydney, mumbai, sao-paulo.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "coin",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Accepted cryptocurrencies. Values: usdt, btc, eth, ltc, xmr, ton, trx.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "card",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "GPU models. Values: rtx-pro-6000, h100, a100, l40s, l4, a10, t4, a16, a2, rtx-4000-ada, v100, named.",
              "pattern": "^[A-Za-z0-9_!-]+(,[A-Za-z0-9_!-]+)*$"
            }
          },
          {
            "name": "task",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "vpn",
                "site",
                "bot",
                "games",
                "windows",
                "docker",
                "storage",
                "proxy",
                "parsing",
                "db",
                "mail",
                "dev",
                "ai",
                "game-minecraft",
                "game-cs2",
                "game-cs16",
                "game-rust",
                "game-palworld",
                "game-ark",
                "game-valheim",
                "game-dayz",
                "game-gta5",
                "game-samp",
                "game-terraria",
                "game-zomboid",
                "game-7dtd",
                "game-gmod",
                "game-satisfactory",
                "game-enshrouded",
                "game-factorio",
                "game-vrising",
                "game-unturned",
                "game-l4d2",
                "game-dst",
                "game-arma3"
              ]
            },
            "description": "Preset filter of a typical job (vpn = corporate VPN, site, bot, games, windows, docker, storage, proxy, parsing, db, mail, dev, ai) or a game server (game-minecraft…). Explicit parameters override it."
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "hosting",
                "dedicated"
              ]
            },
            "description": "On /{locale}/vps: 301 to /{locale}/hosting or /{locale}/dedicated with the other parameters kept."
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "enum": [
                1,
                3,
                6,
                12
              ]
            },
            "description": "Billing period in months the price is computed for (1 = monthly)."
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "price",
                "price_desc",
                "ram_value",
                "cpu_value",
                "disk_value",
                "ram",
                "disk",
                "ghz",
                "ram_value_rev",
                "cpu_value_rev",
                "disk_value_rev",
                "ram_rev",
                "disk_rev",
                "ghz_rev"
              ]
            },
            "description": "price (default), price_desc, ram_value / cpu_value / disk_value = cheapest per GB RAM / core / GB disk, ram, disk, ghz; «_rev» reverses a field."
          },
          {
            "name": "one",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            },
            "description": "At most one plan per host."
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500
            },
            "description": "Page of the result (format=json: 10 plans a page)."
          }
        ],
        "responses": {
          "200": {
            "description": "format=json: the search result; format=md: the landing as Markdown.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VpsSearchResult"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "301": {
            "description": "Renamed landing, or kind=hosting|dedicated on /vps."
          },
          "302": {
            "description": "A landing that exists only in Russian, asked in another language."
          }
        }
      }
    },
    "/{locale}/vps/hosting/{slug}": {
      "get": {
        "summary": "A VPS host page",
        "description": "Host card: legal entity, countries, payment, terms, rating place, plans with order links, FAQ.",
        "tags": [
          "Markdown pages"
        ],
        "parameters": [
          {
            "name": "locale",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ru",
                "en",
                "de",
                "tr",
                "es",
                "pt"
              ]
            },
            "description": "Site language; also the price currency."
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+$"
            },
            "description": "Host slug (host_page in search results)."
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "md"
              ]
            },
            "description": "md = this page as clean Markdown (text/markdown, noindex). Without it the HTML page."
          }
        ],
        "responses": {
          "200": {
            "description": "The page as Markdown (with format=md) or HTML.",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "301": {
            "description": "Moved (old slug, reversed comparison pair)."
          },
          "302": {
            "description": "The page does not exist in this language: redirect to the English or Russian one."
          },
          "404": {
            "description": "No such page."
          }
        }
      }
    },
    "/{locale}/vps/hosting/{slug}/alternatives": {
      "get": {
        "summary": "Alternatives to a host",
        "description": "Hosts with servers in the same countries and similar prices.",
        "tags": [
          "Markdown pages"
        ],
        "parameters": [
          {
            "name": "locale",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ru",
                "en",
                "de",
                "tr",
                "es",
                "pt"
              ]
            },
            "description": "Site language; also the price currency."
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+$"
            },
            "description": "Host slug."
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "md"
              ]
            },
            "description": "md = this page as clean Markdown (text/markdown, noindex). Without it the HTML page."
          }
        ],
        "responses": {
          "200": {
            "description": "The page as Markdown (with format=md) or HTML.",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "301": {
            "description": "Moved (old slug, reversed comparison pair)."
          },
          "302": {
            "description": "The page does not exist in this language: redirect to the English or Russian one."
          },
          "404": {
            "description": "No such page."
          }
        }
      }
    },
    "/{locale}/vps/rating": {
      "get": {
        "summary": "VPS host rating",
        "description": "Hosts scored 0–10 from catalog data; the method is on the page.",
        "tags": [
          "Markdown pages"
        ],
        "parameters": [
          {
            "name": "locale",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ru",
                "en",
                "de",
                "tr",
                "es",
                "pt"
              ]
            },
            "description": "Site language; also the price currency."
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "md"
              ]
            },
            "description": "md = this page as clean Markdown (text/markdown, noindex). Without it the HTML page."
          }
        ],
        "responses": {
          "200": {
            "description": "The page as Markdown (with format=md) or HTML.",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "301": {
            "description": "Moved (old slug, reversed comparison pair)."
          },
          "302": {
            "description": "The page does not exist in this language: redirect to the English or Russian one."
          },
          "404": {
            "description": "No such page."
          }
        }
      }
    },
    "/{locale}/vps/rating/{slug}": {
      "get": {
        "summary": "VPS host rating by category",
        "description": "cheap, russia, abroad (ru only), europe, usa, netherlands, germany, vpn, windows, hourly, crypto (not on ru), game-server.",
        "tags": [
          "Markdown pages"
        ],
        "parameters": [
          {
            "name": "locale",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ru",
                "en",
                "de",
                "tr",
                "es",
                "pt"
              ]
            },
            "description": "Site language; also the price currency."
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+$"
            },
            "description": "Rating category."
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "md"
              ]
            },
            "description": "md = this page as clean Markdown (text/markdown, noindex). Without it the HTML page."
          }
        ],
        "responses": {
          "200": {
            "description": "The page as Markdown (with format=md) or HTML.",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "301": {
            "description": "Moved (old slug, reversed comparison pair)."
          },
          "302": {
            "description": "The page does not exist in this language: redirect to the English or Russian one."
          },
          "404": {
            "description": "No such page."
          }
        }
      }
    },
    "/{locale}/vps/compare/{pair}": {
      "get": {
        "summary": "Compare two VPS hosts",
        "description": "Like-for-like comparison: cheapest plan per RAM size, locations, payment, terms, rating. Pairs: https://accsly.io/en/vps/compare",
        "tags": [
          "Markdown pages"
        ],
        "parameters": [
          {
            "name": "locale",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ru",
                "en",
                "de",
                "tr",
                "es",
                "pt"
              ]
            },
            "description": "Site language; also the price currency."
          },
          {
            "name": "pair",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+-vs-[a-z0-9-]+$"
            },
            "description": "«a-vs-b», e.g. digitalocean-vs-hetzner; the reversed pair answers 301."
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "md"
              ]
            },
            "description": "md = this page as clean Markdown (text/markdown, noindex). Without it the HTML page."
          }
        ],
        "responses": {
          "200": {
            "description": "The page as Markdown (with format=md) or HTML.",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "301": {
            "description": "Moved (old slug, reversed comparison pair)."
          },
          "302": {
            "description": "The page does not exist in this language: redirect to the English or Russian one."
          },
          "404": {
            "description": "No such page."
          }
        }
      }
    },
    "/{locale}/vps/prices": {
      "get": {
        "summary": "VPS price index",
        "description": "Median prices by RAM size, disk type and country. Exists in ru and en.",
        "tags": [
          "Markdown pages"
        ],
        "parameters": [
          {
            "name": "locale",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ru",
                "en",
                "de",
                "tr",
                "es",
                "pt"
              ]
            },
            "description": "Site language; also the price currency."
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "md"
              ]
            },
            "description": "md = this page as clean Markdown (text/markdown, noindex). Without it the HTML page."
          }
        ],
        "responses": {
          "200": {
            "description": "The page as Markdown (with format=md) or HTML.",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "301": {
            "description": "Moved (old slug, reversed comparison pair)."
          },
          "302": {
            "description": "The page does not exist in this language: redirect to the English or Russian one."
          },
          "404": {
            "description": "No such page."
          }
        }
      }
    },
    "/{locale}/vps/guide/{slug}": {
      "get": {
        "summary": "VPS guide article",
        "description": "Reference articles: how-to-choose-vps, vps-vs-vds, check-vps-speed-before-buying, hosting-to-vps-when, vps-for-telegram-bot, windows-vps-license-rdp, corporate-vpn-on-vps…",
        "tags": [
          "Markdown pages"
        ],
        "parameters": [
          {
            "name": "locale",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ru",
                "en",
                "de",
                "tr",
                "es",
                "pt"
              ]
            },
            "description": "Site language; also the price currency."
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+$"
            },
            "description": "Article slug."
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "md"
              ]
            },
            "description": "md = this page as clean Markdown (text/markdown, noindex). Without it the HTML page."
          }
        ],
        "responses": {
          "200": {
            "description": "The page as Markdown (with format=md) or HTML.",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "301": {
            "description": "Moved (old slug, reversed comparison pair)."
          },
          "302": {
            "description": "The page does not exist in this language: redirect to the English or Russian one."
          },
          "404": {
            "description": "No such page."
          }
        }
      }
    },
    "/{locale}/hosting/rating": {
      "get": {
        "summary": "Shared web hosting rating",
        "description": "Shared hosting providers scored 0–10. Exists in ru and en.",
        "tags": [
          "Markdown pages"
        ],
        "parameters": [
          {
            "name": "locale",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ru",
                "en",
                "de",
                "tr",
                "es",
                "pt"
              ]
            },
            "description": "Site language; also the price currency."
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "md"
              ]
            },
            "description": "md = this page as clean Markdown (text/markdown, noindex). Without it the HTML page."
          }
        ],
        "responses": {
          "200": {
            "description": "The page as Markdown (with format=md) or HTML.",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "301": {
            "description": "Moved (old slug, reversed comparison pair)."
          },
          "302": {
            "description": "The page does not exist in this language: redirect to the English or Russian one."
          },
          "404": {
            "description": "No such page."
          }
        }
      }
    },
    "/ru/vps/promo": {
      "get": {
        "summary": "VPS discounts (Russian)",
        "description": "Hosts with promotion signals: long-term discounts, trials, money back, published promotions.",
        "tags": [
          "Markdown pages"
        ],
        "parameters": [
          {
            "name": "format",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "md"
              ]
            },
            "description": "md = this page as clean Markdown (text/markdown, noindex). Without it the HTML page."
          }
        ],
        "responses": {
          "200": {
            "description": "The page as Markdown (with format=md) or HTML.",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "301": {
            "description": "Moved (old slug, reversed comparison pair)."
          },
          "302": {
            "description": "The page does not exist in this language: redirect to the English or Russian one."
          },
          "404": {
            "description": "No such page."
          }
        }
      }
    },
    "/ru/vps/hosting/{slug}/promo": {
      "get": {
        "summary": "Discounts of one host (Russian)",
        "description": "Promotion text, monthly price by prepaid period, trial and money back.",
        "tags": [
          "Markdown pages"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+$"
            },
            "description": "Host slug."
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "md"
              ]
            },
            "description": "md = this page as clean Markdown (text/markdown, noindex). Without it the HTML page."
          }
        ],
        "responses": {
          "200": {
            "description": "The page as Markdown (with format=md) or HTML.",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "301": {
            "description": "Moved (old slug, reversed comparison pair)."
          },
          "302": {
            "description": "The page does not exist in this language: redirect to the English or Russian one."
          },
          "404": {
            "description": "No such page."
          }
        }
      }
    },
    "/api/search": {
      "get": {
        "operationId": "searchAccounts",
        "tags": [
          "Accounts"
        ],
        "summary": "Search the accounts catalog",
        "description": "Platforms and categories matching the query and up to 20 in-stock offers across shops, grouped by platform.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "description": "Platform or product words; the other keyboard layout is tried too."
          },
          {
            "name": "locale",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ru",
                "en",
                "de",
                "tr",
                "es",
                "pt"
              ]
            },
            "description": "Language of names, links and the price currency."
          }
        ],
        "responses": {
          "200": {
            "description": "Search result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountSearchResult"
                }
              }
            }
          }
        }
      }
    },
    "/mcp": {
      "post": {
        "operationId": "mcp",
        "tags": [
          "MCP"
        ],
        "summary": "MCP server (JSON-RPC 2.0, Streamable HTTP)",
        "description": "Model Context Protocol endpoint, stateless, no auth, read-only tools: search_vps, get_vps_host, compare_hosts, host_promo, vps_rating, search_accounts, list_offers. Protocol versions 2026-07-28 (per-request _meta; MCP-Protocol-Version, Mcp-Method and Mcp-Name headers must match the body), 2025-11-25, 2025-06-18, 2025-03-26 (initialize handshake). GET and DELETE answer 405. 60 requests a minute per IP.",
        "parameters": [
          {
            "name": "MCP-Protocol-Version",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "2026-07-28",
                "2025-11-25",
                "2025-06-18",
                "2025-03-26"
              ]
            }
          },
          {
            "name": "Mcp-Method",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Required with protocol 2026-07-28."
          },
          {
            "name": "Mcp-Name",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Tool name for tools/call, required with protocol 2026-07-28."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JsonRpcRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "JSON-RPC response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JsonRpcResponse"
                }
              }
            }
          },
          "202": {
            "description": "Notification accepted (no body)."
          },
          "400": {
            "description": "Parse error, invalid request, header mismatch (-32020) or unsupported protocol version (-32022).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JsonRpcResponse"
                }
              }
            }
          },
          "404": {
            "description": "Unknown method (protocol 2026-07-28).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JsonRpcResponse"
                }
              }
            }
          },
          "405": {
            "description": "Only POST is served."
          },
          "429": {
            "description": "Rate limit."
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "VpsPlan": {
        "type": "object",
        "properties": {
          "host": {
            "type": "string"
          },
          "host_slug": {
            "type": "string"
          },
          "host_page": {
            "type": "string",
            "format": "uri"
          },
          "plan": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "vps",
              "hosting",
              "dedicated"
            ]
          },
          "price_per_month": {
            "type": "string",
            "description": "Formatted in the locale currency, «4.50 $»."
          },
          "price_value": {
            "type": "number",
            "description": "Monthly price in the locale currency."
          },
          "price_rub": {
            "type": "integer",
            "description": "Monthly price in roubles (the catalog unit)."
          },
          "price_note": {
            "type": [
              "string",
              "null"
            ],
            "description": "Prepaid term, long-term price or the period total."
          },
          "cpu_cores": {
            "type": "number"
          },
          "cpu_ghz": {
            "type": [
              "number",
              "null"
            ]
          },
          "ram_gb": {
            "type": "number"
          },
          "disk_gb": {
            "type": "number"
          },
          "disk_type": {
            "type": "string",
            "enum": [
              "nvme",
              "ssd",
              "hdd"
            ]
          },
          "traffic_tb": {
            "description": "TB a month, «unlimited», or null when the host does not say.",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "enum": [
                  "unlimited"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "virtualization": {
            "type": "string"
          },
          "gpu": {
            "type": [
              "string",
              "null"
            ]
          },
          "countries": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "payment_methods": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "card_ru",
                "sbp",
                "card_world",
                "crypto",
                "yoomoney",
                "webmoney",
                "paypal",
                "invoice"
              ]
            }
          },
          "source_price": {
            "type": [
              "string",
              "null"
            ],
            "description": "The host's own price as published: «12.5 USD» a month, «35 USD/3» for 3 months."
          },
          "prepay_months": {
            "type": [
              "integer",
              "null"
            ]
          },
          "price_year_rub": {
            "type": "integer"
          },
          "setup_fee_rub": {
            "type": [
              "integer",
              "null"
            ]
          },
          "hourly": {
            "type": "boolean"
          },
          "ipv4": {
            "type": [
              "integer",
              "null"
            ],
            "description": "0 = IPv6 only."
          },
          "order_url": {
            "type": "string",
            "format": "uri",
            "description": "Redirect to the plan on the host's site."
          }
        }
      },
      "VpsSearchResult": {
        "type": "object",
        "required": [
          "total",
          "page",
          "pages",
          "currency",
          "page_url",
          "plans"
        ],
        "properties": {
          "query": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "The normalised filter (preset values included)."
          },
          "total": {
            "type": "integer"
          },
          "page": {
            "type": "integer"
          },
          "pages": {
            "type": "integer"
          },
          "currency": {
            "type": "string",
            "enum": [
              "RUB",
              "USD",
              "EUR",
              "TRY"
            ]
          },
          "page_url": {
            "type": "string",
            "format": "uri"
          },
          "plans": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VpsPlan"
            }
          }
        }
      },
      "AccountSearchResult": {
        "type": "object",
        "properties": {
          "platforms": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "platform",
                    "category"
                  ]
                },
                "name": {
                  "type": "string"
                },
                "icon": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "group": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "platform": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "products": {
                  "type": "integer"
                },
                "url": {
                  "type": "string"
                }
              }
            }
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "platform": {
                  "type": "string"
                },
                "icon": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "slug": {
                  "type": "string"
                },
                "url": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "items": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "integer"
                      },
                      "title": {
                        "type": "string"
                      },
                      "price": {
                        "type": "string"
                      },
                      "price_raw": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "quantity": {
                        "type": "integer"
                      },
                      "slug": {
                        "type": "string"
                      },
                      "shop": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      }
                    }
                  }
                }
              }
            }
          },
          "total": {
            "type": "integer"
          },
          "query": {
            "type": "string"
          },
          "query_alt": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "JsonRpcRequest": {
        "type": "object",
        "required": [
          "jsonrpc",
          "method"
        ],
        "properties": {
          "jsonrpc": {
            "const": "2.0"
          },
          "id": {
            "type": [
              "string",
              "integer"
            ]
          },
          "method": {
            "type": "string",
            "examples": [
              "initialize",
              "tools/list",
              "tools/call",
              "server/discover",
              "ping"
            ]
          },
          "params": {
            "type": "object"
          }
        }
      },
      "JsonRpcResponse": {
        "type": "object",
        "required": [
          "jsonrpc"
        ],
        "properties": {
          "jsonrpc": {
            "const": "2.0"
          },
          "id": {
            "type": [
              "string",
              "integer",
              "null"
            ]
          },
          "result": {
            "type": "object"
          },
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "integer"
              },
              "message": {
                "type": "string"
              },
              "data": {}
            }
          }
        }
      }
    }
  }
}
