hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Integrations
Offers containerized deployment of the MCP server with a REST API exposed on port 9097, enabling seamless integration with Docker environments.
Planned support for Hive connector to query and analyze data stored in Hive metastore through Trino.
Supports data visualization through Mermaid charts, enabling the generation of graph visualizations and pie charts from query results.
트리노 MCP 서버
Trino의 모델 컨텍스트 프로토콜 서버로, AI 모델에 Trino의 분산 SQL 쿼리 엔진에 대한 구조화된 액세스를 제공합니다.
⚠️ 베타 릴리스(v0.1.2) ⚠️
이 프로젝트는 핵심 기능이 작동하고 테스트되어 안정화되고 있습니다. 자유롭게 포크하고 기여해 주세요!
특징
- ✅ Docker 컨테이너 API 초기화 문제가 해결되었습니다! (안정적인 서버 초기화)
- ✅ MCP 프로토콜을 통해 Trino 리소스를 노출합니다.
- ✅ AI 도구가 Trino에서 데이터를 쿼리하고 분석할 수 있도록 합니다.
- ✅ 전송 옵션 제공(STDIO 전송은 안정적으로 작동하고 SSE 전송에는 문제가 있음)
- ✅ 적절한 Trino 쿼리 실행을 위한 고정 카탈로그 처리
- ✅ Docker 컨테이너 API와 독립형 Python API 서버 옵션 모두
빠른 시작
지엑스피1
컨테이너화되지 않은 버전이 필요하신가요? 독립형 API를 실행하세요.
LLM 통합
LLM에게 Trino 인스턴스에 대한 직접 쿼리 권한을 부여하고 싶으신가요? 저희가 바로 그런 분들을 위한 간단한 도구를 준비했습니다!
명령줄 LLM 인터페이스
LLM이 Trino에 쿼리를 보내는 가장 간단한 방법은 명령줄 도구를 사용하는 것입니다.
LLM을 위한 REST API
LLM 애플리케이션과 통합하기 위한 두 가지 API 옵션을 제공합니다.
1. Docker 컨테이너 API(포트 9097)
Docker 컨테이너는 포트 9097에서 REST API를 노출합니다.
2. 독립형 Python API(포트 8008)
더욱 유연한 배포를 위해 독립 실행형 API 서버를 실행하세요.
이렇게 하면 다음 위치에 종단점이 생성됩니다.
GET http://localhost:8008/
- API 사용 정보POST http://localhost:8008/query
- SQL 쿼리 실행
그런 다음 LLM이 이 엔드포인트에 HTTP 요청을 하도록 할 수 있습니다.
이 접근 방식을 사용하면 LLM은 SQL 생성에 집중할 수 있고, 당사 도구는 모든 MCP 프로토콜의 복잡성을 처리합니다!
데모 및 검증 스크립트 🚀
우리는 AI 모델이 MCP 프로토콜을 사용하여 Trino에 대한 복잡한 쿼리를 실행하는 방법을 보여주는 멋진 데모 스크립트를 만들었습니다.
1. 헛소리 데이터 생성 및 로딩
tools/create_bullshit_data.py
스크립트는 터무니없는 직함, 부풀려진 급여, "헛소리 요소" 평가(1~10)를 가진 직원 10,000명의 데이터 세트를 생성합니다.
2. MCP를 통한 복잡한 쿼리 실행
test_bullshit_query.py
스크립트는 종단 간 MCP 상호 작용을 보여줍니다.
- STDIO 전송을 사용하여 MCP 서버에 연결합니다.
- MCP 사양에 따라 프로토콜을 초기화합니다.
- WHERE, GROUP BY, HAVING, ORDER BY를 사용하여 복잡한 SQL 쿼리를 실행합니다.
- 결과를 처리하고 포맷합니다.
높은 급여를 제공하는 최고의 BS 직업을 보여주는 예시 출력:
3. API 테스트
test_llm_api.py
스크립트는 API 기능을 검증합니다.
이는 다음에 대한 포괄적인 검사를 수행합니다.
- API 엔드포인트 검색
- 문서 가용성
- 유효한 쿼리 실행
- 잘못된 쿼리에 대한 오류 처리
용법
서버는 다음 위치에서 사용할 수 있습니다.
- 트리노: http://localhost:9095
- MCP 서버: http://localhost:9096
- API 서버: http://localhost:9097
클라이언트 연결
✅ 중요 : 클라이언트 스크립트는 로컬 머신(Docker 외부)에서 실행되며 Docker 컨테이너에 연결됩니다. 스크립트는 docker exec 명령을 사용하여 자동으로 이를 처리합니다. MCP를 사용하기 위해 컨테이너 내부에 있을 필요는 없습니다!
로컬 머신에서 테스트 실행:
운송 옵션
이 서버는 두 가지 전송 방법을 지원하지만 현재는 STDIO만 안정적입니다.
STDIO Transport(권장 및 작동 중)
STDIO 전송은 안정적으로 작동하며 현재 테스트 및 개발을 위해 권장되는 유일한 방법입니다.
SSE 운송(권장하지 않음 - 심각한 문제가 있음)
SSE는 MCP의 기본 전송 방식이지만, 현재 MCP 1.3.0 버전에서는 심각한 문제가 발생하여 클라이언트 연결 해제 시 서버 충돌을 유발합니다. 다음 문제가 해결될 때까지 사용하지 않는 것이 좋습니다 .
알려진 문제 및 수정 사항
수정됨: Docker 컨테이너 API 초기화
✅ 수정됨 : Docker 컨테이너의 API가 503 서비스를 사용할 수 없음 응답을 반환하는 문제를 해결했습니다. 문제는 app_lifespan
함수가 app_context_global
및 Trino 클라이언트 연결을 제대로 초기화하지 못하는 것이었습니다. 이 수정을 통해 다음 사항이 보장됩니다.
- Trino 클라이언트는 시작 중에 명시적으로 연결됩니다.
- AppContext 전역 변수가 올바르게 초기화되었습니다.
- 이제 건강 검진이 정상적으로 작동합니다.
503 오류가 발생하면 컨테이너가 최신 코드로 다시 빌드되었는지 확인하세요.
MCP 1.3.0 SSE 전송 충돌
MCP 1.3.0의 SSE 전송에 심각한 문제가 있어 클라이언트 연결이 끊어지면 서버가 충돌합니다. 최신 MCP 버전이 통합될 때까지 STDIO 전송만 사용하세요. 오류는 다음과 같습니다.
트리노 카탈로그 처리
Trino 클라이언트에서 카탈로그 처리 관련 문제를 해결했습니다. 원래 구현에서는 USE catalog
문을 사용하려고 했는데, 이 명령문은 안정적으로 작동하지 않았습니다. 이번 수정에서는 연결 매개변수에 카탈로그를 직접 설정합니다.
프로젝트 구조
이 프로젝트는 다음과 같이 구성됩니다.
src/
- Trino MCP 서버의 주요 소스 코드examples/
- 서버 사용 방법을 보여주는 간단한 예제scripts/
- 유용한 진단 및 테스트 스크립트tools/
- 데이터 생성 및 설정을 위한 유틸리티 스크립트tests/
- 자동화된 테스트
주요 파일:
llm_trino_api.py
- LLM 통합을 위한 독립형 API 서버test_llm_api.py
- API 서버용 테스트 스크립트test_mcp_stdio.py
- STDIO 전송을 사용하는 기본 테스트 스크립트(권장)test_bullshit_query.py
- 헛소리 데이터를 사용한 복잡한 쿼리 예제load_bullshit_data.py
- 생성된 데이터를 Trino에 로드하는 스크립트tools/create_bullshit_data.py
- 재밌는 테스트 데이터를 생성하는 스크립트run_tests.sh
- 자동화된 테스트를 실행하는 스크립트examples/simple_mcp_query.py
- MCP를 사용하여 데이터를 쿼리하는 간단한 예
개발
중요 : 모든 스크립트는 로컬 머신에서 실행할 수 있습니다. 스크립트는 docker exec 명령을 통해 Docker 컨테이너와 자동으로 통신합니다!
테스트
Trino 쿼리가 올바르게 작동하는지 테스트하려면 STDIO 전송 테스트 스크립트를 사용하세요.
헛소리 데이터를 사용하여 더 복잡한 테스트를 수행하려면:
LLM API 엔드포인트를 테스트하려면 다음을 수행하세요.
LLM이 이것을 어떻게 활용할 수 있는가
LLM은 Trino MCP 서버를 사용하여 다음을 수행할 수 있습니다.
- 데이터베이스 스키마 정보 가져오기 :Copy
- 복잡한 분석 쿼리 실행 :Copy
- 데이터 분석 수행 및 결과 제시 :Copy
실제 LLM 분석 예: 회사별 쓸모없는 직업
"엉터리 직업에 종사하는 직원이 가장 많은 회사를 찾아 인어 차트를 만들어라"라는 과제를 받았을 때 LLM이 무엇을 만들어낼 수 있는지에 대한 실제 사례는 다음과 같습니다.
1단계: LLM이 쿼리를 생성하고 실행합니다.
2단계: LLM은 결과를 수집하고 분석합니다.
3단계: LLM이 인어 차트 시각화를 생성합니다.
대체 막대 차트:
4단계: LLM은 핵심 통찰력을 제공합니다
LLM은 데이터를 분석하고 통찰력을 제공할 수 있습니다.
- "알려지지 않은 회사"는 헛소리 역할에 가장 많은 직원을 보유하고 있지만(2), 다른 모든 회사는 단 한 명만 보유하고 있습니다.
- 대부분의 회사는 완벽한 10.0의 헛소리 요인 점수를 달성했습니다.
- 기술 중심 기업(BitEdge, CyberWare 등)은 특히 무의미한 역할을 만드는 것으로 보입니다.
- 헛소리 역할은 임원이나 전문 직위 수준에 집중되어 있는 것으로 나타났습니다.
이 예에서는 LLM이 다음을 수행할 수 있는 방법을 보여줍니다.
- 자연어 질문에 따라 적절한 SQL 쿼리를 생성합니다.
- Trino의 결과를 처리하고 해석합니다.
- 데이터의 시각적 표현을 만듭니다
- 의미 있는 통찰력과 분석 제공
API에 접근하기
Trino MCP 서버에는 이제 데이터 액세스를 위한 두 가지 API 옵션이 포함되었습니다.
1. Docker 컨테이너 API(포트 9097)
2. 독립형 Python API(포트 8008)
두 API 모두 다음과 같은 엔드포인트를 제공합니다.
GET /api
- API 문서 및 사용 예POST /api/query
- Trino에 대한 SQL 쿼리 실행
이러한 API를 사용하면 래퍼 스크립트가 필요 없으며 LLM이 REST 호출을 사용하여 Trino에 직접 쿼리를 보낼 수 있으므로 Claude, GPT 및 기타 AI 시스템과의 통합이 훨씬 간편해집니다.
문제 해결
API가 503 서비스를 사용할 수 없음을 반환합니다.
Docker 컨테이너 API가 503 오류를 반환하는 경우:
- 최신 코드로 컨테이너를 다시 빌드했는지 확인하세요.Copy
- 컨테이너 로그에서 오류를 확인하세요.Copy
- Trino가 제대로 실행되는지 확인하세요.Copy
독립 실행형 API와의 포트 충돌
독립형 API는 충돌을 방지하기 위해 기본적으로 8008 포트를 사용합니다. "주소가 이미 사용 중입니다" 오류가 표시되는 경우:
llm_trino_api.py
편집하고 마지막 줄의 포트 번호를 변경합니다.Copy- 명령줄을 통해 사용자 정의 포트로 실행:Copy
미래의 작업
이 기능은 현재 베타 버전이며 다음과 같은 개선 사항이 계획되어 있습니다.
- [ ] SSE 전송 문제를 해결하기 위해 사용 가능한 최신 MCP 버전과 통합합니다.
- [ ] Hive, JDBC 및 기타 커넥터에 대한 지원 추가/검증
- [ ] 다양한 유형과 복잡성에 걸쳐 보다 포괄적인 쿼리 검증을 추가합니다.
- [ ] 더 많은 데이터 유형과 고급 Trino 기능에 대한 지원을 구현합니다.
- [ ] 오류 처리 및 복구 메커니즘 개선
- [ ] 사용자 인증 및 권한 제어 추가
- [ ] 보다 포괄적인 예제와 문서를 작성합니다.
- [ ] 관리자 모니터링 및 관리 인터페이스 개발
- [ ] 성능 측정 항목 및 쿼리 최적화 힌트 추가
- [ ] 장기 실행 쿼리 및 결과 스트리밍에 대한 지원 구현
Stink Labs에서 개발, 2025
You must be authenticated.
AI 모델에 Trino의 분산 SQL 쿼리 엔진에 대한 구조화된 액세스를 제공하여 LLM이 Trino 데이터베이스에 저장된 데이터를 직접 쿼리하고 분석할 수 있도록 합니다.
- Features
- Quick Start
- LLM Integration
- Demo and Validation Scripts 🚀
- Usage
- Client Connection
- Transport Options
- Known Issues and Fixes
- Project Structure
- Development
- Testing
- How LLMs Can Use This
- Accessing the API
- Troubleshooting
- Future Work