L
lagaam-ai/lagaam
MCP server that stops an AI agent's Trino or Pinot query before it stalls your shared cluster: priced from the engine's own plan, refused with a fix the agent can act on
no SECURITY.md
View on GitHub ↗Link checked 2026-11-12 · HTTP 200 · opens the vendor's own site
Install & config
- Copy the command above
- Paste it as one entry under
mcpServersinclaude_desktop_config.json— local servers take command + args (example: clients) - Restart your client
Client config (built from the install command this repo gives)
{
"mcpServers": {
"lagaam-ai-lagaam": {
"command": "uvx",
"args": ["lagaam"]
}
}
}Parsed from the README we fetched on 2026-10-26; we have not executed it.
command/args come from the install command the repository states. When it is ambiguous, the project README wins.
VS Code (.vscode/mcp.json - the key is servers)
{
"servers": {
"lagaam-ai-lagaam": {
"command": "uvx",
"args": ["lagaam"]
}
}
}Same server, but VS Code keeps it under <code>servers</code>.
Claude Code (command line)
claude mcp add --transport stdio lagaam-ai-lagaam -- uvx lagaam
Claude Code does not read a config file; add the server with this command.
Key names differ by client: Clients & CLI
- Star count
- 1 ★ · lagaam-ai/lagaam · read from the GitHub search API · (checked 2026-11-13 20:00:50)
- Source
- collected from the punkpeye/awesome-mcp-servers list · type: MCP server
- Harvest history
- first seen 2026-10-23 · last seen 2026-11-14 · seen 26× · listed by 23 sources
- Score
- score 2,300 · 1 ★ · 23 sources · mcp
- Install
uvx lagaam
FAQ (answers come from our records)
How do I install it?
The repository provides this install command:
uvx lagaam. It comes from the repository itself; we cannot guarantee it runs as-is in your client.Who is it for?
We filed it under these tags: MCP 服务. The tags come from the entry itself, not a taxonomy we imposed.
Who maintains it?
repository
lagaam-ai/lagaam;first catalogued 2026-10-23;last seen 2026-11-14。There is no official certification or quality rating here — we record sources and dates only.One agent query shouldn't stall everyone's Trino. On a shared cluster, a
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
missing partition filter or an accidental cross join doesn't cost you a bill —
it costs everyone else their queries. Lagaam is an MCP server that sits
between your AI agents and your lakehouse (Trino and Apache Pinot): every
query is schema-grounded, priced from the engine's own plan before it runs,
checked against a budget, and audited — and the bad one is refused before it
runs, with a fix the agent can act on.
Real session, real Trino, nothing mocked — reproduce it with
uv run --project server python examples/demo.py.
Real session, real Pinot 1.5.1 realtime table, nothing mocked — reproduce it
with uv run --project server python examples/demopinot.py.
## The problem
Agents write syntactically-valid, catastrophic SQL, and on a shared cluster
the damage isn't theirs alone. A missing partition filter turns into a full
scan that ties up every worker; an accidental cross join fills worker memory
while everyone else's queries wait behind it; a retry loop runs it again. A
SELECT drags 40 columns into a context window that needed 2. The usual
fix is to not give agents database access at all.
Lagaam gives them access with reins on:
Cost is a quotation, not a bill. Every query is priced from the
engine's own plan before execution — EXPLAIN (TYPE IO) for the bytes it
would scan, EXPLAIN (TYPE LOGICAL) for the widest row count any operator
would build (the number a cross join blows and a LIMIT cannot hide).
Over budget → blocked, with the number and the fix.
Un-estimable means no. No table statistics, a self-join that breaks
the estimate, a passthrough the planner can't see — the gate fails safe
instead of hoping.
Read-only, enforced in the AST. Single SELECT only. No DDL/DML, no
multi-statement injection, no SELECT , no table-function passthrough,
and a LIMIT is injected when missing. Validated SQL is re-rendered, so
what runs is exactly what was checked.
Agents ground themselves. listcatalogs and describetable return
exact names, types, and row estimates — scoped to the agent's table grant,
so the agent never learns names it isn't allowed to touch.
Results are verified before they're trusted. Zero rows, truncated
pages, all-NULL columns — the agent gets a warning with a next action, not
a silently misleading answer.
Every call is audited. One JSONL line per tool call: who, what,
allowed or denied, and why.
## Doesn't Trino already limit this?
It limits a query once it is running. Lagaam refuses it before it starts.
Keep both.
| | Acts | What the agent sees | Catches a cross join that reads little |
| query.max-scan-physical-bytes | during execution: terminated once the bytes are scanned | a query failure | no — it counts bytes read, not rows built |
| query.max-execution-time | during execution: terminated after the time is spent | a query failure | only after it has held the cluster that long |
| Resource groups (hardPhysicalDataScanLimit, softMemoryLimit, …) | on the next query: new queries queue once the group is over its share | its later queries wait | no — the running query continues |
| Lagaam | before execution, from EXPLAIN | a refusal with the number and the fix | yes — it prices the rows the widest step would build |
it costs everyone else their queries. Lagaam is an MCP server that sits
between your AI agents and your lakehouse (Trino and Apache Pinot): every
query is schema-grounded, priced from the engine's own plan before it runs,
checked against a budget, and audited — and the bad one is refused before it
runs, with a fix the agent can act on.
Real session, real Trino, nothing mocked — reproduce it with
uv run --project server python examples/demo.py.
Real session, real Pinot 1.5.1 realtime table, nothing mocked — reproduce it
with uv run --project server python examples/demopinot.py.
## The problem
Agents write syntactically-valid, catastrophic SQL, and on a shared cluster
the damage isn't theirs alone. A missing partition filter turns into a full
scan that ties up every worker; an accidental cross join fills worker memory
while everyone else's queries wait behind it; a retry loop runs it again. A
SELECT drags 40 columns into a context window that needed 2. The usual
fix is to not give agents database access at all.
Lagaam gives them access with reins on:
Cost is a quotation, not a bill. Every query is priced from the
engine's own plan before execution — EXPLAIN (TYPE IO) for the bytes it
would scan, EXPLAIN (TYPE LOGICAL) for the widest row count any operator
would build (the number a cross join blows and a LIMIT cannot hide).
Over budget → blocked, with the number and the fix.
Un-estimable means no. No table statistics, a self-join that breaks
the estimate, a passthrough the planner can't see — the gate fails safe
instead of hoping.
Read-only, enforced in the AST. Single SELECT only. No DDL/DML, no
multi-statement injection, no SELECT , no table-function passthrough,
and a LIMIT is injected when missing. Validated SQL is re-rendered, so
what runs is exactly what was checked.
Agents ground themselves. listcatalogs and describetable return
exact names, types, and row estimates — scoped to the agent's table grant,
so the agent never learns names it isn't allowed to touch.
Results are verified before they're trusted. Zero rows, truncated
pages, all-NULL columns — the agent gets a warning with a next action, not
a silently misleading answer.
Every call is audited. One JSONL line per tool call: who, what,
allowed or denied, and why.
## Doesn't Trino already limit this?
It limits a query once it is running. Lagaam refuses it before it starts.
Keep both.
| | Acts | What the agent sees | Catches a cross join that reads little |
| query.max-scan-physical-bytes | during execution: terminated once the bytes are scanned | a query failure | no — it counts bytes read, not rows built |
| query.max-execution-time | during execution: terminated after the time is spent | a query failure | only after it has held the cluster that long |
| Resource groups (hardPhysicalDataScanLimit, softMemoryLimit, …) | on the next query: new queries queue once the group is over its share | its later queries wait | no — the running query continues |
| Lagaam | before execution, from EXPLAIN | a refusal with the number and the fix | yes — it prices the rows the widest step would build |
Listed badge (optional)
Copy this line into the README if you want the listing mark. Optional, and it does not affect being listed.
[](https://anclum.com/en/s/lagaam-ai-lagaam/)
- Source
- awesome · https://github.com/lagaam-ai/lagaam
- Browse by field
- MCP servers
- Traction
- 1 ★
- Listed by
- 23 independent sources
- added
- today
- Security policy
- no
SECURITY.mdat the repository root (which does not mean it is unsafe)
More like this
Filed under
Every tag opens the full list for that filter. Counts are the live catalogue figures.