Prototype · Preview: every server in the official registry, synced every 30 minutes. Reviews and accounts come in a later step.
PopNx MCPMCP servers for people who use AI · explained in plain words

Apache Pinot MCP Server

by startreedataversion 5.0.0i★ –iRuns on your computer
Registry nameio.github.startreedata/mcp-pinot

Install

Overview

Description from the maker (original English)

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

PopNx MCP’s three pillars

These three are never merged into one score: opinions, measurements and popularity are different things.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

  • Connection: Runs on your computer
  • Transport: stdio
  • Category: Other
  • You need to fill in: PINOT_PASSWORD, PINOT_TOKEN

Install

Pick the AI app you use, then copy the settings.

Before you install

  • Basic checks: 1 of 1 passed
  • Runs on your computer with your user’s permissions (files, network, apps).
  • You fill in yourself: PINOT_CONTROLLER_URL, PINOT_BROKER_URL, PINOT_USERNAME, PINOT_PASSWORD, PINOT_TOKEN, PINOT_USE_MSQE, MCP_TRANSPORT, AUTH_PROVIDER

Values marked secret are keys to your account. Never share them or paste them into a chat.

You need

  • PyPIPython’s uv installed (for the uvx command)

Which app do you use?

Pick your app above. We remember it, so next time the button says “Install in …”.

Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json

{
  "mcpServers": {
    "pinot": {
      "command": "uvx",
      "args": [
        "mcp-pinot-server"
      ],
      "env": {
        "PINOT_CONTROLLER_URL": "your-value",
        "PINOT_BROKER_URL": "your-value",
        "PINOT_USERNAME": "your-value",
        "PINOT_PASSWORD": "your-value",
        "PINOT_TOKEN": "your-value",
        "PINOT_USE_MSQE": "your-value",
        "MCP_TRANSPORT": "your-value",
        "AUTH_PROVIDER": "your-value"
      }
    }
  }
}

Run this in your terminal

claude mcp add pinot --env PINOT_CONTROLLER_URL=your-value --env PINOT_BROKER_URL=your-value --env PINOT_USERNAME=your-value --env PINOT_PASSWORD=your-value --env PINOT_TOKEN=your-value --env PINOT_USE_MSQE=your-value --env MCP_TRANSPORT=your-value --env AUTH_PROVIDER=your-value -- uvx mcp-pinot-server

