Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

Apache Pinot MCP Server

OCI · GHCR.IO/STARTREEDATA/MCP-PINOT:4.0.0 · 2 COMPONENTS · SCANNED AUG 3

Query and manage Apache Pinot through MCP with typed tools and preview-first safety.

+29 this week 40 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →

Supply Chain Security0
  • Malware scan not yet available for this package.Unverified
  • CVE data not yet available for this package.Unverified
  • Install-script risk not yet assessed.Unverified
  • Dependency-health data not yet available.Unverified
Provenance & Transparency45
Schema Quality & AI Usability78
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 2807 tokens (~187/item across 15 items; 14 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass

Unverified: 2 categories

Categories scored 0 because we could not verify them: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

oci · ghcr.io/startreedata/mcp-pinot:4.0.0

# add to Claude Code
claude mcp add startreedata-mcp-pinot -- docker run --rm -i ghcr.io/startreedata/mcp-pinot:4.0.0
# add to Codex CLI
codex mcp add startreedata-mcp-pinot -- docker run --rm -i ghcr.io/startreedata/mcp-pinot:4.0.0
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "startreedata-mcp-pinot": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "--rm",
        "-i",
        "ghcr.io/startreedata/mcp-pinot:4.0.0"
      ],
      "enabled": true
    }
  }
}
# ~/.hermes/config.yaml
mcp_servers:
  startreedata-mcp-pinot:
    command: "docker"
    args: ["run", "--rm", "-i", "ghcr.io/startreedata/mcp-pinot:4.0.0"]
