Skip to main content
Glama
zaboura

Vertica MCP Server

by zaboura

Vertica MCP Server

Vertica MCP Banner

Transform your Vertica Analytics Database into an AI-powered intelligence layer

PyPI version

Python Version Vertica Version Docker

License: MIT Downloads Code style: black

Quick StartDocumentationFeaturesContributingCommunity


Why Vertica MCP?

The Vertica MCP Server is a production-ready implementation of the Model Context Protocol that transforms your Vertica Analytics Database into an intelligent, AI-accessible data platform. Built with enterprise security and performance in mind, it enables AI assistants like Claude, ChatGPT, and Cursor to directly query, analyze, and optimize your Vertica databases through natural language.

What is MCP?

The Model Context Protocol (MCP) is an open standard developed by Anthropic that provides a universal way for AI assistants to connect with external tools and data sources. Think of it as "USB-C for AI" - a standardized interface that allows any MCP-compatible AI to interact with your systems without custom integrations.

Key Benefits

  • Universal AI Connectivity: Connect any MCP-compatible AI to your Vertica database without custom integrations

  • Enterprise Security: Fine-grained permissions at schema and operation levels with SSL/TLS support

  • High Performance: Connection pooling, query streaming, and automatic pagination for handling massive datasets

  • AI-Optimized: Built-in prompts and tools specifically designed for database analysis and optimization

  • Multiple Transports: Support for STDIO, HTTP, and SSE to fit any deployment scenario

  • Production Ready: Battle-tested with comprehensive error handling, logging, and monitoring


Related MCP server: Igloo MCP

Prerequisites

  • Python 3.11 or higher

  • Vertica Database (accessible instance)

  • uv (Python package manager) - Installation guide

  • Docker (optional, for containerized deployment)

  • Claude Desktop or another MCP-compatible client


Quick Start

If you want to configure Claude Desktop or Cursor to connect to your Vertica Database instantly, we've provided an automated setup script. This works whether you installed from source or via PyPI (pip).

Option A: If you cloned the repository (Source/uv)

cd vertica-mcp
python setup_clients.py

Option B: If you installed via PyPI (pip)

# 1. Download the setup script
curl -O https://raw.githubusercontent.com/zaboura/vertica-mcp/master/setup_clients.py

# 2. Run the interactive setup script
python setup_clients.py

The script will ask how you installed the server, prompt you for your Vertica credentials, generate your .env file, and automatically configure Claude Desktop and Cursor. Simply restart your AI assistant and you're good to go!

Method 2: Local Installation (Development Environment)

# 1. Clone the repository
git clone https://github.com/zaboura/vertica-mcp.git
cd vertica-mcp

# 2. Install uv (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 3. Setup environment and install dependencies
uv sync
source .venv/bin/activate

# 4. Install in development mode
uv pip install -e .

# 5. Configure database connection
cp .env.example .env
# Edit .env with your Vertica credentials

# 6. Run the server
vertica-mcp --transport http --port 8000 --bind-host 0.0.0.0  # HTTP for remote access

Method 3: PyPI Installation (Production Environment)

This method is recommended for production deployments and when you want to use the stable release.

# 1. Install from PyPI
pip install vertica-mcp

# 2. Initialize configuration
vertica-mcp --init

# 3. Edit configuration with your credentials
nano .env  # or use your preferred editor
# Update VERTICA_HOST, VERTICA_USER, VERTICA_PASSWORD, etc.

# 4. Test the installation
vertica-mcp --transport http --port 8000  # For HTTP access

Configuration File

After running vertica-mcp --init, edit the generated .env file with your specific settings:

# Required Database Connection
VERTICA_HOST=your_vertica_host
VERTICA_PORT=5433
VERTICA_DATABASE=your_database
VERTICA_USER=your_username
VERTICA_PASSWORD=your_password

# Connection Pool Configuration
VERTICA_CONNECTION_LIMIT=10
VERTICA_LAZY_INIT=1

# SSL Configuration (optional but recommended for production)
VERTICA_SSL=false
VERTICA_SSL_REJECT_UNAUTHORIZED=true

# Performance and Resource Management
VERTICA_QUERY_TIMEOUT=600  # Query timeout in seconds
VERTICA_MAX_RETRIES=3      # Max retry attempts
VERTICA_RETRY_DELAY=0.1    # Base delay for retries
VERTICA_CACHE_TTL=300      # Cache TTL in seconds
VERTICA_MAX_RESULT_MB=100  # Max result size in MB
VERTICA_RATE_LIMIT=60      # Requests per minute
VERTICA_HEALTH_CHECK_INTERVAL=60  # Health check interval

# Security Permissions (defaults to read-only for safety)
ALLOW_INSERT_OPERATION=false
ALLOW_UPDATE_OPERATION=false
ALLOW_DELETE_OPERATION=false
ALLOW_DDL_OPERATION=false

# Schema-specific Permissions (optional for granular control)
SCHEMA_INSERT_PERMISSIONS=staging:true,production:false
SCHEMA_UPDATE_PERMISSIONS=staging:true,production:false
SCHEMA_DELETE_PERMISSIONS=staging:false,production:false
SCHEMA_DDL_PERMISSIONS=staging:false,production:false

Testing with MCP Inspector

The MCP Inspector is a valuable tool for testing and debugging your server configuration:

# 1. Install MCP Inspector
npm install -g @modelcontextprotocol/inspector

# 2. Start your server in one terminal
vertica-mcp --transport http --port 8000

# 3. Test with inspector in another terminal
mcp-inspector http://localhost:8000/mcp

The inspector will open at http://localhost:6274 where you can:

  • View available database tools and their schemas

  • Test tool execution interactively with real data

  • Validate MCP protocol compliance

  • Debug connection issues and error responses

For STDIO testing (not recommended due to command complexity), use HTTP transport which provides identical functionality validation with better debugging capabilities.

Method 4: Docker Deployment

Docker deployment is ideal for containerized environments and consistent deployments across different systems.

Build Docker Image

# Build directly from Dockerfile
docker build -t vertica-mcp:latest .

# Or build via Compose (recommended)
docker compose build

Run with Docker Compose

Compose automatically reads a .env file if present. Vertica credentials and configuration are loaded from .env, while network binding and transport options have Docker-safe defaults (HTTP_BIND=0.0.0.0, SSE_BIND=0.0.0.0).

# STDIO transport (for direct MCP client connection)
docker compose up mcp-stdio

# HTTP transport (for web-based access)
docker compose up mcp-http

# SSE transport (for real-time streaming)
docker compose up mcp-sse

