MCP에서 리소스는 서버가 노출하는 주소 지정 가능한 데이터 객체예요. 파일, 데이터베이스 레코드, 생성된 문서, 동적 API 출력 등이 있어요.
리소스는 클라이언트 제어로, 클라이언트가 요청할 리소스와 콘텐츠 해석 방법을 결정할 수 있어요.
관련된 두 가지 주요 메서드가 있어요:
- resources/list: 서버가 노출하는 모든 이용 가능한 리소스 정의 목록을 요청해요. TsgcWSAPIServer_MCP 컴포넌트가 내부적으로 처리해요.
- resources/read: 특정 리소스의 콘텐츠와 선택적 메타데이터를 검색해요. 서버가 새 요청을 받으면 OnMCPRequestResource 이벤트가 호출돼요. A resource typically includes:
- uri: 리소스 식별자예요.
- mimeType: 콘텐츠 유형이에요 (text/plain, application/json, image/png 등).
- 데이터 또는 콘텐츠: 실제 페이로드예요 (텍스트 또는 바이너리).
또한 서버가 선언된 기능에서 resources.listChanged = true로 설정하면 리소스 카탈로그가 업데이트될 때 notifications/resources/list_changed 같은 알림을 보낼 수 있어요.
리소스 목록
서버는 TsgcAI_MCP_ResourcesList에 리소스의 인메모리 카탈로그를 유지해요. 리소스는 uri로 고유하게 보장되며, 설명을 노출하고 사양의 resources.list 메서드에 대한 응답에 포함되는 JSON 스키마 같은 입력 uri를 제공해요. 클라이언트가 resources.list를 호출하면 TsgcWSAPIServer_MCP가 요청을 로드하고, 현재 카탈로그를 직렬화하여 200 HTTP 상태 코드와 함께 반환해요.
파일 리소스를 게시하는 예제 코드예요:
procedure TMainForm.FormCreate(Sender: TObject);
begin
MCPServer.Resources.Clear;
MCPServer.Resources.AddResource(
'file:///project/src/main.rs', // URI
'main.rs', // Name
'Rust Software Application Main File', // Title
'Primary application entry point', // Description
'text/x-rust');
end;
리소스 요청
클라이언트가 resource.read JSON-RPC 요청을 보내면 TsgcWSAPIServer_MCP가 OnMCPRequestResource 이벤트를 발생시키기 전에 강력하게 형식화된 요청 객체(uri 리소스, 이름, 제공된 인수 포함)를 채워요. 핸들러가 응답 페이로드를 채우면 성공 HTTP 상태 코드와 함께 클라이언트로 직렬화되어 전송돼요.
일반적인 핸들러는 다음과 같아요:
procedure OnMCPRequestResource(Sender: TObject;
const aSession: TsgcAI_MCP_Session; const aRequest: TsgcAI_MCP_Request_ResourcesRead;
const aResponse: TsgcAI_MCP_Response_ResourcesRead);
begin
if aRequest.Params.Uri = 'file:///project/src/main.rs' then
aResponse.Result.Contents.AddContentText('file:///project/src/main.rs',
'main.rs', 'Rust Software Application Main File', 'text/x-rust',
'fn main() {\n println!(\"Hello world!\");\n}');
end;
더 알아보기
심층 문서와 컴포넌트 참조는 다음을 방문하세요:
sgcWebSockets MCP Prompts Resources Guide
Windows용 Delphi MCP 서버 데모를 아래에서 찾아볼 수 있어요:
