Skip to main content
Glama
hechtcarmel

Vertica MCP Server

by hechtcarmel

Vertica MCP Server

CI npm

Connect an MCP client to Vertica to query data, inspect table structures, and explore views and projections. Read-only by default. Connections open on first use and are reused until idle. The server communicates over stdio.

Existing client configurations, environment variable names, tool names, and CLI aliases continue to work. See upgrade notes for deliberate bug fixes and safety restrictions.

Quick start

Requires Node.js 20 or later and network access to a Vertica database. Use a currently supported Node LTS release when possible.

Create an environment file (see .env.example):

VERTICA_HOST=your-vertica-host
VERTICA_PORT=5433
VERTICA_DATABASE=your_database
VERTICA_USER=readonly_user
VERTICA_PASSWORD=your_password

Add it to your MCP client's configuration. This form works in Claude Desktop, Cursor, and other clients that launch stdio servers:

{
  "mcpServers": {
    "vertica-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@hechtcarmel/vertica-mcp@latest",
        "--env-file",
        "/absolute/path/to/vertica.env"
      ]
    }
  }
}

For Claude Code:

claude mcp add vertica --scope user -- npx -y @hechtcarmel/vertica-mcp@latest --env-file /absolute/path/to/vertica.env

You can also supply VERTICA_* variables directly through the client's env configuration. Process environment values take precedence over the environment file. Without --env-file, the server loads .env from its working directory. An explicitly selected file must be readable. -e, -h/--help, and -v/--version remain supported; both vertica-mcp and the original scoped binary alias are available after installation.

Related MCP server: MCP Vertica

Tools

Tool

Arguments

Result

execute_query

sql, optional params

Rows, fields, row count, original query

stream_query

sql, optional params, batchSize, maxRows

Batches, total rows, counts, truncation status

list_tables

optional schemaName

Tables, types, ownership

list_views

optional schemaName

View previews and full definitions

list_indexes

tableName, optional schemaName

Vertica projections and their columns

get_table_structure

tableName, optional schemaName

Columns, nullability, constraints, ownership

Names passed to catalog tools are exact names, including case and spaces. Do not wrap them in SQL quotes. Omitted schemas use VERTICA_DEFAULT_SCHEMA (public). All catalog filters use bound parameters.

A parameterized query call:

{
  "sql": "SELECT customer_name FROM public.customers WHERE customer_id = ? LIMIT 10",
  "params": [42]
}

The driver uses ? placeholders. Supply values in order; do not interpolate them into SQL. Parameters represent values, not table or column identifiers.

INTEGER values within JavaScript’s safe range are numbers; larger 64-bit integers are decimal strings to preserve precision. Field metadata includes the actual Vertica type name and ID, plus the wire format.

Results retain the original JSON text in content and also provide matching structuredContent. Database and policy failures set MCP isError: true and success: false. Discovery and help/version commands do not connect to Vertica.

Input schemas reject unknown argument names, including unsupported pagination or row-limit options. Use only the declared arguments. Output schemas distinguish success from failure and describe rows, fields, metadata, counts, and truncation. execute_query.rowCount counts returned result rows, not affected rows for writes; list_indexes.indexCount counts projection-column entries, not distinct projections.

Catalog tools advertise read-only behavior for their fixed queries. Both arbitrary SQL tools use conservative annotations: functions may have side effects, so the server does not claim purity, idempotence, or a closed interaction world. This does not disable the default read-only policy. Their _meta["com.hechtcarmel.vertica/readOnlyTransaction"] reports whether read-only transactions are configured. See the tool-contract review.

Batching large results

{
  "sql": "SELECT customer_id, customer_name FROM public.customers ORDER BY customer_id",
  "batchSize": 1000,
  "maxRows": 10000
}

stream_query executes a SELECT/WITH query once, with a bounded outer LIMIT, and partitions the result into batches. It accepts queries that already contain LIMIT/OFFSET and trailing semicolons. maxRows is honored even when smaller than batchSize; one extra row detects truncation.

  • batchSize: 1–10,000; default 1,000.

  • maxRows: 1–1,000,000. If omitted, defaults to batchSize × 100, capped at 1,000,000.

  • truncated and top-level hasMore: true when additional rows exist.

  • batchCount and totalRows: the batches and rows actually returned.

