sgcWebSockets 2025.10.0 버전은 Model Context Protocol 2025-06-18 사양과 동기화된 상용급 MCP 클라이언트 구현으로 AI 통합 툴킷을 확장해요. 큐레이션된 컨텍스트 제공, 도구 호출 조율, 리소스 인식 어시스턴트 서비스를 단일 컴포넌트로 모두 처리할 수 있어요.
Model Context Protocol(MCP)은 어시스턴트가 기능을 협상하고 구조화된 컨텍스트를 교환하는 방식을 표준화해요. MCP 클라이언트 지원을 추가함으로써 sgcWebSockets는 다음을 가능하게 해요:
- 일관된 초기화 및 기능 발견 워크플로를 보장하는 모든 MCP 호환 어시스턴트와의 엔터프라이즈급 상호 운용성이에요.
- 드롭인 Delphi 컴포넌트 덕분에 기존 VCL, FMX 또는 WebBroker 프로젝트에서 AI 보강 경험을 위한 빠른 출시 시간이에요.
- 내장 HTTP 로깅과 TLS 1.3 전송 강화를 통한 모든 JSON-RPC 교환의 운영 가시성이에요.
TsgcAI_MCP_Client 주요 기능
턴키 MCP 핸드셰이크
단일 Initialize 호출로 프로토콜 협상을 실행해요. 클라이언트는 서버가 반환한 세션 식별자를 준수하면서 제품 이름, 제목, 의미론적 버전을 알려요.
풍부한 기능 영역
Ping, ToolsList, ToolsCall, PromptsList, PromptsGet, ResourcesList, ResourcesRead를 포함한 기성 메서드 호출을 실행해요. 모든 응답 유형이 강력하게 형식화되어 있어 하위 처리가 쉬워요.
이벤트 기반 맞춤화
초기화, 핑, 도구 발견, 프롬프트 검색, 리소스 스트리밍 등 세분화된 이벤트에 연결하여 비즈니스 레이어에 도달하기 전에 모든 교환을 추적하고 개인화할 수 있어요.
컴포넌트는 JSON-RPC 요청 식별자를 자동으로 증가시키고, 호출 간에 MCP 세션 식별자를 유지하며, 원격 오류가 반환될 때 형식화된 예외를 발생시켜요. HTTP 연결은 트래픽을 기록하고 OpenSSL 3.0 API로 TLS 1.3을 협상하는 특수 클라이언트 내에 캡슐화돼요.
설정 개요
- 클라이언트 프로파일:
MCPOptions.ClientInfo를 설정하여 이름, 제목, 버전 메타데이터로 어시스턴트 통합 솔루션을 표시해요. - 서버 엔드포인트: 연결할 MCP 호환 HTTPS 엔드포인트로
MCPOptions.ServerOptions.URL을 설정해요. - HTTP 스택:
TsgcAI_MCP_HTTP_Client를 기반으로 한 전송 레이어는 JSON 콘텐츠 유형, 자동 세션 헤더, 안전한 TLS 기본값으로 조정돼 있어요. - 관찰성 훅:
OnMCPToolsCall또는OnMCPResourcesRead같은 이벤트 핸들러를 구독하여 모든 프로토콜 전환을 감사하고 강화해요.
Delphi 통합 예제
아래 코드는 MCP 클라이언트를 데이터 모듈에 추가하고, 시작 시 초기화하며, 원격 어시스턴트가 요청하는 즉시 도구 호출 응답을 제공하는 방법을 보여줘요.
uses
sgcAI_MCP_Client, sgcJSON;
procedure TdmMCP.StartMCP;
begin
sgcMCP := TsgcAI_MCP_Client.Create(Self);
sgcMCP.MCPOptions.ClientInfo.Name := 'sgc-demo-pos';
sgcMCP.MCPOptions.ClientInfo.Title := 'Smart POS Assistant';
sgcMCP.MCPOptions.ClientInfo.Version := '2025.10.0';
sgcMCP.MCPOptions.ServerOptions.URL := 'https://mcp.partnercloud.com';
sgcMCP.OnMCPInitialize := DoMCPInitialize;
sgcMCP.OnMCPToolsCall := DoMCPToolsCall;
sgcMCP.Initialize;
end;
procedure TdmMCP.DoMCPInitialize(Sender: TObject;
const Request: TsgcAI_MCP_Request_Initialize;
const Response: TsgcAI_MCP_Response_Initialize;
var Accept: Boolean);
begin
Accept := Response.ServerInfo.SupportsTools('inventory.lookup');
end;
procedure TdmMCP.DoMCPToolsCall(Sender: TObject;
const Request: TsgcAI_MCP_Request_ToolsCall;
const Response: TsgcAI_MCP_Response_ToolsCall);
var
ResultPayload: IsgcJSON;
begin
if Request.Params.Name = 'inventory.lookup' then
begin
ResultPayload := TsgcJSON.CreateObject;
ResultPayload['sku'] := Request.Params.Arguments['sku'];
ResultPayload['availability'] := 'in-stock';
Response.Result := ResultPayload;
end;
end;
