2025-12-03

Запускаем локальный MCP сервер как удаленный

MCP-сервера — это супер-хайповая тема последних дней. Что в ней хайпового? Вы даёте LLM возможность взаимодействовать с реальным миром. Идея проста: LLM умеет формулировать запросы в JSON, а значит, она может почти без магии общаться с внешними инструментами по протоколу JSON-RPC!

Самый простой способ вызова MCP — это через локальный процесс через STDIO. Например, один из самых простых MCP-серверов — @modelcontextprotocol/server-filesystem — умеет работать с файловой системой. Говорим системе: вызови npx -y @modelcontextprotocol/server-filesystem /some/folder/name, и наша LLM теперь видит файловую систему и может её менять так, как вы её попросите.

Но в таком виде вызов MCP-сервера не имеет большого смысла: если вы используете IDE, то там агенты уже и так могут работать с файловой системой. Но что, если мы хотим иметь доступ не локально, а удалённо? В этом случае, установив на удалённый сервер тот же самый MCP-сервер, мы можем просто обращаться к нему через SSH, предварительно забросив на удалённый сервер SSH-ключи, чтобы сервер не спрашивал пароль. Обмен будет всё так же происходить через stdin/stdout, но сессия будет поддерживаться через SSH!

[mcp_servers.remote-filesystem] 
command = "ssh" 
args = ["user@someserver.com", "mcp-server-filesystem /home/user/foldertoaccess"]

Этот способ открывает широкие возможности для создания лёгких универсальных мобильных ассистентов, упрощает администрирование серверов, и ещё можно сделать многое, чему пока не дали названия. Но будьте осторожны — ведь удалить ваши файлы теперь LLM тоже сможет без проблем, поэтому пользуйтесь этой силой с умом!

 

Оставить комментарий

 
  2025-04-16

Самоиграющийся тетрис

Денис Ширяев в своем Telegram канале опубликовал интересный скрипт - тетрис который играет сам в себя постоянно улучшая свою игру при помощи генетического алгоритма. Примечательно то, что все это сделано одним промтом при помощи модели Gemini.

У на моем компьютере скрипт работает уже сутки - из 1000 генераций сделал 350, и все еще играет. Думаю при помощи градиентного спуска можно получить не менее эпичный результат!

 

Оставить комментарий

 
  2025-04-14

Фрактальная фотография

Вот тут чувак делает крутые фрактальные эффекты из стопкадров на видео - что это если не искусство?

 

Оставить комментарий

 
  2025-03-17

Вкалывают роботы

Попробовал новый инструмент Browser Use. Browser Use - это система автоматизации браузера на базе искуственного интеллекта. Для использования нужно использовать Python но есть и версия с интерфейсом. Говоришь системе, что ты хочешь и браузер автоматически делает то что тебе нужно - ищет в сети товары, делает онлайн заказ, ищет для нас работу, или работников, что угодно.

Я прям под впечатлением. Система использует OpenAI ключи, так что за пользование системой придется платить, один запуск стоит несколько центов, что в принципе вполне терпимо. Для автоматизации используется playwright который, оказывается умеет открывать браузер со всеми расширениями и пользовательскими сессиями, не знаю как он это делает но работает это круто!

 

Оставить комментарий

 
  2025-01-01

Программа для синхронизации заметок на телефоне

Долгое время использую для синхронизации связку Termux + git и доволен как слон. Однако настройка всего этого занимает массу времени и подходит только для технических задротов вроде меня. Подумал, существует ли что-то проще? Поиски в сети не дали каких-либо работающих решений, поэтому мне стало интересно, а можно ли запрограммировать что-то с нуля. Оказалось, что вполне реально. Существует реализация JGit под Java, которая вполне работает, если ее встроить в Android-приложение. Единственную проблему, которую я сейчас пытаюсь решить, это то, что файлы должны быть доступны в общем хранилище андроид-устройства, а напрямую доступа в это хранилище у Android-приложения нет, поэтому приходится дополнительно к операциям с git реализовать операции копирования из внутреннего хранилища устройства во внешнее и наоборот. Как сделать проще, я пока не придумал. Из-за этого мое решение работает значительно медленнее, чем решение на базе Termux. В принципе, не сильно критично, но неприятно - у меня в заметках несколько тысяч файлов, и ждать полторы минуты вместо сорока секунд, когда они синхронизируются, мне не хочется...

Если получится ускорить решение опубликую на Play Market вдруг такая программа не только мне окажется полезной?

Upd: Проблему со скоростью решил, теперь работает даже быстрее чем Termux, потестирую еще некорое время на предмет багов, но кажется получилось что-то полезное...

 

Оставить комментарий

 
  2024-10-11

И снова Штирлиц заметил...

У меня есть инстанс GitLab, на котором я хостю свои проекты. Сначала кто-то начал рассылать спам с помощью GitLab Runner, который также хостится там. "Поломали", подумал я. Пришлось сменить пароли и отключить GitLab Runner.