Binding behavior

  • By default, .env sets BIND=127.0.0.1 (localhost) for safety.

  • The Compose file defines service-specific bind variables:

HTTP_BIND=${HTTP_BIND:-0.0.0.0}
SSE_BIND=${SSE_BIND:-0.0.0.0}
  • This means:

    • For local runs, the server binds to localhost.

    • For Docker, HTTP/SSE containers bind to 0.0.0.0 so they’re reachable from your host.

Override on the fly

You can override the bind or port at runtime:

# Linux/macOS
HTTP_BIND=127.0.0.1 docker compose up mcp-http

# Windows PowerShell
$env:HTTP_BIND="127.0.0.1"; docker compose up mcp-http

To skip Vertica credential checks (for demo or offline runs):

SKIP_DB_CHECK=1 docker compose up mcp-http

Manual Docker Run

# HTTP transport with port mapping
docker run -d \
  --name vertica-mcp-http \
  -p 8000:8000 \
  --env-file .env \
  -e TRANSPORT=http \
  -e BIND=0.0.0.0 \
  -e PORT=8000 \
  -e HTTP_PATH=/mcp \
  vertica-mcp:latest

# STDIO transport (direct MCP client connection)
docker run -i --rm \
  --name vertica-mcp-stdio \
  --env-file .env \
  vertica-mcp:latest

Features

Core Tools

Query Execution

  • run_query_safely - Smart query execution with large result detection and automatic warnings

  • execute_query_paginated - Efficient pagination for large datasets with configurable page sizes

  • execute_query_stream - Real-time streaming for massive results with memory-efficient processing

Schema Management

  • get_database_schemas - Explore database organization and available schemas

  • get_schema_tables - List tables with metadata including row counts and storage information

  • get_table_structure - Detailed column information, data types, constraints, and indexes

  • get_table_projections - Vertica-specific projection analysis and optimization recommendations

  • get_schema_views - List all views in a schema with their definitions

Performance Analysis

  • profile_query - Query execution plans, performance metrics, and optimization suggestions

  • analyze_system_performance - Real-time resource monitoring and system health metrics

  • database_status - Comprehensive health metrics including storage usage and connection statistics

AI-Powered Prompts

  • SQL Safety Guard - Prevents accidental large queries and suggests safer alternatives

  • Performance Analyzer - Deep query optimization analysis with specific recommendations

  • SQL Assistant - Intelligent query generation based on natural language descriptions

  • Health Dashboard - Visual database insights with key performance indicators

  • System Monitor - Real-time performance tracking with alerting capabilities

Security Features

  • Multi-Level Permissions: Global and schema-specific access controls with fine-grained operation restrictions

  • SSL/TLS Encryption: Secure database connections with certificate validation

  • Connection Pooling: Efficient resource management with configurable limits and automatic cleanup

  • Read-Only Mode: Default safe configuration for production environments

  • OAuth Support: Enterprise authentication integration for remote deployments


Documentation

Configuration

# Database Connection (Required)
VERTICA_HOST=your_vertica_host
VERTICA_PORT=5433
VERTICA_DATABASE=your_database
VERTICA_USER=your_username
VERTICA_PASSWORD=your_password

# Connection Pool Configuration (Optional)
VERTICA_CONNECTION_LIMIT=10
VERTICA_LAZY_INIT=1  # Delay connection until first use

# SSL Configuration (Optional but recommended for production)
VERTICA_SSL=false
VERTICA_SSL_REJECT_UNAUTHORIZED=true

# Security Permissions (Optional - defaults to read-only for safety)
ALLOW_INSERT_OPERATION=false
ALLOW_UPDATE_OPERATION=false
ALLOW_DELETE_OPERATION=false
ALLOW_DDL_OPERATION=false

# Schema-specific Permissions (Optional for granular control)
SCHEMA_INSERT_PERMISSIONS=staging:true,production:false
SCHEMA_UPDATE_PERMISSIONS=staging:true,production:false
SCHEMA_DELETE_PERMISSIONS=staging:false,production:false
SCHEMA_DDL_PERMISSIONS=staging:false,production:false

Client Integration

This is the best practice approach using a dedicated Python virtual environment and the installed package for maximum stability and isolation.

To install the package and create/configure your .env, follow Method 2: PyPI Installation above.

  1. Locate the Claude configuration file

    • Windows: %APPDATA%/Claude/claude_desktop_config.json

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  2. Configure Claude to use your virtual environment executable and configuration

    • Replace the command path with your virtual environment path

    • Keep --transport stdio and --env-file with absolute path for reliability

Windows Configuration Example

{
  "mcpServers": {
    "vertica-mcp-stdio": {
      "command": "C:\\path-to-venv\\Scripts\\vertica-mcp.exe",
      "args": ["--transport", "stdio", "--env-file", "C:\\path\\to\\.env"]
    }
  }
}

macOS/Linux Configuration Example

{
  "mcpServers": {
    "vertica-mcp-stdio": {
      "command": "/Users/you/.venvs/vertica-mcp/bin/vertica-mcp",
      "args": ["--transport", "stdio", "--env-file", "/absolute/path/to/.env"]
    }
  }
}

Verification Test (outside Claude)

Test your configuration before integrating with Claude:

# Windows
C:\venv\vertica-mcp\Scripts\vertica-mcp.exe --transport stdio --env-file C:\path\to\.env -vvv

# macOS/Linux
~/.venv/vertica-mcp/bin/vertica-mcp --transport stdio --env-file /absolute/path/to/.env -vvv

Important Configuration Notes

  • --transport stdio runs the server over STDIO (no network ports required)

  • --env-file ensures your credentials load correctly even if Claude's working directory differs

  • Use absolute paths to avoid path resolution issues

  1. Alternative: Using Python Module Execution

You can also run the server using Python's -m flag (now supported with __main__.py):

{
  "mcpServers": {
    "vertica-mcp-stdio": {
      "command": "python",
      "args": ["-m", "vertica_mcp", "--transport", "stdio"],
      "cwd": "/path/to/vertica-mcp",
      "env": {
        "VERTICA_HOST": "your_host",
        "VERTICA_PORT": "5433",
        "VERTICA_DATABASE": "your_database",
        "VERTICA_USER": "your_username",
        "VERTICA_PASSWORD": "your_password"
      }
    }
  }
}

Or using .env file:

{
  "mcpServers": {
    "vertica-mcp-stdio": {
      "command": "python",
      "args": ["-m", "vertica_mcp", "--transport", "stdio", "--env-file", "/absolute/path/to/.env"]
    }
  }
}
  1. Development Alternative: From Source (uv)

