튜토리얼 단계
샘플 프로젝트를 살펴보면서 이 기능을 구현하는 방법을 더 잘 이해해 보겠습니다.
도구 함수는 마지막 인수로 'Context'를 자동으로 받습니다. 이 객체에는 클라이언트에 로깅 및 진행 상황을 보고하기 위한 메서드가 있습니다.
도구 함수 전반에서 info(), warning(), debug(), 또는 error() 메서드를 호출하여 클라이언트에 다양한 유형의 메시지를 기록합니다. 또한 report_progress() 메서드를 호출하여 도구 호출에 남은 작업량을 추정합니다.
클라이언트는 로깅 및 진행 상황 콜백을 정의해야 하며, 이는 서버가 로그 또는 진행 상황 메시지를 보낼 때마다 자동으로 호출됩니다. 이러한 콜백은 제공된 로깅 및 진행 상황 데이터를 사용자에게 표시하려고 시도해야 합니다.
로깅 콜백은 ClientSession에, 진행 상황 콜백은 call_tool() 함수에 제공해야 합니다.
파일
1from mcp.server.fastmcp import FastMCP, Context2import asyncio34mcp = FastMCP(name="Demo Server")567@mcp.tool()8async def add(a: int, b: int, ctx: Context) -> int:9 await ctx.info("Preparing to add...")10 await ctx.report_progress(20, 100)1112 await asyncio.sleep(2)1314 await ctx.info("OK, adding...")15 await ctx.report_progress(80, 100)1617 return a + b181920if __name__ == "__main__":21 mcp.run(transport="stdio")22