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

MCP 서버의 리소스는 일반적인 HTTP 서버의 GET 요청 핸들러와 유사하게 클라이언트에 데이터를 노출할 수 있게 해줍니다. 작업을 수행하기보다는 정보를 가져와야 하는 시나리오에 적합합니다.

리소스 이해하기

리소스를 문자열, JSON, 바이너리 파일 등 어떤 유형의 데이터든 반환할 수 있는 읽기 전용 엔드포인트라고 생각하세요. 'mime_type'을 설정하여 클라이언트에게 반환하는 데이터의 종류에 대한 힌트를 제공합니다.

리소스는 URI(본질적으로 주소)를 통해 데이터를 노출하는 방식으로 작동합니다. 클라이언트가 데이터가 필요할 때 특정 URI와 함께 ReadResourceRequest를 전송하면, 서버는 요청된 정보로 응답합니다.

두 가지 유형의 리소스

생성할 수 있는 리소스에는 두 가지 주요 유형이 있습니다:

  • 직접 리소스(Direct Resources) - 매개변수를 포함하지 않는 정적 URI를 가집니다(예: docs://documents)
  • 템플릿 리소스(Templated Resources) - URI에 매개변수를 포함합니다(예: docs://documents/{doc_id})

템플릿 리소스의 경우, Python SDK가 URI에서 매개변수를 자동으로 파싱하여 함수에 키워드 인자로 전달합니다. URI의 매개변수 이름이 함수의 인자 이름이 됩니다.

리소스 구현하기

@mcp.resource() 데코레이터를 사용하면 리소스를 간단하게 생성할 수 있습니다. 두 유형을 모두 구현하는 방법은 다음과 같습니다:

python
@mcp.resource(
    "docs://documents",
    mime_type="application/json"
)
def list_docs() -> list[str]:
    return list(docs.keys())

@mcp.resource(
    "docs://documents/{doc_id}",
    mime_type="text/plain"
)
def fetch_doc(doc_id: str) -> str:
    if doc_id not in docs:
        raise ValueError(f"Doc with id {doc_id} not found")
    return docs[doc_id]

MCP Python SDK는 반환하는 모든 것을 자동으로 직렬화합니다. 데이터를 JSON 문자열로 수동 변환할 필요 없이, 적절한 Python 데이터 구조를 그대로 반환하면 됩니다.

리소스 테스트하기

MCP Inspector 도구를 사용하여 리소스를 테스트할 수 있습니다. uv run mcp dev mcp_server.py로 서버를 시작하고 웹 인터페이스로 이동하세요.

인스펙터는 직접 리소스와 템플릿 리소스를 구분하여 보여줍니다. 직접 리소스는 메인 "Resources" 섹션에 표시되고, 템플릿 리소스는 "Resource Templates" 아래에 표시됩니다. 리소스를 클릭하여 테스트하고 서버가 반환하는 정확한 응답 구조를 확인할 수 있습니다.

실용적인 사용 사례

리소스는 다음과 같은 경우에 이상적입니다:

  • 자동완성 데이터 제공(예: 문서 목록)
  • 파일 내용이나 데이터베이스 레코드 가져오기
  • 구성 데이터 노출
  • 클라이언트가 필요로 하는 모든 읽기 전용 정보 제공

핵심 장점은 리소스를 통해 클라이언트가 도구나 복잡한 상호작용에 의존하지 않고 데이터를 선제적으로 가져올 수 있다는 점입니다. 이는 사용자 참조를 기반으로 프롬프트에 콘텐츠를 자동으로 삽입하려는 문서 멘션과 같은 기능에 완벽하게 적합합니다.