어떻게 재나

단계하는 일주기
collect공식 레지스트리 전수 + GitHub 검색 + mcpmoa 공개 API—
filter한국 관련성(한글·.go.kr·기관명) → 후보 좁히기—
enrichREADME에서 엔드포인트·패키지·기관 도메인 추출—
classify분야·데이터제공형 판정(LLM, 결과는 classification.json에 고정)—
measuretools/list 실호출 — 가동·도구수·지연·설명·주석매주
answer분야별 실제 질문을 서버에 던져 답하게 한다(Haiku)매월
grade그 답을 원문과 대조해 채점한다(Opus) → 순위매월

가동은 매주, 순위는 매월 1일에 다시 잰다. 서버가 안 바뀌면 채점 결과도 안 바뀌는데 매주 재호출하는 것은 새 정보가 아니라 남의 서버에 지우는 부하다.

두드릴 때는 tools/list를 보내고, 200이 온 서버에 한해 간격을 두고 2회 더 불러 웜을 잰다(콜드 1 + 웜 2). User-Agent로 우리를 밝힌다.

200이 안 온 서버는 그렇지 않다. 재시도는 연결 실패·5xx일 때만 1회이고, 4xx는 한 번 부른 결과가 그대로 명단에 오른다. 종전에 이 자리에 “3회”라고만 적어 두었는데, 실패한 서버에는 사실이 아니었다 — fresh-eyes 검수가 잡아 고쳤다(2026-08-29).

가동 지표는 돌리면 같은 값이 나온다 — 원자료가 measured.json에 있다. 순위는 그렇지 않다 — 채점이 모델 판단이라 같은 입력에도 흔들린다. 얼마나 흔들리는지를 우리가 직접 재서 variance/에 공개해 두었다. 우리가 1위인 자리일수록 이 두 문장을 함께 읽어 달라.

우리 두드리개가 하는 것과 못 하는 것

“확인 못 함”은 그 서버의 판정이 아니라 우리 호출의 결과다. 2026-09-03에 두드리개를 MCP 규격에 맞췄다 — 그전까지 이 명단에는 살아 있는데 우리가 규격을 못 지켜 거절당한 서버가 섞여 있었다.

지금 하는 것

그래도 못 하는 것 — 코드로 확인한 것만 적는다.

그래서 어휘를 셋으로 가른다: 살아있음 확인(MCP 응답을 실제로 받았다) · 확인 못 함(우리 호출로 확인이 안 됐다 — 죽었다는 뜻이 아니다) · 죽음 확인(DNS 미해결·연결 거부처럼 호스트가 없다는 직접 증거가 있을 때만).

믿으면 안 되는 부분

날짜를 어떻게 적나

이 사이트의 모든 값에는 잰 날이 붙는다 — 문서를 뽑은 날이 아니다. 가동 지표는 2026-09-14, 축(오픈소스·셀프호스팅)은 2026-09-14, 패키지 축은 2026-09-14에 쟀고, 이 페이지 자체는 2026-10-12에 생성됐다. 한때 우리는 “마지막 측정”에 문서를 뽑은 날을 찍고 있었다. 그 자리는 지금 원자료에 측정일이 없으면 생성이 실패하도록 막혀 있다.