Усі статті
AnthropicClaudeAItool use

Anthropic tool use локально: тунелі для Claude

Tool use у Claude — це не вебхук. Ваш бекенд надсилає повідомлення, Claude відповідає, іноді із запитом викликати інструмент, ваш код виконує інструмент і надсилає результат назад. Усе це йде вихідним HTTPS з вашої машини. То чому ж ця стаття про тунелі?

Бо щойно ви будуєте щось справжнє з Claude — кодового агента, автоматизацію підтримки, MCP-сервер, довгий воркфлоу — вам починає бракувати вхідної звʼязності. Для браузерних клієнтів. Для MCP-серверів, відкритих іншим застосункам. Для вебхуків від сторонніх інструментів, які викликає модель.

Де тунель справді допомагає

Браузерні фронтенди для застосунків із Claude

Та сама форма, що й налаштування OpenAI Realtime. Ваш фронтенд не може тримати API-ключ Anthropic, тож він спілкується з бекендом, а той — з Anthropic. Фронтенду потрібен HTTPS, щоб потокові відповіді гарно відображались (деякі браузери погіршують обробку SSE по звичайному HTTP), а бекенду потрібен HTTPS, якщо фронтенд на HTTPS. Тунель робить і те, і те.

MCP-сервери, що працюють локально

Model Context Protocol дозволяє Claude (та іншим клієнтам) підключатися до інструментів, які ви відкриваєте як MCP-сервери. Для MCP-серверів із HTTP-транспортом — на відміну від stdio — клієнт має дістатися вашого сервера. Якщо ви прототипуєте MCP-сервер і хочете протестувати його з Claude Desktop чи іншим віддаленим клієнтом, відкрити локальний MCP-сервер через тунель — шлях найменшого опору.

Колбеки computer use

Якщо ви використовуєте бету computer use у Claude і модель взаємодіє із сервісом, який шле вебхуки назад на вашу машину, ви на території вебхуків. Ті самі патерни, що й у будь-якого провайдера: захоплення, повтор, перевірка (якщо застосовно).

Чого тунель не робить

Тунель не потрібен лише щоб викликати Claude з локального скрипта. curl https://api.anthropic.com/v1/messages працює з будь-якої машини. SDK для Python і TypeScript працюють нормально. Сам tool use — вихідна взаємодія: Claude не телефонує на вашу машину, коли хоче скористатися інструментом; викликає ваш код на основі відповіді Claude.

Уперше це збиває з пантелику. Патерн такий:

  1. Ваш код надсилає Claude повідомлення користувача зі списком доступних інструментів.
  2. Claude відповідає, можливо з блоком tool_use, що описує інструмент для виклику.
  3. Ваш код виконує інструмент у вашій локальній системі.
  4. Ваш код надсилає результат інструмента назад Claude наступним повідомленням.
  5. Цикл до завершення.

Усі пʼять кроків відбуваються в одному процесі Python чи TypeScript. Жодного вхідного трафіку. Жодного тунелю.

Справжня причина, чому тунелювання допомагає воркфлоу з Claude

Причина, чому ми зрештою запускаємо тунель під час розробки з Claude, — не сама модель. Це все навколо неї: дашборд із прогресом агента, фронтенд, що стримить виводи інструментів, відкритий для тестів MCP-сервер, вебхук від стороннього інструмента, який викликав агент («надішли повідомлення в Slack», «створи задачу в Linear»). Агент запускає ланцюгову реакцію, і десь у цьому ланцюзі зовнішній сервіс зрештою хоче дістатися вашої машини.

Налаштування циклу розробки MCP-сервера

  1. Реалізуйте MCP-сервер із HTTP-транспортом.
  2. Запустіть його локально на обраному порту.
  3. npx portpreview 3000 (або ваш порт).
  4. У Claude Desktop або іншому MCP-клієнті вкажіть URL віддаленого сервера, що веде на ваш тунель.
  5. Надсилайте команди. Спостерігайте захоплення запитів у тунелі та відповіді вашого сервера.

Якщо ваш MCP-сервер на stdio-транспорті, це не стосується — stdio-сервери спілкуються через пайпи процесів і за задумом лишаються локальними.

Потокові відповіді й тунелі

Claude стримить відповіді через SSE. Тунелі мають коректно обробляти довгоживучу потокову відповідь — більшість уміє, але деякі старі HTTP-проксі буферизують відповідь і віддають лише наприкінці, що зводить нанівець сенс стримінгу. PortPreview, Cloudflare і ngrok обробляють SSE без буферизації. Якщо ваш фронтенд отримує всю відповідь одним шматком після довгого очікування — тунель буферизує. Це проблема тунелю, а не Claude.

Налагодження циклу агента

Найскладніше в розробці tool use у Claude — не API. А розуміння того, що модель вирішила зробити на кожному кроці. Логуйте кожен блок tool_use до виконання. Логуйте кожен результат інструмента до повернення Claude. Якщо між фронтендом і бекендом є тунель, захоплення запитів також дає журнал повідомлень користувача — корисно для повтору прогонів агента без перенабору промптів.

Куди це рухається

Екосистема tool use Anthropic рухається швидко — MCP, computer use, довші контекстні вікна, нижча затримка. Патерни вебхуків зі статті налагодження вебхуків локально і математика підписів із посібника з перевірки підписів застосовні, коли будь-який зовнішній інструмент, викликаний агентом, шле колбек на вашу машину.

Приєднайтеся до списку очікування PortPreview заради тунелю з вбудованим захопленням, повтором і безпечною для SSE передачею.

Поширені запитання

Чи потрібен тунель, щоб користуватися tool use у Claude?
Для основного API — ні. Tool use у Claude — вихідна взаємодія: ваш код викликає Anthropic, Claude відповідає запитами інструментів, ваш код їх виконує, ви надсилаєте результати назад. Усе вихідне. Тунель потрібен лише коли зовнішні сервіси телефонують на вашу машину: браузерні фронтенди, віддалено відкриті MCP-сервери чи сторонні інструменти, що шлють вебхуки назад.
Як протестувати MCP-сервер із Claude локально?
Для MCP-серверів із HTTP-транспортом запустіть сервер локально і відкрийте його через тунель. Налаштуйте Claude Desktop (або інший віддалений MCP-клієнт) URL тунелю. Stdio MCP-серверам тунель не потрібен, бо вони спілкуються через пайпи процесів.
Чи зламають тунелі потокові відповіді Claude?
Більшість сучасних тунелів обробляють SSE-стримінг без буферизації. Якщо фронтенд отримує всю відповідь разом після довгої затримки — тунель буферизує і ламає стримінг. PortPreview та інші сучасні тунелі цього уникають.