@mcp.tool()asyncdefsum_of_nums(nums: list[int]) -> int:""" 숫자 리스트의 총합 반환 """returnsum(nums)
리소스 : LLM이 접근할 수 있는 데이터
정적 데이터 : 특정 디렉터리 내 파일, 이미지 같이 변하지 않는 데이터
동적 데이터 : 입력 받은 파라미터에 따라 결과가 달라지는 데이터
@mcp.resource("dir://test")defmy_resource() -> list[str]:""" test 폴더에 있는 파일 리스트 """ test = Path.home() /"test"return [str(f) for f in test.iterdir()]
프롬프트 : 재사용 가능한 템플릿
@mcp.prompt("코드 리뷰")defsample_prompt(language: str):""" 특정 프로그램 언어에 대한 리뷰 프롬프트 """returnf"""{language}에 대한 코드 리뷰해주세요."
샘플 코드
from mcp.server.fastmcp import FastMCP# FastMCP 인스턴스 생성mcp = FastMCP("Simple MCP Server")# MCP 도구 정의@mcp.tool()defhello(name: str) -> str:""" 간단한 인사말을 반환하는 도구 """returnf"안녕하세요, {name}님!"@mcp.tool()defget_prompt(prompt_type: str="general") -> str:""" 사전 정의된 프롬프트를 반환하는 도구 """ prompts = {"general": "당신은 도움이 되는 AI 어시스턴트 입니다. 사용자의 질문에 정확하고 친절하게 답변해주세요.","code_review": "다음 코드를 거토하고 개선점을 제안해주세요. 코드의 가독성, 성능, 보안 측면을 고려해주세요.","translate": "다음 텍스트를 자연스러운 한국어로 번역해주세요.","summarize": "다음 내용을 핵심 포인트 중심으로 간결하게 요약해주세요." }return prompts.get(prompt_type, prompts["general"])@mcp.resource("simple://info") # 리소스 정의defget_server_info() -> str:""" 서버 정보를 제공하는 리소스 """return""" Simple MCP 정보 ==================================== 이 서버는 MCP(Model Context Protocol)의 기본 기능을 시연하는 간단한 예제입니다. 제공하는 도구: - hello: 인사말 생성 - get_prompt: 프롬프트 템플릿 제공 제공하는 리소스 - simple://info: 서버 정보 """if__name__=="__main__":"""서버를 실행""" mcp.run(transport="streamable-http")
이번 글 핵심 키워드
MCP (Model Context Protocol)
JSON RPC 2.0 에 맞춰 프로토콜 구성
streamable-http → MCP 권장 http 기반 스트리밍 통신 방식, 클라이언트와 서버 효율적 통신
호스트, 클라이언트, 서버
서버
리소스
도구
프롬프트
테스트를 위한 방법 2가지
클로드 제공하는 mcp inspecter
포스트맨
FastMCP → MCP 서버와 클라이언트를 파이썬으로 쉽게 구현할 수 있도록 돕는 라이브러리
TIL 느낀점
MCP에 대해서 어렵다고 느꼈는데, 공부하면서 간략하게 나마 구현해보고 테스트하면서 일반 API와 별반 다를 것이 없다는 것을 다시 느낌