This option is suitable for development when you want to work with the source code directly:

{
  "mcpServers": {
    "vertica-mcp-stdio": {
      "command": "uv",
      "args": ["run", "vertica-mcp"],
      "cwd": "/path/to/vertica-mcp",
      "env": {
        "VERTICA_HOST": "your_host",
        "VERTICA_PORT": "5433",
        "VERTICA_DATABASE": "your_database",
        "VERTICA_USER": "your_username",
        "VERTICA_PASSWORD": "your_password"
      }
    }
  }
}
  1. Docker Configuration Options

Option A — Docker Compose (recommended for containerized environments)

{
  "mcpServers": {
    "vertica-mcp-stdio": {
      "command": "docker",
      "args": ["compose", 
               "-f", 
               "/path/to/vertica-mcp/docker-compose.yml", 
               "run", 
               "--rm", 
               "-T", 
               "mcp-stdio"]
    }
  }
}

Option B — Direct docker run command

{
  "mcpServers": {
    "vertica-mcp-stdio": {
      "command": "docker",
      "args": ["run", 
               "-i", 
               "--rm", 
               "--env-file", 
               "/path/to/vertica-mcp/.env", 
               "vertica-mcp:latest"]
    }
  }
}
  1. Remote Transport Configuration (HTTP/SSE) via mcp-remote

For remote deployments or when you prefer HTTP-based communication:

{
  "mcpServers": {
    "vertica-mcp-http": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://localhost:8000/mcp"]
    }
  }
}
{
  "mcpServers": {
       "vertica-mcp-sse": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://localhost:8000/sse"]
    }
  }
}

6. **Final Step: Restart Claude Desktop** 

After configuring, completely restart Claude Desktop and look for the (+) indicator which shows that the MCP server is connected and ready to use.

</details>

<details>
<summary><b>VS Code Integration</b></summary>

1. **Install GitHub Copilot Chat Extension**
   Ensure you have the latest version of the GitHub Copilot Chat extension installed in VS Code.

2. **Create MCP Configuration File**
   Create `.vscode/mcp.json` in your workspace root:

