ertad-family/liquid

ertad-family/liquid

от ertad-family
Подключает AI-агентов к любым API, БД, IoT и промышленным системам без написания коннекторов - сам определяет интерфейс, нормализует данные и самовосстанавливается при изменениях схемы.

Liquid

Connect your AI agent to anything — with no connector to write or maintain.

Point Liquid at a URL or a database and it works out the interface for you: discovers its shape, maps it to the fields you asked for, and handles auth, pagination and normalization — typed records, no client code. When the upstream drifts, it re-maps and keeps going. The same small API — fetch · query · write · sense — reaches web APIs, databases, other agents (MCP/A2A), email, and even IoT and industrial systems (MQTT, Modbus, OPC UA, BACnet). An LLM does the learning at setup (and on drift); the data path itself makes no model call.

PyPI License Python


What an agent can reach through Liquid

One agent-facing API (fetch · query · write · sense) over everything an agent might need to touch — Liquid figures out how to talk to it so the agent doesn't have to. It's the agent's senses and hands: fetch/query probe, sense perceives a live event stream, write acts on the world.

  • Web APIs & messaging — REST/JSON, GraphQL, SOAP/WSDL, gRPC, WebSocket, SSE/NDJSON streams, MQTT (IoT pub/sub — subscribe to sense, publish to act)
  • Email — IMAP/SMTP (any provider, app-password or OAuth2 XOAUTH2) and the Gmail API (OAuth2): read a mailbox, sense new mail as it arrives, and send
  • Industrial / OT — Modbus (PLCs, sensors) and OPC UA (Industry-4.0 nodes, native subscriptions) for the factory floor; BACnet for buildings (HVAC/BMS) — read, write, and sense
  • Android devices — phones, TV boxes, kiosks via ADB: sense logcat, read shell, act with input/am
  • Other agents & tools — any MCP server, A2A agents, ChatGPT-plugin manifests
  • Databases — Postgres (+ pgvector), MySQL/MariaDB, SQLite, DuckDB, SQL Server, Neo4j (graph), MongoDB (documents), Redis (key-value)
  • People, places & things — a human, a home, or a car as a node via connectors: Telegram (perceive messages, send replies), Home Assistant (perceive a whole smart home's state changes, act via call_service — lights, locks, media), and Smartcar (perceive a connected vehicle across ~30 brands — location/battery/fuel — and act: lock/unlock, charge)
Инструменты были проиндексированы:
liquid_connectидемпотентныйвнешний мир

Однократная настройка для API. Обнаруживает API по url, использует LLM для сопоставления его ответов с вашей target_model и сохраняет переиспользуемый адаптер; возвращает adapter_id, который затем передаёте в liquid_fetch / liquid_query / liquid_estimate. Побочные эффекты: выполняет исходящие HTTP(S)-запросы к url, вызывает настроенную LLM (требуется API-ключ) и сохраняет адаптер вместе с учётными данными в ~/.liquid. Идемпотентен: повторное подключение с теми же url и target_model использует существующий адаптер, а не создаёт дубликат. Используйте один раз на каждый API. Для быстрого просмотра без сохранения используйте liquid_discover; для чтения данных из уже подключённого API — liquid_fetch.

Подключение к API (однократная настройка)

Параметры
  • credentialsobject

    Необязательные секреты для API, требующего авторизации, например {"api_key": "..."}, {"token": "..."} или {"username": "...", "password": "..."}. Хранятся в зашифрованном виде в ~/.liquid и автоматически подставляются при каждом последующем запросе. Для публичных API не указывайте.

  • target_modelobjectобязательный

    Форма записи, которую вы хотите получить на выходе: плоский словарь соответствий вида «имя поля -> тип», например {"name": "str", "price": "float", "in_stock": "bool"}. Liquid сопоставляет сырой ответ API ровно с этими полями; всё остальное отбрасвается.

  • urlstringобязательный

    Базовый URL или конкретная конечная точка API (например, https://api.example.com или https://api.example.com/v1/users). Также принимает конечную точку GraphQL, URL WSDL или адреса grpc:// / wss://.

liquid_discoverтолько чтениеидемпотентныйвнешний мир

Проверяет структуру API: имя сервиса, метод обнаружения, тип аутентификации и список эндпоинтов — без создания или сохранения адаптера. Побочные эффекты: выполняет исходящие HTTP(S)-запросы к url для разведки и может вызывать настроенную LLM для API, которые не публикуют машиночитаемую спецификацию (эвристика REST). Только чтение: ничего не сохраняется. Используйте это, чтобы предварительно изучить незнакомое API; когда будете готовы реально читать данные, вызывайте liquid_connect — он обнаруживает, и отображает, и сохраняет переиспользуемый адаптер.

Проверить API без сохранения адаптера

Параметры
  • credentialsobject

    Необязательные секреты для API, требующего авторизации, например {"api_key": "..."}, {"token": "..."} или {"username": "...", "password": "..."}. Хранятся в зашифрованном виде в ~/.liquid и автоматически подставляются при каждом последующем запросе. Для публичных API не указывайте.

  • urlstringобязательный

    Базовый URL API для проверки (те же форматы, что и url у liquid_connect).

liquid_estimateтолько чтениеидемпотентный

Предварительная оценка для fetch — прогнозируемое количество элементов, байт, токенов, кредитов и задержка, каждый параметр с указанием уверенности и источника — без выполнения каких-либо HTTP-вызовов или вызовов LLM. Только чтение и бесплатно. Возвращает {estimate: {...}}. Проверьте это перед потенциально большим liquid_fetch, чтобы решить, стоит ли сначала сузить выборку с помощью liquid_query (фильтр/агрегация). Требуется adapter_id от liquid_connect.

Оценить fetch (без вызова)

Параметры
  • adapter_idstringобязательный

    Идентификатор адаптера, возвращаемый liquid_connect (или перечисляемый liquid_list_adapters).

  • endpointstring

    Необязательный путь эндпоинта, над которым выполняется операция (например, "/users"); если не указан, используется основной эндпоинт адаптера. Используйте путь, который показывает liquid_connect / liquid_list_adapters.

liquid_fetchтолько чтениеидемпотентныйвнешний мир

Извлекает записи через подключенный адаптер, сопоставленные с target_model, который вы задали при подключении — детерминированно, без вызова LLM. Побочные эффекты: отправляет исходящий HTTP(S)-запрос только на чтение к подключенному API, используя сохраненные учетные данные; подчиняется лимитам частоты запросов этого API (Liquid заранее применяет троттлинг и возвращает ошибки 429 с подсказками для повторной попытки). Возвращает {records, data: [до 100 сопоставленных записей], _meta}. Требуется adapter_id из liquid_connect. Используйте это для получения полных записей; для фильтрации/агрегации на стороне сервера и получения меньшего ответа используйте вместо этого liquid_query; чтобы оценить размер выгрузки до её выполнения, сначала вызовите liquid_estimate.

Извлекает записи с помощью адаптера

Параметры
  • adapter_idstringобязательный

    Идентификатор адаптера, возвращаемый liquid_connect (или перечисляемый liquid_list_adapters).

  • endpointstring

    Необязательный путь эндпоинта, над которым выполняется операция (например, "/users"); если не указан, используется основной эндпоинт адаптера. Используйте путь, который показывает liquid_connect / liquid_list_adapters.

liquid_list_adaptersтолько чтениеидемпотентный

Перечислить адаптеры, уже подключенные на этой машине (читать из ~/.liquid) — только чтение, без сетевых вызовов, без LLM. Каждая запись содержит adapter_id, название сервиса, source url и пути эндпоинтов. Вызывайте это, чтобы найти adapter_id для liquid_fetch / liquid_query / liquid_estimate, или чтобы проверить, подключено ли уже API, перед вызовом liquid_connect.

Список подключенных адаптеров

Параметры

Без параметров.

liquid_queryтолько чтениеидемпотентныйвнешний мир

Выполняет поиск или агрегацию на стороне сервера через адаптер и возвращает только ответ, без полного набора данных — детерминированно, без вызова LLM, только чтение. Два режима: через group_by/agg для агрегации (количество, суммы и т.д.) или через where/fields/limit для фильтрации и проекции. Побочные эффекты: исходящий HTTP(S) запрос на чтение к подключённому API, с ограничением частоты, как у liquid_fetch. Возвращает результаты поиска {records, data, _meta} или агрегацию {result, _meta}. Используйте этот инструмент вместо liquid_fetch, когда нужно только отфильтрованное подмножество, количество или сводка — он возвращает гораздо меньше токенов.

Поиск или агрегация через адаптер

Параметры
  • adapter_idstringобязательный

    Идентификатор адаптера, возвращаемый liquid_connect (или перечисляемый liquid_list_adapters).

  • aggobject

    Aggregate-mode: агрегации для каждой группы в виде field -> op, например {"price": "sum", "id": "count"}. Указывается вместе с group_by.

  • endpointstring

    Необязательный путь эндпоинта, над которым выполняется операция (например, "/users"); если не указан, используется основной эндпоинт адаптера. Используйте путь, который показывает liquid_connect / liquid_list_adapters.

  • fieldsstring[]

    Проекция в режиме поиска: имена полей target_model, которые нужно вернуть, например ["name", "price"]. Если не указано, возвращаются все поля.

  • group_bystring

    Режим агрегации: поле target_model для группировки, например "category".

  • limitinteger

    Максимальное количество записей для возврата в режиме поиска (по умолчанию 100).

  • whereobject

    Фильтр поискового режима в виде поля -> значение (или поля -> {op: значение}), например: {"status": "active", "price": {"gt": 100}}. Ключи - поля target_model.

liquid_senseтолько чтениевнешний мир

Узнай, что произошло в мире с момента последней проверки: опрашивай endpoint на предмет событий, произошедших после cursor - новые строки в БД, опубликованные сообщения и т.д. Возвращает пакет событий (каждое с modality, payload и cursor) плюс next_cursor, чтобы продолжить с него. Это читающая сторона чувств агента - вызывай его повторно, передавая последний next_cursor, чтобы оставаться в курсе изменений, не пересматривая старые события. Ограничен max_events / max_seconds, поэтому всегда возвращает результат быстро. Где liquid_fetch - однократное получение текущего состояния, liquid_sense воспринимает, что изменилось с последней проверки. Требует adapter_id от liquid_connect. Поддерживают только endpoints, способные к восприятию (таблицы SQL, каналы Redis, WebSocket, потоки SSE/NDJSON, уведомления MCP, MQTT, Modbus, OPC UA, BACnet, ADB logcat); остальные возвращают ошибку. Только для чтения - он воспринимает, он ничего не меняет.

Проверить сенсоры агента (опрос на наличие новых событий)

Параметры
  • adapter_idstringобязательный

    Идентификатор адаптера, возвращаемый liquid_connect (или перечисляемый liquid_list_adapters).

  • cursorstring

    Токен для возобновления из next_cursor предыдущего вызова; при пропуске начинает с текущего момента.

  • endpointstring

    Необязательный путь эндпоинта, над которым выполняется операция (например, "/users"); если не указан, используется основной эндпоинт адаптера. Используйте путь, который показывает liquid_connect / liquid_list_adapters.

  • max_eventsnumber

    Максимальное количество событий, возвращаемых этим вызовом (по умолчанию 50).

  • max_secondsnumber

    Максимальное количество секунд ожидания событий перед возвратом (по умолчанию 5).

Похожие MCP-сервера

thingsboard/thingsboard-mcp

thingsboard/thingsboard-mcp

официальный

MCP сервер для ThingsBoard: управляйте IoT-устройствами, телеметрией и тревогами через естественный язык. 120+ инструментов для автоматизации операций с сущностями и OTA-пакетами. Идеален для DevOp...

Java98
espressif/esp-rainmaker-mcp

espressif/esp-rainmaker-mcp

MCP-сервер для управления IoT-устройствами ESP RainMaker через ИИ-клиенты (Claude, Cursor). Позволяет получать статус узлов, менять параметры, управлять расписаниями и группами устройств, используя...

Python18
ergut/mcp-bigquery-server

ergut/mcp-bigquery-server

Этот MCP сервер позволяет AI-ассистентам выполнять read-only запросы к BigQuery через обычный чат. Поддерживает защиту PII-полей, автосканирование схем и гибкую настройку. Идеален для безопасного анализа данных без написания SQL.

TypeScript147
lpigeon/ros-mcp-server

lpigeon/ros-mcp-server

MCP сервер для ROS соединяет LLM (Claude, GPT, Gemini) с роботами в реальном времени. Позволяет управлять, читать сенсоры и вызывать сервисы без изменения исходного кода. Полезен робототехникам и разработчикам AI для двустороннего взаимодействия с железом.

Python1446
windborne/zulipmcp

windborne/zulipmcp

Интегрирует AI-агентов в Zulip как @упоминаемых ботов, подключается к любому MCP-клиенту. Полезен для автоматизации общения в Zulip с помощью ИИ. Включает режим слушателя и Python-библиотеку.

0
rashidazarang/airtable-mcp

rashidazarang/airtable-mcp

MCP-сервер для Airtable с CRUD, управлением схемой и AI-аналитикой. Поддерживает вебхуки и пакетные операции. Помогает разработчикам и AI-агентам автоматизировать работу с данными.

TypeScript87
© Каталог MCP, 2026. Все права защищены.
Проект не аффилирован с Anthropic и любыми упомянутыми продуктами.
Все названия и торговые марки принадлежат их владельцам.
Контакты для связи: hi@mcp-katalog.ru

Лука Никитин