Fill in the empty values before running it.

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "pinot": {
      "command": "uvx",
      "args": [
        "mcp-pinot-server"
      ],
      "env": {
        "PINOT_CONTROLLER_URL": "your-value",
        "PINOT_BROKER_URL": "your-value",
        "PINOT_USERNAME": "your-value",
        "PINOT_PASSWORD": "your-value",
        "PINOT_TOKEN": "your-value",
        "PINOT_USE_MSQE": "your-value",
        "MCP_TRANSPORT": "your-value",
        "AUTH_PROVIDER": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "pinot": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "mcp-pinot-server"
      ],
      "env": {
        "PINOT_CONTROLLER_URL": "your-value",
        "PINOT_BROKER_URL": "your-value",
        "PINOT_USERNAME": "your-value",
        "PINOT_PASSWORD": "your-value",
        "PINOT_TOKEN": "your-value",
        "PINOT_USE_MSQE": "your-value",
        "MCP_TRANSPORT": "your-value",
        "AUTH_PROVIDER": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.

Your choice stays on this device in a cookie; no account needed.

Values you fill in

  • PINOT_CONTROLLER_URL env
    HTTP(S) endpoint of the Pinot Controller.
  • PINOT_BROKER_URL env
    HTTP(S) endpoint of the Pinot Broker.
  • PINOT_USERNAME env
    Optional Pinot basic-auth username.
  • PINOT_PASSWORD secret env
    Optional Pinot basic-auth password.
  • PINOT_TOKEN secret env
    Optional Pinot bearer token. Overrides username and password when set.
  • PINOT_USE_MSQE env
    Whether to enable Pinot multi-stage query engine support.
  • MCP_TRANSPORT env
    Transport mode: 'stdio' (default, for desktop clients) or 'http'.
  • AUTH_PROVIDER env
    Inbound auth provider for HTTP transport (e.g. 'oauth'); required to bind a non-loopback host.

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

What it can do

Runs on your computer; the tool list appears in your AI app after you install it.

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified with the GitHub account startreedata, which owns the repo

  • … Not checked yet

    Still maintained

    We have not read this repo from GitHub yet

  • … Not checked yet

    Has a licence

    We have not read this repo from GitHub yet

  • – Not applicable

    Endpoint responds

    This one runs on your computer; there is no internet endpoint

  • – Not applicable

    Sign-in with OAuth

    Runs on your computer and uses local settings instead

  • … Not checked yet

    No hidden instructions in tool descriptions

    Runs on your computer; we can only read tool lists from internet endpoints

Compared with others in Otheri

  • More stars than 0% of the other 18474 servers in this category
  • Published to the registry more recently than 62% of the other 18474 servers in this category
  • Basic checks equal to or better than 100% of the other 18474 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is Apache Pinot MCP Server safe?

It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

You need to fill in: PINOT_PASSWORD, PINOT_TOKEN

Does it run on my computer or in the cloud?

It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).

Is it still maintained?

The GitHub repo last changed –, and the latest version (5.0.0) reached the registry 27 days ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Python (uv), Docker on your computer.

What can I use instead?

In the same category: Spec Driven Development, Remote Desktop Commander, SwarmMemo

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

Spec Driven Development

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

by formulahendryEarly↓ 66/wk★ 440Updated 14 months ago

Runs on your computer

Remote Desktop Commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

by desktop-commanderGrowing★ 211Updated 3 days ago

Runs in the cloud✓ desktopcommander.app

SwarmMemo

Talk with agent swarms: rooms, private messages and paid tasks for AI agents

by Hugo0Very newUpdated today

Runs in the cloud✓ swarmmemo.com

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

Pinot MCP Server

Table of Contents

  • Overview
  • Features
  • Quick Start
  • Configuration Reference
  • Docker Build
  • Claude Desktop Integration
  • Try a Prompt
  • Security and Vulnerability Reporting
  • Developer Notes
  • Repo Maintainer

Overview

This project is a Python-based Model Context Protocol (MCP) server for interacting with Apache Pinot. It is built using the FastMCP framework. It is designed to integrate with Claude Desktop to enable real-time analytics and metadata queries on a Pinot cluster.

It allows you to

  • List tables, segments, and schema info from Pinot
  • Execute read-only SQL queries
  • View index/column-level metadata
  • Designed to assist business users via Claude integration
  • and much more.

Features

  • Every tool advertises typed input and output JSON Schemas, MCP risk annotations, and failure-recovery guidance for agent planning.
  • Large query, table, segment-name, and segment-metadata responses use bounded pages with continuation metadata instead of returning unbounded agent context.
  • Read-only SQL is parsed and enforced before execution; validation, permission, and transient connectivity errors are surfaced as actionable MCP errors.
  • Every mutating tool supports dry_run; always preview the exact target and payload before applying. Applying requires the preview's short-lived, one-time confirmation_token, including for table-filter reloads. A preview is not a guarantee that Pinot will accept the later write.
  • Single-purpose schema and table-config inspection tools avoid ambiguous combined operations: use get_schema and get_table_config independently.

MCP Tool Contract

Tool names are case-sensitive and use underscores. Version 4 renamed four tools to make every operation verb-first; clients using the former noun-first names must update their calls.

ToolPurpose
test_connectionDiagnose broker, controller, and query connectivity.
list_tablesList visible Pinot table names.
get_schemaGet one table's column schema.
get_table_configGet one table's indexing and ingestion configuration.
get_table_sizeGet reported and estimated storage size for one table.
list_segmentsList exact segment names for one table.
list_segment_metadataPage through metadata for a table's segments.
get_segment_index_metadataInspect per-column indexes for one exact segment.
read_queryRun one read-only Pinot SQL query.
begin_investigation / query_incidentOpen and query an opt-in scoped evidence run.
get_trace / finish_investigationFetch recorded span edges and close with citations.
create_schema / update_schemaPreview or apply schema changes.
create_table_config / update_table_configPreview or apply table-config changes.
reload_table_filtersPreview or apply the configured table-filter YAML.

For every schema, table-config, or table-filter change, first call the same tool with dry_run=true, present the preview to the user, and call it with dry_run=false and the preview's one-time confirmation_token only after confirmation. Editing a table-filter file after preview invalidates its token. Pinot performs authoritative validation during table/schema apply calls, so a write can still fail after a successful preview.

Query execution evidence

read_query returns the existing page fields plus metadata. For example, {"query":"SELECT service, count(*) FROM events GROUP BY service","limit":20} returns metadata.completeness as complete, partial, or unknown, along with native server counts, query ID, query SHA-256, and bounded execution statistics. Missing resultTable or required execution flags remains unknown. A partial server response or group limit remains partial; an empty page is not proof of healthy telemetry. Native complete describes this bounded SQL execution, not coverage of the incident window or the entire dataset. row_limit_reached is separate from execution completeness and paging.

The MCP query path uses pinotdb>=9.2.1 through cursor.execute_native() for submission and decoding. The SDK exposes full structured query_statistics; MCP projects bounded counters and safe execution evidence into the tool response. The path submits once and does not switch transports after an ambiguous failure. Its unique clientQueryId and applicationName=mcp-pinot support optional correlation with query history or broker logs when available. Python integrations can call execute_query_with_metadata(..., timeout_seconds=5) to bound native and HTTP timeouts without modifying shared configuration. HTTP timeouts are inactivity limits; late results are rejected, but this is not native cancellation.

Tool results, including tool errors, include timing evidence in the standard MCP response _meta["io.github.startreedata/mcp-pinot"]. Existing tool data and output schemas are preserved. For example, this response metadata fragment requires no log access:

{

"_meta": { "io.github.startreedata/mcp-pinot": { "request_id": "38cb1444b20c446a96bc272531f34518", "status": "success", "admitted": true, "queue_wait_ms": 12, "execution_ms": 84, "duration_ms": 97 } } }

MCP rate-limit protocol errors preserve their JSON-RPC code and message and carry the same envelope in error.data._meta["io.github.startreedata/mcp-pinot"]. Other transport/protocol failures or cancellation may not produce a tool result.

With MCP_TRANSPORT=http on the default port 8080, a FastMCP Python client reads wire _meta through result.meta. call_tool_mcp also returns tool errors:

from fastmcp import Client

async def read_timing(): async with Client("http://localhost:8080/mcp") as client: result = await client.call_tool_mcp("read_query", {"query": "SELECT 1"}) return result.meta["io.github.startreedata/mcp-pinot"]

Orchestrators should read .meta and forward this evidence to the agent when the host does not automatically surface protocol metadata.

queue_wait_ms measures only waiting for the MCP concurrency semaphore. execution_ms measures the admitted MCP tool pipeline, including SDK HTTP work and validation; admitted=false means that pipeline never started. duration_ms covers the server's tool invocation, including admission checks, and excludes model reasoning and client delivery. status is success or error for the MCP outcome; for read_query, separately inspect metadata.completeness.

An agent can use queue_wait_ms to identify MCP admission delay, then inspect read_query's metadata.native_stats.timeUsedMs for Pinot's native query duration when present. Native query time overlaps execution_ms; their different timer boundaries do not support exact network-overhead subtraction. The shared request_id also appears in query metadata and native clientQueryId, enabling optional history/log correlation when more context is needed.

Response timing metadata contains no secrets, principal identifiers, tool arguments, SQL, or rows. Audit logs record the same timings with hashed principal identifiers. MCP_MAX_RESPONSE_BYTES limits the tool payload before this bounded timing envelope is added; it excludes the added observability metadata. Cancellation is audit-only when no response is returned and does not prove that Pinot execution stopped.

Incident tools are disabled until the server starts with --incident-profiles. See the incident evidence guide and example profile for configuration and a workflow using begin_investigation, query_incident, optional get_trace, and finish_investigation. Evidence queries expose the same response _meta timings and native request IDs when reported; log access is optional. Runs are owner-bound and budgeted; complete execution still leaves root-cause hypotheses and dataset coverage unvalidated. This first version uses bounded in-memory state in one process.

Pinot MCP in Action

See Pinot MCP in action below:

Fetching Metadata
Fetching Data, followed by analysis

Prompt: Can you do a histogram plot on the GitHub events against time

Sample Prompts

Once Claude is running, click the hammer 🛠️ icon and try these prompts:

  • Can you help me analyse my data in Pinot? Use the Pinot tool and look at the list of tables to begin with.
  • Can you do a histogram plot on the GitHub events against time

Quick Start

Prerequisites
Install uv (if not already installed)

uv is a fast Python package installer and resolver, written in Rust. It's designed to be a drop-in replacement for pip with significantly better performance.

curl -LsSf https://astral.sh/uv/install.sh | sh

Reload your bashrc/zshrc to take effect. Alternatively, restart your terminal

source ~/.bashrc

Installation
# Clone the repository

git clone https://github.com/startreedata/mcp-pinot.git cd mcp-pinot uv pip install -e . # Install dependencies

For development dependencies (including testing tools), use:

uv pip install -e .[dev]

Configure Pinot Cluster

The MCP server expects a uvicorn config style .env file in the root directory to configure the Pinot cluster connection. This repo includes a sample .env.example file that assumes a pinot quickstart setup.

mv .env.example .env

Configuration Reference

The server loads configuration from environment variables and from a .env file found from the current working directory. Process environment variables take precedence over .env, so deployment-time settings cannot be silently replaced by a checked-out file.

Common Profiles
Use caseRequired settingsNotes
Claude DesktopMCP_TRANSPORT=stdioDefault and recommended for local desktop use; no HTTP listener is started.
Local HTTPMCP_TRANSPORT=http, MCP_HOST=127.0.0.1Explicit local web profile. Accessible only from the same machine.
Remote HTTP/HTTPSMCP_TRANSPORT=http, MCP_HOST=0.0.0.0, MCP_ALLOWED_HOSTS= , AUTH_PROVIDER=oauth\static\oauth+staticThe server refuses non-loopback HTTP/HTTPS binds unless an auth provider is active, and a wildcard bind requires an explicit Host allowlist. Use oauth+static to serve interactive users and one trusted backend at once. Use TLS directly or an authenticated reverse proxy.
Helm exposureservice.enabled=true, mcp.host=0.0.0.0, mcp.oauth.enabled=trueHelm defaults are local-only and render no Service unless exposure is explicitly enabled.
Pinot Conne

Only the beginning is shown; read the rest in the repo

Ask PopNx