Apache Iceberg MCP Server
Provides tools for Apache Iceberg Java API documentation discovery, source code lookup, and optional REST Catalog operations, enabling agents to search Javadocs, compare versions, inspect Iceberg source code, and interact with an Iceberg REST catalog when configured.
Click on "Install 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., "@Apache Iceberg MCP ServerHow do I list table snapshots via the Iceberg REST API?"
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.
Apache Iceberg MCP Server
A Model Context Protocol server for Apache Iceberg Java API documentation, source lookup, and optional REST Catalog operations.
The Iceberg latest/api page documents the Java
libraries; it is not a callable HTTP API. This server therefore exposes two separate planes:
a read-only plane over official release/nightly Javadocs and an optional local Iceberg source checkout;
an optional, discovery-gated plane over a configured Iceberg REST Catalog.
The Java plane works without credentials. Catalog mutation tools are absent unless the operator both configures a catalog and explicitly enables mutations.
What is included
Indexed Javadoc discovery across the published package, type, and member lists, with exact detail lookup and cross-version comparison.
Local source evidence limited to indexed Java types, bounded literal search, lexical implementation discovery, Git provenance, and module stability classification.
Inventory coverage of all 32 Iceberg 1.11.0 REST operations: 30 typed model-callable mappings and two deliberately excluded credential-bearing operations. Three current-main extensions are available only when advertised.
Strict MCP input/output schemas, opaque query-bound cursors, bounded requests and responses, structured errors, and secret redaction.
MCP tools, resource templates, and guided prompts over stdio or stateless Streamable HTTP.
Compatibility tests for current MCP (
2026-07-28) and legacy protocol clients.Non-mutating setup generation for Codex, Claude Code, OpenCode, Gemini CLI, VS Code, Cursor, and other JSON-configured MCP clients.
See tool and workflow reference, coverage matrix, and architecture for the exact surface. Supported workflows are listed in user stories and use cases.
Related MCP server: Sentinel Core Agent
Install with a coding agent
Paste this prompt into Codex, Claude Code, OpenCode, or another coding agent that can run commands and configure an MCP client. It needs no path substitutions. While the repository is private, the agent needs access through your existing GitHub sign-in.
Install https://github.com/bsisduck/iceberg-mcp-server into the MCP client I am currently using.
Detect the client from the current environment; ask me which client only if it is ambiguous.
Clone the repository into a durable user-owned directory, or reuse a checkout of that origin
without overwriting local changes. Use existing Git/GitHub authentication; if access is denied,
report the missing access without asking me to paste a token. Read README.md, docs/client-setup.md,
and package.json. Verify the required Node.js version and npm, then run npm ci and npm run check.
Generate the setup with node dist/cli.js --print-client-config <client>, choosing codex,
claude-code, opencode, gemini-cli, vscode, cursor, or generic-json. Use absolute executable paths.
If an Iceberg source checkout is already identified in this workspace, add --source-dir with its
absolute path and treat it as read-only. Otherwise install the documentation-only setup.
Apply only this server's entry through the client's supported command or configuration file.
Preserve other MCP servers and existing approval settings. Leave REST Catalog credentials unset
and mutations disabled. For an unlisted client, check its official MCP configuration format
before adapting the generic JSON.
Start or reconnect the server, verify that it exposes 9 tools, and call iceberg_api_list_versions.
Report the installed path and commit, the configuration changed, verification results, and how
to remove only this server. If verification requires a client restart or a manual UI action,
give the exact remaining step and do not claim that the connection was verified.Client-specific alternatives are in installation prompts.
Requirements
Node.js 20.19 or newer (the CLI checks
process.versions.nodeagainstengines.nodeat startup and exits with a one-line requirement on an older runtime)npm
macOS or Linux for the generated client CLI commands; Windows has not been verified
Network access to
https://iceberg.apache.org/javadoc/for Javadoc toolsOptional: an Apache Iceberg Git checkout for source tools
Optional: an Iceberg REST Catalog endpoint for catalog tools
Quick start
git clone https://github.com/bsisduck/iceberg-mcp-server.git
cd iceberg-mcp-server
npm ci
npm run build
node dist/cli.js --help
node dist/cli.jsstdio is the default transport. The process writes MCP frames only to stdout and diagnostics to
stderr.
When this repository sits beside the upstream iceberg checkout, the source plane is detected
automatically. Otherwise set an absolute path:
ICEBERG_SOURCE_DIR=/absolute/path/to/iceberg node dist/cli.jsWithout a valid source checkout, Javadoc tools still work and source-only tools return a clear configuration error.
Install into an MCP client
Build first, then generate a client-native command or JSON block without changing client settings:
node dist/cli.js --print-client-config codex --source-dir /absolute/path/to/iceberg
node dist/cli.js --print-client-config claude-code --source-dir /absolute/path/to/iceberg
node dist/cli.js --print-client-config opencode --source-dir /absolute/path/to/icebergSupported targets are codex, claude-code, opencode, gemini-cli, vscode, cursor, and
generic-json. Follow the client setup guide to apply and verify the
result, or give your coding agent one of the reviewed
copy/paste installation prompts.
MCP client configuration
For a client that accepts the common mcpServers shape, build first, replace both absolute paths,
and merge this entry without overwriting other servers:
{
"mcpServers": {
"iceberg": {
"command": "node",
"args": ["/absolute/path/to/iceberg-mcp-server/dist/cli.js"],
"env": {
"ICEBERG_SOURCE_DIR": "/absolute/path/to/iceberg",
"ICEBERG_JAVADOC_VERSION": "1.11.0"
}
}
}
}Restart the client after changing its configuration. Use absolute paths because desktop clients do not necessarily launch the server from this repository.
Optional REST Catalog
Set a catalog URI and, when required, exactly one outbound authentication mode:
export ICEBERG_CATALOG_URI=https://catalog.example.com
export ICEBERG_CATALOG_WAREHOUSE=warehouse-name
export ICEBERG_CATALOG_TOKEN_FILE=/run/secrets/iceberg_catalog_token
node dist/cli.jsAlternatively configure external OAuth client credentials with ICEBERG_OAUTH2_URI and
ICEBERG_OAUTH2_CREDENTIAL_FILE. The credential file contains client_id:client_secret. The
deprecated catalog-local /v1/oauth/tokens route is not selected automatically.
Startup calls GET /v1/config, applies defaults, local warehouse configuration, then overrides, and
registers only supported tools. An absent or empty endpoint advertisement follows Iceberg's legacy
default set; view-endpoints-supported=true adds Iceberg's legacy view set. Explicitly advertised
endpoint lists are authoritative.
Read tools are registered automatically. To expose state-changing and destructive tools, also set:
ICEBERG_CATALOG_ALLOW_MUTATIONS=trueThis opt-in does not replace catalog authorization or client-side confirmation. Do not enable it for a principal that should be read-only.
Streamable HTTP
For a local HTTP endpoint:
ICEBERG_MCP_TRANSPORT=http node dist/cli.jsThe endpoint is http://127.0.0.1:3000/mcp. Only /mcp is served. A non-loopback bind is rejected
unless an inbound bearer token and an explicit exact origin allowlist are configured. Put a
TLS-terminating, OAuth-aware gateway in front of multi-user or Internet-facing deployments; the
built-in static bearer mode is intended for machine-to-machine protection.
See deployment and operations for remote settings, secret handling, and troubleshooting.
Configuration
Variable | Default | Purpose |
|
| Default release semver or |
| official Iceberg Javadoc root | HTTPS operator-controlled root |
|
| Search index byte limit, 1 MB to 256 MB |
|
|
|
|
| Javadoc cache directory |
|
| Age before an entry is revalidated |
|
| Javadoc cache ceiling, 1 MB to 10 GB |
| valid sibling | Local Iceberg checkout |
|
| Source text kept in memory, 0 to 1 GiB |
| unset | REST Catalog root; HTTPS outside loopback |
| unset | Warehouse sent only during config discovery |
| unset | Outbound catalog bearer token |
| unset | External OAuth token endpoint |
| unset | OAuth |
|
| Register catalog mutation tools |
|
|
|
|
| HTTP bind host; |
|
| HTTP bind port |
| loopback origins for the port | Comma-separated exact origins |
| unset | Inbound HTTP bearer token |
|
| HTTP request limit, 4 KiB to 10 MiB |
|
| Tool/resource output limit, 4,096 to 100,000 |
|
| Upstream timeout, 1,000 to 120,000 ms |
|
| stderr detail: |
Every variable treats a blank value as unset and falls back to its default, so an empty entry in a
client env map is not a startup error.
_FILE is available for the three secret values and is preferred in deployed environments.
Supplying both the direct value and its file form is an error. Secrets are loaded at startup, so
restart the process after rotating a mounted secret.
Development and verification
npm run check
npm run verify:evaluations
npm run verify:clients
npm run verify:openapi
npm pack --dry-runverify:openapi compares the implementation with the adjacent Iceberg checkout's current OpenAPI
file. Pass a different YAML path to the underlying script when auditing a pinned release. The ten
read-only evaluations exercise multi-step Java API questions over a real
MCP HTTP session.
Research claims and primary sources are recorded in the claim-to-source ledger. Security-sensitive behavior and remaining deployment risks are in the security model. Final traceability, quality-gate results, and residual risks are recorded in the completion audit.
Contributing and security
See CONTRIBUTING.md for the local development checks and pull request requirements. Report vulnerabilities through the private process in SECURITY.md. Participation is covered by the code of conduct, and release changes are recorded in CHANGELOG.md.
License
MIT License. Apache Iceberg is a trademark of The Apache Software Foundation; this independent server is not an Apache Software Foundation project.
Available Tools
9 toolsiceberg_api_browseBrowse Iceberg Java APIARead-onlyIdempotent
Browse the complete published package, type, or member index with exact package and label-prefix filters.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Index surface to browse. | |
| limit | No | ||
| cursor | No | Opaque cursor from the prior page. | |
| prefix | No | Case-insensitive label prefix. | |
| version | No | Published Iceberg release such as 1.11.0, or nightly. | 1.11.0 |
| package_name | No | Exact Java package filter. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the bar is lower. The description adds minor context by noting the index is 'complete published' and filters are exact, but it does not disclose additional behavioral details like pagination behavior or response structure beyond what annotations and schema already provide.
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 front-loads the primary action and resource, then immediately mentions the key filters. There is no wasted wording, and it is appropriately short for an API browse tool.
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?
With an output schema present and annotations covering safety, the description is largely complete for a read-only browse operation. It clearly states the resource and filters, though it could have been more complete with an explicit usage note contrasting it against iceberg_api_search or iceberg_api_get_type.
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 83%, and the schema already documents kind, prefix, package_name, version, and cursor. The description's mention of 'package and label-prefix filters' aligns with package_name and prefix parameters but does not add additional semantic detail beyond what the schema already states.
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 the specific verb 'Browse' with a clear resource: the complete published package, type, or member index. The mention of exact package and label-prefix filters distinguishes this from sibling tools like search or get by emphasizing it covers the full index rather than specific 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?
The description implies usage through 'complete published index' and 'filters', suggesting it is for browsing the full index rather than targeted search, but it never explicitly states when to choose this tool over alternatives. No exclusion criteria or direct comparison to siblings is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iceberg_api_compare_versionsCompare Iceberg API versionsARead-onlyIdempotent
Compare exact published package, type, or member identities between two Iceberg Javadoc versions.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | type | |
| limit | No | ||
| cursor | No | Opaque cursor from the prior page. | |
| to_version | Yes | Published Iceberg release such as 1.11.0, or nightly. | |
| from_version | Yes | Published Iceberg release such as 1.11.0, or nightly. | |
| package_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds only the qualifiers 'exact' and 'published' but does not disclose operational details such as pagination behavior, rate limits, or output semantics. With annotations covering the safety profile, this is adequate but not richly transparent.
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, tightly written sentence with no filler. It front-loads the core action and scope, and every word contributes to distinguishing the tool from its siblings.
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 annotations, output schema, and usable schema descriptions for the required version parameters, the overall tool definition is mostly complete. A small gap remains: package_name and the exact meaning of 'identities' in terms of required inputs are not fully explained, but this does not prevent a competent agent from invoking the tool 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 only 50%, covering from_version, to_version, and cursor. The description helps with 'package, type, or member' which maps to the kind enum and package_name, but it does not clarify limit behavior, cursor handling, or how package_name interacts with kind. The description partially compensates for the schema gaps but not fully.
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 ('Compare'), names the exact resource ('published package, type, or member identities'), and defines the scope ('between two Iceberg Javadoc versions'). This clearly differentiates it from siblings like iceberg_api_search, iceberg_api_get_type, and iceberg_api_list_versions.
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 makes the intended use clear: compare exact identities across two published versions. It does not explicitly name alternatives or exclusion cases, but the cross-version comparison purpose is strong enough that an agent can infer when to select it over single-version get/browse/search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iceberg_api_get_memberGet Iceberg Java memberARead-onlyIdempotent
Get one exact member by its published label or Javadoc anchor within an exact Java type.
| Name | Required | Description | Default |
|---|---|---|---|
| member | Yes | Published label or exact Javadoc anchor. | |
| version | No | Published Iceberg release such as 1.11.0, or nightly. | 1.11.0 |
| fully_qualified_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds exact-match selection semantics but no further behavioral context such as not-found behavior, version-specific differences, or response characteristics.
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 front-loads the action and resource, then packs the identifier forms and scoping constraint with zero filler. Every phrase earns its place.
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?
Together with the input schema, output schema, and annotations, the description provides enough for an agent to invoke this exact-lookup tool correctly. It does not explicitly situate itself against sibling tools, but the exactness wording and 'member' resource make the intended use clear.
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 schema documents member and version, but fully_qualified_name has no description. The phrase 'within an exact Java type' helps clarify that fully_qualified_name is the exact type scope, and 'published label or Javadoc anchor' reinforces the member parameter. A concrete example would have made this stronger.
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 states a specific verb ('Get'), a specific resource ('one exact member'), and a precise scoping constraint ('within an exact Java type'). It also differentiates this from search or browse by emphasizing exactness and the accepted identifiers ('published label or Javadoc anchor').
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 clearly implies this is the tool for exact single-member lookup when the label or anchor and exact Java type are already known. It does not explicitly name alternatives like iceberg_api_search or iceberg_api_browse, so it falls short of a full when-to-use/when-not-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iceberg_api_get_typeGet Iceberg Java typeARead-onlyIdempotent
Get one exact published Java type with declaration, description, deprecation, detailed members, links, and stability evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Published Iceberg release such as 1.11.0, or nightly. | 1.11.0 |
| member_limit | No | ||
| member_cursor | No | Opaque cursor from the prior page. | |
| fully_qualified_name | Yes | Exact Javadoc type identity. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and idempotentHint=true, so the description builds on that rather than repeating it. It adds meaningful behavioral detail about the payload shape: declaration, description, deprecation, detailed members, links, and stability evidence. It does not mention pagination behavior for member_limit/member_cursor, but this is minor given the existing output schema and 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, front-loaded sentence with no filler. Every element carries information: exactness, publication status, and the returned content fields.
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?
For a read-only lookup tool with rich annotations, a 75%-covered schema, and an output schema, the description covers what the agent needs to know about the return scope and the one required input. It lacks explicit routing guidance between iceberg_api_get_type and the source/member siblings, but that does not make invocation incomplete.
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 75%, so the high baseline of 3 applies. The description does not explain parameters, but it reinforces that fully_qualified_name is the target and 'members' relates to member_limit/member_cursor. No parameter detail beyond the schema is provided, and none is strictly needed.
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 resource ('one exact published Java type') and enumerates the returned content (declaration, description, deprecation, detailed members, links, stability evidence). 'Exact' and 'published' distinguish it from the search/browse siblings and from iceberg_source_get_type.
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 word 'exact' implies this tool is for lookups when the fully-qualified name is already known, and 'published' implies released Javadoc rather than source. However, it never explicitly states when to prefer it over iceberg_api_search, iceberg_api_get_member, or iceberg_source_get_type, nor does it state any alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iceberg_api_list_versionsList Iceberg API versionsBRead-onlyIdempotent
List the configured stable/nightly Javadoc identities and optional local source revision.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds only a hint about what is listed (stable/nightly identities, optional revision) but no behavioral context such as configuration source, error behavior, or side effects. With annotations present, the description adds minimal new transparency value.
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 names the action first and then specifies the resource scope. Every phrase adds information: 'configured' indicates server-side state, 'stable/nightly' describes the version types, and 'optional local source revision' clarifies an additional return component. No filler or repetition of the title.
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?
For a zero-parameter, read-only listing tool with an output schema and safety annotations, the description is nearly adequate. It covers what will be listed and that local revision is optional. The main gap is the absence of any connection to the broader workflow (e.g., why an agent would call this before browsing/searching), but this is a minor omission given the simplicity of the tool.
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 the schema's description coverage is 100% (trivially satisfied), so no parameter documentation is needed. The description's mention of 'configured' and 'optional local source revision' clarifies that inputs come from configuration rather than call parameters, which is a useful, non-redundant cue. Baseline 4 is appropriate for a zero-parameter tool.
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 names a concrete action ('List') and a specific resource ('configured stable/nightly Javadoc identities and optional local source revision'), making the tool's purpose discernible. It is distinguishable from sibling tools like iceberg_api_browse and iceberg_api_search because it targets version identity listing. However, 'Javadoc identities' is somewhat specialized and not fully self-explanatory, so not a perfect 5.
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 when-to-use or when-not-to-use guidance is provided. The description does not reference any sibling or alternative, nor does it suggest a scenario in which an agent should choose this tool over iceberg_api_compare_versions or iceberg_api_get_type. The agent must infer applicability solely from the name and general wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iceberg_api_searchSearch Iceberg Java APIARead-onlyIdempotent
Ranked case-insensitive search across published Iceberg packages, types, member names, signatures, and identities.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Name, signature, or qualified-name fragment. | |
| scope | No | all | |
| cursor | No | Opaque cursor from the prior page. | |
| version | No | Published Iceberg release such as 1.11.0, or nightly. | 1.11.0 |
| package_name | No | Exact Java package filter. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds useful behavioral traits—'ranked' and 'case-insensitive'—but does not elaborate on pagination, ranking order, or result limits. It adds some value but lacks rich behavioral context beyond 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, front-loaded sentence that immediately communicates the core behavior ('Ranked case-insensitive search'). Every word earns its place with no redundancy or filler.
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?
With an output schema, annotations, and several self-describing parameters, the description is mostly complete for invoking the tool. The main gap is the absence of usage differentiation among several search/browse siblings, which would help an agent decide when to choose this tool. Otherwise, the search scope and behavior are adequately conveyed.
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 67%, so the baseline is 3. The description does not explain individual parameters; 'packages, types, member names, signatures, and identities' loosely maps to query and scope meaning, but adds little beyond the schema's own parameter descriptions. No additional semantic depth is provided.
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 states a specific verb ('search') and resource ('published Iceberg packages, types, member names, signatures, and identities'), giving a precise scope. It clearly distinguishes this from sibling tools like browse or get_type, even if it doesn't explicitly contrast with iceberg_source_search.
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?
There is no explicit guidance on when to use this tool versus alternatives such as iceberg_api_browse, iceberg_api_get_type, or iceberg_source_search. The intended usage is only implied by the name and search semantics; no exclusions, conditions, or routing cues are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iceberg_source_find_implementationsFind Iceberg source implementationsARead-onlyIdempotent
Find bounded lexical extends/implements declarations for a Java type; results are evidence, not semantic compiler analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | Opaque cursor from the prior page. | |
| fully_qualified_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior. The description adds meaningful behavioral context beyond the annotations: results are 'bounded lexical' and 'evidence, not semantic compiler analysis', which warns the agent about the tool's precision and scope. No contradiction with 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?
One tightly written sentence that front-loads the core operation and immediately states the key limitation. Every word earns its place; there is no filler or redundant restatement of the title.
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?
With an output schema, return-value documentation is not the description's burden. The description covers the tool's purpose, its lexical scope, and its 'evidence, not semantics' limitation, which are the most important contextual facts. It could be slightly stronger by naming a sibling alternative or clarifying parameter input format, but it is otherwise sufficient for a read-only lookup tool.
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 only 33%, so the description needed to compensate for the undocumented fully_qualified_name and limit parameters. It adds only the hint that the type is a 'Java type', which helps with fully_qualified_name, but says nothing about the format, the meaning of limit, or how cursor pagination works. This is insufficient given the low schema coverage.
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 names a specific verb ('find') and resource ('bounded lexical extends/implements declarations for a Java type'), and clarifies that the result is lexical evidence rather than semantic compiler analysis. This clearly distinguishes the tool from siblings like iceberg_source_get_type and iceberg_source_search.
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 gives clear context: use this when you need lexical extends/implements declarations, not when you need semantic compiler-accurate hierarchy analysis. It does not explicitly name alternative tools or provide when-not-to-use exclusions beyond the lexical/semantic distinction, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iceberg_source_get_typeGet Iceberg Java sourceARead-onlyIdempotent
Read a bounded, line-numbered source window for an indexed Java type from the configured Iceberg checkout.
| Name | Required | Description | Default |
|---|---|---|---|
| line_count | No | ||
| start_line | No | ||
| fully_qualified_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, so the description does not need to repeat safety guarantees. It adds useful behavioral context beyond annotations: the result is bounded by line window and line-numbered, and the lookup depends on an indexed Java type in the configured checkout.
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?
A single, front-loaded sentence with no filler. Every qualifier ('bounded', 'line-numbered', 'indexed', 'configured') carries meaning and contributes to accurate invocation.
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?
The presence of an output schema and strong safety annotations reduces the need for the description to explain return values or side effects. The description supplies the essential context (source window, type-based lookup, fixed checkout), though it could optionally state the FQN form or default window behavior.
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 for parameter meaning. The phrase 'line-numbered source window' loosely conveys start_line/line_count, and 'Java type' maps to fully_qualified_name, but the description does not specify the expected FQN format or explicitly define how the window parameters interact. It adds some semantic value but not complete compensation.
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 states a specific action ('Read'), a distinct resource ('bounded, line-numbered source window'), and a clear subject ('an indexed Java type from the configured Iceberg checkout'). This makes it immediately distinguishable from API metadata tools and source-search/find-implementation siblings.
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 clearly communicates the intended use: retrieving a source code slice by Java type name from the configured checkout. It does not explicitly name alternatives or exclusion conditions, but the 'source window' framing and indexing qualifier provide enough context to know when this tool applies versus API/library search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iceberg_source_searchSearch Iceberg Java sourceARead-onlyIdempotent
Perform a bounded literal (not regex) search across indexed production Java source files.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | Opaque cursor from the prior page. | |
| literal | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds that the search is bounded (limit applies), literal rather than regex, and scoped to indexed production Java files, giving useful operational context beyond what the annotations already provide.
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?
A single, tightly worded sentence that front-loads the verb and packs in the resource, scope, and search type. There is no redundancy or filler, making it easy for an agent to parse quickly.
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?
For a simple read-only search tool with an output schema, the description covers what is searched, how it is searched (literal), and the bounded nature of results. It would benefit from explicit routing to sibling API search tools, but nothing essential for invoking the tool correctly is missing.
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 one of three schema properties (cursor) has a schema description, so the description must compensate for the other two. It does so by clarifying that 'literal' is a literal search string and that the search is 'bounded', which maps to the limit parameter; cursor is already documented in 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 names a specific action ('search'), a specific resource ('indexed production Java source files'), and a key constraint ('bounded literal (not regex)'). This clearly separates it from sibling iceberg_api_search (API docs) and iceberg_source_find_implementations (implementation discovery), making its purpose unmistakable.
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 conveys that the tool is for literal source-code search and explicitly notes it is not regex, implying a regex search would need a different tool. However, it does not name any sibling tool or state when to choose API search vs source search, leaving some routing guidance implicit rather than explicit.
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. Dates show when Glama detected each change.
9 tool updates
v0.1.0- First observed
iceberg_api_browse - First observed
iceberg_api_compare_versions - First observed
iceberg_api_get_member - First observed
iceberg_api_get_type - First observed
iceberg_api_list_versions - First observed
iceberg_api_search - First observed
iceberg_source_find_implementations - First observed
iceberg_source_get_type - First observed
iceberg_source_search
TDQS
The api/source prefixes and distinct actions separate most tools clearly, but iceberg_api_browse and iceberg_api_search both provide ways to locate API packages/types/members, so an agent might need to decide between hierarchical navigation and ranked querying. The descriptions are specific enough to resolve this, so it is only a minor ambiguity.
All tool names follow a consistent iceberg_<domain>_<action> snake_case pattern, with the same verb conventions used across API and source tools. There are no mixed casing styles or arbitrary verbs.
Nine tools is well within the ideal range, and each tool earns its place for the combined API-documentation and source-exploration scope. It is neither bloated nor too thin.
The surface covers version listing, API browsing/searching, type and member retrieval, version comparison, and source lookup/search/implementation discovery. Minor gaps exist, such as no direct package-level details or source access for a specific member, but these can be worked around via browse and literal source search.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Query any docs site via MCP. Submit a URL, ask questions, get cited answers.
Turn a GitHub repo or docs site into agent-ready context: pack it or search it, over MCP.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Agent-native launch platform and tool directory: search, alternatives, trending, launch via MCP.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables searching and fetching LlamaIndex documentation for integration with VS Code Copilot and other MCP clients.1-
- FlicenseNot gradedqualityDmaintenanceEnables file system operations, web scraping, and AI-powered search through MCP tools for use by LLM agents.1-
- AlicenseCqualityDmaintenanceEnables natural language interaction with Apache Iceberg Lakehouse tables through MCP, supporting read-only operations like listing namespaces, tables, schemas, and partitions.5Apache 2.0
- FlicenseAqualityDmaintenanceEnables searching documentation from GitHub repositories and web pages via MCP tools, with in-memory indexing and caching for fast retrieval.3-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bsisduck/iceberg-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server