// mcp.json
{
  "mcpServers": {
    "startreedata-mcp-pinot": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/startreedata/mcp-pinot:4.0.0"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 31 Jul 26 −5
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 28 Jul 26 +34
    • Schema quality: unverified → 100 functional
    • Tool coverage: unverified → 100 functional
    • First check of Schema quality: fail functional
    • First check of Tool coverage: 100 functional
    • First check of Schema quality: excellent functional
    • First check of Schema quality: fail functional
    • First check of Tool coverage: 100 functional
  • 27 Jul 26 11

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Analysed oci/ghcr.io/startreedata/mcp-pinot:4.0.0

Provenance none

Ecosystem: oci · Outcome: none

Reason: no_attestation

MCP tools — 14 exposed · ~2,696 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
create_schema ~154

Preview or create a new Pinot schema without replacing an existing schema. The default preview performs strict local structural validation and returns a short-lived confirmation token bound to the exact normalized schema. Pass that token with ``dry_run=false`` to apply. Replacement belongs in ``update_schema``. Failure recovery: Invalid JSON, missing ``schemaName``, and controller validation failures are non-retryable until corrected. Permission failures require access changes; retry transient controller failures only after connectivity is restored.

NameTypeReqDescription
confirmation_tokenToken returned by a preview of this exact payload.
dry_runbooleanPreview safely (default); false requests application.
schemaobjectyesStructured Pinot schema. schemaName is required.
NameTypeReqDescription
appliedbooleanTrue only when Pinot accepted a mutating request.
confirmation_tokenShort-lived token bound to this exact preview; required to apply it.
dry_runbooleanTrue when no mutation was sent to Pinot.
messageHuman-readable detail, when provided.
operationstringyesStable operation identifier.
resource_namestringyesExact schema or table name targeted.
resource_typestringyesKind of Pinot resource targeted by the operation.
response_summarySanitized summary returned by the Pinot controller.
statusstringWhether the operation was previewed, applied, or rejected.
verification_toolstringyesRead tool to call after a successful mutation.
warningsarraySafety or validation warnings.

No examples provided.

create_table_config ~136

Create a new Pinot table configuration. Accepts a typed table-config object. The default ``dry_run=true`` asks Pinot to validate the payload and returns a confirmation token without applying. Failure recovery: Invalid JSON, missing ``tableName``, and controller validation failures need a corrected payload; do not retry unchanged. Fix access failures first, and retry transient controller errors after connectivity is restored.

NameTypeReqDescription
confirmation_tokenToken returned by a preview of this exact payload.
dry_runbooleanPreview safely (default); false requests application.
table_configobjectyesComplete structured Pinot table configuration.
NameTypeReqDescription
appliedbooleanTrue only when Pinot accepted a mutating request.
confirmation_tokenShort-lived token bound to this exact preview; required to apply it.
dry_runbooleanTrue when no mutation was sent to Pinot.
messageHuman-readable detail, when provided.
operationstringyesStable operation identifier.
resource_namestringyesExact schema or table name targeted.
resource_typestringyesKind of Pinot resource targeted by the operation.
response_summarySanitized summary returned by the Pinot controller.
statusstringWhether the operation was previewed, applied, or rejected.
verification_toolstringyesRead tool to call after a successful mutation.
warningsarraySafety or validation warnings.

No examples provided.

get_schema ~151

Get one Pinot schema, including dimensions, metrics, time, and primary keys. This is a single-object lookup, not a list, so pagination does not apply. The output preserves additional fields introduced by the connected Pinot version. Failure recovery: For not-found errors, pass the table's exact schema name (normally the table name without a type suffix). Fix permissions before retrying; retry transient controller failures after ``test_connection`` succeeds.

NameTypeReqDescription
schema_namestringyesExact Pinot schema name. It normally matches the table name without an _OFFLINE/_REALTIME suffix; use letters, digits, hyphens, or underscores, optionally prefixed by one 'database.' qualifier.
NameTypeReqDescription
dateTimeFieldSpecsDate/time column specifications.
dimensionFieldSpecsDimension (attribute) column specifications.
metricFieldSpecsMetric (aggregatable measure) column specifications.
primaryKeyColumnsPrimary key columns, for upsert-enabled tables.
schemaNameThe schema name.

No examples provided.

get_segment_index_metadata ~262

Get per-column index metadata for ONE segment (which indexes each column has). Use this to inspect how a specific segment is indexed (inverted, sorted, range, etc.). Requires a ``segment_name`` from ``list_segments``. For a segment's row count/size/time boundaries use ``list_segment_metadata``; for the table's declared index *configuration* (not per-segment state) use ``get_table_config``. Failure recovery: A missing segment is non-retryable with the same value; refresh ``list_segments`` and use an exact returned name. Retry transient controller errors after ``test_connection`` succeeds.

NameTypeReqDescription
segment_namestringyesExact, case-sensitive opaque segment name returned by list_segments; do not construct, trim, or add a table-type suffix. Pinot defines the length and characters, so this client only requires non-empt…
table_namestringyesExact Pinot table name, without _OFFLINE/_REALTIME. Use letters, digits, hyphens, or underscores, optionally prefixed by one 'database.' qualifier; whitespace is invalid and '__' is reserved by Pinot…
NameTypeReqDescription
columnsPer-column metadata for the segment, when present.
indexesPer-column index metadata (index types present on each column).

No examples provided.

get_table_config ~193

Get one table's indexing, retention, tenant, and ingestion configuration. This is a single-object lookup, not a list, so pagination does not apply. Set ``table_type`` only when one side of a hybrid table is needed. Failure recovery: For not-found errors, use an exact name from ``list_tables`` and a valid table type. Fix permissions before retrying; retry transient controller failures after ``test_connection`` succeeds.

NameTypeReqDescription
table_namestringyesExact Pinot table name, without _OFFLINE/_REALTIME. Use letters, digits, hyphens, or underscores, optionally prefixed by one 'database.' qualifier; whitespace is invalid and '__' is reserved by Pinot…
table_typeRestrict to one table type; omit to return both when present.
NameTypeReqDescription
offlineOFFLINE configuration, when present/requested.
realtimeREALTIME configuration, when present/requested.
table_namestringyesBase table name requested by the caller.

No examples provided.

get_table_size ~206

Get a table's storage footprint: reported vs. estimated size in bytes. Use this for capacity/size questions about a whole table. It does NOT list segments (use ``list_segments``) or return row counts/time boundaries (use ``list_segment_metadata``). ``reportedSizeInBytes`` is what the servers currently hosting the segments report; ``estimatedSizeInBytes`` assumes every replica is present. Failure recovery: For not-found errors, copy an exact name from ``list_tables``. Fix permission errors before retrying; retry transient controller failures after a health check.

NameTypeReqDescription
table_namestringyesExact Pinot table name, without _OFFLINE/_REALTIME. Use letters, digits, hyphens, or underscores, optionally prefixed by one 'database.' qualifier; whitespace is invalid and '__' is reserved by Pinot…
NameTypeReqDescription
estimatedSizeInBytesEstimated size assuming every replica is present, in bytes.
reportedSizeInBytesSize reported by the servers currently hosting the table's segments, in bytes.
tableNameThe table name.

No examples provided.

list_segment_metadata ~214

Get a deterministic page of segment rows, sizes, and time boundaries. Pinot can return thousands of segment objects. Results are sorted by exact segment name, then sliced with ``limit``/``offset``; follow ``has_more`` until false. Use ``list_segments`` when only names are needed. Failure recovery: An empty page is success. For not-found errors, use ``list_tables``; correct permissions before retrying, and retry transient server failures only after ``test_connection`` succeeds.

NameTypeReqDescription
limitintegerMaximum segment metadata objects in this page.
offsetintegerZero-based segment offset for pagination.
table_namestringyesExact Pinot table name, without _OFFLINE/_REALTIME. Use letters, digits, hyphens, or underscores, optionally prefixed by one 'database.' qualifier; whitespace is invalid and '__' is reserved by Pinot…
NameTypeReqDescription
has_morebooleanyesTrue when more fetched segment metadata remains after this page.
offsetintegeryesZero-based index of the first returned segment.
returned_segmentsintegeryesNumber of segment metadata objects in this page.
segmentsobjectMetadata keyed by exact segment name. Values can include row counts, sizes, time boundaries, and column/index details returned by Pinot.
total_segmentsintegeryesTotal segment metadata objects fetched before paging.

No examples provided.

list_segments ~263

List a table's segment names, grouped by table type (OFFLINE/REALTIME). Use this to discover segment names — e.g. to get a ``segment_name`` for ``get_segment_index_metadata``, or to see how a table is partitioned. For per-segment row counts / sizes / time boundaries call ``list_segment_metadata`` instead; for total storage call ``get_table_size``. Segment names are paginated (a busy table can have thousands) — use ``limit``/``offset`` and the ``has_more`` flag to page through them. Failure recovery: An empty page is success. For not-found errors, use an exact name from ``list_tables``; correct access errors, or retry transient controller errors.

NameTypeReqDescription
limitintegerMaximum segment names to return in this page.
offsetintegerZero-based offset for pagination.
table_namestringyesExact Pinot table name, without _OFFLINE/_REALTIME. Use letters, digits, hyphens, or underscores, optionally prefixed by one 'database.' qualifier; whitespace is invalid and '__' is reserved by Pinot…
NameTypeReqDescription
OFFLINEOFFLINE segment names in this page, when present.
REALTIMEREALTIME segment names in this page, when present.
has_moreTrue when more segments remain beyond this page.
offsetZero-based offset of the first segment in this page.
returned_segmentsNumber of segment names returned in this page.
total_segmentsTotal segments across all types before paging.

No examples provided.

list_tables ~113

List Pinot tables visible to this server (subject to table filters). Returns a paginated list of table names. Use ``limit``/``offset`` and the ``has_more`` flag to page through clusters with many tables. Failure recovery: An empty page is success. For authentication/connectivity errors, verify the controller with ``test_connection`` and retry after access is restored.

NameTypeReqDescription
limitintegerMaximum tables to return in this page.
offsetintegerZero-based offset for pagination.
NameTypeReqDescription
has_morebooleanyesTrue when more tables remain beyond this page.
offsetintegeryesZero-based index of the first returned table.
table_countintegeryesNumber of tables in this page.
tablesarrayTable names in this page.
total_tablesintegeryesTotal tables visible to this server.

No examples provided.

read_query ~242

Run a read-only SQL query against Pinot and return a page of rows. Only a single SELECT (or WITH ... SELECT) statement is allowed; the query is rejected if it contains multiple statements or write/DDL/admin keywords. Results are paginated to keep responses small — use ``limit``/``offset`` and the ``has_more`` flag to page through large result sets. Returns ``QueryResult`` with the page of rows, the column list, fetched row count, and a ``has_more`` flag. Failure recovery: SQL/allow-list/permission failures require correcting the query or access; do not retry unchanged. A timeout or connection failure can be retried after ``test_connection`` succeeds. Zero rows is a successful result.

NameTypeReqDescription
limitintegerMaximum rows to return in this page.
offsetintegerZero-based row offset for pagination.
querystringyesA single read-only statement in Pinot SQL: 'SELECT ...' or 'WITH ... SELECT ...'. Stacked statements and DML/DDL/admin keywords (INSERT, UPDATE, DELETE, DROP, SET, ...) are rejected.
NameTypeReqDescription
columnsarrayColumn names, in result order.
has_morebooleanyesTrue when more fetched rows remain beyond this page (not necessarily more rows in the underlying table).
offsetintegeryesZero-based index of the first returned row.
row_countintegeryesNumber of rows returned in this page.
rowsarrayRows in this page; each row maps column name to value.
total_rowsintegeryesRows the query returned before this page was sliced. Pinot may have already applied its own LIMIT, so this is rows fetched, not the table total.
truncatedbooleanTrue when the server-enforced fetch bound truncated the result.

No examples provided.

reload_table_filters ~252

Preview or apply the configured table-filter YAML without restarting. Reads only the path configured by ``PINOT_TABLE_FILTER_FILE``. The YAML must be an object whose ``included_tables`` value is a non-empty list of glob strings. Allowing every table requires an explicit ``allow_all: true``. The default ``dry_run=true`` validates and reports the before/after patterns and returns a short-lived confirmation token. Pass ``dry_run=false`` with that token to apply the exact candidate atomically. Editing the file after preview invalidates the confirmation and requires another preview. Returns: Preview/application status, whether it was applied, old/new patterns, and a confirmation token on previews. Failure recovery: A missing setting/file or malformed YAML is non-retryable until corrected; fix ``PINOT_TABLE_FILTER_FILE`` or its ``included_tables`` list, then retry.

NameTypeReqDescription
confirmation_tokenOne-time token returned by a dry-run preview of the exact current filter-file contents. Required when dry_run is false.
dry_runbooleanWhen true (default), validate and preview the candidate allow-list without changing server state. Pass false explicitly to apply it.
NameTypeReqDescription
appliedbooleanTrue only when the in-memory allow-list was changed.
confirmation_tokenShort-lived token bound to this exact filter preview; required to apply.
messagestringyesHuman-readable summary of the reload.
new_filter_countintegerNumber of allowed tables after the reload.
new_filtersValidated candidate patterns; null means all tables.
previous_filter_countintegerNumber of allowed tables before the reload.
previous_filtersAllow-list patterns active before the operation; null means all.
statusstringyesWhether the candidate filters were previewed, applied, or failed.

No examples provided.

test_connection ~93

Probe Pinot connectivity and return diagnostics. Runs three checks — broker connection, a trivial ``SELECT 1`` query, and a controller table listing — and reports which succeeded plus a small sample of tables. Useful for troubleshooting configuration before using other tools. Failure recovery: Individual check failures are returned in ``error``. Verify the broker and controller URLs, credentials, and network, then retry only failed checks.

Input schema present but exposes no named parameters.

NameTypeReqDescription
connection_testbooleanTrue when a broker connection was established.
errorError message when a check failed, else null.
query_testbooleanTrue when a trivial 'SELECT 1' succeeded.
sample_tablesarrayUp to five example table names.
tables_countNumber of tables discovered, when available.
tables_testbooleanTrue when the controller table listing succeeded.

No examples provided.

update_schema ~202

Update an existing Pinot schema. Accepts a typed schema object. This can change column definitions on a live table; the default ``dry_run=true`` previews without applying and returns a confirmation token bound to the exact replacement. Failure recovery: Invalid JSON/name or schema validation failures require a corrected payload; do not retry unchanged. Fix permission errors first, and retry transient controller failures only after connectivity is restored.

NameTypeReqDescription
confirmation_tokenToken returned by a preview of this exact payload.
dry_runbooleanPreview safely (default); false requests application.
reloadbooleanReload affected segments after updating.
schemaobjectyesComplete replacement schema; schemaName must match.
schema_namestringyesExact Pinot schema name. It normally matches the table name without an _OFFLINE/_REALTIME suffix; use letters, digits, hyphens, or underscores, optionally prefixed by one 'database.' qualifier.
NameTypeReqDescription
appliedbooleanTrue only when Pinot accepted a mutating request.
confirmation_tokenShort-lived token bound to this exact preview; required to apply it.
dry_runbooleanTrue when no mutation was sent to Pinot.
messageHuman-readable detail, when provided.
operationstringyesStable operation identifier.
resource_namestringyesExact schema or table name targeted.
resource_typestringyesKind of Pinot resource targeted by the operation.
response_summarySanitized summary returned by the Pinot controller.
statusstringWhether the operation was previewed, applied, or rejected.
verification_toolstringyesRead tool to call after a successful mutation.
warningsarraySafety or validation warnings.

No examples provided.

update_table_config ~215

Update an existing Pinot table configuration. Accepts a typed replacement table-config object. This changes a live table; the default ``dry_run=true`` asks Pinot to validate it, compares it with the current configuration, and returns a token without applying. Failure recovery: Invalid JSON/name or controller validation failures require a corrected payload; do not retry unchanged. Fix access errors first, and retry transient controller failures only after connectivity is restored.

NameTypeReqDescription
confirmation_tokenToken returned by a preview of this exact payload.
dry_runbooleanPreview safely (default); false requests application.
table_configobjectyesComplete replacement table configuration.
table_namestringyesExact Pinot table name, without _OFFLINE/_REALTIME. Use letters, digits, hyphens, or underscores, optionally prefixed by one 'database.' qualifier; whitespace is invalid and '__' is reserved by Pinot…
NameTypeReqDescription
appliedbooleanTrue only when Pinot accepted a mutating request.
confirmation_tokenShort-lived token bound to this exact preview; required to apply it.
dry_runbooleanTrue when no mutation was sent to Pinot.
messageHuman-readable detail, when provided.
operationstringyesStable operation identifier.
resource_namestringyesExact schema or table name targeted.
resource_typestringyesKind of Pinot resource targeted by the operation.
response_summarySanitized summary returned by the Pinot controller.
statusstringWhether the operation was previewed, applied, or rejected.
verification_toolstringyesRead tool to call after a successful mutation.
warningsarraySafety or validation warnings.

No examples provided.