Lakekeeper (Apache Iceberg REST catalog) MCP Server — namespace/table/snapshot/warehouse catalog admin, ownership classification, maintenance-request delegation (never executes expire_snapshots/compact in-process), and a Wire-First KG catalog ingest tool.
Lakekeeper MCP demonstrates solid naming conventions (verb_noun pattern: list_*, get_*, set_*) and comprehensive parameter schemas with type definitions and descriptions. All 11 tools have descriptions and input schemas visible. However, descriptions are inconsistent in depth, some are detailed (lakekeeper_list_snapshots explains the distinction between 'no snapshots' vs 'table not found'), while others are terse (lakekeeper_config: 18 chars). Output schemas are not documented in the source, forcing LLMs to infer response structure. Error handling guidance is minimal, no recovery hints or actionable error messages visible. The single write operation (lakekeeper_set_engine_owned) includes important safety semantics in its description but lacks explicit confirmation/dry-run support.
Iceberg REST catalog discovery/config for one warehouse.
Fetch one namespace's properties.
Read a table's ownership classification (engine vs. lakekeeper-native).
Full table load response (metadata, current schema, snapshots).
Fetch one warehouse's full record, including its storage profile.
List namespaces in a warehouse's catalog.
Output schemas not documented. LLMs cannot infer what fields list_tables, get_table, or list_snapshots return, forcing them to guess downstream field names and risk broken tool chains.
lakekeeper_config description is 18 characters ('Iceberg REST catalog discovery/config for one warehouse.'), below the 20-char minimum. Lacks context on when to call it vs other discovery tools.
No error recovery guidance. Tools lack descriptions of failure modes (e.g., 'If table not found, try list_tables() first'). Agents cannot self-correct on 404s or validation errors.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | <=2025-11-25 | v2 |
List an Iceberg table's schema-evolution history (schema ids).
List an Iceberg table's committed snapshots. A nonexistent table surfaces a typed 'table not found' error (via ``get_table``'s underlying 404), never an empty list — so a caller can tell "no such table" apart from "table has no snapshots yet".
List tables registered under one namespace.
List Lakekeeper warehouses (Management API).
Classify a table's write authority — never overwrites an existing ``lakekeeper-native`` classification (fail closed, GOC-78's map is immutable once a table is asserted native; reclassifying a natively Lakekeeper-owned table to 'engine' would let this MCP's own writer claim authority over data it never wrote).
lakekeeper_set_engine_owned (write operation) lacks confirmation/dry-run support. Description warns against overwriting 'lakekeeper-native' but no mechanism prevents accidental misclassification.
warehouse parameter defaults to empty string across 8 tools. Unclear if empty string means 'use LAKEKEEPER_WAREHOUSE env var' or 'error'. Dependency on environment state is undocumented.