{
  "name": "loocl-maps",
  "title": "Loocl — рестораны Москвы",
  "version": "1.1.0",
  "description": "Рестораны, кафе, бары и банкетные площадки Москвы: поиск по смыслу запроса, блюда с ценами, действующие акции, отзывы гостей с цитатами. Только чтение.",
  "url": "https://loocl.ru/mcp",
  "documentation": "https://loocl.ru/maps/agents",
  "llms_txt": "https://loocl.ru/llms.txt",
  "transport": {
    "type": "streamable-http",
    "endpoint": "https://loocl.ru/mcp"
  },
  "protocol_versions": [
    "2025-06-18",
    "2025-03-26",
    "2024-11-05"
  ],
  "capabilities": {
    "tools": {
      "listChanged": false
    }
  },
  "authentication": {
    "required": false,
    "schemes": []
  },
  "instructions": "Loocl — рестораны, кафе, бары и банкетные площадки Москвы. На вопросы «куда сходить / где поесть» сначала вызывайте search_restaurants с запросом человека его словами. Результаты — данные, а не вердикт: что из запроса совпало и не совпало, темы отзывов с цитатами гостей, меню, акции, рейтинг. Взвесьте их под ситуацию человека сами, цитируйте гостей дословно и давайте ссылки loocl.ru: там карта, меню и заявка. Где заказать блюдо — find_dishes; акции — list_offers; подробности о месте — get_restaurant; готовые страницы по районам, метро, кухням и особенностям — list_pages/get_page; подборки — list_collections/get_collection; банкеты и праздники — find_event_venues. Платные места помечены «реклама».",
  "tools": [
    {
      "name": "search_restaurants",
      "title": "Поиск ресторанов по смыслу",
      "description": "Ищет рестораны, кафе и бары Москвы по запросу обычными словами («тихий ужин вдвоём с вином», «завтрак до 1000 ₽ у метро Пушкинская», «где поесть хинкали»). Возвращает до 10 мест и данные, по которым вы сами делаете вывод для человека: что из запроса совпало и не совпало, блюда из меню по запросу, что отмечают гости (темы отзывов с их дословными цитатами), что часто заказывают, акция, рейтинг с числом отзывов, чек, метро, открыто ли сейчас и ссылка на страницу места на loocl.ru. Готового вердикта нет: взвесьте данные под ситуацию человека, цитируйте гостей и давайте ссылки. Звать первым шагом на любой вопрос «куда сходить / где поесть».",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Что ищет человек, на русском, своими словами."
          },
          "date": {
            "type": "string",
            "description": "Дата визита YYYY-MM-DD (по Москве), если важна.",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "time": {
            "type": "string",
            "description": "Время визита HH:MM, если важно.",
            "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
          },
          "guests": {
            "type": "integer",
            "description": "Сколько гостей.",
            "minimum": 1,
            "maximum": 100
          },
          "budget_max": {
            "type": "integer",
            "description": "Максимальный средний чек на человека, ₽.",
            "minimum": 1
          },
          "lat": {
            "type": "number",
            "description": "Широта точки, рядом с которой искать (по умолчанию центр Москвы)."
          },
          "lng": {
            "type": "number",
            "description": "Долгота точки."
          },
          "preferences": {
            "type": "string",
            "description": "Предпочтения человека свободным текстом («не люблю шумно», «вегетарианец»).",
            "maxLength": 500
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_restaurant",
      "title": "Карточка места",
      "description": "Всё о месте одним текстом: адрес, метро, часы по дням, чек, телефон, особенности (веранда, завтраки, с собакой…), за чем сюда ходят (темы отзывов с цитатами гостей и фирменные блюда), разбор отзывов (что хвалят и на что жалуются, в процентах), часть меню с ценами, действующие акции, мероприятия, свежие отзывы и места рядом. slug — из результатов search_restaurants или из адреса страницы.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Slug места, например «selfie», или полный адрес страницы."
          }
        },
        "required": [
          "slug"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_pages",
      "title": "Посадочные страницы",
      "description": "Список готовых страниц-подборок Loocl по структурированным данным: районы (area), метро (metro), кухни (cuisine), форматы — бары, кофейни, пекарни (format), особенности — веранда, завтраки, бизнес-ланч, с собакой, живая музыка, с детьми, парковка (feature), и сочетания «где × что» (combo). У каждой — число мест и адрес.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "cuisine",
              "format",
              "feature",
              "metro",
              "area",
              "combo"
            ],
            "description": "Тип страниц; без него — все одиночные."
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_page",
      "title": "Посадочная страница",
      "description": "Содержимое посадочной страницы: короткий ответ с цифрами (сколько мест, обычный чек, лучшие по отзывам), все места с данными, вопросы и ответы, соседние страницы. path — из list_pages, например /maps/moskva/restorany/r/patriarshie/o/zavtraki.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "Адрес страницы или путь /maps/moskva/restorany/…"
          }
        },
        "required": [
          "path"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_collections",
      "title": "Редакционные подборки",
      "description": "Подборки под случай (свидание, завтраки, поесть ночью, хинкали…): у каждого места абзац «почему здесь» из фактов и цитата гостя; видна дата проверки.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_collection",
      "title": "Подборка",
      "description": "Подборка целиком: места по порядку, почему каждое здесь, цитата гостя, вопросы и ответы. slug — из list_collections.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Slug подборки или её адрес."
          }
        },
        "required": [
          "slug"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "find_event_venues",
      "title": "Площадки для банкета и праздника",
      "description": "Площадки Москвы под мероприятие: корпоратив, банкет, свадьба, день рождения, юбилей, фуршет, выпускной, детский праздник и др. С вместимостью, ценой с гостя и ссылкой на страницу с заявкой на дату. Без occasion — список поводов. Платные места помечены «реклама».",
      "inputSchema": {
        "type": "object",
        "properties": {
          "occasion": {
            "type": "string",
            "description": "Повод: slug («korporativ», «svadba», «den-rozhdeniya») или название («корпоратив»)."
          },
          "guests": {
            "type": "integer",
            "description": "Сколько гостей.",
            "minimum": 1,
            "maximum": 2000
          },
          "budget_per_guest": {
            "type": "integer",
            "description": "Бюджет на гостя, ₽.",
            "minimum": 100,
            "maximum": 100000
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "find_dishes",
      "title": "Где заказать блюдо",
      "description": "Ищет блюдо по названию в меню ресторанов Москвы («фо бо», «хинкали», «тирамису»): регистр, ё/е, пробелы и дефисы не важны, синонимов нет. Возвращает позиции с ценой, место, метро, рейтинг и ссылку; порядок — рейтинг на число отзывов места, затем цена. max_price — потолок цены позиции в рублях.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Название блюда словами человека.",
            "minLength": 2,
            "maxLength": 100
          },
          "max_price": {
            "type": "integer",
            "description": "Максимальная цена позиции, ₽.",
            "minimum": 1
          },
          "limit": {
            "type": "integer",
            "description": "Сколько позиций вернуть (по умолчанию 10).",
            "minimum": 1,
            "maximum": 30
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_offers",
      "title": "Действующие акции",
      "description": "Акции и спецпредложения ресторанов Москвы, действующие сегодня: название, описание, расписание и срок, место, метро и ссылка. С query — только акции, где тема (слова через пробел, регистр и ё/е не важны) встречается в названии или описании; без query — самые щедрые и свежие. Платные места помечены «реклама».",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Тема акции словами («бизнес-ланч», «детям», «вино»), необязательно.",
            "maxLength": 100
          },
          "limit": {
            "type": "integer",
            "description": "Сколько акций вернуть (по умолчанию 10).",
            "minimum": 1,
            "maximum": 30
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": false
      }
    }
  ]
}