피드로 돌아가기
Dev.toBackend
원문 읽기
MCP(Model Context Protocol) 서버를 Python FastMCP SDK로 구현해 Tools, Resources, Prompts 세 가지 capability 타입을 통해 eCommerce 주문 시스템을 클라이언트에 노출
Build Your First MCP Server (and Client)
AI 요약
Context
LLM 기반 애플리케이션에서 외부 시스템의 기능과 데이터를 일관된 방식으로 통합할 표준화된 프로토콜이 필요했다. MCP는 클라이언트와 서버 간의 상호작용을 Initialize → List → Call 세 단계로 정의함으로써 이 문제를 해결한다.
Technical Solution
- FastMCP SDK의 @app.tool() 데코레이터를 사용해 모델이 호출할 수 있는 함수형 도구 3개 노출: get_order_status(order_id), get_order_items(order_id), cancel_order(order_id)
- @app.resource() 데코레이터로 읽기 전용 컨텍스트 데이터 2개 정의: order://{id}(특정 주문 레코드), recent-orders://summary(최근 주문 요약 뷰)
- @app.prompt() 데코레이터로 재사용 가능한 파라미터화된 명령 템플릿 2개 구현: summarize_order(order_id), customer_friendly_response(order_id)
- Python의 stdio 트랜스포트를 통해 서버를 실행하고 MCP 클라이언트가 JSON-RPC 프로토콜로 통신하도록 구성
- 로컬 파일 기반 주문 데이터 시드를 사용해 최소한의 완전한 MCP 시스템 구현 (서버 1개, 클라이언트 1개)
Key Takeaway
MCP 서버의 Tool 설명(description)이 LLM의 유일한 인터페이스이므로, 도구를 호출하는 시기, 반환 값, 호출하지 말아야 할 상황을 명확히 서술해야 한다. 확장은 단일 서버에 기능을 추가하는 것보다 여러 서버를 추가하는 방식으로 진행하되, 프로토콜의 세 단계 패턴은 서버 개수와 무관하게 동일하게 유지된다.
실천 포인트
Claude Desktop, Inspector 등 MCP 호환 호스트를 사용하는 팀에서 새로운 외부 시스템을 연결할 때, Tools(모델 선택), Resources(앱 선택), Prompts(사용자 선택) 역할 구분을 먼저 정의한 후 FastMCP SDK의 데코레이터로 각각을 구현하면 커스텀 통합 코드 없이 표준 프로토콜로 통신할 수 있다.