44functionality through resources and tools, with special support for Iceberg tables.
55"""
66
7+ import os
8+
79from mcp .server .fastmcp import FastMCP
810from mcp .server .fastmcp .prompts import base
911from pydantic import Field
1618client = TrinoClient (config )
1719
1820
19- # Initialize the MCP server with context
21+ # Initialize the MCP server with recommended settings for all transports
2022mcp = FastMCP (
2123 name = "Trino Explorer" ,
2224 instructions = "This Model Context Protocol (MCP) server provides access to Trino Query Engine." ,
23- dependencies = ["trino" , "python-dotenv" , "loguru" ],
25+ # HTTP transport settings (used by streamable-http and sse)
26+ host = os .getenv ("MCP_HOST" , "127.0.0.1" ),
27+ port = int (os .getenv ("MCP_PORT" , "8000" )),
28+ # Recommended for production HTTP deployments
29+ stateless_http = True ,
30+ json_response = True ,
2431)
2532
2633
@@ -561,17 +568,21 @@ def maintain_iceberg(table: str, catalog: str, schema_name: str) -> list[base.Me
561568
562569 # Run with SSE transport
563570 python server.py --transport sse --host 127.0.0.1 --port 8001
571+
572+ Environment variables:
573+ MCP_HOST Default host for HTTP transports (default: 127.0.0.1)
574+ MCP_PORT Default port for HTTP transports (default: 8000)
564575 """ ,
565576 )
566577 parser .add_argument (
567578 "--host" ,
568- default = "127.0.0.1" ,
579+ default = None ,
569580 help = "Host to bind to (default: 127.0.0.1, use 0.0.0.0 for all interfaces)" ,
570581 )
571582 parser .add_argument (
572583 "--port" ,
573584 type = int ,
574- default = 8000 ,
585+ default = None ,
575586 help = "Port to listen on (default: 8000)" ,
576587 )
577588 parser .add_argument (
@@ -582,22 +593,25 @@ def maintain_iceberg(table: str, catalog: str, schema_name: str) -> list[base.Me
582593 )
583594 args = parser .parse_args ()
584595
596+ # Update settings if CLI args provided (override env vars)
597+ if args .host :
598+ mcp .settings .host = args .host
599+ if args .port :
600+ mcp .settings .port = args .port
601+
585602 logger .info (f"Starting Trino MCP server with { args .transport } transport" )
586603
587604 if args .transport == "stdio" :
588605 logger .info ("Using stdio transport for local MCP communication" )
589606 mcp .run (transport = "stdio" )
590607 elif args .transport == "streamable-http" :
591- logger .info (f"Starting Streamable HTTP server on http://{ args . host } :{ args .port } /mcp" )
592- mcp .run (transport = "streamable-http" , host = args . host , port = args . port )
608+ logger .info (f"Starting Streamable HTTP server on http://{ mcp . settings . host } :{ mcp . settings .port } /mcp" )
609+ mcp .run (transport = "streamable-http" )
593610 elif args .transport == "sse" :
594- logger .info (f"Starting SSE server on http://{ args . host } :{ args .port } /sse" )
595- mcp .run (transport = "sse" , host = args . host , port = args . port )
611+ logger .info (f"Starting SSE server on http://{ mcp . settings . host } :{ mcp . settings .port } /sse" )
612+ mcp .run (transport = "sse" )
596613
597614
598615def main ():
599616 """Entry point for the MCP Trino server."""
600- import sys
601-
602- sys .argv = sys .argv [:1 ] # Reset args for mcp.run
603617 mcp .run (transport = "stdio" )
0 commit comments