anti-patterns
안티패턴 — MCP 정의 단계에서 자주 틀리는 것
섹션 제목: “안티패턴 — MCP 정의 단계에서 자주 틀리는 것”1. “MCP는 함수 호출의 또 다른 이름이다”
섹션 제목: “1. “MCP는 함수 호출의 또 다른 이름이다””틀렸다. MCP는 세션 기반 프로토콜이고 호스트가 보안 경계를 강제한다. 함수 호출은 단발 RPC. 동일선상 비교 자체가 오해다. — 02-구조
2. stdout에 print/console.log
섹션 제목: “2. stdout에 print/console.log”stdio 전송에서 stdout은 JSON-RPC 전용 채널이다. 한 줄만 찍어도 프로토콜이 깨진다. 모든 로그는 stderr. — mcp-transports
3. 절대 경로 대신 상대 경로
섹션 제목: “3. 절대 경로 대신 상대 경로”Claude Desktop은 현재 작업 디렉터리가 사용자 홈이 아니다. ./weather.py는 거의 항상 실패한다. 항상 절대 경로.
4. SSE-only 옛 패턴 따라하기
섹션 제목: “4. SSE-only 옛 패턴 따라하기”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-보안