You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
v0.5.0 MCP ADR — SDK 채택 (fastmcp v3 standalone) / transport (stdio + streamable-http) / handler 동시성 (sync 전용) / 도구 분할 (7 개) 결정 근거
ga
v0.5.0
last_updated
2026-05-06
v0.5.0 MCP server — 설계 의사결정 리서치 요약
v0.5.0/mcp.md §결정 사항 중 외부 독자가 "왜?" 를 던질 만한 4건 (SDK 채택 · transport 우선순위 · handler 동시성 모델 · 도구 분할 정책) 의 업계 선례·대안·실패 시나리오를 기록한다. mcp.md 본문이 최종 결정을 기술하고, 본 문서는 그 결정의 근거를 담는다.
결정 매트릭스
#
이슈
결정
핵심 근거
1
MCP SDK
standalone fastmcp v3 (jlowin)
2026-05 현업 표준 — MCP 서버의 약 70% 가 fastmcp 사용. v3 는 OAuth / OpenTelemetry / server composition / OpenAPI 통합 등 프로덕션 기능 제공
2
Transport 우선순위
stdio 기본 + streamable-http 옵션
Claude Desktop 호환 (stdio-only) + ASGI 배포 시나리오 양쪽 커버
3
Handler 동시성 모델
sync 전용
_Documentunsendable 제약 — async + to_thread 는 panic
v1.27, FastMCP v1 만 흡수 (2024). v2 / v3 분기는 공식 SDK 외부 진화
1st-party — 프로토콜 spec 즉시 반영, 단 framework 기능은 v1 로 frozen
직접 구현 (JSON-RPC over stdio)
본 프로젝트
—
spec drift 자체 추적 비용
관찰
MCP spec 은 빠르게 진화 중 — 2024-11 (initial), 2025-03 (Streamable HTTP 채택, SSE deprecation), 2026-02 (FastMCP v3 OAuth/OTel) 주기. 직접 구현은 매 spec revision 마다 수정 부담
fastmcp 가 사실상 표준 사용 패턴 — @mcp.tool 데코레이터 + Pydantic 자동 schema 생성. v1 은 공식 SDK 가 흡수 (mcp.server.fastmcp.FastMCP) 했으나 v2 / v3 의 추가 기능 (OAuth, OpenTelemetry tracing, server composition, OpenAPI 자동 변환) 은 standalone 에만 존재
공식 SDK 안의 FastMCP v1 은 frozen 상태 — Anthropic 은 프로토콜 구현에 집중, framework 기능은 standalone 으로 위임된 분업 구조. v3 의 server composition (server.import_server()) / streamable-http 우선 / 프로덕션 배포 도구 등은 공식 SDK 에 미존재
대안 평가
직접 구현: spec drift 부담 + JSON-RPC stdio framing 재구현 + tool schema 자동 생성 부재 → 모든 도구 schema 를 수작업. 가치 없음
공식 mcp SDK (FastMCP v1): 프로토콜 compliance 는 1st-party 라 안정. 그러나 v3 의 streamable-http 프로덕션 기능 / 다중 서버 composition / OAuth 가 부재 — v0.5.0 이후 운영 (S4 streamable-http, 미래 인증) 시 마이그레이션 부담
standalone fastmcp v3: ✅ 채택. 의존성 1개 (fastmcp>=3,<4) 로 모든 transport (stdio / streamable-http / sse) · schema · lifecycle · v3 추가 기능 커버. 시장 점유율 70% 가 도구 호환성 / 문서 / 커뮤니티 ecosystem 도 함께 보장
실패 시나리오 (선택 후에도 감시)
fastmcp v3 → v4 breaking change — jlowin 의 v 단위 진화 속도가 빠름 (v2 → v3 가 1 년). extras pin 을 fastmcp>=3,<4 로 유지하고 major 업그레이드 시 별도 평가
공식 SDK 가 v3 기능을 재흡수 — Anthropic 이 OAuth / OTel 등을 공식 SDK 로 끌어올 가능성. 현시점에는 분업 구조가 안정 — 실현 시 재평가
fastmcp 의 protocol drift — 공식 SDK 와 fastmcp 가 spec 갱신 타이밍이 어긋나는 일시적 구간 가능. fastmcp 가 MCP spec 의 1st-tier consumer 라 큰 drift 는 발생하지 않을 것으로 예상
도구 분할이 다수파 — 명사+동사 형태 (read_file, create_issue) 가 LLM 의도 추론에 유리
통합 도구는 입력이 표현력을 가질 때만 성립 — SQL / URL 처럼 인자 자체가 의도를 담을 수 있는 경우. HWP 도구는 그런 표현력 없음
CLI rhwp-py 와 mapping — rhwp-py blocks ↔ iter_blocks, rhwp-py ir ↔ get_ir 처럼 1:1 대응이 사용자 학습 비용 절감
결정
도구 분할 채택 — 7개 도구 (parse_hwp_summary, extract_text, get_ir, iter_blocks, to_markdown, to_html, chunks)
CLI 와 1:1 mapping — 두 표면이 같은 정신 모델 공유
실패 시나리오 (선택 후에도 감시)
도구 수 폭증 — Phase 4 (역생성) 추가 시 write_hwp / update_paragraph 등 더 늘어남. MCP 클라이언트의 tool list 한도 (Claude Desktop 권고 ~50개) 와 충돌 시 카테고리별 서버 분리 (rhwp-mcp-read / rhwp-mcp-write) 검토