이 글은 modelmarket.dev 블로그 기사(영어)의 일본어 버전입니다.
MCP 서버에 연결하는 클라이언트는 해당 도구 정의(이름, 설명문, 입력 스키마)를 읽습니다. 모델은 이를 지침으로 읽습니다. 정의를 한 번 고정(핀링)하고 이후 그것을 신뢰한다는 방식은 정의가 변하지 않을 때만 성립할 수 있습니다.
저희가 공개하는 MCP 서버 로그 HISTOR는 공식 MCP 레지스트리에 있는 모든 리모트 서버의 도구 목록을 하루에 한 번 읽어와 변경 사항을 모두 기록합니다. 이 전체 기록을 파일로 다운로드할 수 있게 되었습니다. 첫 번째 스냅샷(2026년 10월 20일)부터 정의가 얼마나 자주 변하는지 소개하겠습니다.
9월 24일까지 도구 목록이 기록되었으며, 현재도 레지스트리에 게재된 리모트 서버 10,929대를 대상으로 했습니다. 10월 20일까지 그중 4,926대(45%)가 적어도 한 번 다른 도구 목록을 반환했습니다.
- 2,036대는 기존 도구의 설명문을 변경했습니다.
- 1,180대는 도구를 추가하고, 336대는 삭제했습니다.
- 변경한 서버의 일반적인 변경 횟수는 1회였고, 90 퍼센타일은 5회였습니다. 75대는 이 27일 동안 14회 이상 변경했습니다.
- 두 목록 사이를 오가는 '흔들림'은 거의 없었습니다. 23,821건의 변경 중, 이전에 제시된 목록으로 돌아간 것은 단 200건에 불과했습니다.
패키지는 상황이 다릅니다. npm이나 PyPI에서 공개한 버전은 변경할 수 없기 때문입니다. HISTOR는 새 버전이 나올 때마다 샌드박스에서 실행합니다. 21,738개 패키지 중 1,419개 패키지의 도구 목록이 새 버전에서 바뀌었습니다.
기록된 총 23,821건의 변경(리모트 서버와 패키지, 9월 24일~10월 20일)의 내역입니다.
| 변경 수 | |
|---|
| 기존 도구만 변경 (추가/삭제 없음) | 16,436 (69%) |
| ... | |
| 변경할 때마다 변경된 도구를 한 번씩 세어보면, 입력 스키마의 변경이 105,324회, 설명문의 변경이 59,287회, 출력 스키마의 변경이 16,422회였습니다. 14,164건, 즉 59%의 변경이 적어도 하나의 설명문에 영향을 주었습니다. 설명문은 모델이 가이드로 취급하는 텍스트입니다. | |
설명문에 변동하는 수치를 넣으면 도구가 매일 재작성됩니다. 2,719건의 변경은 설명문 속 숫자만 바뀐 경우였습니다. 그중 2,493건은 한 공개자에 의한 것으로, 모든 엔드포인트의 설명문에 소스 개수와 도구 개수의 카운트를 작성했습니다(‘질문을 M개의 소스를 아우르는 N개의 도구 중 하나에 할당한다’는 형태의 문장입니다). 카운트가 움직일 때마다 해당 도구 전체가 새로운 정의가 됩니다. 정의를 핀링하는 클라이언트는 변경으로 감지하고, 프롬프트를 캐시하는 클라이언트는 재구축이 필요하며, 검토자는 아무 의미 없는 차이점만 읽게 됩니다. 건수, 날짜, '최종 업데이트'는 도구의 정의가 아니라, 도구의 결과에 포함되어야 합니다.
클라이언트의 다른 도구와 경쟁하는 설명문이 있습니다. 63개 호스트의 280개 서버에는 웹 검색이나 클라이언트에 내장된 fetch, 또는 모델 자체 지식보다 자신을 선택하도록 모델에게 지시하는 도구 설명이 있었습니다. ‘PREFER OVER WEB SEARCH for …’, ‘prefer it over the built-in web search’, ‘use this instead of WebFetch’와 같은 것입니다. 280개 중 185개가 한 공개자에 의한 것이었습니다. 자신의 도구들 사이에서 무엇을 언제 사용할지 모델에게 알려주는 것은 좋은 습관입니다. 그러나 다른 서버의 도구보다 자신의 도구를 선택하라고 전달하는 것은, 사용자가 거의 읽지 않는 텍스트를 통해 클라이언트 라우팅에 간섭하는 행위가 됩니다. 클라이언트는 이에 따르기 전에 사용자에게 확인할 수 있습니다.
클라이언트가 인증 정보를 가지고 받을 수 있는 내용입니다. HISTOR는 익명으로 연결합니다. 키가 필요한 서버의 경우, 공개된 도구 목록을 반환하거나 아무것도 반환하지 않습니다. -
변경의 원인. 새로운 도구 목록은 릴리스일 수도 있고, 배포 롤백이나 기능 플래그일 수도 있습니다. 대부분의 변경은 정상적인 릴리스입니다. 로그는 변경이 발생했음을 기록하지만, 그 이유는 기록하지 않습니다. -
변경이 유해한지 여부. 이러한 변경 중 WARDEN의 패턴 스캔으로 인해 새로 차단 단계에 진입한 서버는 3대였습니다. 이는 변경 전후 양쪽 목록을 현재 규칙으로 스캔한 735건의 변경만 대상입니다. 패턴 일치는 사람이 읽기 위한 단서일 뿐, 판정은 아닙니다. -
인기도. 게재된 서버는 모두 1대로 계산합니다.
histor.modelmarket.dev/datasets/ 에서 얻을 수 있습니다. 스냅샷은 월 1회이며, 편집물로서의 라이선스는 CC BY 4.0입니다.
같은 파일을 Hugging Face에서도 공개하고 논문에서 인용할 수 있도록 Zenodo에도 아카이브했습니다. 이 스냅샷의 DOI는 doi:10.5281/zenodo.23512760 입니다.
servers.jsonl.gz
: 83,957행(원격 엔드포인트와 패키지. 게재가 종료된 것 포함). 상태, 도구 수, 현재 도구 목록의 요약 -
toolsets.jsonl.gz
: 실제로 반환된 57,846개의 도구 목록(현재 것과 변경으로 대체된 모든 것) -
changes.jsonl.gz
: 23,821건의 변경. 추가/삭제/변경된 도구를 필드 단위로 기록 -
scans.jsonl.gz
: WARDEN의 패턴 일치 및 그 규칙 -
pattern-set.json
: 모든 파일의 SHA-256.
로그 키로 서명되었으며, 스냅샷 획득 시점의 서명된 트리 헤드를 포함합니다.
형식이 일정하지 않은 필드는 JSON 텍스트로 저장되어 있어, 어떤 파일도 평평한 테이블(flat table)처럼 읽을 수 있습니다. 위의 45%는 DuckDB 쿼리 하나로 구할 수 있습니다.
WITH base AS (
SELECT id FROM 'servers.jsonl.gz'
WHERE transport <> 'stdio' AND NOT delisted
...
아무것도 다운로드하지 않고 1대만 확인하려면 modelmarket.dev/tools/histor-check 를 사용하세요.
HISTOR와 WARDEN은 저희가 개발하고 있습니다. 이 글에서는 특정 서버 이름을 언급하지 않았습니다. 데이터셋에는 레지스트리와 마찬가지로 모든 서버 이름이 포함됩니다. 향후 스냅샷에서 제외해 주었으면 하는 서버 운영자는 alexar76/histor 에 issue를 생성해 주세요.