Sign in to save your progressYou can keep reading without an account, but completed lessons won't be saved.
Sign in

MCP의 리소스는 서버가 도구 호출 없이도 프롬프트에 직접 포함될 수 있는 정보를 노출할 수 있게 해줍니다. 이는 AI 모델에 컨텍스트를 제공하는 더 효율적인 방법을 만들어냅니다.

리소스 접근의 시퀀스 다이어그램: 사용자가 CLI에서 "What's in the @..."를 입력하고, 우리 코드가 MCP 서버로 ReadResourceRequest를 전송하며, 서버는 리소스 콘텐츠를 포함한 ReadResourceResult를 반환합니다

위 다이어그램은 리소스가 작동하는 방식을 보여줍니다: 사용자가 "What's in the @..."와 같은 것을 입력하면, 우리 코드는 이를 리소스 요청으로 인식하고, MCP 서버로 ReadResourceRequest를 전송하며, 실제 콘텐츠가 담긴 ReadResourceResult를 받아옵니다.

리소스 읽기 구현하기

MCP 클라이언트에서 리소스 접근을 활성화하려면 read_resource 함수를 구현해야 합니다. 먼저 필요한 임포트를 추가하세요:

python
import json
from pydantic import AnyUrl

핵심 함수는 MCP 서버에 요청을 보내고 MIME 타입에 따라 응답을 처리합니다:

python
async def read_resource(self, uri: str) -> Any:
    result = await self.session().read_resource(AnyUrl(uri))
    resource = result.contents[0]

    if isinstance(resource, types.TextResourceContents):
        if resource.mimeType == "application/json":
            return json.loads(resource.text)

    return resource.text

응답 구조 이해하기

리소스를 요청하면 서버는 contents 목록이 포함된 결과를 반환합니다. 일반적으로 한 번에 하나의 리소스만 필요하므로 첫 번째 요소에 접근합니다. 응답에는 다음이 포함됩니다:

  • 실제 콘텐츠(텍스트 또는 데이터)
  • 콘텐츠를 파싱하는 방법을 알려주는 MIME 타입
  • 리소스에 대한 기타 메타데이터

콘텐츠 타입 처리

함수는 콘텐츠를 처리하는 방법을 결정하기 위해 MIME 타입을 확인합니다:

  • application/json인 경우, 텍스트를 JSON으로 파싱하고 파싱된 객체를 반환합니다
  • 그렇지 않으면 원본 텍스트 콘텐츠를 반환합니다

이 접근 방식은 구조화된 데이터(예: JSON)와 일반 텍스트 문서를 모두 원활하게 처리합니다.

리소스 접근 테스트하기

구현이 완료되면 CLI 애플리케이션을 통해 리소스 기능을 테스트할 수 있습니다. "@"를 입력한 다음 리소스 이름을 입력하면 시스템은 다음을 수행합니다:

  1. 자동완성 목록에 사용 가능한 리소스를 표시합니다
  2. 화살표 키와 스페이스를 사용하여 리소스를 선택할 수 있게 합니다
  3. 리소스 콘텐츠를 프롬프트에 직접 포함시킵니다
  4. 추가 도구 호출 없이 모든 것을 AI 모델로 전송합니다

이는 AI 모델이 문서 콘텐츠에 접근하기 위해 별도의 도구 호출을 하는 것에 비해 훨씬 더 원활한 사용자 경험을 만들어냅니다. 리소스 콘텐츠는 초기 컨텍스트의 일부가 되어, 데이터에 대한 즉각적인 응답을 가능하게 합니다.