UNPKG

@hechtcarmel/vertica-mcp

Version:

MCP server for Vertica database operations with configurable readonly mode

204 lines (155 loc) 4.85 kB
# Vertica MCP Server A Model Context Protocol (MCP) server for Vertica databases. Enables AI assistants to query and explore Vertica databases through natural language. **Safety-first design**: Readonly mode by default. Write operations require explicit configuration. ## Features - **6 MCP Tools**: Query execution, streaming, schema discovery - **Readonly Protection**: Only SELECT/SHOW/DESCRIBE/EXPLAIN/WITH queries by default - **Large Dataset Streaming**: Efficient batch processing (up to 1M rows) - **Vertica-Optimized**: Projection awareness, columnar query support - **Production Ready**: Connection pooling, SSL support, timeout configuration - **Parameter Binding**: SQL injection protection ## Quick Start ### Claude Code ```bash claude mcp add vertica --scope user -- npx -y @hechtcarmel/vertica-mcp@latest --env-file /path/to/your/.env ``` Create your `.env` file with connection details: ```env VERTICA_HOST=your-vertica-host.com VERTICA_PORT=5433 VERTICA_DATABASE=your_database VERTICA_USER=your_username VERTICA_PASSWORD=your_password ``` ### Cursor 1. Create environment file `~/.cursor/vertica.env`: ```env VERTICA_HOST=your-vertica-host.com VERTICA_PORT=5433 VERTICA_DATABASE=your_database VERTICA_USER=your_username VERTICA_PASSWORD=your_password ``` 2. Configure `~/.cursor/mcp.json`: ```json { "mcpServers": { "vertica-mcp": { "command": "npx", "args": [ "@hechtcarmel/vertica-mcp", "--env-file", "/Users/yourusername/.cursor/vertica.env" ] } } } ``` 3. Restart Cursor ### Claude Desktop **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` **Windows**: `%APPDATA%/Claude/claude_desktop_config.json` ```json { "mcpServers": { "vertica-mcp": { "command": "npx", "args": [ "@hechtcarmel/vertica-mcp", "--env-file", "/path/to/your/.env" ] } } } ``` ## Configuration ### Required Variables ```env VERTICA_HOST # Database hostname VERTICA_DATABASE # Database name VERTICA_USER # Username ``` ### Optional Variables ```env VERTICA_PORT=5433 # Default: 5433 VERTICA_PASSWORD # Password (optional) VERTICA_READONLY_MODE=true # Default: true VERTICA_CONNECTION_LIMIT=10 # Default: 10 (max: 100) VERTICA_QUERY_TIMEOUT=60000 # Default: 60000ms VERTICA_SSL=false # Default: false VERTICA_SSL_REJECT_UNAUTHORIZED=true # Default: true VERTICA_DEFAULT_SCHEMA=public # Default: public ``` ### Enabling Write Operations To allow INSERT/UPDATE/DELETE/CREATE/DROP operations: ```env VERTICA_READONLY_MODE=false ``` **Warning**: Only disable readonly mode if you understand the implications. ## Available Tools ### Query Execution - **execute_query**: Execute SQL with optional parameters - **stream_query**: Handle large datasets with configurable batching ### Schema Discovery - **get_table_structure**: Table columns, types, constraints - **list_tables**: All tables in schema with metadata - **list_views**: All views with definitions - **list_indexes**: Vertica projections for optimization ## Usage Examples ### Query Data ```sql SELECT customer_state, COUNT(*) as count FROM customer_dimension GROUP BY customer_state ORDER BY count DESC LIMIT 10; ``` ### Explore Schema ```sql SHOW TABLES; DESCRIBE customer_dimension; ``` ### Analyze Performance ```sql EXPLAIN SELECT * FROM store_sales_fact WHERE sale_date_key > '2023-01-01'; ``` ### Stream Large Results When querying large datasets, use the `stream_query` tool: - Default batch size: 1000 rows - Configurable batch size: 1-10,000 rows - Maximum rows: 1,000,000 ## Troubleshooting ### Connection Failed ```bash # Test connectivity directly vsql -h localhost -p 5433 -d VMart -U dbadmin ``` Verify: - Host and port are reachable - Database credentials are correct - User has required permissions ### Permission Errors - User needs SELECT permissions on tables - User needs access to system catalogs (`v_catalog.*`) ### Query Timeouts Increase timeout for complex queries: ```env VERTICA_QUERY_TIMEOUT=300000 # 5 minutes ``` ### Large Result Sets Use `stream_query` instead of `execute_query` for queries returning >10,000 rows. ## Requirements - Node.js >= 18.0.0 - Vertica database (any recent version) - Network access to Vertica server ## Support - **Issues**: [GitHub Issues](https://github.com/hechtcarmel/vertica-mcp/issues) - **Releases**: [GitHub Releases](https://github.com/hechtcarmel/vertica-mcp/releases) ## License MIT License - see [LICENSE](LICENSE) file. ## Acknowledgments This project's architecture and tool design are based on [mcp-vertica](https://github.com/nolleh/mcp-vertica) by [@nolleh](https://github.com/nolleh). --- **Current Version**: 1.3.5