Two decisions make this usable in an agent loop rather than just impressive: writes are gated behind an environment variable, and every adapter can be asked what a call would cost in tokens before the call happens. Errors carry a structured recovery with a next action — a 401 points at storing credentials, a 404 at repairing the adapter — so an agent can respond without parsing error prose.
An adapter layer between an agent and everything it might need to reach. Given an endpoint, Liquid discovers the interface, maps it to the fields you asked for, and hands back typed records — the same small API whether the target is a REST or GraphQL API, a Postgres or MongoDB database, another MCP server, or an industrial protocol. An LLM does the learning once at setup and again when the upstream drifts; the data path itself makes no model call.
- An interface discovered and mapped to your target model, then reusable as an adapter — `liquid_connect`, `liquid_discover`
- Typed records fetched from that adapter, with pagination envelopes flattened and timestamps and IDs normalised across sources — `liquid_fetch`
- Server-side search and aggregation so filtering happens upstream instead of after a full fetch — `liquid_query`
- Expected item count and token size for a call before you make it, so a request that would not fit the budget can be skipped — `liquid_estimate`
- The adapters already stored, which persist under `~/.liquid` along with credentials — `liquid_list_adapters`
- Database insert, update and delete, exposed only when the server is started with `LIQUID_ALLOW_WRITES=1` — `liquid_execute`
Python 3.12+ and `pip install liquid-api`, which brings the `liquid-mcp` command; the package is `liquid-api` (0.67.0). The tool surface is read-only unless you set `LIQUID_ALLOW_WRITES`. An LLM key is needed only for discovering a REST API with no machine-readable spec and for field mapping — `OPENAI_API_KEY` with an optional `OPENAI_BASE_URL`, or `GEMINI_API_KEY`, or `ANTHROPIC_API_KEY`, installed as `pip install 'liquid-api[discovery]'`. Self-describing interfaces (OpenAPI, GraphQL, gRPC, MCP, A2A, WSDL) and all databases discover with no LLM at all.
One command plus a key — uvx liquid-mcp, then supply credentials