В какой-то момент я заметил, что на инстансе стали появляться новые пользователи, которых я не создавал. "Опять поломали", подумал я! Пришлось удалить всех чужих пользователей, обновить GitLab и проверить логи. Уязвимостей не нашел. Однако пользователи продолжали появляться, а я продолжал их удалять. Использование своего инстанса уже не приносило радости.

И вот, когда мне это надоело, и я решил убрать публичную ссылку под VPN, чтобы извне никто не мог достучаться до инстанса, я обратил внимание, что на главной странице моего GitLab есть ссылка "Зарегистрироваться". То есть, всё это время любой, у кого была ссылка на мой GitLab, мог создавать там пользователей. Я сам не закрыл эту возможность, когда настраивал сервис — балда! Странно, что за всё это время никто не начал майнить биткойны.

 

Оставить комментарий

 
  2024-10-04

NoCode Программирование

В романе Сергея Лукьяненко «Рыцари сорока островов» героям запрещалось смотреть на небо на закате и на восходе, чтобы дети не увидели, как имитация неба на космической станции переключается с ночного режима на дневной и обратно.

У меня в ванной комнате свет тоже имеет два режима работы - ночной и дневной. Мне хочется, чтобы ночью свет в ванной был приглушённым, а не слепил, как днём. Для этого там стоят умные лампочки из ИКЕА, которые имеют управляемые яркость и цветовую температуру. Управляются они при помощи самодельного Zigbee-хаба на базе Zigbee2MQTT. Zigbee2MQTT легко интегрируется с любыми системами умного дома, у меня сейчас ничего умного не стоит, зато есть NodeRed который умеет автоматизировать простые сценарии, а также в нем есть расширение для работы с Zigbee2MQTT, что очень кстати. Всего ламп в ванной четыре: две над зеркалом и две на потолке. Ночью две лампочки над зеркалом выключаются, а лампы на потолке горят с половинной яркостью. Поскольку схема проводки под такую конфигурацию стандартная, включение и выключение света происходит обычным выключателем, к которому дополнительно подключён Zigbee-выключатель без нейтрали. Это маленькое устройство установлено за выключателем в подрозетнике и на использовании выключателя никак не сказывается. Зато оно позволяет включать свет на 30 секунд, чтобы перепрограммировать лампочки на ночной или дневной режим.

Вчера я немного улучшил логику переключения света. Первая реализация алгоритма иногда не срабатывала, так как после подачи напряжения на лампы Zigbee-сети требовалось больше времени для обновления конфигурации. В результате могла возникнуть ситуация, при которой одна из ламп либо не включалась, либо не выключалась, либо переключение вообще не срабатывало. Если переключение не сработало ночью, то худшее, что может случиться, — это то, что вы окончательно проснетесь от яркого света, когда пойдете ночью в туалет. Но если переключение не сработает утром, то чистить зубы придется перед полутемным зеркалом. Чтобы это исправить, я сохранил нужные параметры яркости в глобальных переменных, и если лампе не хватило времени, она скорректирует свою яркость при следующем включении. Вот так выглядит моя текущая конфигурация. Дополнительно потолком можно управлять через панель управления NodeRed и через Telegram-бота.

Что тут скажешь, во-первых, это красиво...

Красиво, да и только... На JavaScript этот алгоритм занял бы полстраницы. Классическое программирование вряд ли когда-либо будет вытеснено no-code решениями. Однако визуальные программы, безусловно, выглядят привлекательно по своей природе.

 

Оставить комментарий

 
  2024-09-15

Редактирование нескольких строк в Vim

Поскольку гитом я привык пользоваться из командной строки, мне часто приходится делать сквош нескольких коммитов. Vim у меня стоит редактором по умолчанию, и хочется использовать его более эффективно, чем при использовании nano. Вот так можно заменить первое слово в нескольких строках с минимальными усилиями.

 

 

Оставить комментарий

 
  2024-09-09

AR.js

AR.js - это JavaScript библиотека которая позволяет создавать дополненную реальность прямо в браузере мобильного телефона.

На выходных я немного с ней поигрался и сделал маленькую демку. Отсканируйте QR код, откройте страничку в браузере и наведите телефон на изображение еще раз. Если ваше устройсто совместимо с библиотекой, то поверх изображения вы сможете увидеть текст.

 

Оставить комментарий

 
  2024-08-28

JSCad

Стало любопытно, а существует ли версия OpenSCAD но только чтобы работала в браузере? Оказалось что есть! Называется OpenJSCad! OpenJSCad или JSCad - это javascript библиотека которая умеет визуализировать в браузере 3D сцены описанные в виде простых геометрических примитивов.

Проект распространяется под лицензией MIT. К сожалению, файлы OpenSCAD с OpenJSCad несовместимы - синтаксис хоть и похож, но все же немного отличается.

Тем не менее проект довольно интересный, если нужно что-то быстро нарисовать в 3D и нужно чтобы изображение можно было вращать прям в браузере - данное решение подойдет как нельзя лучше.

 

Оставить комментарий