Vertica MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Vertica MCP Servershow me the top 10 customers by total sales last month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Vertica MCP Server
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_passwordAdd 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.envYou 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 |
|
| Rows, fields, row count, original query |
|
| Batches, total rows, counts, truncation status |
| optional | Tables, types, ownership |
| optional | View previews and full definitions |
|
| Vertica projections and their columns |
|
| 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 tobatchSize × 100, capped at 1,000,000.truncatedand top-levelhasMore: true when additional rows exist.batchCountandtotalRows: 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 |
|
| TCP port, 1–65535 |
|
| Read-only query policy and transactions |
|
| Connection and query timeout in ms; 1000–300000 |
|
| Idle disconnect in ms; 60000–86400000 |
|
| Require encrypted TLS when enabled |
|
| Validate certificate and hostname when TLS is enabled |
|
| Default schema for catalog tools |
|
| Try a cluster-directed node on first connect |
| unset | Set to |
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=falseexecute_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
falsenow 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
vsqlusing 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_TIMEOUTwithin 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 toolsexecute_queryExecute SQLADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | One Vertica SQL statement, not a script. Use ? placeholders with params; add LIMIT to bound execute_query reads. | |
| params | No | Values for ? placeholders in SQL order; values only, not identifiers. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 structureARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| tableName | Yes | Exact existing table name, not a view. Pass the schema separately; do not add SQL quotes. | |
| schemaName | No | Exact schema name without SQL quotes. Omit for VERTICA_DEFAULT_SCHEMA, or public if unset. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 projectionsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| tableName | Yes | Exact existing table name, not a view. Pass the schema separately; do not add SQL quotes. | |
| schemaName | No | Exact schema name without SQL quotes. Omit for VERTICA_DEFAULT_SCHEMA, or public if unset. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 tablesARead-onlyIdempotent
Discover visible tables in one schema before querying. Returns all matching metadata without pagination; does not read table data.
| Name | Required | Description | Default |
|---|---|---|---|
| schemaName | No | Exact schema name without SQL quotes. Omit for VERTICA_DEFAULT_SCHEMA, or public if unset. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 viewsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| schemaName | No | Exact schema name without SQL quotes. Omit for VERTICA_DEFAULT_SCHEMA, or public if unset. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 resultsADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | One Vertica SQL statement, not a script. Use ? placeholders with params; add LIMIT to bound execute_query reads. | |
| params | No | Values for ? placeholders in SQL order; values only, not identifiers. | |
| maxRows | No | Maximum returned rows. Omit for min(batchSize * 100, 1000000). Truncation does not provide a continuation cursor. | |
| batchSize | No | Rows per returned batch, not transport messages. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
v2.0.0- First observed
execute_query - First observed
get_table_structure - First observed
list_indexes - First observed
list_tables - First observed
list_views - First observed
stream_query
TDQS
Scored across 6 tools
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.
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.
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.
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
Related MCP Connectors
Query Postgres, MySQL, SQL Server, Oracle, BigQuery, ClickHouse and Redshift from your AI client.
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Query 40 databases from Claude, ChatGPT, or Cursor — on any device. Read-only, encrypted, audited.
Query BigQuery, Snowflake, Redshift & Azure Synapse with natural language
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with PostgreSQL databases using natural language queries, providing secure read-only access to database schemas and SQL translation capabilities.68 npmISC
- AlicenseBqualityDmaintenanceEnables 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.6Apache 2.0
- AlicenseCqualityDmaintenanceEnables 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.1213 PyPI4Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to securely query VAST Data databases for schema, metadata, and sample data via read-only SQL and MCP resources.MIT