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

MCP의 리소스를 사용하면 서버가 정보를 접근하기 위해 도구 호출을 요구하는 대신, 프롬프트에 직접 포함될 수 있는 데이터를 노출할 수 있습니다. 이는 Claude와 같은 AI 모델에 컨텍스트를 제공하는 더 효율적인 방법을 만들어냅니다.

리소스 흐름 이해하기

사용자가 리소스 콘텐츠에 접근하려고 할 때, 흐름은 다음과 같이 작동합니다:

  • 사용자가 리소스에 대한 정보를 요청합니다(예: "@report.pdf")
  • 코드는 자동완성을 위한 문서 이름 목록이 필요합니다
  • MCP 클라이언트가 MCP 서버로 ReadResourceRequest를 전송합니다
  • 서버가 리소스 데이터를 포함하는 ReadResourceResult로 응답합니다
  • 이제 코드는 이 데이터를 프롬프트에 직접 넣을 수 있습니다

리소스 읽기 구현하기

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

python
import json
from pydantic import AnyUrl

핵심 함수는 MCP 세션에 요청을 보내고 응답을 처리합니다:

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

다양한 리소스 유형 처리하기

리소스는 다양한 유형의 콘텐츠를 반환할 수 있으므로, MIME 유형을 확인하고 그에 맞게 파싱해야 합니다:

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

이 접근 방식은 두 가지 주요 시나리오를 처리합니다:

  • 파싱이 필요한 JSON 리소스
  • 그대로 반환할 수 있는 일반 텍스트 리소스

리소스 접근 테스트하기

애플리케이션에서 테스트함으로써 리소스 구현이 작동하는지 확인할 수 있습니다. "@"를 입력한 다음 리소스 이름을 입력하면 사용 가능한 리소스의 자동완성 목록이 표시되어야 합니다. 하나를 선택하면 해당 콘텐츠가 프롬프트에 직접 포함됩니다.

이 접근 방식의 핵심 장점은 효율성입니다 - Claude는 정보에 접근하기 위해 추가 도구 호출을 할 필요 없이 즉시 문서 콘텐츠를 받습니다.

리소스 대 도구 사용

리소스는 다음과 같은 경우에 특히 유용합니다:

  • 자주 참조되는 정적 또는 반정적 콘텐츠가 있는 경우
  • API 호출 수를 줄이고자 하는 경우
  • 콘텐츠가 프롬프트 컨텍스트에서 즉시 사용 가능해야 하는 경우

이는 동적 작업에 더 적합하거나, 대화 컨텍스트에 따라 AI가 특정 정보에 접근할지 여부를 결정해야 할 때 더 적합한 도구와는 다릅니다.