This tool returns one MCP response. It does not stream incremental transport messages or provide a continuation cursor. Rows are materialized in memory; limits count rows, not bytes. Use small limits and select only needed columns. Use ORDER BY for reproducible ordering. execute_query remains uncapped for SQL execution; add LIMIT to large queries.

list_indexes retains its legacy name and output fields. Vertica uses projections rather than traditional indexes; isUnique reflects the catalog's is_key_constraint_projection flag, not an independent uniqueness proof. list_views.definition retains its 200-character preview; fullDefinition adds the complete SQL.

Configuration

Required: VERTICA_HOST, VERTICA_DATABASE, and VERTICA_USER. VERTICA_PASSWORD is optional (for example, when the database uses trust auth).

Variable

Default

Meaning

VERTICA_PORT

5433

TCP port, 1–65535

VERTICA_READONLY_MODE

true

Read-only query policy and transactions

VERTICA_QUERY_TIMEOUT

60000

Connection and query timeout in ms; 1000–300000

VERTICA_IDLE_TIMEOUT

3600000

Idle disconnect in ms; 60000–86400000

VERTICA_SSL

false

Require encrypted TLS when enabled

VERTICA_SSL_REJECT_UNAUTHORIZED

true

Validate certificate and hostname when TLS is enabled

VERTICA_DEFAULT_SCHEMA

public

Default schema for catalog tools

VERTICA_CONNECTION_LOAD_BALANCE

false

Try a cluster-directed node on first connect

VERTICA_DEBUG or DEBUG

unset

Set to true for configuration diagnostics on stderr; passwords are redacted

Boolean options accept true, false, 1, and 0 (case-insensitive). Invalid values fail configuration validation.

When VERTICA_SSL=true, the actual Vertica driver's verify-full mode checks both the certificate chain and hostname. Use NODE_EXTRA_CA_CERTS for a private CA. With VERTICA_SSL_REJECT_UNAUTHORIZED=false, TLS remains required but peer verification is disabled (require mode). SSL remains off by default for existing installations.

Load balancing uses DESCRIBE_LOAD_BALANCE_DECISION and only replaces the initial connection after successfully connecting to the selected IP. IPv4 and IPv6 are supported. If routing fails, the original connection remains usable. Redirects must be reachable; verified TLS must also accept the selected node's IP.

Read-only behavior

Read-only mode permits a single SELECT, SHOW, DESCRIBE, EXPLAIN, or read-only WITH statement. It rejects stacked statements, write-capable CTEs, SELECT INTO, and EXPLAIN of writes. Leading comments, quoted values/identifiers, and trailing semicolons are handled. Each query runs in a Vertica read-only transaction that is rolled back after the result is obtained. Failed rollback invalidates the client.

The statement guard is deliberately conservative. It can reject unusual valid SQL, including unquoted mutation keywords and ambiguous backslash escapes. Use quoted identifiers and bound values. It is not a full SQL parser or a sandbox for arbitrary functions. Vertica read-only transactions do not prevent every possible function side effect or disk write. Use a dedicated least-privilege account with SELECT and schema USAGE access, and avoid privileged administrative or user-defined functions. Treat query results as untrusted data.

To explicitly enable writes:

VERTICA_READONLY_MODE=false

execute_query then accepts one write statement per call. stream_query remains SELECT/WITH-only. Errors and timeouts never automatically replay SQL. Cancellation or timeout closes the affected connection to stop driver work; after an interrupted write, its outcome can be uncertain. Check database state before retrying a write.

Upgrading

The npm package name, both binary aliases, flags, environment variables, six tools, argument names, and JSON text fields are retained. Node 20+ is now required. Intentional corrections are listed in CHANGELOG.md:

  • String false now means false for every Boolean setting; typos are rejected.

  • TLS settings now configure the driver's actual TLS modes.

  • SQL policy closes prefix-check bypasses; scripts need separate calls.

  • Failed tool calls now have the MCP error flag.

  • Batched queries run once, honor limits, and report truncation explicitly.

This version uses the current stable MCP TypeScript SDK v2 and explicitly serves the 2026-07-28 protocol through the SDK's serveStdio entry point. Older clients using the initialize handshake also work. The minimum Node version is now 20; use Node 24 LTS for development. Existing environment files and the read-only default remain supported. No HTTP transport or network listener is introduced.

