인기 MCP 서버 152개 버전을 재실행한 결과: 업데이트의 절반이 에이전트에게 전달되는 내용을 변경합니다.
요약
본 글은 인기 MCP 서버 패키지들을 분석하여, 에이전트가 사용하는 도구의 내용(설명, 스키마 등)이 업데이트마다 얼마나 자주 변경되는지를 측정했습니다. 그 결과, 거의 모든 업데이트에서 전달되는 지침과 설명이 변화하며, 이는 사용자가 인지하지 못하는 사이에 에이전트의 행동을 조용히 바꿀 수 있음을 경고합니다.
핵심 포인트
- 대부분의 MCP 서버는 업데이트마다 도구 설명을 변경한다.
- 도구 이름만으로는 변화를 감지하기 어려우며 설명(description) 변화가 핵심이다.
- MCP 설정에서 반드시 버전을 고정(Pin versions)해야 한다.
- 서버 승인 시 도구 목록을 스냅샷하고 매번 차이점을 확인하는 것이 중요하다.
mcpgawk가 Product Hunt에 출시되었습니다 — 출시를 확인하고 의견을 남겨주세요
MCP 서버는 한 번 승인하면, 에이전트는 그 이후로 신뢰합니다.
하지만 이 서버들은 npm 패키지이며, 대부분의 설치 명령어에는 버전 고정(pinning)이 되어 있지 않습니다. 출시 후 다음 실행은 새 버전을 사용하게 됩니다. 아무도 당신에게 다시 묻지 않습니다.
그래서 저는 지루하고 측정 가능한 것, 즉 업데이트가 실제로 도구들이 알려주는 내용을 얼마나 자주 변경하는지를 알고 싶었습니다.
제가 한 일
저는 npm에서 가장 많이 다운로드된 MCP 서버 패키지 30개를 가져왔습니다. 각 패키지에 대해 2026년 3월부터 9월 사이에 게시된 모든 안정 버전(패키지당 최대 12개)을 추출하여, 동일한 방식으로 각 버전을 실행했습니다:
- 임시 홈 디렉토리에서
npx -y <package>@<version>실행 - 환경 변수에 API 키 없음
- 오직
initialize+tools/list만 사용 — 도구 호출은 절대 하지 않음
그런 다음 각 버전의 도구 표면(tool surface, 이름, 설명, 입력 스키마, 주석)을 저장하고 이전 버전과 모든 버전을 비교(diff)했습니다.
수치
| 테스트한 패키지 수 | 30개 중 23개 (디스크가 두 번 가득 참; 7개는 아직 실행 예정) |
| ... | |
| 독립 연구원이 자신의 환경에서 9개의 서버를 사용하여 96개 출시 건에 걸쳐 **48%**를 측정했습니다. 두 가지 방법, 두 대의 기계로 동일한 답변: 거의 매번 업데이트마다 에이전트에게 전달되는 내용이 변경됩니다. |
실제로 바뀌는 것들
저는 새로운 도구들이 생길 것이라고 예상했지만, 변화가 있는 곳은 그곳이 아니었습니다.
- 추가/제거된 도구: 12개 / 4개
- 입력 스키마 변경이 있는 업데이트: 33건
- 매개변수 설명 재작성: 92건 — 단연코 가장 큰 범주입니다.
- 매개변수 유형 변경: 5건 — 가장 희귀합니다.
한 패키지는 6개월 동안 _같은 두 개의 도구_를 유지했지만, 그 설명과 스키마는 세 번이나 바뀌었습니다. 만약 도구 이름만 비교한다면 아무것도 보이지 않습니다.
이것이 중요한 이유는 모델이 읽고 따르는 부분이 바로 설명(description)이기 때문입니다. 재작성된 매개변수 설명은 조용히 전달되는 새로운 지침과 같습니다.
제가 사용했던 모든 MCP 클라이언트는 처음 연결할 때 동의(consent)를 요청합니다. 하지만 서버가 사용자 모르게 변경되었을 때는 다시 묻지 않습니다.
제 기기에서 실제로 겪은 사례입니다: 한 서버는 6개 버전 동안 도구 목록을 6번이나 변경했습니다. 85개의 도구에서 103개로 늘어났습니다. 새롭게 추가된 도구에는 update-api-key와 share-email이 포함되어 있었습니다. 제 에이전트라면 한 번도 의심하지 않고 이 모든 것을 호출했을 것입니다.
이러한 변경 사항들 중 대부분은 정직한 제품 작업(honest product work)입니다. 바로 그 점이 문제입니다. CVE를 기다린다고 해서 어떤 것이 정직하고 어떤 것이 적대적인지 알 수 없습니다. 오직 '당신이 승인했다고 말한 이후로 _무언가_가 변했다'는 사실만 알 수 있을 뿐입니다.
도구 유무와 관계없이 제가 할 일들
- MCP 설정에서 **버전을 고정(Pin versions)**하세요.
@latest나 단순히npx -y를 실행하면 다음 실행 시점에 마지막으로 게시된 것이 무엇이든 간에 작동합니다. - 서버를 승인할 때 도구 목록을 스냅샷하고, 매번 실행할 때마다 차이점(diff)을 확인하세요. JSON 덤프와
git diff조차 아무것도 하지 않는 것보다는 낫습니다. - 이름뿐만 아니라 설명과 스키마까지 차이점을 비교하세요. 대부분의 변경 사항은 바로 그곳에 있습니다.
- 비교할 때 **자신의 키를 사용하지 않고 테스트(Probe without your keys)**하세요. 한 서버는 키가 있을 때만 추가 도구를 노출했습니다. 자신을 속이기 아주 쉬운 방법입니다.
제가 만든 것
저는 2번 단계를 수동으로 하는 것에 지쳐서 mcpgawk를 만들었습니다. 이 도구는 사용자가 승인했을 때 모든 도구가 어떤 내용을 말했는지 기록하며, 만약 도구가 나중에 설명을 다시 작성하거나 권한을 얻게 되면, _당신_이 결정할 때까지 호출은 거부됩니다. 에이전트는 스스로 그 과정을 통과하도록 승인할 수 없습니다. 이 도구는 로컬에서 실행되며 아무것도 업로드되지 않습니다.
uv tool install mcpgawk && mcpgawk
현재 Product Hunt에 공개되어 있으며, 아직 제가 얻지 못한 하나의 답변을 모으기 위해 그 스레드를 사용하고 있습니다:
이미 승인한 MCP 서버가 오늘 변경되었다는 것을 어떻게 알아낼 수 있나요?
만약 답이 있다면 — 스크립트든, 습관이든,
방법의 한계점(Method caveats)을 미리 알려드립니다: 키 없이 프로빙하는 것은 도구를 키 뒤에 배치한 서버들의 수를 과소평가하며, 키 없이는 시작하지 않는 6개의 서버는 제외합니다. '도구 표면이 변경되었다(Changed the tool surface)'는 이름, 설명, 입력 스키마 또는 주석의 모든 변화를 의미합니다. 다만, 여러 도구가 이동했더라도 업데이트당 한 번만 계산됩니다. 댓글로 질문해 주시면 업데이트별 목록을 공유해 드리겠습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기