Skip to main content

🚀 Trino MCP Server

PyPI version License: MIT Python 3.10+

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"

💡 uv is a fast Python package manager. The uvx command 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)

Deploy on Railway

  1. Click the button above or go to railway.app
  2. Connect your GitHub repo
  3. Set environment variables:
    • TRINO_HOST, TRINO_PORT, TRINO_USER, TRINO_CATALOG
  4. Deploy! You'll get a URL like https://trino-mcp-navi.up.railway.app

Deploy to Render

  1. Go to render.com
  2. Create new Web Service → Connect GitHub repo
  3. Use the render.yaml blueprint
  4. Set environment variables
  5. 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_HOST is correct
  • Verify TRINO_PORT (usually 443 for HTTPS, 8080 for HTTP)
  • Ensure network/VPN access to Trino server

"Authentication failed"

  • Verify TRINO_USER and TRINO_PASSWORD
  • Some Trino setups use SSO - check with your admin

MCP Not Loading in Cursor

  1. Check you have uv installed: uv --version
  2. Verify the JSON syntax in mcp.json is valid
  3. Check Cursor logs: Help → Toggle Developer Tools → Console
  4. 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.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

📝 License

MIT License - see the LICENSE file for details.


🆘 Support

If you encounter issues:

  1. Check the troubleshooting section above
  2. Verify your Trino credentials work outside of Cursor
  3. Test with a simple query: SELECT 1
  4. Open an issue on GitHub

Made with ❤️ for data analysts and engineers

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)

Source distribution for trino-mcp-navi 0.2.1
File Size Uploaded
trino_mcp_navi-0.2.1.tar.gz 19.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for trino-mcp-navi 0.2.1
File Interpreter ABI Platform
trino_mcp_navi-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 42.5 kB

Release files / trino_mcp_navi-0.2.1.tar.gz

Download URL trino_mcp_navi-0.2.1.tar.gz
Size 19.9 kB
Tags Source
SHA-256 checksum
How to use checksums
f2daeec9e4929fd07dbe15549076b82cc7f79e0e560e9d2e3e726611a85b25b8
BLAKE2b-256 checksum
How to use checksums
256d7f62c0a303a27f89ff7f721b00e416fc4ba7a92082858b0e4645c3c178c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 8, 2026.

Transparency log

Release files / trino_mcp_navi-0.2.1-py3-none-any.whl

Download URL trino_mcp_navi-0.2.1-py3-none-any.whl
Size 22.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
263bc5df9c9e605c0695944e397ec00e6ba124f37273f06d23919576fe35a210
BLAKE2b-256 checksum
How to use checksums
2084a0e366d2b244545d10540072a666b36cf5139672705a613833a501f5ab3f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page