Releases and local validation

See the release process for versioning, draft GitHub releases, checksummed artifacts, and separately authorized npm publishing with provenance. Before merge, use the dedicated Mac read-only handoff with the passing CI artifact and existing environment files. Never run aggregate, mock, rejection, or write-path suites during that real local validation.

Development and troubleshooting

See CONTRIBUTING.md for setup, checks, architecture, package validation, and opt-in database integration tests.

  • Connection failures: verify host, port, credentials, network reachability, and TLS trust. Test with vsql using the same account.

  • Permission failures: grant only needed schema/table access. Catalog discovery only reports objects visible to the configured account.

  • Timeouts: optimize the query or raise VERTICA_QUERY_TIMEOUT within its range. Timed-out clients are closed and a future call opens a new connection.

  • Large output: add LIMIT or use a small stream_query.maxRows; client message size limits can be reached before the row cap.

  • Stdio failures: stdout is reserved for MCP. Server diagnostics go to stderr. Configure an absolute environment-file path and check the client's server logs.

License and acknowledgments

MIT. The original project drew on mcp-vertica by @nolleh.

Available Tools

6 tools
execute_queryExecute SQLA
Destructive

Run one SQL statement for small results or SHOW/DESCRIBE/EXPLAIN. Read-only statement checks and transactions are enabled. Results have no row cap; add LIMIT or use stream_query. Database functions can have side effects.

NameRequiredDescriptionDefault
sqlYesOne Vertica SQL statement, not a script. Use ? placeholders with params; add LIMIT to bound execute_query reads.
paramsNoValues for ? placeholders in SQL order; values only, not identifiers.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Goes beyond the annotations by disclosing that there is no row cap (so unbounded reads can blow up memory), that transactions are supported, and that database functions can have side effects — consistent with destructiveHint=true and openWorldHint=true rather than contradicting them. It does not explain what read-only enforcement actually blocks or how results are buffered, which keeps it short of a 5.

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?

Four short, front-loaded sentences, each carrying distinct information: scope, capabilities, the row-cap/alternative routing, and the side-effect warning. The phrase 'Read-only statement checks and transactions are enabled' is compressed to the point of mild ambiguity.

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

Completeness4/5

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

With an output schema, full schema coverage, and rich annotations, the description only needs to add operational guidance, which it does via the row cap, LIMIT advice, and side-effect caveat. 'Small results' is left unquantified, so the agent has no concrete threshold for switching to stream_query.

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 both sql and params are already documented including the ? placeholder convention. The description restates the 'one statement' constraint and the LIMIT advice, adding no syntax or value-mapping detail 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?

States a specific verb and resource ('Run one SQL statement') and immediately scopes the intended result size plus the SHOW/DESCRIBE/EXPLAIN case. It also distinguishes itself from the sibling stream_query by pointing to LIMIT-then-stream as the alternative for large results.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives both the when ('small results', metadata statements) and the explicit alternative ('add LIMIT or use stream_query'), which is the exact routing decision an agent faces among these siblings. Nothing about selection is left to inference.

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

get_table_structureInspect table structureA
Read-onlyIdempotent

Inspect one existing table's columns, nullability, constraints and owner before composing SQL. Does not read table data. Fails if the table is absent or invisible; does not inspect views.

NameRequiredDescriptionDefault
tableNameYesExact existing table name, not a view. Pass the schema separately; do not add SQL quotes.
schemaNameNoExact schema name without SQL quotes. Omit for VERTICA_DEFAULT_SCHEMA, or public if unset.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, so safety is covered. The description adds genuinely new behavioral facts: it fails on absent or invisible tables and it does not inspect views, which prevents wasted calls. It does not discuss visibility/permission implications further, keeping it just short of a 5.

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?

Two sentences, front-loaded with the positive scope followed by the negative boundaries, and no filler. Every clause carries information the agent needs.

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?

An output schema exists so return values need no explanation, and annotations cover the safety profile. The remaining burden, scope boundaries and failure conditions, is fully addressed.

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 both tableName and schemaName are already fully documented in the schema, including quote handling and default schema behavior. The description adds no parameter-level detail beyond what the schema provides, so the baseline 3 applies.

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?

