콘텐츠로 이동

anti-patterns

안티패턴 — MCP 정의 단계에서 자주 틀리는 것

섹션 제목: “안티패턴 — MCP 정의 단계에서 자주 틀리는 것”

1. “MCP는 함수 호출의 또 다른 이름이다”

섹션 제목: “1. “MCP는 함수 호출의 또 다른 이름이다””

틀렸다. MCP는 세션 기반 프로토콜이고 호스트가 보안 경계를 강제한다. 함수 호출은 단발 RPC. 동일선상 비교 자체가 오해다. — 02-구조

stdio 전송에서 stdout은 JSON-RPC 전용 채널이다. 한 줄만 찍어도 프로토콜이 깨진다. 모든 로그는 stderr. — mcp-transports

Claude Desktop은 현재 작업 디렉터리가 사용자 홈이 아니다. ./weather.py는 거의 항상 실패한다. 항상 절대 경로.

2024-11-05 사양의 HTTP+SSE 전송은 폐기됐다. 2025-06-18 사양의 Streamable HTTP를 쓰라. 옛 블로그 그대로 따라하면 호환성 깨진다.

5. “MCP 서버 하나에 모든 도구 다 넣기”

섹션 제목: “5. “MCP 서버 하나에 모든 도구 다 넣기””

설계 원칙: “Servers should be highly composable” — 좁은 책임 여러 개로 쪼개라. 한 서버가 50개 도구를 노출하면 LLM 컨텍스트가 도구 설명만으로 가득 찬다. — mcp-architecture

6. 호스트 없이 직접 LLM에 붙이려 시도

섹션 제목: “6. 호스트 없이 직접 LLM에 붙이려 시도”

MCP는 호스트(Claude Code/Desktop, Cursor, VS Code 등)가 있을 때만 의미 있다. 자체 앱에 붙이려면 호스트 역할도 같이 구현해야 한다(또는 SDK의 클라이언트 헬퍼 사용).

7. 보안 경계를 잊고 “MCP면 안전하다”고 가정

섹션 제목: “7. 보안 경계를 잊고 “MCP면 안전하다”고 가정”

MCP는 보안을 제공하는 게 아니라 요구한다. SSRF, 토큰 패스스루, 동의 우회는 모두 직접 막아야 한다. → 04-MCP-보안