WeniVooks

검색

MCP 베이스캠프

mcp.resource 사용하기

1. 리소스

mcp.resource는 tool과 다르게 함수로 만들어도 직접 함수를 호출하는 방식은 아닙니다. 아래 2가지 방식으로 사용할 수 있습니다.

  1. 콘센트 버튼을 누르고 return된 데이터를 프롬프트로 추가하는 방법
  2. 함수가 호출하게 하는 방법

2. 파일 작성

우선 간단한 예제 1번을 살펴보도록 하겠습니다. 아래와 같이 python 코드를 작성해주세요. test 폴더 아래 sample.py라는 이름으로 저장합니다.

from mcp.server.fastmcp import FastMCP
 
mcp = FastMCP("Demo")
 
 
@mcp.resource("hojun://state")
def get_hojun_state() -> str:
    """
    호준의 기분을 가져오는 기능
 
    Returns:
        str: 호준의 기분 상태
    """
    return f"Great!"
 
 
mcp.run()
from mcp.server.fastmcp import FastMCP
 
mcp = FastMCP("Demo")
 
 
@mcp.resource("hojun://state")
def get_hojun_state() -> str:
    """
    호준의 기분을 가져오는 기능
 
    Returns:
        str: 호준의 기분 상태
    """
    return f"Great!"
 
 
mcp.run()

config.json은 아래와 같습니다.

{
    "mcpServers": {
        "data": {
            "command": "python",
            "args": [
                "C:\\test\\sample.py"
            ]
        }
    }
}
{
    "mcpServers": {
        "data": {
            "command": "python",
            "args": [
                "C:\\test\\sample.py"
            ]
        }
    }
}

실행 결과는 아래와 같습니다.

이번에는 함수 안에서 호출하는 방법입니다. read_resource() 메서드를 통해 다른 리소스에 접근할 수 있습니다. 다만 방법 구현적인 측면에서 mcp.tool() 데커레이터가 가장 편할 수 있습니다.

from mcp.server.fastmcp import FastMCP, Context
 
# Create an MCP server
mcp = FastMCP("resource")
 
 
# Add a tool that uses a resource
@mcp.tool()
async def greeting(name: str, ctx: Context) -> str:
    """Get a greeting using the greeting resource"""
    try:
        # 방법 1: 직접 리소스 함수 호출
        # greeting_text = get_greeting(name)
        # return f"Tool response: {greeting_text}"
 
        # 방법 2: 안전하게 read_resource 사용
        result = await ctx.read_resource(f"greeting://{name}")
        content = result[0] if isinstance(result, tuple) else result
        return f"Tool response: {content}"
    except Exception as e:
        return f"Error retrieving greeting: {str(e)}"
 
 
# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Get a personalized greeting"""
    return f"Hello, {name}!! Welcome to FastMCP!"
 
 
mcp.run()
from mcp.server.fastmcp import FastMCP, Context
 
# Create an MCP server
mcp = FastMCP("resource")
 
 
# Add a tool that uses a resource
@mcp.tool()
async def greeting(name: str, ctx: Context) -> str:
    """Get a greeting using the greeting resource"""
    try:
        # 방법 1: 직접 리소스 함수 호출
        # greeting_text = get_greeting(name)
        # return f"Tool response: {greeting_text}"
 
        # 방법 2: 안전하게 read_resource 사용
        result = await ctx.read_resource(f"greeting://{name}")
        content = result[0] if isinstance(result, tuple) else result
        return f"Tool response: {content}"
    except Exception as e:
        return f"Error retrieving greeting: {str(e)}"
 
 
# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Get a personalized greeting"""
    return f"Hello, {name}!! Welcome to FastMCP!"
 
 
mcp.run()

실행화면은 아래와 같습니다. 우리가 실행하는 함수는 get_greeting 함수가 아니라 greeting 함수입니다. greeting 함수에서 get_greeting 함수를 호출하게 하는 방법을 사용했습니다.

4.4 mcp.prompt 사용하기4.6 MCP Inspector