States a specific verb (inspect) and resource (one existing table) plus the exact returned fields: columns, nullability, constraints, owner. The scope is narrow and distinct from the listing siblings like list_tables and list_views.

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?

"before composing SQL" gives a clear triggering context, and the exclusions ("does not read table data", "does not inspect views", fails if absent) tell the agent when not to use it. It never names the sibling tools explicitly, so routing to list_views or execute_query still requires inference.

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

list_indexesInspect projectionsA
Read-onlyIdempotent

Inspect one table's Vertica projections and column sort positions. Returns all projection-column catalog rows without pagination. isUnique reflects key-constraint projection status, not a uniqueness proof.

NameRequiredDescriptionDefault
tableNameYesExact existing table name, not a view. Pass the schema separately; do not add SQL quotes.
schemaNameNoExact schema name without SQL quotes. Omit for VERTICA_DEFAULT_SCHEMA, or public if unset.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real behavioral detail beyond them: no pagination, all projection-column catalog rows returned, and a semantic caveat that isUnique reflects key-constraint status rather than a uniqueness proof. This is material context for interpreting results.

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?

Three short sentences, front-loaded with purpose, then return behavior and the isUnique caveat. Every sentence earns its place with no filler.

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

Completeness4/5

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

With an output schema, annotations, and full parameter coverage, the description is nearly complete. The only gap is explicit routing against get_table_structure, which would help an agent pick the right inspection 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 coverage is 100%, with tableName and schemaName fully documented, so the baseline is 3. The description adds scope ('one table') but no syntax or format detail beyond the schema.

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?

States a specific verb and resource: inspect one table's Vertica projections and column sort positions. The name 'list_indexes' is clarified by the description's projection framing. It is clear, though it does not explicitly differentiate itself from get_table_structure or list_views.

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?

Usage is implied by 'one table's Vertica projections', but there is no explicit when-to-use guidance, prerequisites, or named alternative such as get_table_structure. The agent must infer the appropriate context from the sibling list.

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

list_tablesList tablesA
Read-onlyIdempotent

Discover visible tables in one schema before querying. Returns all matching metadata without pagination; does not read table data.

NameRequiredDescriptionDefault
schemaNameNoExact schema name without SQL quotes. Omit for VERTICA_DEFAULT_SCHEMA, or public if unset.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description's added value is in the operational details: results are unpaginated and table data is not read. 'Visible tables' also signals that access control can limit the result set, which no annotation conveys.

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?

Two tight sentences, each carrying distinct information: purpose and workflow position first, then the result-scope and no-data-read caveats. No filler and nothing repeated from the schema or annotations.

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 read tool with rich annotations and an output schema, this covers everything an agent needs: scope (one schema), result set size (unpaginated), visibility filtering, and the fact that no table data is returned. Nothing material is left to guesswork.

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 single schemaName parameter is fully documented in the schema (100% coverage), including the default-schema fallback when omitted. The description adds nothing about parameters, so the baseline of 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 gives a specific verb and resource ('Discover visible tables in one schema'), which separates it from list_views and list_indexes by the object type being listed. It does not, however, explicitly contrast itself with those siblings or with get_table_structure.

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?

'before querying' implies a workflow position, so an agent can infer this is a discovery step that precedes stream_query or execute_query. There is no explicit when-not-to-use guidance and no sibling named as an alternative, leaving selection to inference.

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

list_viewsList viewsA
Read-onlyIdempotent

Discover views and their SQL in one schema. Returns all visible matches without pagination; definition is a 200-character preview and fullDefinition is complete.

NameRequiredDescriptionDefault
schemaNameNoExact schema name without SQL quotes. Omit for VERTICA_DEFAULT_SCHEMA, or public if unset.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, closed-world behavior, so safety is covered. The description adds genuinely non-obvious behavior: no pagination, all visible matches returned, and the definition/fullDefinition preview-vs-complete distinction that prevents an agent from truncating SQL.

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?

Two short sentences, purpose first, then the return-behavior caveat. Every clause carries information an agent would otherwise have to discover by trial.

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?

An output schema exists, so return shape needn't be restated; the description still flags pagination absence and the preview-field caveat, which are the main pitfalls. Only the sibling-routing guidance is missing.

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 the schema description already explains the default-schema fallback and the no-quotes rule. The description only echoes the single-schema scoping, adding nothing new about the parameter.

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?

