🚀 Trino MCP Server
A Model Context Protocol (MCP) server that gives AI assistants (like Claude in Cursor) direct access to query and explore Trino/Presto databases.
💡 No installation required! Just configure and run with
uvx.
✨ Features
- 🔍 Schema Discovery - Explore schemas, tables, and columns
- 📊 Smart Exploration - Get schema + sample data in one call
- ⚡ Safe Query Testing - Automatic LIMIT for exploration queries
- 📈 Data Profiling - Null %, distinct counts, top values
- 💾 Export Results - Save to CSV, Excel, JSON, or Parquet
- 🔐 Encryption Check - Detect encrypted columns
- 📋 Query History - Find frequently used queries
🚀 Quick Start (3 minutes)
Prerequisites
- Cursor IDE or Claude Desktop
- Trino database credentials
Step 1: Install uv (One-time, 30 seconds)
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
💡
uvis a fast Python package manager. Theuvxcommand lets you run Python tools without installing them permanently.
Step 2: Find your uvx path
which uvx
# Usually: ~/.local/bin/uvx (macOS/Linux) or %USERPROFILE%\.local\bin\uvx (Windows)
Step 3: Configure Cursor
Open your Cursor MCP settings:
macOS: ~/.cursor/mcp.json
Windows: %APPDATA%\Cursor\mcp.json
Add this config (replace the uvx path with YOUR path from Step 2):
{
"mcpServers": {
"trino": {
"command": "/Users/YOUR_USERNAME/.local/bin/uvx",
"args": ["trino-mcp-navi"],
"env": {
"TRINO_HOST": "your-trino-host.company.com",
"TRINO_PORT": "443",
"TRINO_USER": "your.email@company.com",
"TRINO_CATALOG": "awsdatacatalog",
"TRINO_DEFAULT_SCHEMA": "default"
}
}
}
}
⚠️ Important: Use the full path to
uvx(not just"uvx"). Cursor doesn't inherit your shell's PATH.
Step 4: Restart Cursor
Restart Cursor completely (close and reopen) to load the MCP server.
Step 5: Test Connection
In Cursor's AI chat, type:
Test my Trino connection
The AI will use mcp_trino_test_connection and confirm the connection.
That's it! 🎉 No pip install, no cloning repos.
🔧 Configuration Options
| Environment Variable | Required | Default | Description |
|---|---|---|---|
TRINO_HOST |
✅ | - | Trino server hostname |
TRINO_PORT |
✅ | 8080 |
Server port (usually 443 for HTTPS) |
TRINO_USER |
✅ | - | Your username (usually email) |
TRINO_PASSWORD |
❌ | - | Password (if using basic auth) |
TRINO_CATALOG |
✅ | awsdatacatalog |
Default catalog |
TRINO_DEFAULT_SCHEMA |
❌ | default |
Default schema |
TRINO_HTTP_SCHEME |
❌ | https |
http or https |
TRINO_FALLBACK_HOST |
❌ | - | Backup host if primary fails |
📋 Available Tools (18 Total)
🔍 Discovery Tools
| Tool | Description |
|---|---|
test_connection |
Verify Trino connectivity |
get_all_schemas |
List all schemas in catalog |
get_tables_in_schema |
List tables in a schema |
describe_table |
Get column definitions |
explore_table |
Recommended: Schema + sample data in one call |
search_catalog |
Search for tables/columns by name |
📊 Data Quality & Analytics
| Tool | Description |
|---|---|
profile_column |
Null %, distinct values, top 5 values |
profile_table |
Row count, null analysis per column |
get_table_stats |
Partitions, distinct values, distribution |
get_frequent_queries |
Find how others query this table |
check_encryption |
Check for encrypted columns |
⚡ Query Execution
| Tool | Description |
|---|---|
test_query |
Quick test with auto-LIMIT (safe) |
run_trino_query |
Execute query, return results |
save_query_results |
Execute + export to CSV/Excel/JSON/Parquet |
execute_sql_file |
Run SQL from a file |
🚀 Performance & Schema
| Tool | Description |
|---|---|
explain_query |
Get execution plan |
get_query_history |
Recent queries from session |
get_table_ddl |
SHOW CREATE TABLE |
compare_tables |
Compare schemas of two tables |
🎯 Example Usage
Explore a Table
Show me the schema and sample data from the users table in analytics schema
→ AI uses explore_table(table_name="users", schema_name="analytics")
Run a Query
Get the top 10 customers by revenue from last month
→ AI uses run_trino_query with appropriate SQL
Profile Data Quality
What's the null rate for email column in customers table?
→ AI uses profile_column(table_name="customers", column_name="email", schema_name="...")
Search for Tables
Find all tables with "order" in the name
→ AI uses search_catalog(search_term="order", object_type="table")
☁️ Cloud Hosting (Zero Install for Users)
Deploy the server to the cloud so users don't need to install anything!
Deploy to Railway (Recommended)
- Click the button above or go to railway.app
- Connect your GitHub repo
- Set environment variables:
TRINO_HOST,TRINO_PORT,TRINO_USER,TRINO_CATALOG
- Deploy! You'll get a URL like
https://trino-mcp-navi.up.railway.app
Deploy to Render
- Go to render.com
- Create new Web Service → Connect GitHub repo
- Use the
render.yamlblueprint - Set environment variables
- Deploy!
After Deployment - User Config
Users add this to their Cursor mcp.json - no installation needed!
{
"mcpServers": {
"trino": {
"url": "https://your-deployment-url.railway.app/sse"
}
}
}
That's it! The server handles everything remotely.
🐍 Alternative: Run with Python
If you prefer not to use uvx:
# Install
pip install trino-mcp-navi
# Configure Cursor with python instead of uvx
{
"mcpServers": {
"trino": {
"command": "python",
"args": ["-m", "trino_mcp_navi"],
"env": { ... }
}
}
}
🔧 Troubleshooting
"Connection refused" Error
- Check
TRINO_HOSTis correct - Verify
TRINO_PORT(usually 443 for HTTPS, 8080 for HTTP) - Ensure network/VPN access to Trino server
"Authentication failed"
- Verify
TRINO_USERandTRINO_PASSWORD - Some Trino setups use SSO - check with your admin
MCP Not Loading in Cursor
- Check you have
uvinstalled:uv --version - Verify the JSON syntax in
mcp.jsonis valid - Check Cursor logs:
Help → Toggle Developer Tools → Console - Restart Cursor completely
"uvx: command not found"
Install uv first:
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
🔐 Security Notes
- Never commit credentials to version control
- Use environment variables for sensitive data
- The server connects via HTTPS by default
- All queries go directly to your Trino - no external services
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
📝 License
MIT License - see the LICENSE file for details.
🆘 Support
If you encounter issues:
- Check the troubleshooting section above
- Verify your Trino credentials work outside of Cursor
- Test with a simple query:
SELECT 1 - Open an issue on GitHub
Made with ❤️ for data analysts and engineers
Metadata
Release files for trino-mcp-navi 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| trino_mcp_navi-0.2.1.tar.gz | 19.9 kB | With provenance | Details for trino_mcp_navi-0.2.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| trino_mcp_navi-0.2.1-py3-none-any.whl | Python 3 | none | any | Details for trino_mcp_navi-0.2.1-py3-none-any.whl |
Total release size: 42.5 kB
Security for trino-mcp-navi 0.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.