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

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

리소스 흐름 이해하기

사용자가 애플리케이션에서 "What's in the @..."와 같은 내용을 입력하면, 시스템은 자동완성을 위해 사용 가능한 리소스 목록을 가져와야 합니다. MCP 클라이언트는 서버에 ReadResourceRequest를 전송하고, 서버는 참조할 수 있는 문서 이름 목록으로 응답합니다.

리소스 읽기 구현하기

핵심 기능은 MCP 클라이언트의 read_resource 메서드에서 이루어집니다. 이 메서드는 서버에서 가져올 리소스를 식별하는 URI 매개변수를 받습니다.

먼저, JSON 파싱과 URL 검증을 처리하기 위해 필요한 import를 추가하세요:

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 리소스가 올바르게 파싱되도록 하는 동시에, 일반 텍스트 리소스는 그대로 반환되도록 보장합니다.

구현 테스트하기

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

  • 자동완성 목록에 사용 가능한 리소스를 표시합니다
  • 화살표 키와 스페이스를 사용하여 리소스를 선택할 수 있습니다
  • Claude에 전송되는 프롬프트에 리소스 콘텐츠를 직접 포함합니다

이는 Claude가 추가적인 도구 호출 없이 즉시 문서 콘텐츠를 받게 되어, 상호작용을 훨씬 더 효율적으로 만든다는 것을 의미합니다.

주요 이점

리소스는 정적 정보에 접근하는 데 있어 도구보다 여러 가지 장점을 제공합니다:

  • 콘텐츠가 프롬프트에 직접 포함되어 지연 시간을 줄입니다
  • 대화 중 추가적인 API 호출이 필요하지 않습니다
  • 자동완성 기능으로 더 나은 사용자 경험을 제공합니다
  • 정적 데이터와 동적 작업 간의 더 명확한 분리를 제공합니다

리소스는 문서, 보고서 또는 참고 자료와 같이 AI 모델이 쉽게 접근할 수 있도록 만들고자 하는 비교적 정적인 정보에 가장 적합합니다.