"Discover views and their SQL in one schema" gives a specific verb and resource, and the SQL-definition mention separates it from list_tables/list_indexes. It never names those siblings, so differentiation is inferred rather than stated.

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?

Usage is only implied: an agent can infer this is the lookup for views scoped to a single schema. No explicit when-to-use, prerequisites, or alternatives (e.g., get_table_structure, list_tables) are mentioned.

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

stream_queryBatch query resultsA
Destructive

Use for bounded SELECT/WITH results valid inside a subquery. Executes once and returns batches in one response; no cursor or incremental streaming. Use ORDER BY for reproducible ordering. Functions can have side effects.

NameRequiredDescriptionDefault
sqlYesOne Vertica SQL statement, not a script. Use ? placeholders with params; add LIMIT to bound execute_query reads.
paramsNoValues for ? placeholders in SQL order; values only, not identifiers.
maxRowsNoMaximum returned rows. Omit for min(batchSize * 100, 1000000). Truncation does not provide a continuation cursor.
batchSizeNoRows per returned batch, not transport messages.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Adds real context beyond the annotations: single execution, batches returned together, no continuation cursor, and an explicit warning that functions can have side effects, which is consistent with destructiveHint=true and readOnlyHint=false. The ORDER BY advice and the no-cursor caveat are exactly the kind of behavior an agent cannot recover from structured fields.

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?

Four short sentences, each carrying distinct information: scope, execution model, ordering guidance, side-effect warning. No repetition and the selection condition is front-loaded.

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

Completeness4/5

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

With a full output schema and annotations covering the safety profile, the only thing the description must supply is the batch-versus-stream execution model, and it does that clearly along with the side-effect caveat. Minor gap: it never positions itself explicitly against execute_query, which is the sibling an agent will most likely confuse it with.

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%, including defaults, bounds, and the maxRows truncation caveat, so the schema already carries the parameter burden. The description adds only the ORDER BY reproducibility hint, which is behavioral rather than a parameter detail. 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?

States a specific capability: bounded SELECT/WITH executed once, returning batches in a single response with no cursor. That distinguishes it in substance from execute_query, but the sibling is never named, so the agent must infer the pairing from the tool name alone.

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?

"Use for bounded SELECT/WITH results valid inside a subquery" gives a positive selection condition, and "no cursor or incremental streaming" implicitly rules out paginated workloads. It stops short of an explicit when-not or a named alternative such as execute_query.

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. 6 tool updatesv2.0.0
    • First observedexecute_query
    • First observedget_table_structure
    • First observedlist_indexes
    • First observedlist_tables
    • First observedlist_views
    • First observedstream_query

TDQS

A4.1/5.0

Scored across 6 tools

Disambiguation4/5

stream_query and execute_query both run SQL and could be confused, but their descriptions clearly separate bounded/subquery use from small-result or SHOW/DESCRIBE/EXPLAIN use. The four metadata tools have distinct purposes: tables, views, projections/indexes, and table column structure.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern: stream_query, execute_query, list_tables, list_views, list_indexes, get_table_structure. There are no mixed conventions or vague names.

Tool Count5/5

Six tools is a well-scoped set for a Vertica query and metadata server. Each tool has a clear role, and there are no redundant or filler tools.

Completeness4/5

The set covers query execution plus core metadata discovery for tables, views, projections, and table structures. Minor gaps remain, such as listing schemas or inspecting view column structure directly, but agents can generally work around these with SQL.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to interact with PostgreSQL databases using natural language queries, providing secure read-only access to database schemas and SQL translation capabilities.
    6
    8 npm
    ISC
  • A
    license
    B
    quality
    D
    maintenance
    Enables interaction with Vertica databases through SQL queries, schema management, and bulk data operations. Supports connection pooling, SSL/TLS security, and configurable permissions for database operations.
    6
    Apache 2.0
  • A
    license
    C
    quality
    D
    maintenance
    Enables AI assistants to interact with Vertica Analytics Databases for querying, schema exploration, and performance optimization through natural language. It provides enterprise-grade features like fine-grained permissions, query streaming, and secure SSL/TLS connections.
    12
    13 PyPI
    4
    Apache 2.0