Apache Iceberg MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ICEBERG_MCP_HOST | No | HTTP bind host; '[::1]' normalizes to '::1'. | 127.0.0.1 |
| ICEBERG_MCP_PORT | No | HTTP bind port. | 3000 |
| ICEBERG_OAUTH2_URI | No | External OAuth token endpoint. | unset |
| ICEBERG_SOURCE_DIR | No | Local Iceberg checkout. | valid sibling ../iceberg, else disabled |
| ICEBERG_CATALOG_URI | No | REST Catalog root; HTTPS outside loopback. | unset |
| ICEBERG_CATALOG_TOKEN | No | Outbound catalog bearer token. Do not set together with ICEBERG_CATALOG_TOKEN_FILE. | unset |
| ICEBERG_JAVADOC_CACHE | No | 'off' disables the on-disk Javadoc cache. | on |
| ICEBERG_MCP_LOG_LEVEL | No | stderr detail: 'error', 'info', or 'debug'. | info |
| ICEBERG_MCP_TRANSPORT | No | Transport: 'stdio' or 'http'. | stdio |
| ICEBERG_MCP_AUTH_TOKEN | No | Inbound HTTP bearer token. Do not set together with ICEBERG_MCP_AUTH_TOKEN_FILE. | unset |
| ICEBERG_JAVADOC_VERSION | No | Default release semver or 'nightly'. | 1.11.0 |
| ICEBERG_JAVADOC_BASE_URL | No | HTTPS operator-controlled root for Javadocs. | official Iceberg Javadoc root |
| ICEBERG_CATALOG_WAREHOUSE | No | Warehouse sent only during config discovery. | unset |
| ICEBERG_JAVADOC_CACHE_DIR | No | Javadoc cache directory. | ~/.cache/iceberg-mcp-server/javadoc |
| ICEBERG_OAUTH2_CREDENTIAL | No | OAuth client_id:client_secret string. Do not set together with ICEBERG_OAUTH2_CREDENTIAL_FILE. | unset |
| ICEBERG_CATALOG_TOKEN_FILE | No | Path to file containing outbound catalog bearer token. Do not set together with ICEBERG_CATALOG_TOKEN. | unset |
| ICEBERG_MAX_RESPONSE_CHARS | No | Tool/resource output limit, 4,096 to 100,000. | 30000 |
| ICEBERG_REQUEST_TIMEOUT_MS | No | Upstream timeout, 1,000 to 120,000 ms. | 15000 |
| ICEBERG_MCP_ALLOWED_ORIGINS | No | Comma-separated exact origins allowed for HTTP requests. | loopback origins for the port |
| ICEBERG_MCP_AUTH_TOKEN_FILE | No | Path to file containing inbound HTTP bearer token. Do not set together with ICEBERG_MCP_AUTH_TOKEN. | unset |
| ICEBERG_JAVADOC_CACHE_TTL_MS | No | Age before an entry is revalidated. | 86400000 |
| ICEBERG_MCP_MAX_REQUEST_BYTES | No | HTTP request limit, 4 KiB to 10 MiB. | 1048576 |
| ICEBERG_OAUTH2_CREDENTIAL_FILE | No | Path to file containing OAuth client_id:client_secret. Do not set together with ICEBERG_OAUTH2_CREDENTIAL. | unset |
| ICEBERG_SOURCE_INDEX_MAX_BYTES | No | Source text kept in memory, 0 to 1 GiB. | 64000000 |
| ICEBERG_CATALOG_ALLOW_MUTATIONS | No | Register catalog mutation tools. Set to 'true' to expose state-changing and destructive tools. | false |
| ICEBERG_JAVADOC_CACHE_MAX_BYTES | No | Javadoc cache ceiling, 1 MB to 10 GB. | 268435456 |
| ICEBERG_JAVADOC_INDEX_MAX_BYTES | No | Search index byte limit, 1 MB to 256 MB. | 32000000 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| iceberg_api_list_versionsB | List the configured stable/nightly Javadoc identities and optional local source revision. |
| iceberg_api_browseA | Browse the complete published package, type, or member index with exact package and label-prefix filters. |
| iceberg_api_searchA | Ranked case-insensitive search across published Iceberg packages, types, member names, signatures, and identities. |
| iceberg_api_get_typeA | Get one exact published Java type with declaration, description, deprecation, detailed members, links, and stability evidence. |
| iceberg_api_get_memberA | Get one exact member by its published label or Javadoc anchor within an exact Java type. |
| iceberg_api_compare_versionsA | Compare exact published package, type, or member identities between two Iceberg Javadoc versions. |
| iceberg_source_get_typeA | Read a bounded, line-numbered source window for an indexed Java type from the configured Iceberg checkout. |
| iceberg_source_searchA | Perform a bounded literal (not regex) search across indexed production Java source files. |
| iceberg_source_find_implementationsA | Find bounded lexical extends/implements declarations for a Java type; results are evidence, not semantic compiler analysis. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| iceberg-java-usage | Ground a Java implementation task in exact Iceberg API types, members, stability, and optional source evidence. |
| iceberg-api-migration | Compare exact published API identities before planning an Iceberg Java version migration. |
| iceberg-catalog-investigation | Investigate REST Catalog configuration and metadata read-only before considering any mutation. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 9 tools
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.