---
title: "Boost 2.10.4, Laravel MCP 1.1 і AI SDK 1.3: що змінилося в AI-інструментах Laravel"
url: https://laravelukraine.com/blog/boost-2104-laravel-mcp-11-i-ai-sdk-13-shho-zminilosia-v-ai-instrumentax-laravel
date: 2026-10-30
---

# Boost 2.10.4, Laravel MCP 1.1 і AI SDK 1.3: що змінилося в AI-інструментах Laravel

Laravel за два тижні оновив усі три свої AI-пакети: [Boost 2.10.4](https://github.com/laravel/boost/releases/tag/v2.10.4), [Laravel MCP 1.1.0](https://github.com/laravel/mcp/releases/tag/v1.1.0) - [1.1.2](https://github.com/laravel/mcp/releases/tag/v1.1.2) і [Laravel AI SDK 1.3.0](https://github.com/laravel/ai/releases/tag/v1.3.0). Великих нових можливостей тут немає, зате є зміни поведінки: агент отримує інший набір інструментів, OAuth у MCP став суворішим, а AI SDK тепер відмовляється завантажувати надто великі файли.

На початку жовтня ми вже писали про [виправлення безпеки в Laravel AI SDK та Laravel MCP](https://laravelukraine.com/blog/vipravlennia-bezpeki-v-laravel-ai-sdk-ta-laravel-mcp-onovitsia-zaraz). Нинішні випуски продовжують ту роботу, але закривають інші місця.

### Boost 2.10.4: агент більше не викликає application-info

Найпомітніша зміна - з MCP-сервера Boost [прибрали інструмент `application-info`](https://github.com/laravel/boost/pull/1074). Його опис просив агента викликати інструмент на старті, і бенчмарки команди показали, що агенти так і робили - у кожній сесії. Відповідь при цьому лишалася в контексті до кінця розмови, а на застосунках з Inertia та стартер-кітами займала 13-17 тис. символів, переважно через список npm-пакетів.

Жодних фактів агент від цього не втрачає, бо Boost дає їх іншими шляхами:

- `GuidelineComposer` добирає гайдлайни за мажорною версією кожного встановленого пакета;
- базовий гайдлайн називає версію PHP і радить агенту дивитися `composer show --direct` та `package.json`;
- `search-docs` визначає встановлені пакети через Roster;
- `database-schema` повертає рушій бази даних.

Ресурс лишився: коли ці дані справді потрібні, агент може прочитати `file://instructions/application-info.md`. Якщо у вашому `config/boost.php` інструмент `ApplicationInfo::class` згадано в `boost.mcp.tools.exclude` чи `include`, нічого не зламається - запис просто ігнорується.

### Нова команда для правил проєкту

Хто вже користується [Project Rules у Boost](https://laravelukraine.com/blog/laravel-boost-project-rules-navcit-ai-agentiv-konvencii-vasogo-projektu), знає проблему: коли дві гілки змінюють правила в `.ai/rules`, індекс правил майже гарантовано конфліктує при злитті. Тепер його можна згенерувати заново [окремою командою](https://github.com/laravel/boost/pull/1062):

```bash
  php artisan boost:index-rules
```

Команда спершу перевіряє, чи не лишилося в файлах правил маркерів конфлікту, і відмовляється працювати, поки ви їх не розв'яжете. Файли без коректного `paths` у frontmatter вона пропускає з попередженням, а решту записує в індекс. Порядок дій простий: розв'язуєте конфлікти в самих правилах, індекс не правите руками, запускаєте команду.

Дрібніші зміни випуску:

- базовий гайдлайн згадує `composer run dev` лише тоді, коли в `composer.json` є скрипт `dev`, тож агенти перестануть радити команду, якої у вас немає;
- з гайдлайна Pest прибрали інструкцію просити користувача запускати весь набір тестів через `artisan test --compact`, як раніше зробили з PHPUnit;
- навичка тестування дозволяє unit-тестам розширювати `TestCase` з PHPUnit;
- віддалені скрипти навичок зберігають права на виконання;
- Pest 5 дозволено в dev-залежностях Boost.

### Laravel MCP 1.1.x: суворіший OAuth

Усі три випуски MCP здебільшого про OAuth, і більшість змін прийшла в 1.1.2:

- **Перевірка адрес OAuth discovery** ([#378](https://github.com/laravel/mcp/pull/378)). Під час discovery пакет тепер розв'язує хости ендпоїнтів токенів, реєстрації та метаданих і відкидає приватні чи зарезервовані адреси, якщо вони не збігаються з хостом і портом самого ресурсу. Це захист від SSRF: зловмисні метадані більше не змусять ваш сервер звертатися до `127.0.0.1` чи внутрішньої мережі.
- **Лише HTTP і HTTPS та ліміт 1 МБ** ([#380](https://github.com/laravel/mcp/pull/380)). OAuth-запити клієнта дозволяють curl лише ці два протоколи і відкидають відповіді, більші за 1 МБ.
- **Сторінку авторизації не можна вбудувати у фрейм** ([#376](https://github.com/laravel/mcp/pull/376)). За замовчуванням вона надсилає `X-Frame-Options: DENY` і `frame-ancestors 'none'`, зберігаючи наявну CSP. Це закриває клікджекінг на екрані згоди.
- **Redirect URI на екрані згоди** ([#377](https://github.com/laravel/mcp/pull/377)). Користувач бачить, куди його перенаправить після надання доступу.

У 1.1.1 [обмежили реєстрацію клієнтів](https://github.com/laravel/mcp/pull/373): не більше 10 redirect URI, кожен до 1024 символів. Справжні клієнти вкладаються з запасом - VS Code реєструє чотири.

1.1.0 приніс виправлення сумісності, яке зачепило багатьох користувачів Boost. Починаючи з `laravel/mcp` 1.0 клієнти, що просили протокол MCP 2025-03-26, отримували у відповідь 2025-11-25, і, наприклад, JetBrains Junie через це від'єднувався. Тепер сервер знову погоджує 2025-03-26. Пакетні запити JSON-RPC, які ця версія протоколу дозволяє, як і раніше не підтримуються.

Окремо для MCP Apps у 1.1.2 з'явилася можливість не задавати `ui.domain`, коли автоматично виведений домен не збігається з адресою конектора:

```php
  AppMeta::make()->prefersBorder()->withoutDomain();
```

### AI SDK 1.3.0: ліміт на віддалені файли

Тут головна зміна поведінки. Раніше `RemoteImage`, `RemoteDocument`, `RemoteAudio` і `RemoteVideo` завантажували файл повністю, без жодного ліміту, і завеликий файл забивав пам'ять воркера, а запит падав пізно і з незрозумілою помилкою. [Тепер](https://github.com/laravel/ai/pull/1139) завантаження обривається на 100 МБ з `InvalidArgumentException`, у тексті якого названо ліміт. Файл, чий `Content-Length` уже більший за ліміт, відхиляється ще до завантаження тіла. Рахуються розкодовані байти, тож стиснена відповідь не обійде обмеження.

Ліміт задається в кілобайтах ключем `ai.remote_files.max_size`. У випуску його не додали до опублікованого `config/ai.php`, тож якщо вам потрібно більше, допишіть ключ самі:

```php
  // config/ai.php
  'remote_files' => [
      'max_size' => 500 * 1024, // 500 МБ
  ],
```

Інші зміни коротко:

- `SchemaNormalizer` тепер [зупиняється після 10 000 вузлів](https://github.com/laravel/ai/pull/1145), коли розгортає спільні `$ref`. Невелика схема MCP-інструмента зі спільним `$ref` у сусідніх властивостях могла розростися до 2^30 вузлів і покласти воркер. Тепер `McpTool::schema()` для такого інструмента повертає `[]`.
- **Anthropic:** коли модель виконує серверний інструмент на кшталт `web_search`, текст до і після нього в `$response->text` і в збережених повідомленнях тепер розділяє порожній рядок. Якщо ви порівнюєте відповіді як рядки, це теж зміна поведінки.
- **Gemini:** фільтри метаданих файлового пошуку більше не ламаються на лапках, з'явилася підтримка `whereNotIn()`. Також виправлено помилку `400` у розмовах зі збереженою пам'яттю й інструментами: відновлений хід тепер починається з кроку міркувань, як того вимагають thinking-моделі.

### Що перевірити при оновленні

- **Boost:** якщо у ваших власних гайдлайнах чи навичках агенту наказано викликати `application-info`, перепишіть цю інструкцію. У командах з Project Rules додайте `boost:index-rules` у звичний порядок розв'язання конфліктів.
- **Laravel MCP:** якщо ваш застосунок ходить по OAuth до MCP-сервера у внутрішній мережі на іншому хості, нова перевірка адрес його відкине - протестуйте це до розгортання. Якщо сторінку авторизації навмисно вбудовано у фрейм, тепер це доведеться налаштувати явно.
- **AI SDK:** знайдіть у коді `RemoteVideo` та `RemoteDocument` - саме там найімовірніше трапляються файли понад 100 МБ. Вирішіть, чи піднімати ліміт, чи краще ловити виняток і показувати користувачу зрозуміле повідомлення.

Оновлювати варто всі три пакети: зміни поведінки тут невеликі й передбачувані, а захист OAuth і ліміти розміру прибирають реальні способи покласти чи використати ваш сервер.
