Сообщество RSS DEV
Подписаться
Две неучтенные ошибки в приложениях MCP, которые я обнаружил при создании панели задач для Claude
Автор разработал Wingman, сервер MCP с открытым исходным кодом, который отображает постоянную панель задач в диалогах Claude. Это включало использование MCP Apps и связанного с ними SDK, которые автор нашел надежными. Однако два значительных недокументированных бага отняли много времени на разработку. Первый баг касался размещения `resourceUri`, которое должно находиться на верхнем уровне `_meta` объекта `CallToolResult`, а не внутри `structuredContent`. Возврат простого словаря из инструмента может привести к неправильному вложенному размещению `_meta`, из-за чего хост не сможет найти ресурс для отображения.
Исправление заключается в возврате правильного объекта `CallToolResult` с корректно расположенным `_meta`. Второй серьезный баг возник из-за проблем со специфичностью CSS, которые переопределяли атрибут `[hidden]`. Явные правила `display` в пользовательских таблицах стилей мешали скрывать элементы, как это предполагалось JavaScript. Одна строка, добавляющая `!important` к CSS-правилу `[hidden]`, одновременно решила три отдельные проблемы пользовательского интерфейса.
Кроме того, были обнаружены три ограничения песочницы iframe в хостах MCP Apps: `confirm()` завершается без ошибок (тихо), `navigator.clipboard.writeText` недоступен, а загрузки `Blob`/`URL.createObjectURL` заблокированы. Эти ограничения требуют обходных путей, таких как использование встроенных подтверждений и маршрутизация контента обратно через `sendMessage`. Автор подчеркивает, что эти сбои API обычно приводят к тихому отказу в работе, а не к ошибкам, что затрудняет их диагностику. В конечном итоге, оба серьезных бага были связаны с проблемами, находящимися на один уровень дальше от начальной точки проверки, что подчеркивает важность проверки этих промежуточных уровней при отладке. Wingman распространяется под лицензией MIT и доступен на PyPI.