```json
{
  "servers": {
    "vertica-mcp": {
      "type": "http",
      "url": "http://localhost:8000/mcp"
    }
  }
}
  1. Enable MCP in VS Code Settings Add these settings to your VS Code configuration:

{
  "chat.mcp.enabled": true,
  "chat.mcp.discovery.enabled": true
}
  1. Create MCP Configuration File Create mcp.json in your Cursor configuration directory:

    • Global Configuration: ~/.cursor/mcp.json (macOS/Linux) or %UserProfile%\.cursor\mcp.json (Windows)

    • Per Project Configuration: <project>/.cursor/mcp.json

{
  "mcpServers": {
    "vertica-mcp": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://localhost:8000/mcp"]
    }
  }
}
  1. Restart Cursor IDE Completely restart Cursor and check the Available Tools section to verify the integration is working.


CLI Reference

vertica-mcp [OPTIONS]

Option

Description

Default

-v, --verbose

Increase verbosity level (-v, -vv, -vvv)

ERROR

--env-file PATH

Path to environment configuration file

.env

--transport TYPE

Transport protocol (stdio, sse, http)

stdio

--port INT

Port for SSE/HTTP transport

8000

--host HOST

Vertica database host

from env

--bind-host HOST

Host to bind SSE/HTTP server

localhost

--db-port INT

Vertica database port

from env

--database NAME

Database name

from env

--user USERNAME

Database username

from env

--password PASS

Database password

from env

--connection-limit INT

Maximum connections in pool

10

--ssl

Enable SSL for database connection

false

--ssl-reject-unauthorized

Reject unauthorized SSL certificates

true

--http-path PATH

Endpoint path for HTTP transport

/mcp

--http-json

Prefer batch JSON responses

false

--http-stateless

Use stateless HTTP sessions

true


Usage Examples

Natural Language Queries

Basic Database Operations

"Show me all tables in the public schema"
"What's the structure of the customers table?"
"Get the last 100 orders from today"
"List all projections for the orders table"
"Get database status and health metrics"

Performance Analysis and Monitoring

"Profile this query and suggest optimizations"
"Show system performance for the last hour"
"Find tables with high ROS container counts"
"Analyze the performance of this query: SELECT * FROM sales.orders WHERE order_date > '2024-01-01'"
"Monitor system performance for the last 30 minutes"

Complex Analytics Queries

"Analyze sales trends by region and product"
"Find anomalies in transaction patterns"
"Generate a monthly revenue report"
"Execute this query safely: SELECT COUNT(*) FROM large_table"

Database Management Tasks

"Check database health and storage usage"
"Monitor resource pool utilization"
"Identify and fix slow queries"
"Show me the current resource pool utilization"

Transport Options

Transport

Use Case

Configuration

STDIO

Local Claude Desktop integration

Default option, no network configuration required

HTTP

Remote deployments and cloud environments

RESTful API on custom port with JSON-RPC protocol

SSE

Real-time streaming applications

Server-sent events for live data updates


Testing & Validation

Quick Health Check

Verify your database connection and server configuration with this simple test:

# Test database connection
python -c "
import os
from dotenv import load_dotenv
load_dotenv()
from vertica_mcp.connection import VerticaConfig, VerticaConnectionManager

config = VerticaConfig.from_env()
manager = VerticaConnectionManager()
manager.initialize_default(config)
conn = manager.get_connection()
cursor = conn.cursor()
cursor.execute('SELECT version()')
print('Connected successfully to:', cursor.fetchone()[0])
manager.release_connection(conn)
"

MCP Inspector Testing

The MCP Inspector provides comprehensive testing and validation capabilities:

# Install MCP Inspector
npm install -g @modelcontextprotocol/inspector

# Test local STDIO server
npx @modelcontextprotocol/inspector vertica_mcp/server.py

# Test HTTP server
npx @modelcontextprotocol/inspector http://localhost:8000/mcp

MCP Inspector Configuration:

Set the Transport Type to match your server configuration:

  • STDIO Transport Testing

    • Command: uv

    • Arguments: run --with mcp --with starlette --with uvicorn --with pydantic --with vertica-python mcp run vertica_mcp/server.py

  • SSE Transport Testing

    • URL: http://localhost:8000/sse

  • HTTP Transport Testing

    • URL: http://localhost:8000/mcp

API Endpoint Validation

Test your HTTP server endpoints directly with curl commands:

# Test tools list endpoint
curl -s http://localhost:8000/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

# Test server initialization
curl -s http://localhost:8000/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"0.1.0","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}'

Advanced Features

Performance Optimization

The server automatically profiles queries and provides comprehensive optimization recommendations:

Automatic Query Analysis:

  • Execution plan analysis with detailed step-by-step breakdown

  • Join strategy recommendations based on table statistics

  • Projection optimization suggestions for improved performance

  • ROS container health monitoring and segmentation analysis

Example Usage:

# Automatic query optimization with detailed feedback
"Profile and optimize: SELECT * FROM large_table JOIN dimension_table"
# Returns: Execution plan, identified bottlenecks, and CREATE PROJECTION statements

Key Features:

  • Real-time performance metrics during query execution

  • Historical performance comparison

  • Automatic detection of inefficient patterns

  • Specific recommendations for index creation and query rewriting

Enterprise Integration

Ensure your production deployment meets enterprise standards:

Security Configuration:

  • Configure SSL/TLS for all database connections

  • Set appropriate connection pool limits based on workload

  • Enable read-only mode for production environments

  • Configure schema-specific permissions for different user roles

  • Implement proper authentication mechanisms

Monitoring and Maintenance:

  • Set up comprehensive monitoring and alerting systems

  • Implement rate limiting to prevent resource exhaustion

  • Configure log rotation and retention policies

  • Set up backup MCP servers for high availability

  • Establish disaster recovery procedures

Performance Optimization:

  • Tune connection pool parameters for your workload

  • Configure appropriate query timeouts

  • Set up caching strategies for frequently accessed data

  • Monitor and optimize resource usage patterns


Security Configuration

Permission Management Levels

The Vertica MCP Server implements a comprehensive three-tier permission system:

  1. Global Permissions: Control operations across all schemas and tables

  2. Schema-specific Permissions: Fine-grained control per individual schema

  3. Connection Security: SSL/TLS encryption and authentication options

Security Best Practices

Database Access Security:

  • Use read-only credentials for production deployments to minimize risk

  • Enable SSL/TLS encryption for all database connections

  • Implement least-privilege access with minimal required permissions

  • Use environment variables instead of hardcoded credentials

Network and Infrastructure Security:

  • Restrict network access using firewall rules and security groups

  • Monitor access logs for suspicious activity and unauthorized attempts

  • Implement connection rate limiting to prevent abuse

  • Regular security audits of configuration and access patterns

Operational Security:

  • Regular credential rotation following your organization's security policies

  • Audit trail maintenance for all database operations

  • Secure backup procedures for configuration and credentials

  • Incident response procedures for security events


Troubleshooting

Common Issues and Solutions

Database Connection Problems

Test Basic Connectivity:

# Test network connectivity to Vertica server
telnet your_vertica_host 5433

# Test database credentials and permissions
vsql -h your_host -U your_user -d your_database

Common Connection Issues:

  • Network connectivity: Verify firewall rules and network routing

  • Authentication failures: Check username, password, and database permissions

  • SSL configuration: Ensure SSL settings match server requirements

  • Connection pool exhaustion: Monitor and adjust connection limits

MCP Client Integration Issues

Troubleshooting Steps:

  1. Complete client restart: Fully restart the client application (Claude Desktop, VS Code, etc.)

  2. Configuration validation: Verify JSON syntax in all configuration files

  3. Server log analysis: Check server logs using -vvv verbose flag

  4. Isolation testing: Test with MCP Inspector before client integration

Common Configuration Problems:

  • Incorrect file paths in configuration

  • Missing environment variables

  • Port conflicts with other services

  • Permission issues with executable files

Docker Deployment Issues

Container Troubleshooting:

# Check container logs for errors
docker logs vertica-mcp

# Test container internal connectivity
docker exec -it vertica-mcp curl http://localhost:8000/mcp

# Verify environment variable loading
docker exec -it vertica-mcp env | grep VERTICA

Common Docker Issues:

  • Environment file not properly mounted

  • Port mapping conflicts

  • Network connectivity between containers

  • Volume mounting permission problems

Debug Mode and Logging

Enable Maximum Verbosity:

# Maximum verbosity for troubleshooting
vertica-mcp --transport http -vvv

# Log output to file for analysis
vertica-mcp --transport http -vv 2> debug.log

Log Analysis Tips:

  • Look for connection establishment messages

  • Check for permission denial errors

  • Monitor query execution timestamps

  • Identify resource exhaustion warnings


Project Structure

vertica-mcp/
├── vertica_mcp/                 # Python package source code
│   ├── __init__.py             # Package initialization
│   ├── cli.py                  # Command-line interface implementation
│   ├── server.py               # Main MCP server implementation
│   ├── connection.py           # Database connection management
│   └── utils.py                # Utility functions and helpers
│
├── pyproject.toml               # Build configuration and metadata (PEP 621)
├── README.md                    # Project documentation
├── CHANGELOG.md                 # Release notes and version history
├── LICENSE                      # MIT license with attribution
├── .gitignore                   # Git ignore rules
├── .dockerignore                # Docker ignore rules
├── .env.example                 # Sample environment file (do NOT commit .env)
│
├── docker-compose.yml           # Docker Compose configuration
├── docker-entrypoint.sh         # Docker container entry script
└── dockerfile                   # Docker image definition

Contributing

We welcome and encourage contributions from the community! Please see our Contributing Guide for detailed information on how to get involved.

Development Environment Setup

Set up your local development environment with these steps:

# Clone and setup development environment
git clone https://github.com/zaboura/vertica-mcp.git
cd vertica-mcp
uv sync

# Install development dependencies including testing and linting tools
uv pip install -e ".[dev]"

# Run comprehensive test suite
pytest tests/

# Code formatting and style checks
black vertica_mcp/
isort vertica_mcp/

# Type checking and static analysis
mypy vertica_mcp/

Adding New Tools and Features

When implementing new tools, follow these guidelines:

  1. Tool Function Implementation: Add tool functions in server.py with proper @mcp.tool() decorator and comprehensive docstrings

  2. Permission Management: Implement appropriate permission checks using the connection manager

  3. Error Handling: Add comprehensive error handling with informative error messages and proper logging

  4. Testing: Write unit tests and integration tests for new functionality

  5. Documentation: Update documentation including README, docstrings, and usage examples

Contribution Guidelines

Getting Started with Contributions:

  1. Fork the repository and create your feature branch from main

  2. Create a feature branch with a descriptive name: git checkout -b feature/AmazingFeature

  3. Make your changes following the existing code style and conventions

  4. Add tests for any new functionality to ensure reliability

  5. Update documentation as needed for new features or changes

  6. Commit your changes with clear, descriptive messages: git commit -m 'Add some AmazingFeature'

  7. Push to your branch: git push origin feature/AmazingFeature

  8. Open a Pull Request with a detailed description of your changes

Code Quality Standards:

  • Follow existing code style and formatting conventions

  • Include comprehensive type hints for all functions

  • Write clear, descriptive commit messages

  • Ensure all tests pass before submitting pull requests

  • Update documentation for any user-facing changes


Community & Support

Getting Help and Support

Community Guidelines

When seeking help or contributing:

  • Search existing issues and discussions before creating new ones

  • Provide detailed information about your environment and configuration

  • Include relevant error messages and log outputs

  • Be respectful and constructive in all interactions

  • Help others when you can share your knowledge and experience


Resources

Official Documentation and References

Learning Resources

Understanding MCP:

  • Model Context Protocol introduction and concepts

  • Best practices for MCP server development

  • Security considerations for AI integrations

Vertica Integration:

  • Database optimization techniques

  • Performance tuning for analytics workloads

  • Advanced query optimization strategies

AI and Database Integration:

  • Natural language to SQL conversion techniques

  • Database security in AI applications

  • Performance monitoring for AI-driven queries


Changelog

Version 0.1.4 (2026-04-26) - Bug Fixes & Improvements

Bug Fixes:

  • ✅ Fixed rate limiting authentication issue in stateless HTTP mode

    • Added _extract_client_id_from_auth() helper to extract client ID from API key

    • run_query_safely() now works correctly with HTTP transport

    • Uses SHA-256 hash of API key as stable client identifier

  • ✅ Fixed CLI module execution (python -m vertica_mcp)

    • Added vertica_mcp/__main__.py for proper module invocation

    • Resolves Claude Desktop connection issues when using python -m syntax

Improvements:

  • 🧹 Repository cleanup: Removed 16 temporary/generated test files (~10.3 MB)

  • 📝 Updated .gitignore to prevent test file regeneration

  • 📚 Enhanced README with multiple Claude Desktop configuration options

  • 🔧 Better support for different installation methods (pip, uv, source)

Technical Changes:

  • Added hashlib import for client ID hashing

  • Modified rate limiting to support stateless HTTP sessions

  • Maintained backward compatibility with STDIO and SSE transports

Version 0.1.3 (2025-??-??) - Published on PyPI

See PyPI release history

Version 0.1.0 (2025-08-20) - Initial Release

Core Features Implemented:

  • 11 comprehensive database tools for complete database interaction

  • 5 AI-optimized prompts for enhanced user experience

  • Support for STDIO, HTTP, and SSE transport protocols

  • Docker support with complete compose configurations

  • Enterprise-grade security features and permission management

Key Capabilities:

  • Full schema exploration and metadata access

  • Query execution with safety guards and optimization

  • Real-time performance monitoring and analysis

  • Comprehensive error handling and logging

  • Production-ready deployment options

Technical Achievements:

  • Connection pooling for optimal resource management

  • Automatic query optimization and suggestion engine

  • Multi-transport support for flexible deployment scenarios

  • Comprehensive testing suite and validation tools

For complete version history and detailed changes, see CHANGELOG.md


License

This project is licensed under the MIT License - see the LICENSE file for complete terms and conditions.

License Summary:

  • Commercial and non-commercial use permitted

  • Modification and distribution allowed

  • No warranty provided

  • Attribution required for derived portions


Acknowledgments

This project builds upon mcp-vertica
by @nolleh.

While the original implementation provided a foundation for Vertica MCP support,
this fork introduces significant enhancements, including:

  • Caching layers and query result reuse

  • Rate limiting and throttling control

  • Improved error handling and retry logic

  • More advanced parsing and schema extraction

  • Connection pooling optimizations and performance tuning

  • New tooling and prompt injections tailored to Vertica workflows

Project Recognition

Core Technologies:

  • Anthropic for creating and maintaining the Model Context Protocol standard

  • Vertica for providing the powerful analytics platform that makes this integration possible

  • FastMCP for the excellent framework that simplified server development


Available Tools

12 tools
analyze_system_performanceD

Analyze system performance with improved efficiency.

ParametersJSON Schema
NameRequiredDescriptionDefault
window_minutesNo
bucketNominute
top_nNo
flushNo

TDQS

D1.5/5.0
Behavior1/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. However, it only states the action generically ('analyze') without explaining what the tool actually does—e.g., whether it runs queries, collects metrics, generates reports, or modifies data. It lacks critical details like permissions needed, side effects, rate limits, or output format, making it inadequate for a tool with 4 parameters.

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 concise with a single sentence, but it's under-specified rather than efficiently informative. While it avoids unnecessary words, it doesn't front-load key details—the phrase 'with improved efficiency' adds little value and could be replaced with more substantive information. It earns a middle score for brevity but lacks meaningful structure.

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

Completeness1/5

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

Given the complexity of a 4-parameter tool with no annotations, 0% schema coverage, and no output schema, the description is severely incomplete. It doesn't explain what the tool analyzes (e.g., CPU, memory, queries), how results are returned, or the purpose of parameters, leaving the agent unable to use the tool correctly. This is inadequate for even basic functionality.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning none of the 4 parameters have descriptions in the schema. The tool description adds no information about what parameters like 'window_minutes', 'bucket', 'top_n', or 'flush' mean or how they affect the analysis. Without this, the agent cannot understand how to use these parameters effectively, failing to compensate for the schema gap.

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

Purpose2/5

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

The description 'Analyze system performance with improved efficiency' is vague and tautological. It restates the tool name ('analyze_system_performance') with the generic addition 'with improved efficiency', which doesn't clarify what specific resource or scope is being analyzed. It fails to distinguish this tool from sibling tools like 'database_status' or 'generate_health_dashboard' that might also analyze performance aspects.

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

Usage Guidelines1/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any context, prerequisites, or exclusions, nor does it reference sibling tools like 'database_status' or 'profile_query' that might be related. This leaves the agent with no information to make an informed choice among performance-related tools.

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

database_statusB

Get database status with improved error handling and formatting.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/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 the full burden of behavioral disclosure. It mentions 'improved error handling and formatting,' which adds some context about reliability and output presentation, but fails to specify what 'status' includes (e.g., uptime, connections, performance metrics), whether it requires permissions, or if it's safe to use frequently. This leaves significant gaps for a tool with zero annotation coverage.

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 a single, efficient sentence that front-loads the core purpose ('Get database status') and adds value with additional context ('with improved error handling and formatting'). There is no wasted verbiage, and every part of the sentence contributes to understanding the tool's functionality.

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?

Given the tool's complexity (simple, no parameters) and the lack of annotations and output schema, the description is minimally adequate. It states what the tool does and hints at behavioral traits, but doesn't fully compensate for the missing structured data—e.g., it doesn't explain what 'status' entails or the format of the output. This makes it complete enough for basic use but with clear gaps.

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?

The tool has 0 parameters, and the schema description coverage is 100%, so there are no parameters to document. The description doesn't need to add parameter semantics, and it appropriately avoids discussing any. A baseline of 4 is applied since no parameters exist, and the description doesn't mislead about inputs.

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's purpose with a specific verb ('Get') and resource ('database status'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'analyze_system_performance' or 'generate_health_dashboard', which might provide overlapping or related functionality.

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?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'analyze_system_performance' and 'generate_health_dashboard' that might offer similar status or health information, there's no indication of when this specific tool is preferred, nor any prerequisites or exclusions mentioned.

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

execute_query_paginatedC

Execute query with pagination support and result size limits.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo
offsetNo
include_columnsNo
timeoutNo

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions 'pagination support and result size limits' which gives some context about output behavior, but doesn't address critical aspects like whether this is a read-only operation, what permissions are required, error handling, rate limits, or what the actual return format looks like.

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 extremely concise - a single sentence that efficiently communicates the core functionality. It's front-loaded with the main purpose and wastes no words on unnecessary elaboration.

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 query execution tool with 5 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain the query language, result format, error conditions, or how pagination actually works in practice. The mention of 'pagination support' is too vague for proper agent understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage and 5 parameters (only 1 required), the description provides no information about any parameters. It doesn't explain what 'query' should contain, what 'limit' and 'offset' control, what 'include_columns' affects, or how 'timeout' works. The description fails to compensate for the complete lack of schema documentation.

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's purpose as 'Execute query with pagination support and result size limits' - a specific verb ('execute') and resource ('query') with key capabilities. However, it doesn't distinguish this from sibling tools like 'execute_query_stream' or 'run_query_safely', which likely have different execution characteristics.

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?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'execute_query_stream', 'run_query_safely', and 'profile_query' available, there's no indication of when paginated execution is preferred over streaming, safe execution, or profiling approaches.

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

execute_query_streamC

Stream query results with batching and size limits.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
batch_sizeNo
max_rowsNo
timeoutNo

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 the full burden of behavioral disclosure. It mentions 'batching and size limits', which hints at performance characteristics, but fails to describe critical behaviors like whether this is a read-only operation, potential side effects, error handling, authentication requirements, or rate limits. For a query execution tool with zero annotation coverage, this leaves significant gaps.

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 extremely concise—a single sentence with zero waste. It's front-loaded with the core purpose and efficiently mentions key features. Every word earns its place, making it easy to parse quickly.

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?

Given the complexity of a query execution tool with 4 parameters, 0% schema description coverage, no annotations, and no output schema, the description is insufficient. It lacks details on return values, error conditions, performance implications, and how it differs from sibling tools. For a tool that likely handles data retrieval with streaming, more context is needed for safe and effective use.

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 0%, so the description must compensate. It mentions 'batching and size limits', which loosely relates to 'batch_size' and 'max_rows' parameters, but doesn't explain the meaning or usage of 'query' or 'timeout'. The description adds some value by hinting at parameter purposes but doesn't fully compensate for the lack of schema descriptions, resulting in a baseline score.

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's purpose: 'Stream query results with batching and size limits.' It specifies the verb ('stream') and resource ('query results'), and mentions key operational aspects (batching, size limits). However, it doesn't explicitly differentiate from sibling tools like 'execute_query_paginated' or 'run_query_safely', which prevents a perfect score.

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?

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'execute_query_paginated' and 'run_query_safely' available, there's no indication of when streaming is preferred over pagination or safe execution, nor any mention of prerequisites or constraints for usage.

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

generate_health_dashboardC

Generate consolidated health dashboard with controlled output. Args: ctx: The context object. output_format: The format of the dashboard (default: compact, detailed, json). Returns: A dictionary containing the health dashboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
output_formatNocompact

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 the full burden of behavioral disclosure. It mentions 'controlled output,' which hints at some behavioral trait, but doesn't elaborate on what this means (e.g., rate limits, permissions, or side effects). For a tool with zero annotation coverage, this leaves significant gaps in understanding how it behaves beyond basic functionality.

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 front-loaded with the core purpose, followed by structured sections for args and returns. It's efficient with no wasted sentences, though the 'ctx' parameter lacks explanation, which slightly reduces clarity. Overall, it's appropriately sized and well-organized.

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?

Given the tool's moderate complexity (generating a dashboard), lack of annotations, no output schema, and incomplete parameter documentation, the description is adequate but has clear gaps. It covers the basic purpose and some parameter details but misses behavioral context and full parameter semantics, making it minimally viable but not fully 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?

The description lists 'output_format' as a parameter with possible values ('compact, detailed, json'), which adds meaning beyond the input schema's 0% coverage. However, it doesn't explain the 'ctx' parameter at all, leaving it undocumented. With 1 parameter total and partial coverage in the description, this meets the baseline for minimal viability but doesn't fully compensate for the schema gap.

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's purpose: 'Generate consolidated health dashboard with controlled output.' It specifies the verb ('generate') and resource ('health dashboard'), and the 'consolidated' modifier adds useful context. However, it doesn't explicitly differentiate this from sibling tools like 'analyze_system_performance' or 'database_status', which might offer overlapping functionality.

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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, appropriate contexts, or exclusions, and there's no comparison to sibling tools like 'analyze_system_performance' or 'database_status' that might serve similar purposes. The agent must infer usage from the purpose alone.

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

get_database_schemasB

List database schemas with caching.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It adds value by disclosing caching behavior, which is a useful trait beyond basic functionality. However, it lacks details on permissions, rate limits, error handling, or what 'List' entails (e.g., format, pagination). For a tool with no annotations, this is a moderate but incomplete disclosure.

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 a single, efficient sentence that front-loads the core action ('List database schemas') and adds a key behavioral trait ('with caching') without waste. Every word earns its place, making it highly concise and well-structured.

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?

Given no annotations, no output schema, and 0 parameters, the description is adequate but has gaps. It covers the basic purpose and a behavioral trait (caching), but for a tool that likely returns a list of schemas, more context on output format or usage scenarios would improve completeness. It's minimally viable but not fully informative.

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?

The input schema has 0 parameters with 100% coverage, so the schema fully documents the absence of parameters. The description doesn't need to add parameter details, and it doesn't contradict the schema. A baseline of 4 is appropriate since no parameters exist, and the description doesn't introduce confusion.

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 verb ('List') and resource ('database schemas'), making the purpose specific and understandable. It distinguishes from siblings like get_schema_tables or get_schema_views by focusing on schemas rather than their contents. However, it doesn't explicitly differentiate from all siblings (e.g., database_status might overlap in scope), keeping it from a perfect score.

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?

The description provides no guidance on when to use this tool versus alternatives like get_schema_tables or database_status. It mentions caching, which hints at performance considerations, but doesn't specify when caching applies or when to avoid it. Without explicit when/when-not instructions or named alternatives, the score is low.

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

get_schema_tablesC

List tables in schema with caching.

ParametersJSON Schema
NameRequiredDescriptionDefault
schema_nameNopublic

TDQS

C2.8/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 the full burden. It mentions 'with caching', which hints at performance behavior, but doesn't disclose critical traits like whether it's read-only, safe, requires permissions, rate limits, or what the output format looks like. For a tool with no annotation coverage, this leaves significant behavioral gaps.

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 extremely concise with a single sentence that front-loads the core action ('List tables in schema') and adds a key detail ('with caching'). There's zero waste or redundancy, making it efficient and easy to parse quickly.

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?

Given the complexity (a database query tool with caching), lack of annotations, no output schema, and low schema coverage, the description is incomplete. It doesn't explain return values, error handling, or how caching affects results, leaving the agent with insufficient information to use the tool effectively in context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It doesn't add any meaning beyond the input schema—no explanation of what 'schema_name' represents, default usage, or how caching interacts with parameters. With 1 parameter undocumented in both schema and description, the description fails to provide necessary semantic context.

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 verb ('List') and resource ('tables in schema'), making the purpose understandable. It distinguishes from siblings like 'get_schema_views' by specifying tables, but doesn't fully differentiate from 'get_table_structure' or 'get_table_projections' which might also involve tables. The mention of 'with caching' adds specificity but doesn't fully clarify uniqueness.

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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose this over 'get_schema_views' for views, 'get_table_structure' for detailed info, or 'execute_query_paginated' for custom queries. There's no context on prerequisites, exclusions, or typical use cases, leaving the agent with minimal direction.

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

get_schema_viewsC

List views in schema with caching.

ParametersJSON Schema
NameRequiredDescriptionDefault
schema_nameNopublic

TDQS

C2.7/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 of behavioral disclosure. It mentions caching, which adds some context about performance or data freshness, but fails to cover critical aspects like whether this is a read-only operation, potential side effects, error handling, or rate limits. This leaves significant gaps for a tool that interacts with database schemas.

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 very concise with a single sentence, making it easy to parse. However, it could be more front-loaded by explicitly stating the tool's core function before mentioning caching, but it's still efficient with zero wasted words.

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?

Given the complexity of database operations, no annotations, no output schema, and low parameter coverage, the description is incomplete. It lacks details on return values, error conditions, caching implications, and how it differs from sibling tools, making it inadequate for safe and effective use by an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 1 parameter with 0% description coverage, meaning the schema provides no semantic details. The description adds no information about the 'schema_name' parameter, such as what it represents, valid values, or default behavior beyond the schema's default. This fails to compensate for the low 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's purpose with a specific verb ('List') and resource ('views in schema'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'get_schema_tables' or 'get_table_structure', which prevents a perfect score.

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?

The description provides no guidance on when to use this tool versus alternatives like 'get_schema_tables' or 'get_database_schemas'. It mentions caching but doesn't explain when this is beneficial or if there are trade-offs, leaving the agent with minimal usage context.

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

get_table_projectionsC

List projections for a table.

ParametersJSON Schema
NameRequiredDescriptionDefault
table_nameYes
schema_nameNopublic

TDQS

C2.6/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 the full burden of behavioral disclosure. It states 'List projections for a table,' which implies a read-only operation, but doesn't disclose any behavioral traits such as permissions required, rate limits, whether it returns all projections or a subset, or how it handles errors. This leaves significant gaps for an agent to understand the tool's behavior.

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 a single, efficient sentence: 'List projections for a table.' It's front-loaded with the core action and target, with zero wasted words. This is appropriately sized for the tool's apparent simplicity, making it easy to parse quickly.

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?

Given the complexity (a read operation with 2 parameters), lack of annotations, 0% schema description coverage, and no output schema, the description is incomplete. It doesn't explain what 'projections' are, the return format, or any behavioral context. For a tool that might involve database-specific concepts, this leaves too many unknowns for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no meaning beyond the input schema, which has 0% schema description coverage. It doesn't explain what 'projections' are or how the parameters relate to them (e.g., if table_name refers to a specific database table). With two parameters (table_name and schema_name) and no schema descriptions, the description fails to compensate, leaving parameters semantically unclear.

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 'List projections for a table' clearly states the action (list) and target (projections for a table), but it's vague about what 'projections' means in this context (e.g., column subsets, materialized views, or database-specific structures). It doesn't differentiate from siblings like get_table_structure or get_schema_tables, which might overlap in scope. This provides a basic purpose but lacks specificity.

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 provided on when to use this tool versus alternatives. For example, it doesn't specify if this is for metadata retrieval, performance analysis, or how it differs from siblings like get_table_structure or execute_query_paginated. The description implies usage for listing projections but offers no context on prerequisites, typical scenarios, or exclusions.

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

get_table_structureC

Get table structure with caching support.

ParametersJSON Schema
NameRequiredDescriptionDefault
table_nameYes
schema_nameNopublic

TDQS

C2.6/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 the full burden of behavioral disclosure. It mentions 'caching support,' which hints at performance optimization, but fails to describe key traits such as whether this is a read-only operation, potential side effects, error handling, or how caching works (e.g., cache duration, invalidation). This leaves significant gaps in understanding the tool's behavior.

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 extremely concise with a single sentence, 'Get table structure with caching support,' which is front-loaded and wastes no words. Every part of the sentence contributes to the tool's purpose, making it efficient and easy to parse, though it may be overly brief for clarity.

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?

Given the complexity of a database tool with 2 parameters, no annotations, and no output schema, the description is incomplete. It lacks details on what 'table structure' includes, how caching operates, error conditions, or return values. For a tool that likely returns metadata, this minimal description does not provide enough context for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, and the tool description does not add any meaning to the parameters 'table_name' and 'schema_name.' It does not explain what these parameters represent, their expected formats, or how they affect the output. With low schema coverage, the description fails to compensate, leaving parameters largely undocumented.

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 the tool's purpose as 'Get table structure with caching support,' which includes a verb ('Get') and resource ('table structure'), making it clear what it does at a basic level. However, it lacks specificity about what 'table structure' entails (e.g., columns, data types, constraints) and does not differentiate it from sibling tools like 'get_schema_tables' or 'get_table_projections,' leaving room for ambiguity.

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?

The description provides no guidance on when to use this tool versus alternatives. It mentions 'caching support' but does not explain when caching is beneficial or when to choose this over other tools like 'get_schema_tables' or 'execute_query_paginated' for similar purposes. There is no explicit mention of prerequisites, exclusions, or recommended contexts.

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

profile_queryC

Profile query execution with improved error handling.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
timeoutNo

TDQS

C2.2/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 the full burden of behavioral disclosure. It mentions 'improved error handling', which hints at robustness, but doesn't specify what errors are handled, how they're reported, or any other behavioral traits like performance impact, side effects, or output format. For a tool with no annotations, this is insufficient to inform the agent about its operational characteristics.

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 concise with a single sentence, 'Profile query execution with improved error handling.' It's front-loaded and wastes no words, making it efficient to parse. However, it's under-specified rather than optimally concise, as it lacks necessary details for clarity.

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?

Given the complexity (a query profiling tool with 2 parameters), no annotations, no output schema, and 0% schema coverage, the description is incomplete. It doesn't explain what profiling entails (e.g., returns performance metrics, logs), how errors are handled, or the tool's role among siblings. For a tool that likely involves system interaction, more context is needed to guide effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the schema provides no parameter descriptions. The tool description adds no information about parameters beyond what's in the schema (e.g., 'query' and 'timeout'). It doesn't explain what a 'query' entails (e.g., SQL, API call), what 'timeout' units are, or default behaviors. With 2 parameters and 0% coverage, the description fails to compensate for the lack of schema documentation.

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

Purpose2/5

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

The description 'Profile query execution with improved error handling' states a vague purpose but lacks specificity. It mentions 'profile query execution' which suggests analyzing query performance, but doesn't specify what resource is being profiled (e.g., database queries, system performance). It doesn't clearly distinguish from sibling tools like 'execute_query_paginated' or 'run_query_safely' which might also handle queries. The description is better than a tautology but remains ambiguous about scope.

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 provided on when to use this tool versus alternatives. With siblings like 'execute_query_paginated', 'execute_query_stream', and 'run_query_safely', the description doesn't explain when profiling is preferred over execution, or what 'improved error handling' entails compared to other tools. This leaves the agent without clear direction on tool selection in context.

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

run_query_safelyB
Safe query execution with size detection, pagination, and timeout support.

Args:
    query: SQL query to execute
    row_threshold: Maximum rows before requiring confirmation
    proceed: Whether to proceed with large result set
    mode: Execution mode ('page' or 'stream')
    page_limit: Rows per page when paginating
    include_columns: Include column names in response
    precount: Count total rows for large results (expensive)
    timeout: Query timeout in seconds (default from env)
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
row_thresholdNo
proceedNo
modeNopage
page_limitNo
include_columnsNo
precountNo
timeoutNo

TDQS

B3.3/5.0
Behavior3/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 mentions safety features like size detection, pagination, and timeout support, which adds some context. However, it doesn't detail critical behaviors such as what happens when thresholds are exceeded, how pagination works in practice, or error handling for timeouts, leaving significant gaps for a tool with 8 parameters.

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 appropriately sized with a clear summary sentence followed by a structured parameter list. Each parameter explanation is brief and focused, though the initial summary could be more front-loaded with key usage context. There's minimal wasted text, making it efficient for an agent to parse.

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?

Given the tool's complexity (8 parameters, no annotations, no output schema), the description is moderately complete. It covers parameter semantics well but lacks behavioral details like response format, error conditions, and sibling differentiation. For a safe query execution tool with many options, more context on outcomes and trade-offs would be beneficial.

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 0%, so the description must compensate. It provides a helpful list of all 8 parameters with brief explanations that add meaning beyond the schema's titles and types. For example, it clarifies 'row_threshold' as 'Maximum rows before requiring confirmation' and 'precount' as 'Count total rows for large results (expensive)', which significantly enhances understanding.

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 executes SQL queries with safety features like size detection, pagination, and timeout support. It specifies the verb ('execute') and resource ('SQL query') but doesn't explicitly differentiate from siblings like 'execute_query_paginated' or 'execute_query_stream' beyond the 'safely' aspect in the name.

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?

The description provides no guidance on when to use this tool versus alternatives like 'execute_query_paginated' or 'execute_query_stream'. It mentions features like pagination and streaming modes but doesn't specify scenarios where this tool is preferred over its siblings, leaving the agent to infer usage from parameter names alone.

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. 12 tool updatesv0.1.0
    • First observedanalyze_system_performance
    • First observeddatabase_status
    • First observedexecute_query_paginated
    • First observedexecute_query_stream
    • First observedgenerate_health_dashboard
    • First observedget_database_schemas
    • First observedget_schema_tables
    • First observedget_schema_views
    • First observedget_table_projections
    • First observedget_table_structure
    • First observedprofile_query
    • First observedrun_query_safely

TDQS

C2.9/5.0

Scored across 12 tools

Disambiguation4/5

Most tools have distinct purposes, but there is some overlap between execute_query_paginated, execute_query_stream, and run_query_safely, as all three handle query execution with different features. The descriptions help differentiate them, but an agent might need to carefully choose between these for query-related tasks.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern, such as analyze_system_performance, get_database_schemas, and profile_query. This predictability makes it easy for agents to understand and navigate the tool set without confusion.

Tool Count5/5

With 12 tools, the server is well-scoped for a Vertica database management system. The count covers essential operations like query execution, schema exploration, performance analysis, and health monitoring, without being overwhelming or too sparse for the domain.

Completeness4/5

The tool set provides comprehensive coverage for database operations, including query execution, schema inspection, performance analysis, and health dashboards. A minor gap is the lack of data manipulation tools (e.g., insert, update, delete), but this is reasonable if the server focuses on read-only or administrative tasks, and agents can work around this with existing query tools.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • 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
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to interact with Snowflake databases through SQL queries, table previews, and metadata operations. Features built-in safety checks that block destructive operations and intelligent error handling optimized for AI workflows.
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to query and explore Vertica databases through natural language with readonly protection by default. Supports SQL execution, schema discovery, large dataset streaming, and Vertica-specific optimizations like projection awareness.
    15
    8
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to securely interact with multiple databases (MySQL, PostgreSQL) via natural language queries, with cross-database querying and enterprise-grade security.
    14
    MIT