Skip to main content
Glama
README.md
# 링킷 (LINKIT) — 청각 소통 지원 MCP

> **LINKIT** = Linkage Lab의 **LINK** + "**Link It!**".
> 듣기 어려움을 겪는 사람과 주변 사람 사이의 소통을 잇는(link) MCP 서버.

듣기 어려움을 겪는 사람(가족·동료·지인, 그리고 당사자 본인)의 소통 특성을 프로필로 구조화하고,
상황별 소통 가이드·실존 보조도구·당사자 증언을 에이전트에게 공급합니다.

## 1. 왜 만들었나 — 정보 비대칭

청각장애는 스펙트럼이 넓습니다. 보청기로 듣되 명료도가 낮은 사람, 입모양에 의존하는 사람,
문자가 편한 사람이 모두 다르지만, 주변 사람은 "어떻게 배려해야 하는지"를 알 방법이 없어
선의가 헛돌거나 역효과가 됩니다. 기술이 장애를 "해결"하는 것이 아니라,
**배려가 작동할 진입 장벽을 낮추는 것** — 그것이 이 서버의 일입니다.

동시에 이 도메인은 LLM이 그럴듯한 일반론을 말하기 가장 쉬운 영역입니다.
링킷의 핵심 가치는 창의적 기능이 아니라, **10년간 청각장애·비장애 동료가 함께 일해 온
표준사업장(링키지랩)에서 검증된 증언과 길잡이를 근거 데이터로 공급해
에이전트가 일반론 대신 실제 경험을 인용하게 만드는 신뢰 레이어**입니다.

## 2. 이 서버가 하지 않는 것 (Non-goals)

- **의료적 판정을 하지 않습니다.** `support_band`는 "안내를 얼마나 깊이있게 할 것인가"의
  지원 강도 구간이지, 청력 평가가 아닙니다. 의료적 판단은 전문의의 영역입니다.
- **장애를 "해결"하지 않습니다.** 소통이 성립할 조건을 주변에 공급할 뿐입니다.
- **실시간 자막 처리를 하지 않습니다.** 레이턴시·스트리밍이 본질인 시스템은
  request/response MCP의 폼팩터와 맞지 않습니다 (로드맵 참조).
- **개인정보를 영속화하지 않습니다.** 프로필은 세션 수명입니다.
  **서버가 아무것도 기억하지 않는 것이 기본값입니다** — 이는 결함이 아니며, 계획된 설계입니다.
  실명 대신 관계 호칭만 받고, 장애 유형 필드는 존재하지 않으며, 프로필은 24시간 후 소멸합니다.

## 3. 아키텍처 원칙

- **자연어 이해·문장 생성 = 클라이언트 LLM / 판정·데이터 = 서버(결정론).**
  서버는 같은 입력에 같은 판정과 같은 원문을 반환합니다.
- **체크리스트 문항 = input schema의 필드 description.** 에이전트가 사용자의 자연어 서술에서
  관찰 항목을 추론해 채우므로, 일반 사용자도 체크리스트 UI 없이 콜드 스타트로 쓸 수 있습니다.
- **상태는 에이전트가 듭니다.** 프로필이 만료·유실되어도 도구는 에러로 끝나지 않고,
  에이전트가 대화 내에서 유지한 `axes_triggered`·`support_band`·flags 인자를 받아
  동일한 개인화를 계속합니다 (stateless 복원력).
- **증언 evidence 레이어.** 가이드·오해 교정·안티패턴 항목마다 실제 당사자 증언이 연결되어,
  에이전트가 규칙을 선포하는 대신 경험을 인용합니다. "왜 이 조언이 맞는가"의 근거가 서버에서 나갑니다.

## 4. 도구 (6)

| 도구 | 역할 |
|---|---|
| `create_communication_profile` | 자연어 서술 → 관찰 항목 추론 → 소통 특성 프로필 생성 (support_band 결정론 산출) |
| `get_communication_profile` | 프로필 조회 (만료 시 복구 경로 안내) |
| `get_hearing_guidance` | 상황(회의/대화/이동/상시)별 가이드 + 증언 evidence + 배려 안티패턴(avoid) + 오해 교정 |
| `recommend_hearing_tools` | 실존 보조도구 추천 (기기 환경·선호 방식·목적 `goal` 기반 스코어링, `last_verified` 명시) |
| `get_self_advocacy_guide` | **당사자 본인용** — 자기 공개 스크립트·실전 소통 패턴 (공개 여부는 전적으로 본인의 선택) |
| `list_demo_profiles` | 체험용 가상 프로필 3종 (전 항목 `is_demo` + 고지 동봉) |

Resource: `guides://linkage-etiquette` (가이드·오해 교정·안티패턴·셀프 애드보커시 원문),
`guides://linkage-testimonies` (증언 20건 + 매핑)

## 5. 데이터 출처와 크레딧

콘텐츠의 원천은 링키지랩 10년 표준사업장의 검증 자료입니다.

- 「함께 배려하고 함께 일하는 이야기」 업무 길잡이 (상황별 가이드 원문)
- 사내 인식개선 콘텐츠 — 운영1파트 제작 (OX 문항 → 오해 교정 데이터)
- 당사자 증언·롤링페이퍼 (evidence 레이어 20건 — **익명 요지 발췌, 사내 사용 허락 확인**)

모든 증언은 실명·특정 가능 정보가 없는 익명 발췌이며, 데모 프로필은 전원 가상 인물입니다.
"쉬운 공지글과 이미지 텍스트 설명은 비장애인 동료에게도 도움이 된다"는 증언(T-C3)처럼,
이 데이터는 보편적인 MCP 설계의 근거이기도 합니다.

## 6. 현재 발견된 한계

- **인메모리 저장소**: 멀티 레플리카·콜드 스타트 시 프로필이 유실될 수 있습니다.
- **콘텐츠 커버리지**: 현재 청각 1개 유형입니다. 단, 원문 자료에는 지체·내부장애 문항이
  이미 태깅되어 있어 (`EXPANSION_SEED`, 데이터 소스 4개 유형) 확장의 근거가 코드에 존재합니다.
- **보조도구 DB는 4건**입니다. 지원 제도·조건은 자주 바뀌므로 모든 항목에 `last_verified`를
  명시하고, 에이전트가 변경 가능성을 사용자에게 안내하도록 강제합니다.

## 7. 실행

```bash
npm ci && npm run build && npm start   # :8080/mcp (streamable HTTP, stateless)
node test-client.mjs                    # v2 전체 시나리오 스모크 테스트 (13종)
```

## 8. KC 배포

Git 소스 빌드(저장소 루트에 Dockerfile) 또는 이미지 등록(`--platform linux/amd64` 필수).
Endpoint: `https://<서버명>.playmcp-endpoint.kakaocloud.io/mcp`

## 9. 앞으로의 확장 방향성

- **사용자가 동의하는 경우, 실시간 자막 보정 앱(별도 클라이언트)에 이 MCP 서버가 "프로필 공급자"로 참여** —
  자막 보정의 구현체는 MCP 폼팩터 밖이지만, 그 앱이 필요로 하는 문맥
  (입모양 의존, 전문용어 취약, masking 경향)은 정확히 이 서버의 프로필이 공급할 수 있습니다.
- **Fact에 관한 기반을 지금보다 더 확충**: 근로지원인 제도, 보조공학기기 지원, 자막 서비스별 지원 조건 —
  조건이 자주 바뀌어 환각 위험이 큰 한국 특화 데이터의 `last_verified` 큐레이션.

## 10. 개발 가능한 후속 MCP  
- **타 장애유형 확장**: 원문(링키지랩 내부 장애인식개선 컨텐츠)에 이미 존재하는 지체·내부장애 태깅 데이터(`EXPANSION_SEED`) 이식.
- **증언 수집 파이프라인**: 롤링페이퍼 QR은 지금도 수집 중 — 증언→사람 검토→구조화 데이터.
- 피드백 검토 큐(인증 필요), NFC/QR 무설치 트리거, 회의 자동 준비(별도 푸시 서비스).