
FastMCP를 사용하여 10줄의 Python 코드로 MCP 서버 작성하기
요약
FastMCP를 사용하여 Python 함수를 MCP 도구로 쉽고 빠르게 변환하는 방법을 소개합니다. 단 10줄의 코드로 Claude Code와 같은 다양한 MCP 호스트에서 사용 가능한 서버를 구축할 수 있습니다.
핵심 포인트
- FastMCP는 타입 힌트와 docstring을 기반으로 MCP 도구를 자동 생성합니다.
- 한 번 작성한 서버는 Claude Code, Desktop, VS Code 등 모든 MCP 호스트에서 재사용 가능합니다.
- JSON Schema나 복잡한 와이어 프로토콜 코드를 직접 작성할 필요가 없습니다.
- 내장된 검증 기능을 통해 보안 패턴을 쉽게 적용할 수 있습니다.
공식 Python SDK v1.x의 FastMCP는 타입 힌트(type-hinted)가 지정된 함수를 MCP 도구(tools)로 변환합니다. 어떤 함수에든 @mcp.tool()을 추가하면 Claude Code가 tools/list 및 tools/call JSON-RPC 호출을 통해 이를 발견할 수 있습니다.
핵심 요약 (Key Takeaways)
- 공식 Python SDK v1.x의 FastMCP는 타입 힌트(type-hinted)가 지정된 함수를 MCP 도구(tools)로 변환합니다.
- 어떤 함수에든 @mcp.tool()을 추가하면 Claude Code가 tools/list 및 tools/call JSON-RPC 호출을 통해 이를 발견할 수 있습니다.
변경 사항 — FastMCP가 Python에서 MCP 서버 작성을 매우 쉽게 만듭니다
Model Context Protocol (MCP)는 M×N 통합 문제를 해결합니다. MCP가 없다면 모든 에이전트 프레임워크(agent framework)는 각 도구마다 맞춤형 글루 코드(glue code)를 작성해야 합니다. MCP를 사용하면 서버를 한 번만 작성하면 되고, Claude Code, Claude Desktop, VS Code 또는 자체 에이전트와 같이 MCP를 인식하는 모든 호스트(host)가 이를 사용할 수 있습니다.
Python SDK의 FastMCP 클래스(안정적인 v1.x 버전, 알파 버전인 v2 아님)는 시작하는 가장 빠른 방법입니다. 이는 일반적인, 타입 힌트(type-hinted)가 지정되고 docstring으로 설명된 Python 함수를 완전한 MCP 도구 엔드포인트(endpoint)로 변환합니다. 직접 작성할 필요가 있는 JSON Schema나 상용구(boilerplate) 와이어 프로토콜(wire protocol) 코드가 필요 없습니다.
사용자에게 주는 의미 — 일상적인 Claude Code 사용에 미치는 구체적인 영향
만약 지금까지 Claude Code를 위해 커스텀 도구를 직접 손으로 작성해 왔다면, 불필요한 작업을 하고 계신 것입니다. FastMCP를 사용하면 다음과 같습니다:
-
하나의 서버가 모든 MCP 호스트를 지원합니다. 도구를 한 번만 작성하세요. Claude Code, Claude Desktop, VS Code 확장 프로그램 및 커스텀 에이전트가 모두 동일한 프로토콜을 통해 이를 발견하고 호출합니다.
-
검증(Validation) 기능이 내장되어 있습니다. 소스 코드의 예시는 신뢰할 수 없는 모델 입력에 따라 동작하기 전에 정규 표현식(regex)을 사용하여 계정 ID를 검증합니다. 이는 여러분이 반드시 복사해서 사용해야 할 중요한 보안 패턴입니다.
-
두 가지 전송(transport) 옵션: 로컬 서브프로세스(subprocess)를 위한
stdio(서버당 클라이언트 하나)와 베어러 토큰(bearer-token) 인증을 사용하는 원격 서버를 위한 Streamable HTTP가 있습니다.
지금 바로 시도해 보세요 — 10분 만에 첫 MCP 서버 구축하기
설정 (Setup)
uv add "mcp[cli]"
서버 코드 (accounts_server.py)
import re
from mcp.server.fastmcp import FastMCP
...
실행하기 (Run it)
python accounts_server.py
그 다음, claude.json 또는 MCP 설정에 서버 경로를 추가하여 Claude Code가 연결할 수 있도록 구성하세요.
가져와야 할 핵심 패턴 (Key patterns to steal)
- 모델이 제공한 입력을 사용하기 전에 반드시 검증하세요. 예시에 사용된 정규 표현식 (regex) 화이트리스트는 프로덕션 (production) 도구에서 타협할 수 없는 필수 사항입니다.
@mcp.resource()를 사용하세요. 모델이 액션을 트리거하지 않고 컨텍스트 (context)에 로드해야 하는 읽기 전용 데이터(예: 계정 요약)에 적합합니다.- v1.x 버전을 고정하여 사용하세요. 공식 SDK README에 따르면 v2 알파 (alpha) 버전은 프로덕션 (production) 환경에 적합하지 않습니다.
MCP를 사용할 때 vs 직접적인 도구 호출 (Direct Tool Calls)을 사용할 때
도구가 하나의 프로세스, 하나의 에이전트 (agent), 하나의 언어 내에서만 존재한다면 MCP는 과할 수 있습니다. 그런 경우에는 직접적인 함수 호출이나 @tool 데코레이터 (decorator)를 사용하세요. 다음과 같은 경우에는 MCP를 고려하세요:
- 여러 에이전트 (agent) 또는 호스트 (host)가 동일한 도구를 필요로 할 때
- 도구가 별도의 서비스 (원격 또는 마이크로서비스)로 실행될 때
- 도구 개발을 에이전트 프레임워크 (agent framework) 선택으로부터 분리하고 싶을 때
Claude Code 사용자에게 MCP 서버는 커스텀 기능을 추가하는 표준 방식입니다. FastMCP를 사용하면 함수를 작성하는 것만큼 간단하게 서버를 구축할 수 있습니다.
출처: dev.to
(07월 07일 업데이트 via devto_mcp)
실질적인 샌드박싱 (sandboxing) 테스트 결과, Anthropic의 자체 참조 파일 시스템 MCP 서버 (@modelcontextprotocol/server-filesystem)조차 Google의 유저스페이스 커널인 gVisor를 사용하여 안전하게 격리할 수 있음이 확인되었습니다. 최근 감사에서 해당 서버는 --network none, --read-only, --cap-drop ALL 옵션과 함께 gVisor 샌드박스 내부에서 실행되었으며, 경로 탐색 (path traversal), SSRF, 명령 주입 (command injection), 자격 증명 접근 (credential access)을 포함한 6가지 공격 카테고리에 걸쳐 60개 이상의 적대적 입력 (adversarial inputs)으로 테스트되었습니다. 그 결과 서버는 10/10점 (낮은 위험)을 기록했습니다. 즉, 네트워크 호출을 수행하지 않았고, 민감한 경로에 쓰기를 수행하지 않았으며, 승인되지 않은 프로세스를 생성하지도 않았습니다 [dev.to 참조].
원문은 gentic.news에 게시되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기