에이전트에 MCP 서버를 추가할 때는 이름으로 선택합니다. 이름은 여러분이 읽은 것이고, 동료가 추천한 것이며, 보안팀이 승인한 것입니다. 하지만 에이전트가 실제로 실행하는 코드는 오늘 그 이름이 가리키는 대상입니다.
이름은 그대로인데 그 아래가 바뀌는 상황을 저희는 Listing Swap(등록 항목 바꿔치기) 이라고 부릅니다. 즉, 공식 MCP 레지스트리에 있는 서버의 현재 버전이 같은 이름으로 처음 게시된 버전과 다른 원격 엔드포인트 도메인이나 다른 패키지 소유자로 연결되는 경우입니다.
공식 MCP 레지스트리의 서버 1,075개가 처음 게시되었을 때와 다른 도메인이나 패키지 소유자를 가리키고 있습니다. 이 중 698개는 제목과 설명이 완전히 그대로였습니다.
측정한 내용
2026년 10월 10일, 공식 레지스트리의 모든 항목(서버 41,351개의 버전 142,002개)을 내려받아 각 서버의 현재 버전을 그 이름으로 처음 게시된 버전과 비교했습니다. 바꿔치기는 소유자가 바뀐 경우에만 집계했으며, 서버가 단순히 새 경로, 버전 또는 하위 도메인으로 옮긴 경우는 제외했습니다.
| 항목 | 서버 수 |
|---|---|
| 레지스트리의 서버 | 41,351 |
| 버전이 두 개 이상인 서버 | 17,989 |
| 등록 항목 바꿔치기 | 1,075 (이력이 있는 서버의 6.0%) |
| 패키지를 이제 다른 소유자가 게시함 | 652 |
| 원격 엔드포인트가 다른 도메인으로 이동함 | 377 |
| 로컬 패키지와 원격 엔드포인트 사이에서 전환됨 | 47 |
| 제목과 설명은 그대로인 채 바꿔치기됨 | 698 (65%) |
왜 중요한가
이 서버들이 악성이라는 뜻은 아닙니다. 대부분의 바꿔치기는 아마 평범한 일일 것입니다. 프로젝트 이름이 바뀌었거나, 호스팅을 옮겼거나, 패키지를 새 관리자에게 넘긴 경우입니다. 문제는 탈취도 정확히 똑같아 보이며, 지금은 어느 쪽이든 아무도 알아차리지 못한다는 점입니다.
- 레지스트리는 대상이 아니라 이름을 확인합니다. 네임스페이스에 게시할 수 있다는 것은 그 네임스페이스를 관리한다는 증명입니다. 버전 2가 가리키는 곳과 버전 1이 가리키던 곳을 비교하는 장치는 없습니다.
- 클라이언트는 이름을 신뢰합니다. 레지스트리에서 설치하면 이름이 최신 버전으로 해석됩니다. 한 번 내린 승인은 엔드포인트나 패키지 소유자가 바뀌어도 다시 요청되지 않습니다.
- 등록 항목은 그대로처럼 보입니다. 바꿔치기의 3분의 2에서 제목과 설명이 바뀌지 않았기 때문에, 등록 항목을 검토하는 사람에게는 새로운 것이 보이지 않습니다.
이는 Invariant Labs가 2025년에 설명한 도구 정의 “rug pull”보다 한 단계 위에 있는 문제입니다. rug pull은 승인 후에 서버가 도구 설명을 바꾸는 방식입니다. 등록 항목 바꿔치기에서는 서버가 스스로 아무것도 바꿀 필요가 없습니다. 이름이 이제 다른 사람이 운영하는 다른 코드로 연결될 뿐입니다.
무해한 예시
날씨 서버 io.example/weather를 예로 들어 보겠습니다. 이 서버는 @example npm 스코프의 패키지로 게시되어 있습니다. 팀이 이를 승인합니다. 한 달 뒤 같은 이름, 같은 설명으로 버전 1.3이 게시되지만, 패키지는 이제 다른 사람이 운영하는 다른 스코프에서 제공됩니다. 에이전트는 다음 설치 때 1.3을 받습니다. 클라이언트는 코드의 게시자가 바뀌었다는 사실을 전혀 알려주지 않으며, 새 패키지가 파일을 읽거나 새로운 곳으로 데이터를 보낸다면 이전 패키지에 부여한 권한으로 그렇게 합니다.
대응 방법
MCP 서버를 설치한다면
- 버전을 고정하고, 레지스트리가 지원한다면 패키지 해시나 이미지 다이제스트도 고정하세요.
- 엔드포인트 도메인이나 패키지 소유자가 바뀌면 새 서버로 간주하고 다시 검토하세요.
- 설치 전에 확인하세요. Redthread 커넥터를 연결한 ChatGPT나 Claude에 “이 MCP 서버가 Redthread 스캔을 통과했는지 확인해 줘”라고 묻거나, 다음 오픈소스 도구로 배지를 검증하세요:
atpp verify. - 이미 설치한 것을 확인하세요:
python3 atpp.py check-config명령이 내 컴퓨터에서 Claude, Cursor, VS Code 설정을 읽고 등록 항목 바꿔치기가 일어난 서버를 표시합니다 (어떻게).
MCP 서버를 게시한다면
- 호스팅을 옮기거나 패키지를 넘길 때는 등록 항목과 저장소에 그 사실을 밝혀, 사용자가 새 대상을 신뢰할 근거를 갖도록 하세요.
- 패키지 해시를 게시하고 이미지는 다이제스트로 고정하세요. 서명된 아티팩트가 있으면 사용자가 비교할 대상이 생깁니다.
레지스트리나 클라이언트를 운영한다면
- 이름 옆에 대상을 표시하고, 버전 간에 무엇이 바뀌었는지 보여주세요.
- 서버의 엔드포인트 도메인이나 패키지 소유자가 바뀌면 다시 확인을 요청하세요. 앱이 새 권한을 원할 때 휴대폰이 다시 묻는 것과 같은 방식입니다.
이 검사는 무료입니다
오늘부터 Redthread의 일일 레지스트리 스캔에 target-stable 검사가 포함됩니다. 이제 각 서버의 서명된 스캔 결과와 배지에 처음 게시된 이후 등록 항목이 바꿔치기되었는지가 표시되며, 집계 수치는 레지스트리 스캔 페이지에서 매일 업데이트됩니다. 같은 검사를 Redthread 커넥터를 통해 ChatGPT와 Claude 안에서도 사용할 수 있습니다.
팀에서 서드파티 MCP 서버를 설치하는 에이전트를 운영하고 있고, 승인된 서버가 바꿔치기되면 알려주는 허용 목록이 필요하다면 문의하세요.