iceberg-mcp-server-trino
Enables management of Iceberg tables via Cloudera Data Warehouse Trino Virtual Warehouse, providing tools for schema discovery, metadata health checks, time travel, and performance analysis.
Allows executing read-only SQL queries and Iceberg table operations (schema discovery, health checks, time travel, performance analysis) through Trino, a distributed SQL query engine.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@iceberg-mcp-server-trinocheck the health of the flights table"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Iceberg MCP Server (via Trino)
This is an Iceberg MCP Server using Trino as the compute engine, adapted from the Impala fork with Iceberg table health tooling and Trino SQL dialect support.
Model Context Protocol server for read-only access to Iceberg tables through Cloudera Trino (CDW Trino Virtual Warehouse): schema discovery, SQL queries, metadata-based health checks, time travel, and performance analysis.
Repository: https://github.com/dipankarmazumdar/iceberg-mcp-server-trino
Requirements
Python 3.13+
A Trino endpoint with Iceberg tables (tested with Cloudera Data Warehouse Trino Virtual Warehouse)
LDAP or basic auth credentials for Trino
Related MCP server: MCP Trino Server
Quick start
git clone https://github.com/dipankarmazumdar/iceberg-mcp-server-trino.git
cd iceberg-mcp-server-trino
python3.13 -m venv .venv
source .venv/bin/activate
pip install -e .
cp .env.example .env # edit with your Trino coordinator + credentialsConnectivity test:
python -c "from iceberg_mcp_server_trino.tools import trino_tools; print(trino_tools.get_schema())"Table health check:
python -c "from iceberg_mcp_server_trino.tools import trino_tools; print(trino_tools.get_table_health('your_iceberg_table'))"Tools
execute_query(query: str): Run a read-only SQL query on Trino and return results as JSON.get_schema(): List tables in the configured catalog and schema.get_table_health(table: str): Summarize Iceberg table health from metadata tables (snapshots,history,files,partitions,manifests,metadata_log_entries). Passtableorcatalog.schema.table.
Iceberg semantics
list_metadata_tables(table): List available Iceberg metadata tables.describe_metadata_table(table, metadata_name): Schema of a metadata table.query_metadata_table(table, metadata_name, limit?, columns?): Bounded metadata query.list_snapshots(table, limit?): Snapshot timeline from metadata.describe_table_history(table): Snapshot history via$historymetadata table.get_snapshot_summary(table, snapshot_id): Detail for one snapshot.list_refs(table): Branches and tags.query_at_snapshot(table, snapshot_id, limit?, columns?): Time travel by snapshot ID (FOR VERSION AS OF).query_at_timestamp(table, timestamp, limit?, columns?): Time travel by timestamp (FOR TIMESTAMP AS OF).diff_snapshots(table, snapshot_id_a, snapshot_id_b): Compare two snapshots.
Performance & cost awareness
explain_query(query): Trino EXPLAIN plan for a read-only query.partition_pruning_check(query): Heuristic partition pruning assessment from EXPLAIN.table_scan_cost_hints(table): Scan cost signals from files/partitions metadata.hot_partitions(table, limit?): Top partitions by file/record count (skew detection).
Local development
python3.13 -m venv .venv
source .venv/bin/activate
pip install -e .
cp .env.example .env # then edit with your Trino settingsCloudera CDW example .env
TRINO_HOST=coordinator-default-trino.example.cloudera.site
TRINO_PORT=443
TRINO_USER=your-username
TRINO_PASSWORD=your-password
TRINO_CATALOG=iceberg
TRINO_SCHEMA=airlines
TRINO_USE_SSL=true
TRINO_SSL_VERIFY=true
MCP_TRANSPORT=stdioQuick connectivity test:
python -c "from iceberg_mcp_server_trino.tools import trino_tools; print(trino_tools.get_schema())"Run with the MCP Inspector:
fastmcp dev inspector src/iceberg_mcp_server_trino/server.py:mcp --with-editable .Configuration
Set these environment variables (via .env or MCP config env block):
Variable | Description | Default |
| Trino coordinator hostname | required |
| Trino port |
|
| Username | required |
| Password (LDAP/basic auth) | required |
| Iceberg catalog name |
|
| Default schema |
|
| Use HTTPS |
|
| SSL verification ( |
|
|
|
|
Trino vs Impala SQL differences (handled internally)
Feature | Impala | Trino (this server) |
Metadata tables |
|
|
Time travel (version) |
|
|
Time travel (time) |
|
|
History |
|
|
Usage with Cursor
Copy mcp.json.example to .cursor/mcp.json and update paths and credentials.
{
"mcpServers": {
"iceberg-mcp-server-trino": {
"command": "/path/to/iceberg-mcp-server-trino/.venv/bin/python",
"args": [
"/path/to/iceberg-mcp-server-trino/src/iceberg_mcp_server_trino/server.py"
]
}
}
}Credentials can live in .env (loaded by the server) or in the env block. Enable the server under Cursor Settings → MCP, then restart the server after code changes.
Usage with Claude Desktop
Option 1: Install from GitHub (recommended)
{
"mcpServers": {
"iceberg-mcp-server-trino": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/dipankarmazumdar/iceberg-mcp-server-trino@main",
"run-server"
],
"env": {
"TRINO_HOST": "coordinator-default-trino.example.com",
"TRINO_PORT": "443",
"TRINO_USER": "username",
"TRINO_PASSWORD": "password",
"TRINO_CATALOG": "iceberg",
"TRINO_SCHEMA": "default"
}
}
}
}Option 2: Local installation
{
"mcpServers": {
"iceberg-mcp-server-trino": {
"command": "uv",
"args": [
"--directory",
"/path/to/iceberg-mcp-server-trino",
"run",
"src/iceberg_mcp_server_trino/server.py"
],
"env": {
"TRINO_HOST": "coordinator-default-trino.example.com",
"TRINO_PORT": "443",
"TRINO_USER": "username",
"TRINO_PASSWORD": "password",
"TRINO_CATALOG": "iceberg",
"TRINO_SCHEMA": "default"
}
}
}
}Security
All MCP tools are read-only. execute_query rejects non-read-only SQL prefixes. Use a Trino user with least-privilege access in production.
Based on cloudera/iceberg-mcp-server. See LICENSE and NOTICE.txt for attribution.
Copyright (c) 2025 Cloudera, Inc. All rights reserved.
Available Tools
17 toolsdescribe_metadata_tableC
Describe the schema of an Iceberg metadata table (e.g. snapshots, files, refs).
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| metadata_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full responsibility. It implies a read operation but does not explicitly confirm idempotency, required permissions, or any side effects. The behavioral disclosure is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundancy, achieving efficiency. However, it lacks structural elements (e.g., separate sections) that could improve readability and scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to detail return values. However, the 0% schema coverage and absence of annotations demand more detail on parameters and usage context, which the description fails to provide.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet the description does not elaborate on valid values for 'metadata_name' or the format of 'table'. The examples hint at possible values but lack explicit guidance, adding limited semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'describe' and the resource 'schema of an Iceberg metadata table', with examples like 'snapshots, files, refs' to clarify the resource scope, effectively distinguishing it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. Examples are given but no criteria for selection, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_table_historyC
List snapshot history from the Iceberg $history metadata table.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It only indicates a read operation ('List') but lacks disclosure about permissions, error behavior, performance implications, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single-sentence description is appropriately concise and front-loaded, but some additional context could be included without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema exists), the description is barely adequate. It fails to explain what the $history metadata table contains or any prerequisites, but it is minimally functional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds no meaning beyond the schema. The sole parameter 'table' is not explained (e.g., format, full path, expected identifier pattern), leaving the agent guessing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and resource 'snapshot history from the Iceberg $history metadata table', clearly distinguishing it from siblings like list_snapshots and describe_metadata_table.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus the many sibling tools (17 total). The description does not include context, prerequisites, or alternatives, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_snapshotsC
Compare two Iceberg snapshots by ID and return metadata and summary diffs.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| snapshot_id_a | Yes | ||
| snapshot_id_b | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Lacking annotations, the description does not disclose behavioral traits such as side effects, required permissions, or the exact nature of returned diffs. It only vaguely mentions 'metadata and summary diffs'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence. However, it is too brief to convey necessary details, sacrificing completeness for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description does not integrate it, leaving agents without guidance on input formats or how to obtain snapshot IDs. The tool's utility is poorly conveyed for a 3-parameter operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds minimal meaning beyond parameter names. It does not explain the format or source of snapshot IDs or the table parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compares two Iceberg snapshots by ID and returns metadata and summary diffs, distinguishing it from sibling tools like get_snapshot_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any exclusions or prerequisites. The description merely states what it does.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_queryB
Execute a read-only SQL query on Trino and return results as JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry burden. Only states read-only and returns JSON. Lacks details on resource cost, error handling, or query language specifics. Output schema exists but is not referenced in description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, 12 words, no fluff. Efficient but could benefit from more detail without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having output schema, the description is too minimal. Given the tool's generality, it should explain usage context, query constraints, and relationship to siblings like query_at_snapshot. Incomplete for effective decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only parameter 'query' is a string with 0% schema description coverage. Description does not elaborate on expected SQL syntax, length limits, or formatting. Schema provides type only, description adds no value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'execute', resource 'read-only SQL query on Trino', and output 'JSON'. Differentiates from siblings like explain_query or query_metadata_table by being general-purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for general read-only queries but does not explicitly state when to prefer this tool over siblings like query_at_snapshot or explain_query. No exclusions or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_queryA
Return the Trino EXPLAIN plan for a read-only SELECT or WITH query.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Explicitly states read-only nature (no execution), which is key behavioral info. No annotations provided, but description adds value by confirming no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, highly concise, and front-loaded with the essential purpose. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with one param and an output schema. Description covers purpose and parameter constraint, but could mention format of the EXPLAIN output (though schema may handle that).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only parameter 'query' has no schema description. Description adds constraint that it must be a SELECT or WITH query, but lacks further details (e.g., syntax, limits).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it returns the Trino EXPLAIN plan for SELECT or WITH queries, distinguishing from sibling tools like execute_query that actually run queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Indicates the tool is for read-only queries and returns an EXPLAIN plan, but lacks explicit guidance on when not to use it or alternatives beyond the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_schemaA
Retrieve the list of table names in the configured Trino catalog and schema.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Retrieve' implying a read operation, but does not disclose any behavioral traits such as side effects, permission requirements, or whether the operation is safe. The description lacks sufficient transparency for a tool with zero annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded. Every word earns its place, with no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and a simple purpose, the description is largely complete. The output schema presumably defines the return format, so the description does not need to explain it further. However, a slight addition about the tool's purpose (e.g., exploring available tables) could enhance completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema description coverage is 100%. With no parameters to document, the description adds no parameter info, which is acceptable. The baseline score for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves the list of table names in the configured Trino catalog and schema, using a specific verb ('Retrieve') and resource ('list of table names'). This distinguishes it from sibling tools like 'describe_metadata_table' (which describes a specific table) and 'list_metadata_tables' (which may list tables in a different scope).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when one needs the list of table names in the configured catalog/schema, but it does not provide explicit guidance on when to use this tool versus alternatives (e.g., for table details, use 'describe_metadata_table'). No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_snapshot_summaryC
Get metadata for a single Iceberg snapshot ID including parsed summary stats.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| snapshot_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states that metadata is returned, but fails to disclose any behavioral traits such as required permissions, rate limits, or whether the operation is read-only. The description is minimal and lacks transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that conveys the core purpose without unnecessary words. It is well front-loaded with the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (which reduces the need to explain return values), the description is incomplete because it provides no parameter guidance, no usage context, and no behavioral disclosures. For a tool with two required parameters, this is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not add any meaning to the parameters 'table' and 'snapshot_id'. It does not explain their format, constraints, or relationship, so the agent has no guidance beyond the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'get' and clearly states the resource 'metadata for a single Iceberg snapshot ID' and the scope 'including parsed summary stats'. It distinguishes from siblings like 'list_snapshots' which lists all snapshots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'list_snapshots' or 'describe_metadata_table'. No mention of prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_table_healthA
Assess Iceberg table health using metadata tables (snapshots, history, files, partitions, manifests, metadata_log_entries). Returns structured JSON summaries, recent activity, and health signals. Pass the table as name or catalog.schema.table (e.g. flights or iceberg.default.flights).
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden. It discloses that the tool uses multiple metadata tables and returns 'structured JSON summaries, recent activity, and health signals', which is informative. However, it does not explicitly state that the operation is read-only or has no side effects, leaving ambiguity. Given the lack of annotations, a score of 3 reflects adequate but incomplete behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The first sentence clearly states purpose and output, and the second efficiently explains the parameter format. It is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is an output schema (true), the description does not need to detail return values. The parameter explanation is sufficient. However, given the large number of sibling tools, a brief note on how this tool differs from alternatives (e.g., comprehensive vs. individual metadata queries) would enhance completeness. Nonetheless, it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'table' has 0% description coverage in the schema. The description adds significant meaning by providing naming examples ('flights or iceberg.default.flights'), which clarifies the expected format beyond the bare schema. This compensates well for the missing schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Assess Iceberg table health using metadata tables'. The verb 'assess' and resource 'table health' are specific. It distinguishes from siblings like list_snapshots or describe_metadata_table by focusing on health assessment using multiple metadata tables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: 'Pass the table as name or catalog.schema.table' with examples. It implies when to use (to assess health) but does not explicitly exclude alternative tools or state when not to use. With 16 siblings, more explicit guidance on when this tool is preferred over individual metadata queries would be beneficial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hot_partitionsC
List the hottest Iceberg partitions by file count and record count to detect skew.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| table | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It states the tool lists partitions by file and record count, but does not mention sorting order, read-only nature, potential performance impact, or that limit applies to the top N records. This leaves significant behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise at 14 words and directly states the main purpose. However, it omits essential parameter details that could be included without much bloat, earning a slight deduction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return values do not need explanation. However, the description fails to cover basic parameter definitions, usage context, and behavioral details. For a two-parameter tool, this is inadequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% parameter description coverage, and the description does not explain the 'table' (required) or 'limit' (default 20) parameters. The tool's purpose implies 'table' is needed, but no details on format or constraints are given, forcing reliance on schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the hottest Iceberg partitions by file count and record count to detect skew, specifying the verb ('list'), resource ('Iceberg partitions'), and criteria ('hottest by file count and record count'). It distinguishes itself from sibling tools like partition_pruning_check and get_table_health by focusing on partition skew detection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. For example, it does not clarify if this should be used after partition_pruning_check or in conjunction with get_table_health.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_metadata_tablesA
List Iceberg metadata tables available for a table. Pass table or catalog.schema.table (e.g. flights or iceberg.default.flights).
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose whether the operation is read-only, mutating, or has side effects. It only states the action without behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action. No redundant words; every sentence contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown) and a simple single-parameter tool, the description adequately covers the tool's purpose and parameter usage. Minor gap: could mention that it lists available metadata table names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, meaning no parameter descriptions. The description adds value by explaining that 'table' can be in 'table' or 'catalog.schema.table' format with examples, compensating for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and resource ('Iceberg metadata tables') specific to a table. It distinguishes from siblings like 'describe_metadata_table' and 'query_metadata_table' which suggest different operations on metadata tables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a usage example for the parameter but does not explicitly state when to use this tool vs alternatives or when not to use it. No mention of alternative tools or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_refsB
List Iceberg branches and tags from the refs metadata table.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It does not disclose whether the operation is read-only, requires permissions, or any side effects. The description only states what it does, not behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 9 words, front-loading the action and resource without any superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While simple and with an output schema, the description lacks usage guidelines, behavioral transparency, and parameter semantics. It is adequate for a basic listing tool but leaves gaps that could confuse an agent when choosing among related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter 'table' is named but not described beyond the schema. Schema description coverage is 0%, so the description was expected to compensate but fails to explain any meaning or format requirements for the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb 'List', the resource 'branches and tags', and the source 'refs metadata table', making the tool's purpose clear and distinguishing it from siblings like list_snapshots and list_metadata_tables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as list_metadata_tables or list_snapshots. No context about prerequisites or use cases is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_snapshotsC
List Iceberg snapshots for a table ordered by committed_at (most recent first).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| table | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the full burden. It only mentions ordering but omits behavioral traits like read-only nature, result format, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise and front-loaded, but lacks necessary parameter details. It is efficient yet incomplete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description need not explain return values, but it still omits context for parameters and usage boundaries. The tool is simple, but the description is insufficient for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no meaning for the 'table' or 'limit' parameters. It does not explain what 'table' expects or that 'limit' caps the number of results.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'Iceberg snapshots' with specified ordering by committed_at descending. This distinguishes it from siblings like list_metadata_tables and list_refs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. No conditions, prerequisites, or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
partition_pruning_checkB
EXPLAIN a read-only query and heuristically assess whether partition pruning is likely.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states the tool is read-only, but does not disclose potential costs, side effects, or the nature of the heuristic analysis. The agent cannot gauge whether this tool is safe or costly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary words. It front-loads the key action (EXPLAIN) and purpose (assess partition pruning).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and an output schema, the description still lacks completeness. It does not explain what the output contains, how the heuristic works, or any limitations. For a diagnostic tool, more context is needed to enable correct use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate. It adds that the 'query' parameter should be a read-only SQL query, which is more informative than the schema's plain string type. However, it could be more precise (e.g., 'SELECT statement' or required format).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'EXPLAIN a read-only query and heuristically assess whether partition pruning is likely.' It uses a specific verb and resource, and distinguishes it from sibling tools like 'explain_query' (which likely does generic explain) and 'hot_partitions' (which checks current partitions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'explain_query' or 'hot_partitions'. The description does not mention prerequisites, compatible query types, or when the heuristic assessment is reliable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_at_snapshotB
Time-travel read using FOR VERSION AS OF snapshot_id. Optional column list and limit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| table | Yes | ||
| columns | No | ||
| snapshot_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It indicates a read operation ('Time-travel read'), which implies non-destructive behavior, but does not disclose any limitations, permissions, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is efficient and front-loaded with the key concept. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Minimal description for a 4-parameter tool. Lacks details on table format, snapshot_id format, and result behavior. Output schema exists but is not shown; still, description should be more self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must add value. It mentions snapshot_id, 'Optional column list' (columns), and limit, partially covering 3 of 4 parameters. The 'table' parameter is not described.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs a time-travel read using a snapshot ID, with optional columns and limit. The purpose is specific and distinguishable from siblings like query_at_timestamp, though not explicitly differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as query_at_timestamp or other query tools. The description lacks context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_at_timestampC
Time-travel read using FOR TIMESTAMP AS OF timestamp (e.g. '2024-07-18 10:12:20').
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| table | Yes | ||
| columns | No | ||
| timestamp | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility for behavioral disclosure. It only gives a SQL syntax example, omitting key traits like read-only nature, required permissions, error handling for invalid timestamps, or performance implications. The description is insufficient for an agent to understand side effects or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence and front-loaded, which is structurally acceptable. However, it is overly terse, sacrificing necessary detail for brevity. A slightly longer description could improve clarity without harming conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the return format is defined elsewhere, but the description still needs to explain the tool's role in time-travel queries. It fails to mention the relationship to table snapshots, the meaning of 'AS OF', or typical use cases. The description is incomplete for an agent to use this tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only explains the timestamp parameter with a format example, while table, columns, and limit are left undocumented. This adds minimal value beyond the schema definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Time-travel read' using a timestamp, which conveys the core action and resource. However, it does not explicitly mention the 'table' parameter from the schema, missing a key part of what is being queried. Still, the purpose is distinguishable from siblings like query_at_snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as query_at_snapshot or execute_query. The description lacks any context about prerequisites, when to prefer this over other query methods, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_metadata_tableC
Query an Iceberg metadata table with a safe row limit. Optional comma-separated columns.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| table | Yes | ||
| columns | No | ||
| metadata_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It indicates safety via 'safe row limit', but lacks details on permissions, state changes, or error handling. The behavioral profile is only partially disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences that front-load the core purpose and key parameters. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 4 parameters, an output schema (unmentioned), and 16 sibling tools, the description is too brief. It lacks context on metadata name semantics, output structure, and relation to other tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning for 'limit' (safe row limit) and 'columns' (comma-separated), but leaves 'table' and 'metadata_name' unexplained. The description is insufficient for all 4 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool queries an Iceberg metadata table, specifying a safe row limit and optional column selection. However, it does not explicitly distinguish from the sibling tool 'describe_metadata_table', which might be confused with this querying function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool over alternatives like 'execute_query' or 'describe_metadata_table'. The description mentions a 'safe row limit' but does not elaborate on use cases or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
table_scan_cost_hintsA
Estimate full-scan cost signals from Iceberg files/partitions metadata for a table.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden. It indicates a read operation (estimate from metadata) but does not disclose if the operation is expensive, requires permissions, or returns only estimates. The phrase 'cost signals' is vague.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the action and source. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with one parameter and an output schema (not shown), the description is nearly complete. However, it could specify the nature of the cost signals (e.g., cardinality, sizes) for better context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the 'table' parameter (e.g., format, required context). While the parameter is intuitive from the tool name, the description adds no semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool estimates full-scan cost signals from Iceberg metadata, using specific verb 'estimate' and resource 'full-scan cost signals'. It distinguishes from sibling tools like 'describe_metadata_table' or 'get_table_health' by specifying the unique output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives like 'partition_pruning_check' or 'get_table_health'. No when-not-to-use or alternative references are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
17 tool updates
v0.1.0- First observed
describe_metadata_table - First observed
describe_table_history - First observed
diff_snapshots - First observed
execute_query - First observed
explain_query - First observed
get_schema - First observed
get_snapshot_summary - First observed
get_table_health - First observed
hot_partitions - First observed
list_metadata_tables - First observed
list_refs - First observed
list_snapshots - First observed
partition_pruning_check - First observed
query_at_snapshot - First observed
query_at_timestamp - First observed
query_metadata_table - First observed
table_scan_cost_hints
TDQS
Scored across 17 tools
Each tool has a clear, distinct purpose covering metadata tables, snapshots, time travel, queries, health, and partitions. No two tools appear to do the same thing.
Most tools follow a verb_noun pattern in snake_case, such as list_snapshots and get_table_health. Exceptions like hot_partitions and partition_pruning_check are minor deviations but still clear.
17 tools is well-scoped for a read-only Iceberg metadata server via Trino, covering exploration, analysis, and querying without being overwhelming.
The set covers most read-only operations (snapshots, metadata tables, health, time travel) but lacks a tool to retrieve the current table schema (columns and types), which is a notable gap.
Maintenance
Related MCP Connectors
Model Context Protocol server for Studex tools, notifications, and profile integrations
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
A Model Context Protocol server for Wix AI tools
Query, join, profile, clean and convert CSV/JSON/Parquet with server-side DuckDB over MCP.
Related MCP Servers
- FlicenseBqualityDmaintenanceA Model Context Protocol server that provides a SQL interface for querying and managing Apache Iceberg tables through Claude desktop, allowing natural language interaction with Iceberg data lakes.18-
- AlicenseBqualityCmaintenanceA Model Context Protocol server that provides seamless integration with Trino and Iceberg, enabling data exploration, querying, and table maintenance through a standard interface.2225Apache 2.0
- AlicenseNot gradedqualityCmaintenanceMCP server providing seamless integration with Trino and Iceberg for advanced data exploration, querying, and table maintenance.Apache 2.0
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that exposes SQL Server metadata and read-only query execution as a structured HTTP API, with safety validation and allowlist policy enforcement.1-