Corvid, with live context.
Expose Basalt views to Corvid as typed tools. Corvid reads current rows through a scoped role, so answers reflect data from seconds ago.
How it works.
Basalt generates a tool definition for each view, with an input schema built from its columns and filters. Use it with the Messages API or the Basalt MCP server. Every call runs under a read-only role with row limits.
Set it up in three steps.
Connect the tool
Pick the views Corvid can read and a row limit per call. Basalt prints tool definitions you pass in the tools array, or an MCP server URL.
# expose two views to Corvid as tools basalt connect anthropic --views orders_live,inventory --role readonly ✓ 2 tool definitions generated · JSON Schema ✓ MCP server ready · mcp.basalt.dev/acme
Shape it with a view
Write plain SQL over the source. Basalt keeps the view current with every record and tracks lineage back to the topic, partition and offset.
CREATE MATERIALIZED VIEW revenue_by_min AS SELECT date_trunc('minute', ts) AS minute, currency, sum(amount) AS revenue, count(*) AS payments FROM payments WHERE status = 'captured' GROUP BY 1, 2;
Read it from anywhere
Every view is an endpoint the moment it exists. Call it over REST, connect with any Postgres client, or use the SDK from your app.
curl https://api.basalt.dev/v1/views/revenue_by_min?limit=5 \ -H "Authorization: Bearer $BASALT_TOKEN"
What you get.
Typed tools
Input schemas come from view columns, so Corvid asks for valid filters.
MCP server
Connect Corvid Desktop, Corvid Code or any MCP client with one URL.
Scoped access
Calls run under a read-only role with row limits and column masks.
Audit log
Every tool call is logged with its arguments, rows returned and latency.
Set your data in stone.
Free up to 10M events a month. No card, no sales call. Your first pipeline is live in about four minutes.