A high-performance Model Context Protocol (MCP) server for Trino implemented in Go.
A high-performance Model Context Protocol (MCP) server for Trino implemented in Go. This project enables AI assistants to seamlessly interact with Trino's distributed SQL query engine through standardized MCP tools.
This project implements a Model Context Protocol (MCP) server for Trino in Go. It enables AI assistants to access Trino's distributed SQL query engine through standardized MCP tools.
Trino (formerly PrestoSQL) is a powerful distributed SQL query engine designed for fast analytics on large datasets.
The easiest way to install mcp-trino is using Homebrew:
# Add the tap repository
brew tap tuannvm/mcp
# Install mcp-trino
brew install mcp-trino
To update to the latest version:
brew update && brew upgrade mcp-trino
/usr/local/bin
on Linux/macOS)chmod +x mcp-trino
on Linux/macOS)git clone https://github.com/tuannvm/mcp-trino.git
cd mcp-trino
make build
# Binary will be in ./bin/
You can download pre-built binaries for your platform:
Platform | Architecture | Download Link |
---|---|---|
macOS | x86_64 (Intel) | Download |
macOS | ARM64 (Apple Silicon) | Download |
Linux | x86_64 | Download |
Linux | ARM64 | Download |
Windows | x86_64 | Download |
Or see all available downloads on the GitHub Releases page.
This MCP server can be integrated with several AI applications:
To use the Docker image instead of a local binary:
{
"mcpServers": {
"mcp-trino": {
"command": "docker",
"args": ["run", "--rm", "-i",
"-e", "TRINO_HOST=<HOST>",
"-e", "TRINO_PORT=<PORT>",
"-e", "TRINO_USER=<USERNAME>",
"-e", "TRINO_PASSWORD=<PASSWORD>",
"-e", "TRINO_SCHEME=http",
"ghcr.io/tuannvm/mcp-trino:latest"],
"env": {}
}
}
}
Note: The
host.docker.internal
special DNS name allows the container to connect to services running on the host machine. If your Trino server is running elsewhere, replace with the appropriate host.
This Docker configuration can be used in any of the below applications.
To use with Cursor, create or edit ~/.cursor/mcp.json
:
{
"mcpServers": {
"mcp-trino": {
"command": "mcp-trino",
"args": [],
"env": {
"TRINO_HOST": "<HOST>",
"TRINO_PORT": "<PORT>",
"TRINO_USER": "<USERNAME>",
"TRINO_PASSWORD": "<PASSWORD>"
}
}
}
}
Replace the environment variables with your specific Trino configuration.
For HTTP+SSE transport mode (supported for Cursor integration):
{
"mcpServers": {
"mcp-trino-http": {
"url": "http://localhost:9097/sse"
}
}
}
Then start the server in a separate terminal with:
MCP_TRANSPORT=http TRINO_HOST=<HOST> TRINO_PORT=<PORT> TRINO_USER=<USERNAME> TRINO_PASSWORD=<PASSWORD> mcp-trino
To use with Claude Desktop, edit your Claude configuration file:
~/Library/Application Support/Claude/claude_desktop_config.json
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"mcp-trino": {
"command": "mcp-trino",
"args": [],
"env": {
"TRINO_HOST": "<HOST>",
"TRINO_PORT": "<PORT>",
"TRINO_USER": "<USERNAME>",
"TRINO_PASSWORD": "<PASSWORD>"
}
}
}
}
After updating the configuration, restart Claude Desktop. You should see the MCP tools available in the tools menu.
To use with Windsurf, create or edit your mcp_config.json
:
{
"mcpServers": {
"mcp-trino": {
"command": "mcp-trino",
"args": [],
"env": {
"TRINO_HOST": "<HOST>",
"TRINO_PORT": "<PORT>",
"TRINO_USER": "<USERNAME>",
"TRINO_PASSWORD": "<PASSWORD>"
}
}
}
}
Restart Windsurf to apply the changes. The Trino MCP tools will be available to the Cascade AI.
To use with ChatWise, follow these steps:
mcp-trino
(or any name you prefer)mcp-trino
TRINO_HOST=<HOST>
TRINO_PORT=<PORT>
TRINO_USER=<USERNAME>
TRINO_PASSWORD=<PASSWORD>
Alternatively, you can import the configuration from JSON:
{
"mcpServers": {
"mcp-trino": {
"command": "mcp-trino",
"args": [],
"env": {
"TRINO_HOST": "<HOST>",
"TRINO_PORT": "<PORT>",
"TRINO_USER": "<USERNAME>",
"TRINO_PASSWORD": "<PASSWORD>"
}
}
}
}
Once enabled, click the hammer icon below the input box in ChatWise to access Trino MCP tools.
The server provides the following MCP tools:
Execute a SQL query against Trino with full SQL support for complex analytical queries.
Sample Prompt:
"How many customers do we have per region? Can you show them in descending order?"
Example:
{
"query": "SELECT region, COUNT(*) as customer_count FROM tpch.tiny.customer GROUP BY region ORDER BY customer_count DESC"
}
Response:
{
"columns": ["region", "customer_count"],
"data": [
["AFRICA", 5],
["AMERICA", 5],
["ASIA", 5],
["EUROPE", 5],
["MIDDLE EAST", 5]
]
}
List all catalogs available in the Trino server, providing a comprehensive view of your data ecosystem.
Sample Prompt:
"What databases do we have access to in our Trino environment?"
Example:
{}
Response:
{
"catalogs": ["tpch", "memory", "system", "jmx"]
}
List all schemas in a catalog, helping you navigate through the data hierarchy efficiently.
Sample Prompt:
"What schemas or datasets are available in the tpch catalog?"
Example:
{
"catalog": "tpch"
}
Response:
{
"schemas": ["information_schema", "sf1", "sf100", "sf1000", "tiny"]
}
List all tables in a schema, giving you visibility into available datasets.
Sample Prompt:
"What tables are available in the tpch tiny schema? I need to know what data we can query."
Example:
{
"catalog": "tpch",
"schema": "tiny"
}
Response:
{
"tables": ["customer", "lineitem", "nation", "orders", "part", "partsupp", "region", "supplier"]
}
Get the schema of a table, understanding the structure of your data for better query planning.
Sample Prompt:
"What columns are in the customer table? I need to know the data types and structure before writing my query."
Example:
{
"catalog": "tpch",
"schema": "tiny",
"table": "customer"
}
Response:
{
"columns": [
{
"name": "custkey",
"type": "bigint",
"nullable": false
},
{
"name": "name",
"type": "varchar",
"nullable": false
},
{
"name": "address",
"type": "varchar",
"nullable": false
},
{
"name": "nationkey",
"type": "bigint",
"nullable": false
},
{
"name": "phone",
"type": "varchar",
"nullable": false
},
{
"name": "acctbal",
"type": "double",
"nullable": false
},
{
"name": "mktsegment",
"type": "varchar",
"nullable": false
},
{
"name": "comment",
"type": "varchar",
"nullable": false
}
]
}
This information is invaluable for understanding the column names, data types, and nullability constraints before writing queries against the table.
Here's a complete interaction example showing how an AI assistant might use these tools to answer a business question:
User Query: "Can you help me analyze our biggest customers? I want to know the top 5 customers with the highest account balances."
AI Assistant's workflow:
First, discover available catalogs
> Using list_catalogs tool
> Discovers tpch catalog
Then, find available schemas
> Using list_schemas tool with catalog "tpch"
> Discovers "tiny" schema
Explore available tables
> Using list_tables tool with catalog "tpch" and schema "tiny"
> Finds "customer" table
Check the customer table schema
> Using get_table_schema tool
> Discovers "custkey", "name", "acctbal" and other columns
Finally, execute the query
> Using execute_query tool with:
> "SELECT custkey, name, acctbal FROM tpch.tiny.customer ORDER BY acctbal DESC LIMIT 5"
Returns the results to the user:
The top 5 customers with highest account balances are:
1. Customer #65 (Customer#000000065): $9,222.78
2. Customer #13 (Customer#000000013): $8,270.47
3. Customer #89 (Customer#000000089): $7,990.56
4. Customer #11 (Customer#000000011): $7,912.91
5. Customer #82 (Customer#000000082): $7,629.41
This seamless workflow demonstrates how the MCP tools enable AI assistants to explore and query data in a conversational manner.
The server can be configured using the following environment variables:
Variable | Description | Default |
---|---|---|
TRINO_HOST | Trino server hostname | localhost |
TRINO_PORT | Trino server port | 8080 |
TRINO_USER | Trino user | trino |
TRINO_PASSWORD | Trino password | (empty) |
TRINO_CATALOG | Default catalog | memory |
TRINO_SCHEMA | Default schema | default |
TRINO_SCHEME | Connection scheme (http/https) | https |
TRINO_SSL | Enable SSL | true |
TRINO_SSL_INSECURE | Allow insecure SSL | true |
MCP_TRANSPORT | Transport method (stdio/http) | stdio |
MCP_PORT | HTTP port for http transport | 9097 |
MCP_HOST | Host for HTTP callbacks | localhost |
Note: When
TRINO_SCHEME
is set to "https",TRINO_SSL
is automatically set to true regardless of the provided value.
Important: The default connection mode is HTTPS. If you're using an HTTP-only Trino server, you must set
TRINO_SCHEME=http
in your environment variables.
For Cursor Integration: When using with Cursor, set
MCP_TRANSPORT=http
and connect to the/sse
endpoint. The server will automatically handle SSE (Server-Sent Events) connections.
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
This project uses GitHub Actions for continuous integration and GoReleaser for automated releases.
Our CI pipeline performs the following checks on all PRs and commits to the main branch:
When changes are merged to the main branch: