Skip to content
Conduit

mcp server

who-was-heard

Fair Listening: the problem isn’t new media — it’s that we haven’t learned to listen in it. Tools for bringing public discourse together in the YouTube era, without losing the voices that get drowned

fairlistening/who-was-heardcommunitylistedunreviewed

Set up

Runs on your computer. Pick your agent and operating system.

Before you start

  • uv (`curl -LsSf https://astral.sh/uv/install.sh | sh`)
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "who-was-heard": {
      "command": "uvx",
      "args": [
        "who-was-heard"
      ]
    }
  }
}

same format Cursor, GitHub Copilot CLI, Junie, JetBrains AI Assistant, Augment (Auggie CLI), Factory Droid, Kiro, Devin CLI +12

Values in angle brackets are placeholders. Restart Claude Desktop after editing its config.Claude Desktop docs

README

synced Oct 29, 2026

고루듣기 — 유튜브 시대, 공론을 다시 모으는 법

문제는 뉴미디어가 아니다. 그 안에서 듣는 법을 아직 익히지 못했을 뿐이다. 유튜브 시대에 공론을 한데 모으되, 묻히는 목소리를 놓치지 않기 위한 도구.

The problem isn't new media — it's that we haven't learned to listen in it. · English

왜

유튜브 같은 뉴미디어는 누구의 목소리가 크게 들리는지를 바꿔 놓았다. 몇몇 채널과 몇몇 열성 참여자가 공론장을 채우고, 그것이 민주주의에 미치는 영향을 걱정하는 목소리도 크다. 그러나 문제는 미디어 자체가 아니다. 환경이 바뀌었는데, 공론을 모으는 방법은 그대로다.

Polis(2012), Talk to the City(2023), 광청AI(2025) 같은 「브로드리스닝」 도구는 AI로 수천 명의 목소리를 한꺼번에 읽을 수 있다는 걸 보여 줬다. 이 저장소는 그다음 질문을 던진다. 그렇게 모았을 때, 고루 들었나. 널리 듣기(광청 · broad listening)를 넘어 고루듣기(fair listening) — 누구의 목소리가 빠지고, 묻히고, 기계에 의해 모양이 바뀌었는지까지 확인하는 것이다.

이 도구는 한국일보 인터랙티브 기획 「유튜브 부족주의」(2026) 취재에서 출발했다. 한국 정치 유튜브 실시간 채팅 1,400만 건을 재면서 겪은 문제들이 설계의 근거다. 기사는 아래에 링크로만 잇는다. 이 저장소에는 기사가 아니라 방법과 코드가 들어 있다.

무엇을 하나

글이 든 표(댓글·발언·청원 등)와 집단 열(정당·채널·지역·회의 구분 등)을 넣으면 보고서 두 벌을 쓴다.

AI 앱 없이도 돈다. 분석 화면에서 처음부터 끝까지 할 수 있고, 생성형 AI(LLM)나 외부 AI 서비스·API 키가 필요 없다. 글을 숫자로 바꾸는 공개 임베딩 모델 하나가 이 PC 안에서 돌 뿐이다. 클로드 같은 AI 앱에 MCP로 붙이는 것은 대화로 쓰고 싶을 때의 선택이다.

1부 — 무엇이 논의됐나. 공론 지도. 주제와 그 크기, 어느 집단이 말했나, 대표 발언과 발언자(공인의 공개 발언일 때만), 주제마다 「자주 나옴 / 흔들림」 표시.

2부 — 이 지도를 얼마나 믿을 수 있나.

이 도구는 AI 의견 지도를 얼마나 믿을 수 있는지까지만 말한다. 무엇을 뜻하는지는 말하지 않는다.

  • 흔들림 — 같은 자료를 무작위 출발점만 바꿔 여러 번 묶었을 때 주제가 몇 번 다시 나오나
  • 누가 빠졌나 — 정리 규칙과 「안 묶임」으로 집단마다 얼마나 빠졌나
  • 소수 집중 — 몇 사람이 판을 채우나
  • 규모 — 집단 균등 표본판과 원래 비율판
  • 차수와 규칙 — 앞 차수 결과를 보고 사람이 무엇을 뺐나, 채점자끼리 얼마나 일치했나(κ)
  • 선택 — 이 결과를 만든 설정 전부 (규칙 파일의 지문까지)

공개판에는 기본으로 원문이 한 줄도 들어가지 않는다(공인의 공개 발언이나 공개 토론처럼 분석자가 고를 때만 싣는다). 내부 검토판(*_INTERNAL_do-not-share.html)에는 표본 문장이 있어, 분석자가 자기 PC에서 읽고 주제 이름을 붙인다. 원문 차단은 분석자가 못 보게 막는 게 아니라 밖으로 못 나가게 막는 것이다.

써 보기

파이썬이 없어도 된다. Releases에서 윈도·맥 설치판 zip을 받아 풀고 who-was-heard.exe(맥은 who-was-heard.app)를 실행한다. 서명하지 않은 앱이라 처음엔 경고가 뜬다 — 윈도는 「추가 정보 → 실행」, 맥은 우클릭 → 열기.

가장 쉬운 길 — 분석 화면. 설치판을 실행하거나, 파이썬이 있으면 start.pyw를 더블클릭(맥은 start.command)하고 안내 페이지의 「분석하기 →」를 누른다. 브라우저에서 여섯 단계로 간다. 처음 쓰는 사람은 사용법부터.

  1. 자료 — CSV·TSV·XLSX를 올리거나 경로를 적는다. 또는 직접 받기: 미국 의회 회의록(govinfo), 국회 회의록(국회도서관 데이터셋·열린국회정보 Open API), 유튜브 댓글·실시간 채팅(본인 API 키, 작성자 ID 해시), Polis, 웹 주소(파일은 표로, 페이지는 문단으로). 열 이름·채워진 칸·평균 글자 수만 먼저 보여 준다
  2. 설정 — 글 열·집단 열·작성자 열, 공개판에 원문을 실을지(싣지 않음 / 원문만·작성자 없이 / 공인 발언은 이름까지), 세부 설정(표본 크기, 뺄 열 값, 묶음 고르기 등)
  3. 차수 — 1차는 규칙 없이. 임베딩 건수·남은 시간이 보이고, 멈췄다 이어서 돌릴 수 있다. 계산한 임베딩은 모든 프로젝트가 함께 다시 쓴다
  4. 판단 — 묶음마다 표본을 읽고 「공론 아님」 표시와 주제 이름. 채점자마다 저장하면 κ가 바로 나온다
  5. 규칙 — 합의된 묶음으로 초안을 만들고, 표에서 패턴을 고치고 더해 저장 → 3번에서 2차, 3차 …
  6. 결과 — 마지막 차수의 공개판(공유용)과 내부 검토판(원문 포함)을 연다

작업은 문서\who-was-heard\<프로젝트>에 남는다(자료 사본, 차수별 보고서, 판단 파일, 규칙 파일). 이 화면에는 원문이 보이지만 이 PC 밖으로는 나가지 않는다.

명령줄로

python install.py                 # 설치 + 시험
who-was-heard columns 자료.csv     # 열 이름만 본다 (값은 안 보여 줌)
who-was-heard report 자료.csv --text 내용 --group 채널 --speaker 작성자 --out 결과 --name r1

권장 흐름 — 차수 제한 없음

  1. 1차 — 규칙 없이(--preset none) 전부 묶는다
  2. 채점자마다 따로 내부 검토판을 읽고 판단 파일을 쓴다 — {"reviewer":"A","exclude":[17,19],"labels":{"3":"검찰 개혁"}}
  3. rules-draft --reviews A.json,B.json — 일치도(κ)를 재고, 합의된 「공론 아님」 묶음에서 규칙 초안을 쓴다
  4. 초안을 사람이 읽고 고친다
  5. 2차 — report --preset 규칙.json --previous r1_public.json
  6. 필요하면 3차, 4차 … 각 보고서가 앞 차수 사슬을 기록한다
  7. label --reviews … — 합의된 주제 이름을 넣는다. 엇갈리면 「A / B」로 둘 다 적는다

주제를 묶는 방식

공개 다국어 문장 임베딩(기본 paraphrase-multilingual-mpnet-base-v2, API 키 불필요) → UMAP 5차원 → HDBSCAN. 2차원은 지도를 그릴 때만 쓴다. 주제 수 상한이 없고, 안 묶인 글은 회색으로 남는다. 모든 설정은 보고서 「선택」 칸에 찍힌다.

세 겹

whowasheard/파이썬 라이브러리 — 계산 전부
who-was-heard명령줄 (라이브러리와 함께 설치)
servers/MCP 서버 — listen-check(이 도구) · ledger(초고의 수치·금지 문장 검사) · survey-template(분모 규약을 박은 서베이 조회 틀)

대화로 쓰기 — MCP

start.pyw를 더블클릭하면(맥은 start.command) 검은 창 없이 세 서버가 이 PC 안의 주소(http://127.0.0.1:8730/…)로 뒤에서 켜지고, 브라우저에 안내 페이지가 열린다. 쓰는 AI 앱 탭에서 「등록」을 누르면 그 앱 설정에 서버가 들어간다(원래 설정은 백업, 다른 서버는 그대로). 직접 복사해 붙여도 된다. 끌 때는 그 페이지의 「MCP 서버 끄기」를 누른다. 페이지는 PC의 지역 설정에 맞춰 한국어나 영어로 뜨고, 버튼으로 바꿀 수 있다. Claude Code · Cursor · VS Code · Windsurf · Gemini CLI · Codex CLI · LM Studio · LibreChat 등 MCP를 지원하는 앱이면 어디든 붙는다. Claude 데스크톱은 python install.py --mcp로 등록한다(stdio). 자세한 건 servers/CONNECT.md.

  • 주소는 이 PC 안에서만 열린다. 같은 와이파이의 다른 기기도, 인터넷도 닿지 않는다
  • 서버는 대화에 집계만 돌려준다. 원문은 PC의 내부 검토판에만 남는다. 남이 넣은 글 속 지시문이 대화에 섞여 드는 것도 이것으로 막는다
  • Talk to the City·광청AI는 기본 설정에서 원문 전체를 외부 LLM이 읽고 다시 쓴다. 이 도구에서 원문을 읽는 것은 사람뿐이다. 임베딩 모델은 글을 숫자로 바꿀 뿐이고 PC 안에서 돈다

규칙 파일

정리 규칙은 코드에 박지 않고 whowasheard/presets/의 파일로 둔다. 규칙 자체가 판단이기 때문이다. 같은 자료에 같은 규칙 파일을 쓰면 같은 결과가 나오고, 보고서에 파일 이름·버전·지문(sha256)·패턴 전체가 찍힌다. 들어 있는 us-congress · korean-assembly는 정답이 아니라 「이 자료의 1차 결과를 보고 이렇게 정했다」는 예시다.

예시

자료원문보여 주는 것
examples/polis/Polis 시민 온라인 토론 (CC BY 4.0)비공개(private)운영자가 거르는 단계에서 한 의견 집단이 1.5배 더 빠졌다 · 설정 하나로 주제 2개 ↔ 20개
examples/us-congress/미국 의회 회의록 (미국 정부 저작물, 저작권 없음)공개(public) — 발언자 이름·정당1차(규칙 없음) → 사람이 의사진행 묶음을 고름 → 규칙 초안을 사람이 고침 → 2차 → 3차. 규칙이 다수당 발언을 더 많이 뺀 까닭까지
examples/youtube/유튜브 댓글 — 받는 스크립트만, 자료 없음비공개각자 자기 키로 받아 자기 PC에서만. 작성자 ID는 받자마자 해시
examples/korean-assembly/대한민국 국회 회의록 (국회도서관 데이터셋)공개변환·발언자 이름 추정 스크립트. 분석 화면의 「직접 받기 → 국회도서관」이 같은 일을 한다

들어가지 않은 것

취재에 쓴 채팅 원문, 작성자 해시, 서베이 원자료, 인터뷰 전문은 없다. 기사 본문·지면 그래픽·사진(한국일보 저작물)도 없다. 제3자에게서 받은 자료도 없다.

원칙 · 문서 · 라이선스

  • docs/USAGE.md · docs/USAGE.en.md — 사용법(한·영)
  • methods/principles.md — 원칙 ⓪~⑧과 그 근거가 된 측정
  • methods/kouchou-ai-source-notes.md — 광청AI 공개 코드에서 확인되는 것
  • methods/preregistration/template.md — 사전등록 틀
  • 코드 Apache-2.0(LICENSE) · 문서 CC BY 4.0(LICENSE-docs) · © 2026 Donghyeon Lee
  • 보존판이다. 도구 오류 제보만 Issues로 받는다(기능 추가 요청·풀 리퀘스트·기사 내용에 대한 의견은 받지 않는다). 제보할 때 분석한 자료의 원문, 내부 검토판, API 키는 붙이지 않는다.

연재

한국일보 「유튜브 부족주의」(2026)

↑↓ navigate openesc close