튜토리얼 단계
샘플 프로젝트를 살펴보면서 이 기능을 구현하는 방법을 더 잘 이해해 보겠습니다.
서버에서 도구 호출 중에 create_message() 메서드를 실행하고, 언어 모델로 전송하고자 하는 메시지를 전달합니다.
클라이언트에서는 샘플링 콜백을 구현해야 합니다. 이 콜백은 서버가 제공하는 메시지 목록을 받습니다.
서버가 제공하는 메시지 목록은 MCP에서의 통신을 위해 형식이 지정되어 있습니다. 개별 메시지가 사용 중인 LLM SDK와 호환된다는 보장은 없습니다.
예를 들어 Anthropic SDK를 사용하는 경우, MCP 메시지를 Anthropic SDK와 호환되는 형식으로 변환하는 약간의 로직을 작성해야 합니다.
LLM으로 텍스트를 생성한 후, 생성된 텍스트를 포함하는 CreateMessageResult를 반환합니다.
잊지 마세요: 클라이언트의 콜백은 ClientSession 호출에 전달되어야 합니다.
클라이언트가 텍스트를 생성하여 반환하면, 해당 텍스트는 서버로 전송됩니다. 이 텍스트로 다음과 같은 작업을 할 수 있습니다:
- 도구의 워크플로 일부로 사용
- 또 다른 샘플링 호출을 수행하기로 결정
- 생성된 텍스트 반환
파일
1from mcp.server.fastmcp import FastMCP, Context2from mcp.types import SamplingMessage, TextContent34mcp = FastMCP(name="Demo Server")567@mcp.tool()8async def summarize(text_to_summarize: str, ctx: Context):9 prompt = f"""10 Please summarize the following text:11 {text_to_summarize}12 """1314 result = await ctx.session.create_message(15 messages=[16 SamplingMessage(17 role="user", content=TextContent(type="text", text=prompt)18 )19 ],20 max_tokens=4000,21 system_prompt="You are a helpful research assistant.",22 )2324 if result.content.type == "text":25 return result.content.text26 else:27 raise ValueError("Sampling failed")282930if __name__ == "__main__":31 mcp.run(transport="stdio")32