Snowflake는 Model Context Protocol 개정판 :code:`2025-06-18`을 지원합니다.
MCP(Model Context Protocol)는 AI 에이전트가 비즈니스 애플리케이션 및 외부 데이터 시스템(예: 데이터베이스 및 콘텐츠 리포지토리)과 안전하게 상호 작용할 수 있도록 하는 `오픈 소스 표준<https://modelcontextprotocol.io/docs/getting-started/intro>`_입니다. MCP를 사용하면 엔터프라이즈 비즈니스가 통합 문제를 줄이고 모델에서 신속하게 결과를 제공할 수 있습니다. 출시 이후, MCP는 도구를 호출하고 데이터를 검색하기 위한 일관되고 안전한 메커니즘을 제공하여 에이전트 애플리케이션의 기초가 되었습니다.
Snowflake 관리형 MCP 서버는 AI 에이전트가 별도의 인프라를 배포할 필요 없이 Snowflake 계정에서 데이터를 안전하게 검색할 수 있도록 합니다. 표준 기반 인터페이스에서 사용자 지정 도구 및 SQL 실행과 함께 Cortex Analyst, Cortex Search 및 Cortex Agent를 도구로 제공하도록 MCP 서버를 구성할 수 있습니다. MCP 클라이언트는 이러한 도구를 검색 및 호출하고 애플리케이션에 필요한 데이터를 검색합니다. Snowflake의 관리형 MCP 서버를 사용하면 액세스 및 개인정보 보호 제어를 유지하면서 확장 가능한 엔터프라이즈급 애플리케이션을 구축할 수 있습니다. Snowflake의 MCP 서버는 다음을 제공합니다.
표준화된 통합: 빠르게 진화하는 표준에 따라 도구 검색 및 호출을 위한 통합 인터페이스
포괄적인 인증: MCP 통합에 대한 OAuth 기반 인증을 활성화하기 위한 Snowflake의 기본 제공 OAuth 서비스
강력한 거버넌스: 도구 검색 및 호출을 관리하기 위한 MCP 서버 및 도구에 대한 역할 기반 액세스 제어(RBAC)
MCP 서버 연결의 호스트 이름을 구성할 때 밑줄(_) 대신 하이픈(-)을 사용합니다. 밑줄이 포함된 호스트 이름을 사용하면 MCP 서버에서 연결 문제가 발생합니다.
도구 및 설명을 확인하지 않고 여러 MCP 서버를 사용하면 도구 악성 공격 또는 도구 섀도잉과 같은 취약점이 발생할 수 있습니다. 서드 파티 MCP 서버를 사용하기 전에 확인하는 것이 좋습니다. 여기에는 다른 Snowflake 사용자 또는 계정의 MCP 서버가 포함됩니다. 서드 파티 MCP 서버에서 제공하는 모든 도구를 확인합니다.
인증 방법으로 OAuth를 사용하는 것이 좋습니다. 하드코딩된 토큰을 사용하면 토큰이 유출될 수 있습니다.
PAT(프로그래밍 방식 액세스 토큰)을 사용할 경우 MCP 작업이 허용된 최소 권한 역할을 사용하도록 설정합니다. 이렇게 하면 높은 권한 역할의 액세스 권한으로 인해 시크릿이 유출되는 것을 방지하는 데 도움이 됩니다.
최소 권한 원칙에 따라 MCP 서버 및 도구에 대한 적절한 권한을 구성합니다. MCP 서버에 대한 액세스 권한이 있어도 도구에 대한 액세스 권한이 부여되지는 않습니다. 각 도구에 대한 권한을 부여해야 합니다.
tools:-name:"product-search"type:"CORTEX_SEARCH_SERVICE_QUERY"identifier:"database1.schema1.Cortex_Search_Service1"description:"cortex search service for all products"title:"Product Search"
SQL 실행 도구의 경우 클라이언트는 Snowflake에서 SQL 쿼리를 실행할 수 있습니다. 다음 코드를 사용하여 도구 구성을 지정합니다.
사용자 지정 도구의 경우 도구 구성에 UDF(사용자 정의 함수) 또는 저장 프로시저 서명을 제공해야 합니다. 사용자 지정 도구를 사용하면 MCP서버를 통해 UDFs 및 저장 프로시저를 도구로 호출할 수 있습니다.
도구 구성에서 다음을 지정해야 합니다.
type: UDF의 경우 function, 저장 프로시저의 경우 procedure
Warehouse. 웨어하우스를 지정하지 않으면 기본 웨어하우스가 사용됩니다.
Inputschema: 함수 서명에 해당
다음 예에서 UDFs 및 저장 프로시저를 사용하여 사용자 지정 도구를 만들고 구성합니다.
다음 예는 사용자 지정 도구로 사용할 수 있는 UDFs를 만드는 방법을 보여줍니다.
-- create a simple udfCREATEORREPLACEFUNCTIONMULTIPLY_BY_TEN(xFLOAT)RETURNSFLOATLANGUAGEPYTHONRUNTIME_VERSION='3.8'HANDLER='multiply_by_ten'AS$$defmultiply_by_ten(x:float)->float:returnx*10$$;SHOWFUNCTIONSLIKE'MULTIPLY_BY_TEN';-- test return json/variantCREATEORREPLACEFUNCTIONCALCULATE_PRODUCT_AND_SUM(xFLOAT,yFLOAT)RETURNSVARIANTLANGUAGEPYTHONRUNTIME_VERSION='3.8'HANDLER='calculate_values'AS$$importjsondefcalculate_values(x:float,y:float)->dict:""" Calculates the product and sum of two numbers and returns them in a dictionary. The dictionary is converted to a VARIANT (JSON) in the SQL return. """product=x*ysum_val=x+yreturn{"product":product,"sum":sum_val}$$;-- test return list/arrayCREATEORREPLACEFUNCTIONGET_NUMBERS_IN_RANGE(xFLOAT,yFLOAT)RETURNSARRAY-- Use ARRAY to explicitly state a list is being returnedLANGUAGEPYTHONRUNTIME_VERSION='3.8'HANDLER='get_numbers'AS$$defget_numbers(x:float,y:float)->list:""" Returns a list of integers between x (exclusive) and y (inclusive). Assumes x < y. """# Ensure x and y are treated as integers for range generationstart=int(x)+1end=int(y)+1# range() is exclusive on the stop value# Use a list comprehension to generate the numbers# The Python list will be converted to a Snowflake ARRAY.returnlist(range(start,end))$$;
다음 예에서는 사용자 지정 도구로 사용할 수 있는 저장 프로시저를 만드는 방법을 보여줍니다.
-- create a simple stored procedureCREATEORREPLACEPROCEDUREMULTIPLY_BY_TEN_SP(xFLOAT)RETURNSFLOATLANGUAGEPYTHONRUNTIME_VERSION='3.8'PACKAGES=('snowflake-snowpark-python')HANDLER='multiply_by_ten'AS$$# The handler logic is identical to the UDF for a scalar returndefmultiply_by_ten(x:float)->float:returnx*10$$;-- test return json/variantCREATEORREPLACEPROCEDURECALCULATE_VALUES_SP(xFLOAT,yFLOAT)RETURNSVARIANTLANGUAGEPYTHONRUNTIME_VERSION='3.8'PACKAGES=('snowflake-snowpark-python')HANDLER='calculate_values'AS$$# The handler logic is identical to the UDF for a VARIANT returndefcalculate_values(x:float,y:float)->dict:""" Calculates the product and sum of two numbers and returns them in a dictionary. The dictionary is converted to a VARIANT (JSON) in the SQL return. """product=x*ysum_val=x+yreturn{"product":product,"sum":sum_val}$$;-- test return list/arrayCREATEORREPLACEPROCEDUREGET_NUMBERS_SP(xFLOAT,yFLOAT)RETURNSARRAYLANGUAGEPYTHONRUNTIME_VERSION='3.8'PACKAGES=('snowflake-snowpark-python')HANDLER='get_numbers'AS$$defget_numbers(x:float,y:float)->list:""" Returns a list of integers between x (exclusive) and y (inclusive). The Python list will be converted to a Snowflake ARRAY. """# Ensure x and y are treated as integers for range generationstart=int(x)+1end=int(y)+1# range() is exclusive on the stop value# Use a list comprehension to generate the numbersreturnlist(range(start,end))$$;
다음 예에서는 UDFs 및 저장 프로시저에 대한 사용자 지정 도구를 구성하는 방법을 보여줍니다.