Skip to main content
Glama
sirjebbington

mcp-server-starrocks

StarRocks Official MCP Server

The StarRocks MCP Server acts as a bridge between AI assistants and StarRocks databases. It allows for direct SQL execution, database exploration, data visualization via charts, and retrieving detailed schema/data overviews without requiring complex client-side setup.

Features

  • Direct SQL Execution: Run SELECT queries (read_query) and DDL/DML commands (write_query).

  • Database Exploration: List databases and tables, retrieve table schemas (starrocks:// resources).

  • System Information: Access internal StarRocks metrics and states via the proc:// resource path.

  • Detailed Overviews: Get comprehensive summaries of tables (table_overview) or entire databases (db_overview), including column definitions, row counts, and sample data.

  • Data Visualization: Execute a query and generate a Plotly chart directly from the results (query_and_plotly_chart).

  • Intelligent Caching: Table and database overviews are cached in memory to speed up repeated requests. Cache can be bypassed when needed.

  • Flexible Configuration: Set connection details and behavior via environment variables.

Related MCP server: General-Purpose Snowflake MCP Server

Prerequisites

  • Python 3.11 or newer.

  • A reachable StarRocks cluster (FE service). By default the server connects to localhost:9030 over the MySQL protocol.

  • uv — a fast Python package and project manager (a modern replacement for pip + virtualenv) from Astral. This project uses uv to resolve dependencies, create the virtual environment, and launch the server. The uv run commands throughout this README automatically create an isolated environment and install the required dependencies on first use, so no manual pip install step is needed.

Installing uv

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

# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

# Or via Homebrew / pipx / pip
brew install uv
# pipx install uv
# pip install uv

See the official uv installation guide for other options. After installing, verify it is on your PATH:

uv --version

Installation

You generally do not need to install the package manually — the MCP host launches it for you via uv (see Configuration below). uv fetches the package and its dependencies on demand.

To run it directly for testing or development:

# Run the published package in a throwaway environment
uv run --with mcp-server-starrocks mcp-server-starrocks --help

# Or, from a local checkout of this repository
git clone https://github.com/starrocks/mcp-server-starrocks.git
cd mcp-server-starrocks
uv sync                      # create the virtual environment and install dependencies
uv run mcp-server-starrocks --help

Configuration

The MCP server is typically run via an MCP host. Configuration is passed to the host, specifying how to launch the StarRocks MCP server process.

Using Streamable HTTP (recommended):

To start the server in Streamable HTTP mode:

First test that the connection to StarRocks is OK (9030 is the StarRocks MySQL protocol port, not the HTTP server port):

$ STARROCKS_URL=root:@localhost:9030 uv run mcp-server-starrocks --test

Start the server:

uv run mcp-server-starrocks --mode streamable-http --port 8000

Then config the MCP like this:

{
  "mcpServers": {
    "mcp-server-starrocks": {
      "url": "http://localhost:8000/mcp"
    }
  }
}

Using Docker:

Build the image:

docker build -t mcp-server-starrocks:local .

Build and push a versioned image:

docker build -t <registry>/<namespace>/mcp-starrocks:0.4.0 .
docker push <registry>/<namespace>/mcp-starrocks:0.4.0

Start the server in Streamable HTTP mode:

docker run --rm -p 8000:8000 \
  -e STARROCKS_HOST=host.docker.internal \
  -e STARROCKS_PORT=9030 \
  -e STARROCKS_USER=root \
  -e STARROCKS_PASSWORD='' \
  mcp-server-starrocks:local

Then configure the MCP client with:

{
  "mcpServers": {
    "mcp-server-starrocks": {
      "url": "http://localhost:8000/mcp"
    }
  }
}

Using uv with installed package (individual environment variables):

{
  "mcpServers": {
    "mcp-server-starrocks": {
      "command": "uv",
      "args": ["run", "--with", "mcp-server-starrocks", "mcp-server-starrocks"],
      "env": {
        "STARROCKS_HOST": "default localhost",
        "STARROCKS_PORT": "default 9030",
        "STARROCKS_USER": "default root",
        "STARROCKS_PASSWORD": "default empty",
        "STARROCKS_DB": "default empty"
      }
    }
  }
}

Using uv with installed package (connection URL):

{
  "mcpServers": {
    "mcp-server-starrocks": {
      "command": "uv",
      "args": ["run", "--with", "mcp-server-starrocks", "mcp-server-starrocks"],
      "env": {
        "STARROCKS_URL": "root:password@localhost:9030/my_database"
      }
    }
  }
}

Using uv with local directory (for development):

{
  "mcpServers": {
    "mcp-server-starrocks": {
      "command": "uv",
      "args": [
        "--directory",
        "path/to/mcp-server-starrocks", // <-- Update this path
        "run",
        "mcp-server-starrocks"
      ],
      "env": {
        "STARROCKS_HOST": "default localhost",
        "STARROCKS_PORT": "default 9030",
        "STARROCKS_USER": "default root",
        "STARROCKS_PASSWORD": "default empty",
        "STARROCKS_DB": "default empty"
      }
    }
  }
}

Using uv with local directory and connection URL:

{
  "mcpServers": {
    "mcp-server-starrocks": {
      "command": "uv",
      "args": [
        "--directory",
        "path/to/mcp-server-starrocks", // <-- Update this path
        "run",
        "mcp-server-starrocks"
      ],
      "env": {
        "STARROCKS_URL": "root:password@localhost:9030/my_database"
      }
    }
  }
}

Command-line Arguments:

The server supports the following command-line arguments:

uv run mcp-server-starrocks --help
  • --mode {stdio,sse,http,streamable-http}: Transport mode (default: stdio or MCP_TRANSPORT_MODE env var)

  • --host HOST: Server host for HTTP modes (default: localhost)

  • --port PORT: Server port for HTTP modes

  • --test: Run in test mode to verify functionality

Examples:

# Start in streamable HTTP mode on custom host/port
uv run mcp-server-starrocks --mode streamable-http --host 0.0.0.0 --port 8080

# Start in stdio mode (default)
uv run mcp-server-starrocks --mode stdio

# Run test mode
uv run mcp-server-starrocks --test
  • The url field should point to the Streamable HTTP endpoint of your MCP server (adjust host/port as needed).

  • With this configuration, clients can interact with the server using standard JSON over HTTP POST requests. No special SDK is required.

  • All tool APIs accept and return standard JSON as described above.

Note: The sse (Server-Sent Events) mode is deprecated and no longer maintained. Please use Streamable HTTP mode for all new integrations.

Environment Variables:

Connection Configuration

You can configure StarRocks connection using either individual environment variables or a single connection URL:

Option 1: Individual Environment Variables

  • STARROCKS_HOST: (Optional) Hostname or IP address of the StarRocks FE service. Defaults to localhost.

  • STARROCKS_PORT: (Optional) MySQL protocol port of the StarRocks FE service. Defaults to 9030.

  • STARROCKS_USER: (Optional) StarRocks username. Defaults to root.

  • STARROCKS_PASSWORD: (Optional) StarRocks password. Defaults to empty string.

  • STARROCKS_PASSWORD_FILE: (Optional) Path to a UTF-8 text file containing the password. This is useful with file-based secret injection such as systemd credentials. One trailing newline is ignored. This is only used when no explicit password is provided via STARROCKS_PASSWORD or STARROCKS_URL.

  • STARROCKS_PASSWORD_KEYCHAIN_SERVICE: (Optional, macOS only) Generic password service name to use when reading the password from Keychain. This is only used when no explicit password or STARROCKS_PASSWORD_FILE is configured.

  • STARROCKS_PASSWORD_KEYCHAIN_ACCOUNT: (Optional, macOS only) Generic password account name to use when reading the password from Keychain. Defaults to the resolved StarRocks user.

  • STARROCKS_DB: (Optional) Default database to use if not specified in tool arguments or resource URIs. If set, the connection will attempt to USE this database. Tools like table_overview and db_overview will use this if the database part is omitted in their arguments. Defaults to empty (no default database).

  • STARROCKS_QUERY_TIMEOUT: (Optional) Number of seconds to wait for a query's results before giving up, as an integer. Unset by default, which waits indefinitely, matching prior behavior. Set this if a stuck or long-running query should fail instead of blocking a tool call forever.

Option 2: Connection URL (takes precedence over individual variables)

  • STARROCKS_URL: (Optional) A connection URL string that contains all connection parameters in a single variable. Format: [<schema>://]user:password@host:port/database. The schema part is optional. When this variable is set, it takes precedence over the individual STARROCKS_HOST, STARROCKS_PORT, STARROCKS_USER, STARROCKS_PASSWORD, and STARROCKS_DB variables.

    Examples:

    • root:mypass@localhost:9030/test_db

    • mysql://admin:secret@db.example.com:9030/production

    • starrocks://user:pass@192.168.1.100:9030/analytics

Password precedence:

  • A password embedded in STARROCKS_URL wins, including an explicit empty password like user:@host:9030/db.

  • If STARROCKS_URL omits the password, STARROCKS_PASSWORD is used when set.

  • If neither explicit password source is set and STARROCKS_PASSWORD_FILE is configured, the password is read from that file.

  • If no explicit password or password file is configured and STARROCKS_PASSWORD_KEYCHAIN_SERVICE is set, the password is read from macOS Keychain.

macOS Keychain example

Store the password:

security add-generic-password -U -a root -s mcp-server-starrocks -w 'secret'

Verify the stored password:

security find-generic-password -a root -s mcp-server-starrocks -w

Use it with this server:

export STARROCKS_URL=root@localhost:9030/test_db
export STARROCKS_PASSWORD_KEYCHAIN_SERVICE=mcp-server-starrocks
export STARROCKS_PASSWORD_KEYCHAIN_ACCOUNT=root

systemd encrypted credentials example (systemd 250 or later)

The server does not invoke systemd-creds itself. At deployment time, an administrator encrypts the password; at service startup, systemd decrypts it into the service's credential directory and exposes only the file path to this server.

Create a host-bound encrypted credential without putting the password in shell history:

sudo -v
sudo install -d -m 0700 /etc/credstore.encrypted
sudo systemd-ask-password -n "StarRocks password:" \
  | sudo systemd-creds encrypt \
      --name=starrocks-password \
      - /etc/credstore.encrypted/starrocks-password.cred

Add the credential to the service unit. The %d specifier expands to the service-specific credential directory:

[Service]
LoadCredentialEncrypted=starrocks-password:/etc/credstore.encrypted/starrocks-password.cred
Environment=STARROCKS_PASSWORD_FILE=%d/starrocks-password
PrivateMounts=yes

Keep STARROCKS_PASSWORD unset and omit the password from STARROCKS_URL, then reload the unit and restart the service. The encrypted credential is normally bound to the local host (and to its TPM2 device when available); it is decrypted only while the service is being activated. The service process and administrators with root privileges can still access the plaintext password at runtime. Do not use systemd-creds encrypt --with-key=null, which does not provide confidentiality.

Additional Configuration

  • STARROCKS_FE_ARROW_FLIGHT_SQL_PORT: (Optional) Arrow Flight SQL port of the StarRocks FE service. When set, the server connects using the high-performance Arrow Flight SQL protocol (via ADBC drivers) instead of the standard MySQL protocol. Leave unset to use the default MySQL connection. The host, user, and password are taken from the same connection settings described above.

  • STARROCKS_OVERVIEW_LIMIT: (Optional) An approximate character limit for the total text generated by overview tools (table_overview, db_overview) when fetching data to populate the cache. This helps prevent excessive memory usage for very large schemas or numerous tables. Defaults to 20000.

  • STARROCKS_MCP_OUTPUT_DIR: (Optional) Directory used by read_query when its output_file argument is a relative path. Defaults to ~/.mcp-server-starrocks/output/. The directory is created on demand. Absolute paths passed to output_file (including ~-prefixed paths) bypass this setting. Note: files are written on the machine where the MCP server runs. For Claude Code / Claude Desktop the server runs locally, so files land on your laptop. For remote/http deployments the file lands on the server, not the client.

  • STARROCKS_CHART_OUTPUT_DIR: (Optional) Directory where query_and_plotly_chart writes interactive HTML charts (when format="html"). Defaults to the system temp directory. The directory is created on demand. Note: like other output files, charts are written on the machine where the MCP server runs.

  • STARROCKS_CHART_INCLUDE_PLOTLYJS: (Optional) Controls how plotly.js is bundled into HTML charts. cdn (default) keeps files small but needs network access when viewing; inline/true embeds the full library for offline use; directory and false are also accepted (passed through to Plotly's write_html).

  • STARROCKS_CHART_DEFAULT_FORMAT: (Optional) Default output format for query_and_plotly_chart when the format argument is omitted. One of json, png, jpeg (default), or html. Set to html to always write an interactive chart file to STARROCKS_CHART_OUTPUT_DIR (with an inline PNG preview) without passing format on every call. Invalid values fall back to jpeg with a warning.

  • STARROCKS_MYSQL_AUTH_PLUGIN: (Optional) Specifies the authentication plugin to use when connecting to the StarRocks FE service. For example, set to mysql_clear_password if your StarRocks deployment requires clear text password authentication (such as when using certain LDAP or external authentication setups). Only set this if your environment specifically requires it; otherwise, the default auth_plugin is used.

TLS / SSL Configuration

These variables control TLS for the connection. When none of them are set, the underlying mysql.connector keeps its default behavior (ssl-mode=PREFERRED): the connection is encrypted if the server supports TLS, but the server certificate is not verified. For real security, provide a CA certificate and enable verification.

  • STARROCKS_SSL_DISABLED: (Optional) Set to true to force-disable TLS. Overrides all other SSL settings. Defaults to false.

  • STARROCKS_SSL_CA: (Optional) Path to the CA certificate (PEM) used to verify the StarRocks server certificate.

  • STARROCKS_SSL_CERT: (Optional) Path to the client certificate (PEM) for mutual TLS (mTLS).

  • STARROCKS_SSL_KEY: (Optional) Path to the client private key (PEM) for mutual TLS (mTLS).

  • STARROCKS_SSL_VERIFY_CERT: (Optional) Set to true to verify the server certificate against the CA. Defaults to false.

  • STARROCKS_SSL_VERIFY_IDENTITY: (Optional) Set to true to also verify that the server hostname matches the certificate. Defaults to false.

  • STARROCKS_TLS_VERSIONS: (Optional) Comma-separated list of allowed TLS versions, e.g. TLSv1.2,TLSv1.3.

Example (verify the server against a CA certificate):

"env": {
  "STARROCKS_HOST": "your-fe-host",
  "STARROCKS_PORT": "9030",
  "STARROCKS_USER": "root",
  "STARROCKS_PASSWORD": "your-password",
  "STARROCKS_SSL_CA": "/path/to/ca.pem",
  "STARROCKS_SSL_VERIFY_CERT": "true",
  "STARROCKS_SSL_VERIFY_IDENTITY": "true"
}

For the high-performance Arrow Flight SQL connection (enabled via STARROCKS_FE_ARROW_FLIGHT_SQL_PORT), TLS is controlled separately:

  • STARROCKS_FE_ARROW_FLIGHT_SQL_USE_TLS: (Optional) Set to true to use grpc+tls:// instead of plaintext grpc://. When enabled, STARROCKS_SSL_CA is used as the TLS root certificate and STARROCKS_SSL_VERIFY_CERT=false (default) skips server certificate verification.

Security note: avoid storing plaintext passwords directly in mcp.json. Prefer injecting STARROCKS_PASSWORD (and certificate paths) from a secrets manager or environment, and never commit credentials to version control.

  • MCP_TRANSPORT_MODE: (Optional) Communication mode that specifies how the MCP Server exposes its services. Available options:

    • stdio (default): Communicates through standard input/output, suitable for MCP Host hosting.

    • streamable-http (Streamable HTTP): Starts as a Streamable HTTP Server, supporting RESTful API calls.

    • sse: (Deprecated, not recommended) Starts in Server-Sent Events (SSE) streaming mode, suitable for scenarios requiring streaming responses. Note: SSE mode is no longer maintained, it is recommended to use Streamable HTTP mode uniformly.

Components

Tools

  • read_query

    • Description: Execute a SELECT query or other commands that return a ResultSet (e.g., SHOW, DESCRIBE). Optionally write the full result to a local file instead of returning it inline — useful for results too large to fit in the model context.

    • Input:

      {
        "query": "SQL query string",
        "db": "database name (optional, uses default database if not specified)",
        "output_file": "optional path; if set, writes the full result to disk and returns only a summary + small preview. Relative paths resolve against STARROCKS_MCP_OUTPUT_DIR (default: ~/.mcp-server-starrocks/output/); absolute paths and ~ are used as-is",
        "output_format": "optional: csv | tsv | json | jsonl. If omitted, inferred from output_file extension (.csv/.tsv/.json/.jsonl/.ndjson); defaults to csv"
      }
    • Output: Without output_file, text content containing the query results in CSV-like format with a header row and row count summary. With output_file, a short summary including the resolved absolute path, byte count, and row count, plus a small preview. Returns an error message on failure.

  • write_query

    • Description: Execute a DDL (CREATE, ALTER, DROP), DML (INSERT, UPDATE, DELETE), or other StarRocks command that does not return a ResultSet.

    • Input:

      {
        "query": "SQL command string",
        "db": "database name (optional, uses default database if not specified)"
      }
    • Output: Text content confirming success (e.g., "Query OK, X rows affected") or reporting an error. Changes are committed automatically on success.

  • analyze_query

    • Description: Analyze a query and get analyze result using query profile or explain analyze.

    • Input:

      {
        "uuid": "Query ID, a string composed of 32 hexadecimal digits formatted as 8-4-4-4-12",
        "sql": "Query SQL to analyze",
        "db": "database name (optional, uses default database if not specified)"
      }
    • Output: Text content containing the query analysis results. Uses ANALYZE PROFILE FROM if uuid is provided, otherwise uses EXPLAIN ANALYZE if sql is provided.

  • top_hot_tables

    • Description: Get top hot tables by audit-log visit count. It joins information_schema.tables with starrocks_audit_db__.starrocks_audit_tbl__, excludes root and SHOW statements, matches audit SQL text against table names, and orders by visit_count descending.

    • Input:

      {
        "db": "optional database/schema filter",
        "table": "optional table name substring filter",
        "min_start_time_ms": 1704067200000,
        "max_start_time_ms": 1704153600000,
        "top_n": 20
      }
    • Output: Text summary plus structured content containing ranked rows with db, table, and visit_count.

  • top_bad_tables

    • Description: Get top bad tables by table health score, following Star Management Studio's top-bad-tables logic. It reuses the table-health calculation based on information_schema.be_tablets and information_schema.partitions_meta, filters out system schemas, orders by table_health_score ascending, and returns the lowest-scoring tables.

    • Input:

      {
        "db": "optional database/schema filter",
        "table": "optional table name substring filter",
        "top_n": 20
      }
    • Output: Text summary plus structured content containing ranked rows with table health fields such as db, table, tablet_num, replica_score, tablet_score, and table_health_score.

  • query_and_plotly_chart

    • Description: Executes a SQL query, loads the results into a Pandas DataFrame, and generates a Plotly chart using a provided Python expression. Designed for visualization in supporting UIs.

    • Input:

      {
        "query": "SQL query to fetch data",
        "plotly_expr": "Python expression string using 'px' (Plotly Express) and 'df' (DataFrame). Example: 'px.scatter(df, x=\"col1\", y=\"col2\")'",
        "db": "database name (optional, uses default database if not specified)"
      }
    • Output: A list containing:

      1. TextContent: A text representation of the DataFrame and a note that the chart is for UI display.

      2. ImageContent: The generated Plotly chart encoded as a base64 PNG image (image/png). Returns text error message on failure or if the query yields no data.

  • table_overview

    • Description: Get an overview of a specific table: columns (from DESCRIBE), total row count, and sample rows (LIMIT 3). Uses an in-memory cache unless refresh is true.

    • Input:

      {
        "table": "Table name, optionally prefixed with database name (e.g., 'db_name.table_name' or 'table_name'). If database is omitted, uses STARROCKS_DB environment variable if set.",
        "refresh": false // Optional, boolean. Set to true to bypass the cache. Defaults to false.
      }
    • Output: Text content containing the formatted overview (columns, row count, sample data) or an error message. Cached results include previous errors if applicable.

  • db_overview

    • Description: Get an overview (columns, row count, sample rows) for all tables within a specified database. Uses the table-level cache for each table unless refresh is true.

    • Input:

      {
        "db": "database_name", // Optional if default database is set.
        "refresh": false // Optional, boolean. Set to true to bypass the cache for all tables in the DB. Defaults to false.
      }
    • Output: Text content containing concatenated overviews for all tables found in the database, separated by headers. Returns an error message if the database cannot be accessed or contains no tables.

Resources

Direct Resources

  • starrocks:///databases

    • Description: Lists all databases accessible to the configured user.

    • Equivalent Query: SHOW DATABASES

    • MIME Type: text/plain

Resource Templates

  • starrocks:///{db}/{table}/schema

    • Description: Gets the schema definition of a specific table.

    • Equivalent Query: SHOW CREATE TABLE {db}.{table}

    • MIME Type: text/plain

  • starrocks:///{db}/tables

    • Description: Lists all tables within a specific database.

    • Equivalent Query: SHOW TABLES FROM {db}

    • MIME Type: text/plain

  • proc:///{+path}

    • Description: Accesses StarRocks internal system information, similar to Linux /proc. The path parameter specifies the desired information node.

    • Equivalent Query: SHOW PROC '/{path}'

    • MIME Type: text/plain

    • Common Paths:

      • /frontends - Information about FE nodes.

      • /backends - Information about BE nodes (for non-cloud native deployments).

      • /compute_nodes - Information about CN nodes (for cloud native deployments).

      • /dbs - Information about databases.

      • /dbs/<DB_ID> - Information about a specific database by ID.

      • /dbs/<DB_ID>/<TABLE_ID> - Information about a specific table by ID.

      • /dbs/<DB_ID>/<TABLE_ID>/partitions - Partition information for a table.

      • /transactions - Transaction information grouped by database.

      • /transactions/<DB_ID> - Transaction information for a specific database ID.

      • /transactions/<DB_ID>/running - Running transactions for a database ID.

      • /transactions/<DB_ID>/finished - Finished transactions for a database ID.

      • /jobs - Information about asynchronous jobs (Schema Change, Rollup, etc.).

      • /statistic - Statistics for each database.

      • /tasks - Information about agent tasks.

      • /cluster_balance - Load balance status information.

      • /routine_loads - Information about Routine Load jobs.

      • /colocation_group - Information about Colocation Join groups.

      • /catalog - Information about configured catalogs (e.g., Hive, Iceberg).

Prompts

None defined by this server.

Caching Behavior

  • The table_overview and db_overview tools utilize an in-memory cache to store the generated overview text.

  • The cache key is a tuple of (database_name, table_name).

  • When table_overview is called, it checks the cache first. If a result exists and the refresh parameter is false (default), the cached result is returned immediately. Otherwise, it fetches the data from StarRocks, stores it in the cache, and then returns it.

  • When db_overview is called, it lists all tables in the database and then attempts to retrieve the overview for each table using the same caching logic as table_overview (checking cache first, fetching if needed and refresh is false or cache miss). If refresh is true for db_overview, it forces a refresh for all tables in that database.

  • The STARROCKS_OVERVIEW_LIMIT environment variable provides a soft target for the maximum length of the overview string generated per table when populating the cache, helping to manage memory usage.

  • Cached results, including any error messages encountered during the original fetch, are stored and returned on subsequent cache hits.

Debug

After starting mcp server, you can use inspector to debug:

npx @modelcontextprotocol/inspector

Demo

MCP Demo Image

Available Tools

11 tools
analyze_queryAnalyze QueryC

Analyze a query and get analyze result using query profile. Use set_session_db to set a per-session default database

ParametersJSON Schema
NameRequiredDescriptionDefault
dbNodatabase
sqlNoQuery SQL
uuidNoQuery ID, a string composed of 32 hexadecimal digits formatted as 8-4-4-4-12

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry behavioral transparency. It does not disclose side effects, cost/heaviness of the analysis, required permissions, or which parameter combinations are valid. 'Analyze using query profile' implies read-only analysis but never explicitly states behavior beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, each nominally valuable. However, the first sentence is redundant ('analyze' and 'analyze result') and the second is a pointer rather than an essential part of this tool's own description. It is not bloated, but it could be tightened and front-load the instruction more clearly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has three optional parameters, no annotations, and no statement on how they combine, but an output schema exists. The description does not explain expected usage for the parameters or warn about possible non-determinism/dependencies on set_session_db. This is below the minimum an agent needs to correctly construct a call.

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 coverage is 100%, so parameters are already documented. The description adds only 'query profile' context, not additional meaning like whether sql and uuid are mutually exclusive or how db relates to session defaults. It does not degrade below baseline, but it does not help further.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Analyze a query and get analyze result using query profile', which names a verb and resource but is vague about what 'analyze result' means or whether it returns query metrics/plan. It does not clearly distinguish itself from siblings like read_query or analyze_slow_queries_topn, so it is a minimum-viable clarification.

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?

It gives one hint about using set_session_db for the default database but provides no guidance on when to choose this tool over alternatives, nor does it clarify the relationship between the sql and uuid parameters. The agent is left to infer the intended invocation context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_slow_queries_topnAnalyze Slow Queries TopnC

Analyze top N slowest queries and identify performance bottlenecks

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of days of audit history to analyze
top_nNoNumber of slow queries to return
min_execution_time_msNoMinimum query execution time in milliseconds

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden for behavioral disclosure, but it only says 'analyze' and 'identify bottlenecks.' It does not state that the operation is read-only, what source data it uses, how results are ordered, whether it mutates anything, or what the output format will be.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It could earn a 5 by adding a quick usage hint or output note, but as written it is appropriately concise without being tautological.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is relatively simple and parameters are fully described, but there is no output schema and the description does not explain what the analysis returns or how the results are presented. Given the wide sibling set and lack of annotations, the coverage is incomplete for confident invocation.

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 100%, so the parameters are already documented. The description's 'top N' and 'slowest' loosely map to top_n and min_execution_time_ms, but it adds no semantic detail beyond the schema; baseline 3 is appropriate.

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 uses a specific verb and resource: 'Analyze top N slowest queries' and states an outcome ('identify performance bottlenecks'). It clearly communicates the tool's purpose, though it doesn't explicitly contrast with similar siblings like analyze_query or query_and_plotly_chart.

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?

There is no guidance about when to prefer this tool over the many diagnostic siblings present, nor any exclusions or scenario-based context. The phrase 'identify performance bottlenecks' only weakly implies a use case but does not instruct an agent when to select this vs analyze_query or top_bad_tables.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

collect_query_dump_and_profileCollect Query Dump And ProfileB

Run a query to get it's query dump and profile, output very large, need special tools to do further processing

ParametersJSON Schema
NameRequiredDescriptionDefault
dbNodatabase
queryYesquery to execute

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral burden. It discloses that output is large and requires special processing, but it does not mention side effects, permissions, resource cost, or what the dump/profile actually contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the main action, but the comma-spliced, ungrammatical phrasing ('it's', 'need special tools') makes it read as a rough note rather than a polished definition. It is compact but awkwardly structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description should explain what a 'query dump and profile' are and how an agent should handle the very large output. It does not, so an agent may not know what to do with the result or how to distinguish this from similar analysis tools.

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?

The schema already fully describes both parameters ('database' and 'query to execute'), so the description adds limited parameter-level meaning. It only reinforces that the query is executed and that output is large.

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 specific action ('Run a query') and the resulting artifacts ('query dump and profile'), so the basic purpose is clear. It does not explicitly differentiate this from siblings like analyze_query, but 'dump and profile' gives enough distinct identity.

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 warning that output is very large and needs special tools implies the tool is intended for raw collection followed by external processing. It does not name alternatives or state when not to use it, leaving the decision partially to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

db_summaryDb SummaryA

Quickly get summary of a database with tables' schema and size information. Use set_session_db to set a per-session default database

ParametersJSON Schema
NameRequiredDescriptionDefault
dbNoDatabase name. Optional: uses current database by default.
limitNoOutput length limit in characters. Defaults to 10000. Higher values show more tables and details.
refreshNoSet to true to force refresh, ignoring cache. Defaults to false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must convey behavior. It mentions 'Quickly' and the use of set_session_db for default database, but does not disclose caching behavior (despite a refresh parameter), potential performance impacts, or what happens with the limit. The description provides only partial behavioral transparency.

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 only two sentences, front-loaded with the primary purpose, and efficiently mentions the related tool for setting the default database. There is zero fluff; every sentence adds value.

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 tool has an output schema (not shown) and three optional parameters. The description covers the core purpose and usage context (default db). It does not mention output format or edge cases, but the presence of an output schema mitigates that need. It is complete for a quick-summary tool.

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?

The schema fully describes all three parameters (db, limit, refresh) with clear explanations, achieving 100% coverage. The description adds no extra semantic nuance beyond what the schema provides, so the baseline of 3 is appropriate.

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 clearly states the tool's purpose: 'Quickly get summary of a database with tables' schema and size information.' This is a specific verb-resource pair that distinguishes it from siblings like top_hot_tables or analyze_query. It explicitly mentions what it provides (schema and size info) making it unambiguous.

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 indicates when to use the tool (for a quick database summary) and references set_session_db to set a default database, which provides context for its usage. However, it does not explicitly mention when not to use it or alternatives for detailed analysis, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_and_plotly_chartQuery And Plotly ChartC

using sql query to extract data from database, then using python plotly_expr to generate a chart for UI to display. Use set_session_db to set a per-session default database

ParametersJSON Schema
NameRequiredDescriptionDefault
dbNodatabase
queryYesSQL query to execute
formatNochart output format: json | png | jpeg | html. 'html' writes an interactive Plotly file to disk and returns its path plus a PNG preview. Defaults to the STARROCKS_CHART_DEFAULT_FORMAT env var, or 'jpeg' if unset.jpeg
plotly_exprYesa one function call expression, with 2 vars binded: `px` as `import plotly.express as px`, and `df` as dataframe generated by query `plotly_expr` example: `px.scatter(df, x="sepal_width", y="sepal_length", color="species", marginal_y="violin", marginal_x="box", trendline="ols", template="simple_white")`

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states the query-then-chart flow but omits whether the operation is read-only, any side effects, or error behavior. Disclosure is minimal beyond the basic purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences and front-loads the core purpose. The second sentence about set_session_db is a useful hint but not essential to the tool's core operation; still, the overall structure is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description is thin. It covers the basic flow but lacks usage alternatives, behavioral details, and what the chart output actually looks like (though format param hints at options). Adequate but not comprehensive.

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?

All four parameters have schema descriptions, so the description adds little beyond naming query and plotly_expr. The format parameter's full behavior is in the schema, and the description doesn't expand on any parameter semantics. Baseline 3 applies due to 100% schema coverage.

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 clearly states the tool queries the database via SQL and generates a Plotly chart for UI display. It distinguishes itself as a combined operation, though it doesn't explicitly contrast with siblings like read_query or analyze_query.

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 guidance is given on when to use this tool instead of the many sibling tools. The only note about set_session_db is a peripheral tip for setting a default database, not a condition for selecting this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_queryRead QueryA

Execute a SELECT query or commands that return a ResultSet. Set output_file to write the full result to disk instead of returning it inline (useful for large results).. Use set_session_db to set a per-session default database

ParametersJSON Schema
NameRequiredDescriptionDefault
dbNodatabase
queryYesSQL query to execute
output_fileNoIf set, write the full result to this file and return only a summary + small preview inline. Relative paths resolve against STARROCKS_MCP_OUTPUT_DIR (default: ~/.mcp-server-starrocks/output/). Absolute paths (and ~) are used as-is. Format is inferred from the file extension (.csv, .tsv, .json, .jsonl, .ndjson) unless output_format is given. NOTE: the file is written on the server's filesystem, which may not be the client machine in remote/http deployments.
output_formatNoOverride file format: csv|tsv|json|jsonl. If omitted, inferred from output_file extension; defaults to csv.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden of behavior. It does disclose that the tool executes result-returning commands and can write large results to disk, which are relevant side-effects. However, it does not cover auth, rate limits, error behavior, or definitively state that non-SELECT (write) commands are unsupported, leaving some transparency gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the core purpose. The second sentence adds practical suggestions that relate to parameter usage, but it is slightly marred by a double period and could be tightened into cleaner separate clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The 4-parameter tool is fully covered by an exhaustive schema, but with no output schema or annotations, the description still leaves room for incompleteness. It does mention output file behavior but doesn't describe what inline results look like overall, pagination, response size capture, or any limitations, which an agent may need before relying on this tool.

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 100%, and the description adds no meaning beyond repeating output_file's disk-write behavior. Since schema handles parameter meaning, the baseline of 3 is correct: the description overlays nothing new for the parameters.

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 starts with a clear action, 'Execute a SELECT query or commands that return a ResultSet', which specifies the resource and differentiates this tool from write_query and analysis-tool siblings. The scoping to SELECT-like commands makes its read-oriented purpose unambiguous.

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 provides clear guidance on when to use output_file (large results) and points to set_session_db for per-session defaults. It doesn't explicitly say 'use write_query for writes', but the SELECT requirement implies a read-only context, giving agents enough direction though without an explicit exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_session_dbSet Session DbA

Set or clear the default database for THIS MCP session. Subsequent tool calls without an explicit db argument will use this database. Pass an empty string or null to clear and fall back to the server's global default. Returns the new effective default for this session.

ParametersJSON Schema
NameRequiredDescriptionDefault
dbNoDatabase name to set as the per-session default. Empty/null clears the override.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states that it sets a per-session override, how to clear it, how fallback works, and that it returns the new effective default. It doesn't mention any hidden side effects or persistence details beyond 'THIS MCP session', but for a simple setter this is adequate and non-contradictory.

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 three sentences with no redundancy. It front-loads the primary purpose, then explains the empty/null case and the return value. Every sentence earns its place; there is no filler or over-explanation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter setter with a 100% schema coverage and an output schema present, the description provides all necessary context: what it sets, when it affects, how to clear, and what it returns. Nothing an agent needs to call it correctly is missing. The presence of an output schema also means return format is documented elsewhere, so the description needn't elaborate further.

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?

Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explicitly explaining the session-scoped effect, the consequences of passing empty/null, and the fallback to the global default. This reinforces the parameter's meaning in context and clarifies the return behavior, which the schema alone doesn't provide.

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 (set or clear) on a specific resource (default database for THIS MCP session). It distinguishes itself from sibling query tools by focusing on session-state configuration. The phrase 'subsequent tool calls' further clarifies its role, making it unmistakable which tool this is.

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 explains the effect on future calls ('without an explicit db argument will use this database'), which implicitly tells the agent when to use it (to establish a session default) and when not (when explicit db arguments are always provided). It also covers clearing with empty/null and fallback to the server default, providing complete usage semantics. No explicit alternatives are named, but for a session-state tool that's not necessary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

table_overviewTable OverviewA

Get an overview of a specific table: columns, sample rows (up to 3), and total row count. Uses cache unless refresh=true. Use set_session_db to set a per-session default database

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesTable name, optionally prefixed with database name (e.g., 'db_name.table_name'). If database is omitted, uses the default database.
refreshNoSet to true to force refresh, ignoring cache. Defaults to false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It discloses caching behavior and the ability to bypass it with 'refresh=true'. However, it does not explain what happens if the table does not exist, or whether the operation is read-only, or potential rate limits. Some behavioral aspects are missing.

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 concise and front-loaded with the key outputs. Two sentences cover the essential behavior and a key usage tip, with no wasted words. The cache/refresh behavior is mentioned early, and the set_session_db tip is a useful addition.

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 tool's simplicityhe has an output schema so return structure is likely documented elsewhere. The description includes cache behavior and default database handling, which are key context. It could mention prerequisites like needing to set a session database or handling non-existent tables, but overall it is fairly complete for the tool's complexity.

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 100%, so the schema already explains both parameters in detail. The description adds minimal extra value by implying the 'refresh' flag toggles cache usage, but it doesn't provide substantial additional meaning beyond the schema.

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 clearly states the tool's purpose: getting an overview of a specific table with specific outputs (columns, sample rows, total row count). It distinguishes itself from siblings by focusing on table-level overview rather than queries or analyses, and the mention of cache and refresh is a unique trait.

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 provides clear context on when to use the tool: when needing an overview of a table. It mentions using 'set_session_db' to set a default database, but does not explicitly state when not to use this tool or direct to alternatives. Still, the sibling list shows other tools for queries and analyses, so the usage is fairly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

top_bad_tablesTop Bad TablesB

Get top bad tables by table health score

ParametersJSON Schema
NameRequiredDescriptionDefault
dbNoOptional database/schema filter. Matches table health db_name exactly.
tableNoOptional table name substring filter. Matches table_name with LIKE.
top_nNoNumber of bad tables to return. Defaults to 20 and is capped at 100.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden of behavioral disclosure. It only says results are top bad tables by health score; it does not state ordering direction, what 'bad' means, whether filters beyond the schema are supported, or what fields are returned. Much of the behavior is left to inference.

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. It states the essential selection logic without unnecessarily repeating the title or schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter list tool with a complete schema, the description is usable but still has gaps: no definition of health score, no explicit statement of ordering or limit behavior beyond the schema cap, and no guidance on when this tool is preferable to sibling ranking tools. Adequate but not complete.

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 100%, so the input schema already documents all three parameters, including defaults, nullability, and the cap on `top_n`. The description adds little beyond echoing the health-score concept, so the baseline 3 applies.

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 specific verb ('Get'), a resource ('top bad tables'), and a selection criterion ('table health score'), which is enough to understand the core function. It does not explicitly distinguish from sibling `top_hot_tables`, but the 'bad' vs 'hot' wording and the scoring criterion give implicit differentiation.

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. With siblings like `top_hot_tables`, `table_overview`, and `analyze_slow_queries_topn`, the agent must infer when a health-score-based 'bad table' ranking is preferred. No alternatives or exclusions are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

top_hot_tablesTop Hot TablesC

Get top hot tables by audit-log visit count

ParametersJSON Schema
NameRequiredDescriptionDefault
dbNoOptional database/schema filter. Matches information_schema.tables.table_schema exactly.
tableNoOptional table name substring filter. Matches information_schema.tables.table_name with LIKE.
top_nNoNumber of hot tables to return. Defaults to 20 and is capped at 100.
max_start_time_msNoOptional maximum audit-log timestamp as Unix epoch milliseconds. Applied only when min_start_time_ms is also set.
min_start_time_msNoOptional minimum audit-log timestamp as Unix epoch milliseconds. Applied only when max_start_time_ms is also set.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosurecars. It only mentions the ordering basis (audit-log visit count) and does not state whether the operation is read-only, what the return shape is, whether there are limits or pagination effects, or how the time-range parameters interact. These omissions are significant for a tool with no annotation safety hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words or repetitive phrasing. It is efficient, though it is under-specified rather than economically complete, which prevents a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations, no output schema, and five optional parameters, the description is too sparse. It omits the return shape, default and cap behavior, time-range coupling, and any guidance on when to choose this tool over siblings. The rich input schema covers parameters, but it cannot compensate for the missing usage and output context.

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 coverage is 100% and each parameter is individually described with defaults, filtering semantics, and constraints. The description adds only the audit-log context, but it does not need to repeat parameter details because the schema already carries that information, so the baseline 3 is appropriate.

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 states a specific verb ('Get'), a resource ('top hot tables'), and an ordering criterion ('by audit-log visit count'), making the primary purpose clear. It does not explicitly name or differentiate sibling tools like top_bad_tables, but the 'hot' versus 'bad' distinction is inferable from the descriptions and names.

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?

There is no guidance on when to use this tool versus alternatives such as top_bad_tables, analyze_slow_queries_topn, or read_query. The description only states what the tool does, leaving an agent to infer when it should be selected.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_queryWrite QueryB

Execute a DDL/DML or other StarRocks command that do not have a ResultSet. Use set_session_db to set a per-session default database

ParametersJSON Schema
NameRequiredDescriptionDefault
dbNodatabase
queryYesSQL to execute

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral disclosure responsibility. It identifies that commands are DDL/DML, which implies modification, but it never mentions that these commands can change or destroy data, what is returned (only that no ResultSet), or permissions/risks involved. The description does not explain the actual behavior of the command execution beyond the SQL, leaving the agent without safety expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and to the point: it states the operation and directs session-db setup to a sibling. There is no filler. The grammar is slightly informal ('do not have' instead of 'do not return') but the sentence is easy to skim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The absence of an output schema and annotations means the description should carry the full weight of what the tool does. It covers that the tool has no ResultSet, but it omits the return/success format, the potential damage or side effects on data, and how db interacts with the session. The tool is probably simple, but for a write/DDL tool these details are necessary for safe and correct invocation.

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 100% – the schema already labels query as 'SQL to execute' and db as 'database'. The description adds the pointer to set_session_db for a default database, which provides additional context. But it does not clarify whether the db parameter overrides the session default, or how the optional db and session default interact.

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 states the tool executes DDL/DML or other StarRocks commands that do not return a ResultSet, and points to set_session_db for a per-session default database. This clearly identifies the verb and resource range and implies a distinction from read_query, though the phrasing 'other StarRocks command' is a bit broad and does not explicitly name the read alternative.

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 explains that set_session_db should be used for setting a per-session default database, and implies this tool is for commands without a ResultSet. However, it does not explicitly state when to use this as opposed to read_query, nor does it give clear when-not-to-use criteria or exclusions. The usage context is only implicitly conveyed.

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.

  1. 11 tool updatesv0.4.0
    • First observedanalyze_query
    • First observedanalyze_slow_queries_topn
    • First observedcollect_query_dump_and_profile
    • First observeddb_summary
    • First observedquery_and_plotly_chart
    • First observedread_query
    • First observedset_session_db
    • First observedtable_overview
    • First observedtop_bad_tables
    • First observedtop_hot_tables
    • First observedwrite_query

TDQS

B3.3/5.0

Scored across 11 tools

Disambiguation4/5

Tools generally have distinct targets: read_query for SELECT, write_query for DDL/DML, profiling/analysis tools for diagnostics, and overview tools for schema/table information. The main potential confusion is between analyze_query and collect_query_dump_and_profile, but their descriptions indicate different collection vs. analysis purposes.

Naming Consistency3/5

All names use snake_case and many follow a verb_noun pattern like write_query, read_query, and analyze_query. However, tools like table_overview, db_summary, top_hot_tables, and query_and_plotly_chart break that pattern, making the overall convention mixed though still readable.

Tool Count5/5

11 tools is well-scoped for a StarRocks database and query-analysis server. Each tool covers a distinct capability and the count is neither too small to be useful nor too large to be overwhelming.

Completeness4/5

The set covers query execution, schema/table overviews, performance analysis, query profiling, and session database management. An explicit list_databases/list_tables tool is missing, but db_summary and table_overview largely compensate for that gap.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Acts as a bridge between AI assistants and StarRocks databases, allowing for direct SQL execution and database exploration without requiring complex setup or configuration.
    8
    188
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to securely access Snowflake data warehouses through natural language, executing SQL queries and retrieving insights with support for multiple authentication methods.
    4
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to query databases using natural language, with automatic schema discovery and SQL compilation.
    1,042 npm
    3,168
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to connect to and interact with PostgreSQL, MySQL, SQLite, and MongoDB databases through natural language, supporting schema exploration, query execution, data export, and more.
    13
    MIT