제약이 곧 제품이었다 — 그리고 어떤 방화벽도 문장은 막지 못한다
MCP 는 2026 년 초 **사망 선고를 받았고, 그 비판들은 대체로 옳았습니다.** 그다음 역사상 **가장 파괴적인 개정판**을 냈습니다 — **핸드셰이크·세션 계층·원시 요소 셋을 삭제**했고, 비판자들은 입장을 철회했습니다. 교훈은 "프로토콜이 이겼다"가 아닙니다. **팔리고 있던 것이 애초에 역량이 아니었다는 것**, 그리고 **삭제가 닿지 못한 구멍 하나가 하필 제일 중요한 구멍**이라는 것입니다.
**이미 이 저장소가 쓰고 있는 도구에 대한 측정 두 가지**이고, 둘 다 새 서버가 필요 없습니다. **컨텍스트 절반.** 여기 에이전트가 붙는 **모든 MCP 서버의 툴 목록 JSON 을 덤프해 토큰화**합니다 — 그 숫자가 **사용자가 한 글자도 치기 전에 이미 내고 있는 세금**이고, **자기 숫자를 실제로 본 사람은 거의 없습니다.** 그다음 **실제 대화 기록 일주일치**를 읽고 **정말 호출된 툴만** 목록으로 만듭니다. 연결 집합을 그 목록으로 줄이고 다시 재고, **그리고 여기가 다들 건너뛰는 단계** — **같은 과제 묶음을 두 설정에 각각 돌려 토큰이 아니라 성공률을 비교합니다.** GitHub 은 기본 툴셋 전체 대신 **3~10 개만 골라 싣는 것으로 컨텍스트 60~90% 절감**, Copilot 기본 툴을 **40 개에서 13 개로 줄여 성공률 2~5%p 상승**을 보고했습니다. 목적은 **그 숫자를 확인하는 게 아니라 내 숫자를 얻는 것**입니다 — **역량이 내려갈 때 품질이 올라간다면**, 이 카드의 주장이 **반나절 만에 로컬에서 재현**된 것이니까요. **신뢰 절반 — 익스플로잇이 아니라 자기 점검입니다.** 로컬에 **툴 하나짜리 무해한 서버**를 띄우되, **설명이 아니라 반환값**에 **모델을 향한 평범한 명령문 한 줄**을 넣습니다. 호출하고 무슨 일이 벌어지는지 봅니다. 요점은 **연결 시점에 설명을 훑었던 그 검토가 호출 시점의 결과에는 두 번 다시 실행되지 않는다**는 것을 **직접 눈으로 확인**하는 것이고, 그다음 따라오는 **정책 한 줄을 쓰는 것**입니다 — **신뢰할 수 없는 결과를 읽는 능력과 결과를 낳는 행동을 할 능력을 동시에 가진 에이전트는, 그 둘 사이에 프롬프트가 아닌 무언가가 있어야 한다.** 위 수치는 링크된 글과 그 출처에서 온 것입니다 — GitHub 엔지니어링 포스트, Invariant Labs(2025-04), Astrix Research 의 5,200+ 서버 분석, Endor Labs 의 2,614 건, GitGuardian State of Secrets Sprawl 2026. **"52% 방치" 감사는 매니지드 호스팅을 파는 벤더가 낸 것**이므로 그만큼 할인해서 읽으십시오.
기술 노트
각 항목이 실제로 무엇을 보여주고 어떻게 동작하는지 — 위 카드보다 자세한 기술 설명입니다.
목적: **2026 년 3 월에 "MCP 는 죽었다"는 방어 가능한 입장이었고, 지금 다시 볼 가치가 있는 이유는 그 비판들이 틀리지 않았기 때문입니다.** 툴 스키마는 **사용자가 한 글자도 치기 전에** 컨텍스트 창에 실렸습니다. 보안 모델은 **이름과 개념증명이 붙은 방식으로** 샜습니다. 그리고 **셸 스크립트로 대체 가능한 프로토콜은 인프라처럼 보이지 않았습니다.** Anthropic 이 Agent Skills 를 냈고, 사람들은 **터미널을 가진 에이전트가 MCP 가 하던 일 대부분을 더 유연하게, 토큰은 훨씬 덜 쓰며 해낸다**는 것을 알아챘고, 부고는 저절로 쓰였습니다. **2026-07-28, 프로토콜은 삭제로 답했습니다.** `initialize` 와 `Mcp-Session-Id` 헤더가 사라져 **어떤 요청이든 평범한 라운드로빈 뒤 아무 인스턴스에나 떨어집니다.** 메서드와 툴 이름이 **HTTP 헤더로** 실려 가서, 게이트웨이와 WAF 가 **JSON 본문을 파싱하지 않고 라우팅**합니다. 열린 스트림을 붙들어야 했던 **서버 주도 elicitation 은 평범한 재시도**가 됐습니다 — 서버가 `input_required` 를 답하고, 클라이언트가 답을 붙여 다시 옵니다. Roots·Sampling·Logging·동적 클라이언트 등록·레거시 HTTP+SSE 전송은 **공식 12 개월 정책 아래 전부 폐기 예고**됐습니다. 리드 메인테이너 본인의 요약이 **"MCP 를 MCP 이게 했던 것들이 많이 사라졌다"** 였습니다. **작동했다는 증거가 홍보가 아니라 구조적이라는 점이 읽을 값어치를 만듭니다.** Cloudflare 는 **자기 제품 표면인 `McpAgent` 원시 요소를 스스로 폐기**했습니다 — **MCP 가 상태 있는 호스팅을 필요로 했기 때문에만 존재하던** 차별화 요소인데, 이제 서버가 **평범한 Worker 로 돈다**는 이유로요. **표준이 진짜로 단순해지지 않았다면 벤더가 자기 해자를 지우지 않습니다.** "MCP 는 아직 별로다"라는 글을 냈던 Sentry 공동창업자는 **스펙이 확정되기도 전에 새 스펙으로 프로덕션을 무중단 전환했다**고 말했습니다. 3 월의 회의론자들은 절충했고 그게 옳았습니다 — **로컬·비인증 작업엔 로컬 CLI 가 여전히 정답**이고, **인증·조직 접근제어·텔레메트리·스케일이 필요한 곳에서는 MCP 가 이깁니다.** **그 지점에서 그것은 그냥 HTTP 이고, HTTP 를 지키고 관측하고 부하분산하려고 이미 가진 모든 도구가 그대로 적용되기 때문입니다.** **그리고 그것이 챙겨 갈 문장인데, 일반론이기 때문입니다.** CLI 진영은 **셸이 더 강력하다는 점에서 옳았고, 더 강한 것이 요점이라는 점에서 틀렸습니다.** 에이전트가 **남의 시스템 경계에서** 필요로 하는 것은 도달 범위가 아니라 **검토·인가·기록·속도제한이 가능할 만큼 작은 표면**이고, **그 검토 가능한 표면이 곧 제품**입니다. 이걸 되게 만든 팀들은 이미 반대편에서 경험적으로 같은 결론에 닿아 있었습니다 — GitHub 은 Copilot 기본 툴셋을 **40 개에서 13 개로 줄였고 성공률이 올라갔습니다.** Block 은 Linear 서버를 **세 번 다시 만들어 툴 두 개로 끝냈다**고 전해집니다. `the-boundary-is-the-unit` 이 아키텍처 일반에 대해 같은 주장을 하고, **이 사건이 그 주장에 대한 가장 깨끗한 자연 실험**입니다 — **역량을 덜어내서 채택된 프로토콜을, 결론에 이해관계가 없는 사람들이 측정한 것.** **개정판이 건드리지 않은 부분이 하필 이 전부가 안전한지를 결정합니다.** 무상태 재설계는 **전송 계층을 단단하게** 했고, **전송 계층은 애초에 흥미로운 공격이 살던 곳이 아니었습니다.** Invariant Labs 는 2025 년 4 월 **툴 포이즈닝**을 보였습니다 — **툴 설명에 숨긴 지시**가 **모델에는 보이고 사용자에게는 보이지 않으며**, **두 수를 더하는 툴로 SSH 키를 빼냈습니다.** 이어서 **악성 GitHub 이슈**가 에이전트를 조종해 **공개 PR 을 통해 비공개 저장소를 유출**시키는 것을 보이며, **어떤 MCP 툴도 침해되지 않았다**고 못 박았습니다. 2026 년 4 월에는 연구자들이 **PR 제목에 지시를 넣어** Claude Code·Gemini CLI·GitHub Copilot 을 탈취하고 **CI 시크릿을 들고 나갔습니다.** **어느 것도 전송 버그가 아니고, 어느 것도 로드맵 항목으로 닫히지 않습니다.** **비대칭은 정확하고, 한 줄로 적을 값어치가 있습니다: 툴 설명은 연결 시점에 한 번 검토되고, 툴 결과는 매 호출마다 런타임에 컨텍스트로 들어오는데 이에 상응하는 검사가 없습니다.** 레지스트리·`.well-known` 디스커버리·허용목록은 전부 **앞의 것에 대한 통제**입니다. **뒤의 것에는 배포된 통제가 없고**, 하필 **뒤의 것이 구조적으로 공격자가 쓴 텍스트를 나릅니다.** **방화벽은 연결을 막을 수 있습니다. 문장은 막지 못합니다.** 이건 우발이 아니라 구조입니다 — 그래서 2026 년에 대한 정직한 독법은 부고도 승리 선언도 아닙니다: **프로토콜은 지루한 인프라가 되었고, 남은 문제는 애초에 프로토콜이 풀 문제가 아니었다.**
동작 방식: ### 세 가지 비판, 그리고 개정판이 실제로 답한 것 | 벽 | 2026 년 3 월의 비판 | 2026-07-28 이 한 것 | 여전히 열려 있나 | |---|---|---|---| | **컨텍스트** | 사용자가 치기 전에 스키마가 실린다; **60 개 필드 중 3 개만 필요해도** 원본 응답이 모델을 통과한다 | **결정론적 순서**의 캐시 가능한 툴 카탈로그 — 클라이언트가 캐시하고 상위 프롬프트 캐시가 안정된다 | **부분적.** **캐싱은 툴을 줄이는 것과 다릅니다** — 잘라내는 일은 여전히 내 몫 | | **신뢰 — 연결** | 세션 상태, 제각각인 인증, 로컬 전용 서버 | 핸드셰이크·세션 삭제, **익숙한 OAuth 모델의 평범한 HTTP** | **닫힘.** 컴플라이언스 팀이 있는 기업에 문을 연 건 **조용히 OAuth 였습니다** | | **신뢰 — 내용** | 설명과 결과가 **신뢰된 텍스트로** 모델 컨텍스트에 들어온다 | **없음** | **열려 있음. 구조적.** | | **실체** | 대부분 기존 API 래퍼, 상당수 방치 | 없음 — 이건 **스펙의 사실이 아니라 시장의 사실** | **열려 있고, 어떤 스펙 개정도 닫을 수 없음** | ### 2026-07-28 에 삭제된 것 | | 이전 | **이후** | |---|---|---| | **세션** | `initialize` 핸드셰이크 + `Mcp-Session-Id` | 모든 요청이 자기완결적 — **라운드로빈 뒤 아무 인스턴스에나 떨어져도 된다** | | **라우팅** | 무엇이 호출됐는지 알려면 JSON 본문 파싱 | 메서드·툴 이름이 **HTTP 헤더** — 게이트웨이·WAF 가 파싱 없이 라우팅 | | **Elicitation** | 서버 주도, **열린 스트림을 붙들어야** 함 | 서버가 `input_required` 반환, **클라이언트가 답을 붙여 재시도** | | **카탈로그** | 매번 재요청, 순서 보장 없음 | **캐시 가능 + 결정론적 순서** | | **폐기 예고** | Roots, Sampling, Logging, 동적 클라이언트 등록, 레거시 HTTP+SSE | 공식 수명주기 정책, **최소 12 개월**, 제거는 **2027 년 7 월 이후** | ### 컨텍스트로 들어오는 입구는 둘, 검토되는 건 하나 | | **툴 설명** | **툴 결과** | |---|---|---| | 컨텍스트 진입 시점 | 연결 시점 | **매 호출, 런타임** | | 누가 검토하나 | 사람이, 한 번 — 그나마 하면 | **아무도** | | 검토 후 바뀔 수 있나 | 네, 서버가 통제 | **정의상 매번 다름** | | 오늘 존재하는 통제 | 레지스트리, `.well-known` 메타데이터, 핀 고정, 허용목록 | **배포된 것 없음** | | 그 텍스트를 쓴 사람 | 서버 운영자 | **서버가 읽은 데이터를 쓴 사람, 누구든** | **마지막 행이 문제의 전부입니다.** PR 제목, GitHub 이슈 본문, 남의 데이터베이스의 한 행 — **어느 것도 서버 운영자가 아니고, 전부 평범한 결과 텍스트로 모델에 닿습니다.** ### 로드맵을 날짜가 아니라 확신도로 읽기 | 확신도 | 항목 | 무엇이 바뀌나 | |---|---|---| | **거의 확정** | 디스커버리용 `.well-known` 서버 메타데이터 | 레지스트리가 **접속하지 않고** 서버가 뭘 하는지 알 수 있게 됨 — **미심쩍은 목록을 순위 매길 수 있는 것으로** 바꾼다 | | **거의 확정** | 이제 안정화된 Enterprise-Managed Authorization 확장 | 신원 체계가 수렴; Anthropic·Microsoft·Okta 채택 보고 | | **논쟁 중** | 스킬 배포 — SEP-2640 이 스킬을 **MCP 의 평범한 리소스로** 서빙 | 지금은 팀들이 **텍스트 파일을 손으로 받아** 동기화합니다. **웹앱 돌리려고 HTML 을 손으로 내려받는 격.** **이걸 푸는 쪽이 에이전트 스택의 큰 조각을 가집니다** | | **추세가 아니라 베팅** | WebMCP, Chrome 156 까지의 오리진 트라이얼 | 7 월 기준 **실배포 거의 0**, 툴을 호출하는 주요 에이전트 없음 | | **미해결, 항목 없음** | 툴 **결과**에 대한 런타임 검사 | — | ### 이 카탈로그 안에서의 자리 - `mcp-three-sides` 는 **만드는 카드**입니다 — 같은 프로토콜의 세 자리이고, **손이 키보드에 올라가므로 그쪽을 먼저** 합니다. 이 카드는 **판정 카드**입니다: **왜 삭제가 승리였고, 무엇이 남았는가.** - `agentic-intent-veto` 와 `third-party-blast-radius` 가 내용 공백에 대한 답의 두 절반입니다 — **읽는 능력과 행동하는 능력을 분리하고**, **읽는 텍스트는 적대적이라고 가정하라.** - `the-boundary-is-the-unit` 은 **검토 가능한 표면이 곧 설계 단위**라고 주장하고, 이 사건이 그 주장의 **자연 실험**입니다. - `agents-computer-use` 는 한 층 위에서 같은 질문을 합니다 — **셸은 툴 목록보다 강력하고, 바로 그 성질 때문에 지키기가 더 어렵습니다.**