Skip to main content
Glama
bsisduck

Apache Iceberg MCP Server

by bsisduck

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.node against engines.node at 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 tools

  • Optional: 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.js

stdio 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.js

Without 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/iceberg

Supported 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.js

Alternatively 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=true

This 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.js

The 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

ICEBERG_JAVADOC_VERSION

1.11.0

Default release semver or nightly

ICEBERG_JAVADOC_BASE_URL

official Iceberg Javadoc root

HTTPS operator-controlled root

ICEBERG_JAVADOC_INDEX_MAX_BYTES

32000000

Search index byte limit, 1 MB to 256 MB

ICEBERG_JAVADOC_CACHE

on

off disables the on-disk Javadoc cache

ICEBERG_JAVADOC_CACHE_DIR

~/.cache/iceberg-mcp-server/javadoc

Javadoc cache directory

ICEBERG_JAVADOC_CACHE_TTL_MS

86400000

Age before an entry is revalidated

ICEBERG_JAVADOC_CACHE_MAX_BYTES

268435456

Javadoc cache ceiling, 1 MB to 10 GB

ICEBERG_SOURCE_DIR

valid sibling ../iceberg, else disabled

Local Iceberg checkout

ICEBERG_SOURCE_INDEX_MAX_BYTES

64000000

Source text kept in memory, 0 to 1 GiB

ICEBERG_CATALOG_URI

unset

REST Catalog root; HTTPS outside loopback

ICEBERG_CATALOG_WAREHOUSE

unset

Warehouse sent only during config discovery

ICEBERG_CATALOG_TOKEN[_FILE]

unset

Outbound catalog bearer token

ICEBERG_OAUTH2_URI

unset

External OAuth token endpoint

ICEBERG_OAUTH2_CREDENTIAL[_FILE]

unset

OAuth client_id:client_secret

ICEBERG_CATALOG_ALLOW_MUTATIONS

false

Register catalog mutation tools

ICEBERG_MCP_TRANSPORT

stdio

stdio or http

ICEBERG_MCP_HOST

127.0.0.1

HTTP bind host; [::1] normalizes to ::1

ICEBERG_MCP_PORT

3000

HTTP bind port

ICEBERG_MCP_ALLOWED_ORIGINS

loopback origins for the port

Comma-separated exact origins

ICEBERG_MCP_AUTH_TOKEN[_FILE]

unset

Inbound HTTP bearer token

ICEBERG_MCP_MAX_REQUEST_BYTES

1048576

HTTP request limit, 4 KiB to 10 MiB

ICEBERG_MAX_RESPONSE_CHARS

30000

Tool/resource output limit, 4,096 to 100,000

ICEBERG_REQUEST_TIMEOUT_MS

15000

Upstream timeout, 1,000 to 120,000 ms

ICEBERG_MCP_LOG_LEVEL

info

stderr detail: error, info, or debug

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-run

verify: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 tools
iceberg_api_browseBrowse Iceberg Java APIA
Read-onlyIdempotent

Browse the complete published package, type, or member index with exact package and label-prefix filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesIndex surface to browse.
limitNo
cursorNoOpaque cursor from the prior page.
prefixNoCase-insensitive label prefix.
versionNoPublished Iceberg release such as 1.11.0, or nightly.1.11.0
package_nameNoExact Java package filter.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 versionsA
Read-onlyIdempotent

Compare exact published package, type, or member identities between two Iceberg Javadoc versions.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNotype
limitNo
cursorNoOpaque cursor from the prior page.
to_versionYesPublished Iceberg release such as 1.11.0, or nightly.
from_versionYesPublished Iceberg release such as 1.11.0, or nightly.
package_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 memberA
Read-onlyIdempotent

Get one exact member by its published label or Javadoc anchor within an exact Java type.

ParametersJSON Schema
NameRequiredDescriptionDefault
memberYesPublished label or exact Javadoc anchor.
versionNoPublished Iceberg release such as 1.11.0, or nightly.1.11.0
fully_qualified_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 typeA
Read-onlyIdempotent

Get one exact published Java type with declaration, description, deprecation, detailed members, links, and stability evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoPublished Iceberg release such as 1.11.0, or nightly.1.11.0
member_limitNo
member_cursorNoOpaque cursor from the prior page.
fully_qualified_nameYesExact Javadoc type identity.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 versionsB
Read-onlyIdempotent

List the configured stable/nightly Javadoc identities and optional local source revision.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_source_find_implementationsFind Iceberg source implementationsA
Read-onlyIdempotent

Find bounded lexical extends/implements declarations for a Java type; results are evidence, not semantic compiler analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNoOpaque cursor from the prior page.
fully_qualified_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 sourceA
Read-onlyIdempotent

Read a bounded, line-numbered source window for an indexed Java type from the configured Iceberg checkout.

ParametersJSON Schema
NameRequiredDescriptionDefault
line_countNo
start_lineNo
fully_qualified_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv0.1.0
    • First observediceberg_api_browse
    • First observediceberg_api_compare_versions
    • First observediceberg_api_get_member
    • First observediceberg_api_get_type
    • First observediceberg_api_list_versions
    • First observediceberg_api_search
    • First observediceberg_source_find_implementations
    • First observediceberg_source_get_type
    • First observediceberg_source_search

TDQS

A3.9/5.0
Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

Latest Blog Posts

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