MCP의 리소스는 서버가 정보에 접근하기 위해 도구 호출을 요구하는 대신, 프롬프트에 직접 포함될 수 있는 데이터를 노출할 수 있게 해줍니다. 이는 Claude와 같은 AI 모델에 컨텍스트를 제공하는 더 효율적인 방법을 만들어냅니다.
리소스 요청 이해하기
MCP 서버에 리소스를 정의했다면, 클라이언트는 이를 요청하고 사용할 방법이 필요합니다. 클라이언트는 애플리케이션과 MCP 서버 사이의 다리 역할을 하며, 통신과 데이터 파싱을 자동으로 처리합니다.

흐름은 간단합니다: 사용자가 문서를 참조하고자 할 때(예: "@report.pdf"를 입력하는 경우), 애플리케이션은 MCP 클라이언트를 사용하여 서버에서 해당 리소스를 가져오고 그 내용을 Claude에게 전송되는 프롬프트에 직접 포함시킵니다.
리소스 읽기 구현하기
핵심 기능은 MCP 클라이언트에 read_resource 함수가 필요합니다. 이 함수는 가져올 리소스를 식별하는 URI 매개변수를 받습니다:
MCP 서버의 응답에는 contents 목록이 포함됩니다. 일반적으로 첫 번째 요소만 필요하며, 여기에는 실제 리소스 데이터와 MIME 타입과 같은 메타데이터가 함께 포함되어 있습니다.
다양한 콘텐츠 타입 처리하기
리소스는 다양한 유형의 콘텐츠를 반환할 수 있으므로, 클라이언트는 이를 적절하게 파싱해야 합니다. MIME 타입은 데이터를 어떻게 처리해야 하는지 알려줍니다:
이 접근 방식은 JSON 리소스가 Python 객체로 올바르게 파싱되도록 보장하며, 일반 텍스트 리소스는 문자열로 반환됩니다. MIME 타입은 올바른 파싱 전략을 결정하기 위한 힌트 역할을 합니다.
필수 임포트
이를 제대로 작동시키기 위해서는 MCP 클라이언트에 다음 임포트가 필요합니다:
json 모듈은 JSON 응답 파싱을 처리하며, AnyUrl은 URI 매개변수에 대한 적절한 타입 처리를 보장합니다.
리소스 접근 테스트하기
구현이 완료되면, CLI 애플리케이션을 통해 기능을 테스트할 수 있습니다. "What's in the @report.pdf document?"와 같이 입력하면, 시스템은 다음과 같이 동작해야 합니다:
- 자동완성 목록에 사용 가능한 리소스를 표시
- 리소스를 선택할 수 있도록 허용
- 리소스 콘텐츠를 자동으로 가져오기
- 해당 콘텐츠를 Claude에게 전송되는 프롬프트에 포함

핵심 장점은 Claude가 문서 콘텐츠를 프롬프트에서 직접 받아, 정보에 접근하기 위한 도구 호출이 필요 없어진다는 것입니다. 이는 상호작용을 더 빠르고 효율적으로 만들어줍니다.
애플리케이션과의 통합
작성한 MCP 클라이언트 코드는 애플리케이션의 다른 부분에서 사용된다는 점을 기억하세요. read_resource 함수는 다른 컴포넌트가 문서 콘텐츠를 가져오거나, 사용 가능한 리소스를 나열하거나, 리소스 데이터를 프롬프트에 통합하기 위해 호출할 수 있는 빌딩 블록이 됩니다.
이러한 관심사의 분리는 코드를 깔끔하게 유지해줍니다: MCP 클라이언트는 서버와의 통신을 처리하고, 애플리케이션 로직은 해당 데이터를 효과적으로 사용하는 방법에 집중합니다.