Laravel за два тижні оновив усі три свої AI-пакети: Boost 2.10.4, Laravel MCP 1.1.0 - 1.1.2 і Laravel AI SDK 1.3.0. Великих нових можливостей тут немає, зате є зміни поведінки: агент отримує інший набір інструментів, OAuth у MCP став суворішим, а AI SDK тепер відмовляється завантажувати надто великі файли.
На початку жовтня ми вже писали про виправлення безпеки в Laravel AI SDK та Laravel MCP. Нинішні випуски продовжують ту роботу, але закривають інші місця.
Boost 2.10.4: агент більше не викликає application-info
Найпомітніша зміна - з MCP-сервера Boost прибрали інструмент application-info. Його опис просив агента викликати інструмент на старті, і бенчмарки команди показали, що агенти так і робили - у кожній сесії. Відповідь при цьому лишалася в контексті до кінця розмови, а на застосунках з 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, знає проблему: коли дві гілки змінюють правила в .ai/rules, індекс правил майже гарантовано конфліктує при злитті. Тепер його можна згенерувати заново окремою командою:
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). Під час discovery пакет тепер розв'язує хости ендпоїнтів токенів, реєстрації та метаданих і відкидає приватні чи зарезервовані адреси, якщо вони не збігаються з хостом і портом самого ресурсу. Це захист від SSRF: зловмисні метадані більше не змусять ваш сервер звертатися до
127.0.0.1 чи внутрішньої мережі.
- Лише HTTP і HTTPS та ліміт 1 МБ (#380). OAuth-запити клієнта дозволяють curl лише ці два протоколи і відкидають відповіді, більші за 1 МБ.
- Сторінку авторизації не можна вбудувати у фрейм (#376). За замовчуванням вона надсилає
X-Frame-Options: DENY і frame-ancestors 'none', зберігаючи наявну CSP. Це закриває клікджекінг на екрані згоди.
- Redirect URI на екрані згоди (#377). Користувач бачить, куди його перенаправить після надання доступу.
У 1.1.1 обмежили реєстрацію клієнтів: не більше 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, коли автоматично виведений домен не збігається з адресою конектора:
AppMeta::make()->prefersBorder()->withoutDomain();
AI SDK 1.3.0: ліміт на віддалені файли
Тут головна зміна поведінки. Раніше RemoteImage, RemoteDocument, RemoteAudio і RemoteVideo завантажували файл повністю, без жодного ліміту, і завеликий файл забивав пам'ять воркера, а запит падав пізно і з незрозумілою помилкою. Тепер завантаження обривається на 100 МБ з InvalidArgumentException, у тексті якого названо ліміт. Файл, чий Content-Length уже більший за ліміт, відхиляється ще до завантаження тіла. Рахуються розкодовані байти, тож стиснена відповідь не обійде обмеження.
Ліміт задається в кілобайтах ключем ai.remote_files.max_size. У випуску його не додали до опублікованого config/ai.php, тож якщо вам потрібно більше, допишіть ключ самі:
// config/ai.php
'remote_files' => [
'max_size' => 500 * 1024, // 500 МБ
],
Інші зміни коротко:
SchemaNormalizer тепер зупиняється після 10 000 вузлів, коли розгортає спільні $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 і ліміти розміру прибирають реальні способи покласти чи використати ваш сервер.