GitHub Repository Dossier · 정적 분석 · 커밋 고정

mobile-mcp — 에이전트가 폰을 조작하는 표준이 되려는 MCP 서버

LLM 에이전트에게 iOS·Android 실기기·시뮬레이터·에뮬레이터를 쥐여 주는 MCP 서버. 접근성 트리 우선, 도구 27개, npx 한 줄 설치 — 그리고 1.0.0부터 실제 조작은 이 레포 밖의 불투명 Go 바이너리(mobilecli)가 한다. substantive 28파일 · 5,284줄을 커밋 고정 상태로 정독하고 주장 22건을 코드로 대조한 결과다.

목차
  1. 출처와 신뢰 등급
  2. 읽기 전에 (10분 가이드)
  3. 채택 판단
  4. 실제 구현
  5. 아키텍처
  6. 온보딩 (실행하지 않음)
  7. 정독 범위
  8. 유지보수 신호
  9. 보안 · 프라이버시
  10. 라이선스
  11. 주장 검증 원장
  12. 원문 링크 원장
  13. 수집 한계
01 · Provenance

출처와 신뢰 등급

이 문서의 모든 주장은 아래 단일 커밋에 고정된 저장소 상태와, 캡처 시점의 GitHub REST API 응답만을 근거로 한다. 코드는 한 줄도 실행하지 않았다 (설치·빌드·테스트·import 전부 없음).

저장소
github.com/mobile-next/mobile-mcp
분석 커밋 (고정)
409e0a203f0cc843d02403f242f558b6b87d3bff (main, ls-remote 재확인 — 캡처 전후 드리프트 없음)
루트 트리
3cfae602ccf9d262c98edc2b290658f6bce4a23e
캡처
2026-08-25 04:04 UTC 시작 · bare git + GitHub REST (인증) · capture-id 26d1961e-542c-4c8e-8aa7-9972d6ba4d40
방법
정적 정독 — substantive 28파일 5,284줄, 체크아웃·실행 없음 (bare 플러밍만)
증거 묶음
공개 증거 인덱스 · 딜리버리 리시트
Evidence trust B
Implementation confidence medium
Runtime confidence unknown
Maintenance coverage medium
Security / privacy confidence medium

B인 이유: 커밋·트리 고정 + 완전한 인벤토리(48 blob 전수 분류) + 선정 파일 정독까지 갖췄지만, 정적 분석의 천장에 걸린다 — 실기기 동작은 미검증(runtime unknown)이고, 1.0.0부터 실제 조작을 담당하는 mobilecli는 이 레포 밖의 Go 바이너리라 여기서 검증되지 않으며, Dependabot·코드 스캔 상태는 API가 거부(403)해 알 수 없다.

02 · Before You Read

읽기 전에 — 10분 가이드

mobile-mcp는 "에이전트에게 폰을 준다"를 MCP 표준 도구 27개로 포장한 서버다. Claude·Cursor·Goose 등 MCP를 말하는 클라이언트라면 npx 한 줄로 붙는다. 스크린샷 좌표 대신 접근성 트리를 먼저 쓰는 설계라 토큰이 싸고 좌표 오차에 강하다 — 이 축의 사실상 표준 후보(스타 5,995, MCP 공식 레지스트리 등재)다.

다만 README만 읽으면 안 보이는 반전이 네 개 있다. 이 문서가 코드에서 확인한 순서대로:

  • 조작의 실체는 이 레포에 없다. 1.0.0 BREAKING 이후 기본 경로는 TypeScript가 아니라 mobilecli라는 별도 Go 바이너리다. npm 3단 체인(mobilewright → driver-mobilecli → mobilecli)으로 내려받는 불투명 실행 파일 — 이 도시에의 정적 분석 범위 밖이다 (src/mobile-device.ts, §4·§9).
  • 텔레메트리는 기본 ON이다. PostHog 공개 프로젝트 키가 소스에 하드코딩돼 있고(src/server.ts:109-151), 끄려면 MOBILEMCP_DISABLE_TELEMETRY를 직접 세팅해야 한다. 스크린샷 크기까지 이벤트로 나간다(:788-794).
  • SSE 모드 인증은 fail-open이다. MOBILEMCP_AUTH 미설정이면 인증 검사가 통째로 스킵된다(src/index.ts:13-16) — README는 "인증 지원"이라고만 말한다.
  • 클라우드 도구는 과금이다. mobilenext.ai 실기기 할당 도구가 같은 서버에 실려 있고, 가드는 도구 어노테이션과 주석("shared and billed")뿐이다.

읽는 법: 판단만 필요하면 §3. 코드 근거는 §4·§5. 도입 절차와 스위치는 §6·§9. README 원문 링크는 전부 §12에 있다.

03 · Adoption Verdict

채택 판단

조건부 채택 — 로컬 디바이스 자동화 용도로는 이 축의 기준점. 단, 스위치 세 개를 먼저 확인하라: ① MOBILEMCP_DISABLE_TELEMETRY=1 ② SSE로 노출한다면 MOBILEMCP_AUTH 필수 (미설정 = 무인증) ③ mobilecli 불투명 바이너리 공급망을 수용할지 — 못 하면 MOBILEMCP_LEGACY_ROBOT=1 레거시 경로가 남아 있지만 제거가 예고돼 있다.
5,995
GitHub stars
27
MCP 도구 (어노테이션 테스트 고정)
22
주장 대조 (§11)
2
HIGH CVE — 둘 다 패치됨

요약 판정

잘하는 것 — 접근성 트리 우선 설계, 27개 도구 전부 읽기/쓰기/파괴 어노테이션이 테스트로 고정, CI는 npm ci --ignore-scripts + provenance 서명 배포, HIGH CVE 2건(임의 URL 실행·경로 탈출)을 각각 한 버전 만에 패치, 외부 기여 PR도 실제로 머지된다.

걸리는 것 — 실조작 로직이 불투명 Go 바이너리로 이사해 감사 가능성이 꺾였고, SSE 인증 fail-open은 문서화돼 있지 않으며, 텔레메트리는 opt-out이다. 릴리즈 위생도 거칠다: 태그 3개(0.0.60–62)는 릴리즈 없이 방치, 1.0.1은 CI FAILURE 3분 뒤 1.0.2로 덮고 같은 날 둘 다 공개됐다. 보안 신고 채널이 Slack DM이라는 점도 성숙도와 어긋난다.

"채택"의 뜻: 코드가 그렇게 짜여 있음을 확인했다는 것이지, 실기기에서 그렇게 동작함을 본 것이 아니다 (runtime unknown, §13).

04 · Code Evidence

실제 구현 — file:line 실증

아래는 README의 문장이 아니라 고정 커밋의 코드에서 직접 확인한 것들이다. 인용 링크는 전부 분석 커밋에 고정돼 있다.

진입점 — stdio 기본, SSE는 옵션이고 fail-open

서버는 기본적으로 stdio MCP로 뜨고, --listen을 주면 SSE HTTP 서버가 된다 (src/index.ts). SSE 경로의 인증은 MOBILEMCP_AUTH 환경변수 기반 Bearer 토큰인데, 변수가 없으면 검사 자체를 건너뛴다src/index.ts:13-16이 명시적으로 "인증 미설정 → 통과"로 짜여 있다. 설정돼 있으면 :18-27에서 Bearer 비교, :29-42는 Origin 헤더가 오면 403으로 끊어 DNS rebinding을 방어하고, :52-56은 SSE 두 번째 클라이언트를 409로 거절한다. README는 "인증 지원"이라고만 쓴다 — fail-open이라는 사실은 코드에만 있다 (C005).

도구 27개 — 어노테이션이 테스트로 고정돼 있다

src/server.ts:73-107tool() 래퍼가 모든 도구를 등록하며, 도구 안에서 던져진 에러를 문자열로 삼켜 MCP 응답으로 돌려준다 (프로세스는 죽지 않는다). 각 도구의 readOnly/destructive 어노테이션 매트릭스는 test/server-annotations.test.ts가 전수 고정한다 — 어노테이션을 조용히 바꾸면 테스트가 깨진다 (C011).

로봇 해석 — 기본은 mobilecli, 레거시는 환경변수 뒤에

src/server.ts:170-223 getRobotFromDevice가 디바이스 문자열을 Robot 구현으로 해석한다. 1.0.0부터 기본은 MobileDevice(src/mobile-device.ts) — 실제 탭·스와이프·스크린샷은 전부 mobilecli 외부 바이너리 호출이다. MOBILEMCP_LEGACY_ROBOT=1을 세우면 구 TypeScript 경로(AndroidRobot=adb, IosRobot=go-ios+WDA, Simctl+WDA)로 돌아간다. CHANGELOG는 레거시 경로를 한 달 뒤 제거한다고 예고한다 (C003·C004).

mobilecli 호출 규율 — 셸은 안 거친다

src/mobilecli.ts는 바이너리를 MOBILECLI_PATH → npm 체인 순으로 찾고, execFileSync로 셸 미경유 실행한다 — 인자 주입으로 셸 명령이 되는 구조는 아니다. 레거시 Android 경로도 src/android.ts:410-445에서 sendKeys 텍스트를 이스케이프하고, 시뮬레이터 앱 설치는 src/iphone-simulator.ts:135-150에서 zip-slip을 방어한다.

텔레메트리 — opt-out, 키는 소스에

src/server.ts:109-151: PostHog 공개 프로젝트 키(phc_ 접두)가 하드코딩돼 있고, distinct_id = sha256(hostname + execPath)로 기기 식별자를 만든다. 끄는 스위치는 MOBILEMCP_DISABLE_TELEMETRY. 스크린샷을 찍을 때마다 이미지 크기가 이벤트로 나간다(:788-794). README에 공개돼 있으니 은닉은 아니다 — 기본값이 ON일 뿐이다 (C007).

두 개의 HIGH CVE와 그 패치 자리

CVE-2026-35394 (임의 URL/스킴 실행, <0.0.50): 패치가 src/server.ts:652-671 open_url 스킴 화이트리스트다. 단 :662-665에서 MOBILEMCP_ALLOW_UNSAFE_URLS=1이면 게이트가 다시 열린다 — 이 변수는 취약점 클래스를 재개방하는 스위치다. CVE-2026-33989 (스크린샷 저장 경로 탈출, <0.0.49): 패치가 src/server.ts:723-742src/utils.ts:85-104 validateOutputPath이고, 0.0.62에서 symlink 우회(#377)까지 추가로 막았다 (C008·C009).

클라우드 디바이스 — 같은 서버, 과금 경로

src/server.ts:314-390이 mobilenext.ai 로그인, :408-430이 실기기 할당이다. 할당 도구 설명에 "shared and billed … never speculatively"라고 박아 뒀고, 해제(:432-447)는 destructiveHint가 붙어 있다. 즉 에이전트가 이 도구를 부르면 돈이 나가는 구조이며, 방어선은 어노테이션과 프롬프트 규율뿐이다 (C010).

버전의 출처

package.json의 버전은 0.0.1 고정이다 — 배포 버전은 CI가 태그에서 스탬프한다(.github/workflows/build.yml, npm ci --ignore-scripts + provenance 서명). 소스만 보고 버전을 판단하면 틀린다 (C013).

05 · Architecture

아키텍처 — 껍데기가 된 서버

README의 아키텍처 그림(§12 occurrence 18, 재게시하지 않음) 대신, 코드에서 재구성한 실제 경로다.

MCP 클라이언트 (Claude · Cursor · Goose · Copilot Studio …)
  │  stdio (기본)   │  SSE --listen (Bearer=MOBILEMCP_AUTH, 미설정 시 무인증)
  ▼
src/server.ts — mobile_* 도구 27개 (읽기/쓰기/파괴 어노테이션, 테스트 고정)
  ▼  Robot 인터페이스 (src/robot.ts)
  ├─ MobileDevice ······ 1.0.0 기본 경로
  │     └─▶ mobilecli  ◀ 불투명 Go 바이너리 (이 레포 밖)
  │           npm 체인: mobilewright@0.0.52 → @mobilewright/driver-mobilecli → mobilecli@1.0.0
  ├─ 레거시 경로 (MOBILEMCP_LEGACY_ROBOT=1, 제거 예고)
  │     ├─ AndroidRobot ─ adb
  │     ├─ IosRobot ──── go-ios + WebDriverAgent
  │     └─ Simctl ────── xcrun simctl + WebDriverAgent
  └─ 클라우드 (mobilenext.ai) ─ 실기기 할당/해제 · 과금

1.0.0 BREAKING의 실체는 기능 추가가 아니라 소유권 이동이다: 탭·스와이프·스크린샷의 구현이 이 저장소의 TypeScript에서 별도 저장소의 Go 바이너리(mobilecli)로 옮겨 갔고, mobile-mcp는 MCP 프로토콜 어댑터 + 텔레메트리 + 클라우드 게이트웨이로 얇아졌다. 감사 관점에서는 "코드를 읽으면 동작을 안다"가 이 커밋부터 성립하지 않는다 — 동작의 절반은 바이너리 안에 있다.

레거시 경로가 살아 있는 동안은 MOBILEMCP_LEGACY_ROBOT=1로 전 구간 소스 감사가 가능하다. CHANGELOG의 제거 예고가 실행되면 그 창은 닫힌다.

06 · Onboarding (not executed)

온보딩 — 실행하지 않고 읽은 절차

이 분석은 아무것도 설치·실행하지 않았다. 아래는 저장소 문서가 지시하는 절차의 정리이고, 검증되지 않은 부분은 그렇게 표시한다.

설치 한 줄
npx -y @mobilenext/mobile-mcp@latest — MCP 클라이언트 설정에 command로 등록
전제
iOS: Xcode/CLT · Android: SDK platform-tools(adb) · Node.js 런타임 (§12 occurrence 20–22)
클라이언트 딥링크
VS Code · Cursor · Goose는 README의 원클릭 설치 딥링크 제공 — 셋 다 디코드하면 동일한 npx 명령이다 (§12 occurrence 8·32·34)
SSE 모드
--listen + MOBILEMCP_AUTH — 변수 없이 열면 무인증이다 (§4)
권장 스위치
MOBILEMCP_DISABLE_TELEMETRY=1 · MOBILEMCP_ALLOW_UNSAFE_URLS는 절대 세우지 말 것

llms-install.md는 에이전트가 자동 설치할 때 읽는 문서인데, "No API key or credentials are required"라고 단언한다. 로컬 디바이스 경로에서는 참이지만, 같은 서버에 실린 클라우드 디바이스 도구는 mobilenext.ai 로그인과 과금이 필요하다 — 문장 그대로 믿으면 반쪽이다 (C012, 부분 지지).

07 · Reading Scope

정독 범위 — 무엇을 읽었나

인벤토리 48 blob 전수 분류 → substantive 28파일 선정 → 5,284줄 정독. 선정 밖 20건은 전부 생략 사유와 함께 스냅샷 원장에 기록돼 있다 (아이콘·락파일·에셋 등).

구역파일핵심
소스 (10)src/index.ts · server.ts · robot.ts · mobile-device.ts · mobilecli.ts · android.ts · ios.ts · iphone-simulator.ts · webdriver-agent.ts · utils.ts진입·도구 27종·로봇 4계보·검증 유틸 — §4의 근거 전부
테스트 (6)test/server-annotations.test.ts · mobile-device.test.ts · mobilecli.test.ts · test/android.ts · prompt-android-emulator.md · playwright.config.ts어노테이션 매트릭스 고정 + Claude 구동 e2e 프롬프트
문서 (7)README.md · LICENSE · SECURITY.md · CONTRIBUTING.md · ROADMAP.md · CHANGELOG.md · llms-install.md주장 원천 (§11의 입력) — 권위가 아니라 대조 대상
매니페스트 (3)package.json · server.json · glama.json버전 스탬프 구조 · MCP 레지스트리 등재
CI (2).github/workflows/build.yml · .husky/pre-commit--ignore-scripts · provenance · 레지스트리 배포

전체 파일 목록·blob id·생략 사유는 증거 인덱스의 스냅샷 원장에 있다.

08 · Maintenance Signals

유지보수 신호

5,995
stars · 포크 514
28+
기여자 (1페이지 표본)
862
CI 런 누적
87
community health %
  • 게이트키핑은 사실상 1인 — gmegidish 291커밋 vs 2위 krismuhi 44커밋. 다만 외부 기여 PR(표본 30건 중 머지 20건에 TsurP·a1573595·wxxion 등 외부인 포함)이 실제로 머지되는, 닫힌 1인 프로젝트는 아니다 (C016).
  • 릴리즈 위생이 거칠다 — 태그 0.0.60·0.0.61·0.0.62는 GitHub 릴리즈 없이 태그만 존재한다 (C018). 2026-08-09에는 1.0.1 태그 CI가 10:34 FAILURE, 3분 뒤 1.0.2가 성공, 10:43에 두 릴리즈가 동시 공개됐다 — 실패 버전을 지우지 않고 덮는 방식이다 (C019).
  • 리뷰 응답 — coderabbitai 봇이 이슈에 19초 만에 자동 플랜을 달지만, 사람 첫 응답은 표본 기준 93.9시간(이슈 #399)이다. 봇 응답을 유지보수 신호로 읽으면 과대평가한다 (C020).
  • e2e의 방식 — self-hosted 러너에서 claude --dangerously-skip-permissions로 Claude가 실기기 에뮬레이터를 조작하는 e2e가 돈다 (C014). 흥미로운 동시에, CI 인프라 신뢰 경계가 그만큼 넓다는 뜻이다.
  • 이슈 위생 — community health 87%, issue/PR 템플릿 부재. 표본 30건 중 open 16 / closed 5 관측.
  • 속도 — 2025-03-28 공개 후 17개월 만에 스타 5,995 · 마지막 push 2026-08-18. 살아 있는 프로젝트다.
09 · Security · Privacy

보안 · 프라이버시

등급: security/privacy medium. 은닉된 악성 패턴은 발견하지 못했다 — 아래는 설계 선택이 만드는 표면이다.

  • 불투명 바이너리 공급망 — 기본 경로의 실조작은 npm 3단 체인으로 내려받는 Go 바이너리(mobilecli)다. 이 도시에의 소스 감사가 커버하지 못하는 구간이며, 신뢰는 mobile-next 조직과 npm provenance에 위임된다.
  • SSE fail-openMOBILEMCP_AUTH 미설정 시 무인증 (src/index.ts:13-16). Origin 403 방어(:29-42)는 있지만, 네트워크에 노출하면서 변수를 잊으면 폰 조작 API가 그대로 열린다.
  • 텔레메트리 기본 ON — PostHog 키 하드코딩 + sha256(hostname+execPath) 기기 식별 + 스크린샷 크기 이벤트 (src/server.ts:109-151, :788-794). opt-out 방식.
  • CVE 재개방 스위치MOBILEMCP_ALLOW_UNSAFE_URLS=1은 CVE-2026-35394가 막은 임의 스킴 URL 실행을 되살린다 (src/server.ts:662-665).
  • 과금 도구 동거 — 클라우드 실기기 할당(과금)이 로컬 도구와 같은 서버에 있고, 가드는 어노테이션뿐이다. 에이전트 오작동 = 요금이다.
  • 패치 이력은 건강 — GHSA-5qhv-x9j4-c3vm(CVE-2026-35394, HIGH)·GHSA-3p2m-h2v6-g9mx(CVE-2026-33989, HIGH) 모두 공개 어드바이저리 + 한 버전 내 패치. 숨기지 않는다.
  • 보안 신고 채널이 Slack DM — SECURITY.md가 지시하는 경로가 회사 Slack 가입 후 DM이다. 이 규모 프로젝트의 표준(GHSA private report)에 못 미친다.
  • CI 신뢰 경계 — e2e가 self-hosted 러너에서 --dangerously-skip-permissions로 돈다. 러너가 뚫리면 반경이 크다.

정적 전용 리시트

이 분석에서 실행된 저장소 코드는 0줄이다: 체크아웃 없음 · 의존성 설치 없음 · 빌드/테스트 없음 · import 없음 · hooks/submodule/LFS/smudge/textconv 없음. execution-observed 증거 항목 0건 — 그래서 런타임 신뢰도는 unknown이고, 그것이 정직한 천장이다.

10 · License

라이선스

라이선스
Apache-2.0 — LICENSE + GitHub API 이중 확인 (C015)
특기
LICENSE는 원문 그대로의 stock Apache-2.0이고 부록(copyright 표기)은 미기입. NOTICE 파일 없음
이 문서의 지위
2차적 저작물이 아닌 변형적(transformative) 분석 — 코드 전재 없이 file:line 인용과 링크 원장(§12)으로 귀속. 원작자 mobile-next, 원본·커밋·라이선스는 §1과 하단 콜로폰에 명시
미디어
README의 이미지 12건(배지·배너·다이어그램·버튼)은 독립 라이선스·핫링크 근거가 확인되지 않아 전부 재게시 생략 (§12)
11 · Claim Ledger

주장 검증 원장 — 22건

README·CHANGELOG·SECURITY.md·llms-install.md의 주장과 정독 발견을 대조했다. 정적 분석이므로 실행 관측(execution-observed) 증거는 0건 — "지지"도 "코드가 그렇게 짜여 있음"이지 "실기기에서 그렇게 동작함"이 아니다. 전체 원장(JSON)은 증거 인덱스에 있다.

#주장판정근거 요지
C001iOS·Android 실기기/시뮬레이터/에뮬레이터 크로스 플랫폼 자동화지지로봇 4계보 구현 존재; 실행 미검증
C002접근성 트리 우선, 스크린샷 좌표는 폴백지지도구 설계·구현 경로 확인 (medium)
C0031.0.0 BREAKING — 기본 경로가 mobilecli로 교체지지CHANGELOG + mobile-device.ts 대조
C004레거시 로봇은 env 게이트 + 1개월 제거 예고지지server.ts:170-223 + CHANGELOG
C005SSE 모드 인증 지원부분 지지지원은 사실이나 fail-open 미문서화 (index.ts:13-16)
C006DNS rebinding 방어 (Origin 거부)지지index.ts:29-42 403 확인
C007텔레메트리 수집 및 opt-out 공개지지server.ts:109-151 — 기본 ON
C008임의 URL 실행 취약점(CVE-2026-35394)은 0.0.50에서 패치지지어드바이저리 + server.ts:652-671 게이트
C009경로 탈출 취약점(CVE-2026-33989)은 0.0.49에서 패치지지어드바이저리 + utils.ts:85-104 (+0.0.62 symlink #377)
C010클라우드 실기기 도구는 공유·과금 자원지지server.ts:408-430 도구 설명 원문
C011도구 어노테이션(읽기/파괴) 정확성지지test/server-annotations.test.ts 전수 매트릭스
C012API 키·자격증명 불필요 (llms-install.md)부분 지지로컬 경로만 참 — 클라우드 도구는 로그인+과금
C013CI 배포: --ignore-scripts + provenance + 레지스트리 게시지지build.yml 확인
C014Claude 구동 실기기 e2e 테스트 존재지지self-hosted + --dangerously-skip-permissions
C015Apache-2.0 라이선스지지LICENSE + API 이중 확인
C016gmegidish 게이트키핑 + 외부 기여 머지지지커밋 분포 291/44 + PR 표본 30건
C017Dependabot·코드 스캔 보안 상태알 수 없음API 403 — 0건 단정 불가
C018태그 0.0.60–62는 릴리즈 없이 존재지지tags·releases API 대조
C0191.0.1 CI 실패 → 3분 뒤 1.0.2, 같은 날 동시 공개지지CI 런·릴리즈 타임스탬프
C020리뷰 응답은 봇(19초)과 사람(93.9h)이 다른 세계지지이슈 #399 타임라인 (표본, medium)
C021MCP 공식 레지스트리 등재지지server.json 매니페스트
C022이 축의 주류 프로젝트 (스타 5,995)지지repo 메타데이터 (medium)
12 · Authored Links — No Translation

원문 링크 원장 — README는 완역하지 않는다

이 도시에는 README의 한국어 완역을 싣지 않는다. 소스 코드가 SSOT이고 팩트이며, README는 저자의 주장이다. README의 문장들은 §11 주장 검증 원장의 입력과 §4 코드 실증의 대조 대상으로만 썼다. 대신 저자가 배치한 링크·미디어 51건 전부를 원문 순서(ordinal)대로 여기 기록한다 — 링크 39건은 목적지 그대로 보존하고(저장소 내부 링크는 커밋 고정 주소), 미디어 12건은 재게시 근거가 없어 비활성 표식으로 남긴다. occurrence 원장과 1:1이다.

히어로 — 배지와 정체성 (README 1–35행)

첫 화면: MCP 조직 선언, 배지 6종(전부 동적 SVG — 생략), 패키지·릴리스·위키·Slack, 데모 영상.

아키텍처 그림 (104–105행)

원문 다이어그램은 재게시하지 않았다 — 코드에서 재구성한 §5가 대신한다.

  • README 104행 — 아키텍처 다이어그램 클릭 확대 링크 — 대상이 생략 미디어(18)와 동일하여 비활성 처리 (판단 기록: judgment-calls)
  • README 105행 — 아키텍처 다이어그램 PNG (mobile-next-assets) — 생략, §5 텍스트 다이어그램으로 대체

설치 전제와 생태계 (112–124행)

Xcode·platform-tools·Node 전제와 MCP 표준·생태계 문서, 레거시 경로의 의존 도구들.

클라이언트별 설치 (191–305행)

Cline·Cursor·Goose·Kiro — 딥링크 셋은 전부 같은 npx 명령의 포장이다 (§6).

사용법·위키 (359–459행)

위키 재링크와 커밋 고정 앵커, 프롬프트 예시 목록.

프로젝트·커뮤니티 (521–545행)

형제 저장소(mobilewright·mobilecli), 회사, 기여 문서, 기여자 그래프.

README의 실질 내용(무엇을·왜·한계)은 §4·§5·§6이 코드 대조와 함께 담고 있다 — 번역본이 아니라 검증본이다.

13 · Coverage & Limits

수집 한계 — 이 문서가 모르는 것

  • 정적 분석 천장: 코드를 실행하지 않았으므로 "실기기에서 실제로 동작한다"는 어떤 주장도 이 문서는 증명하지 못한다.
  • mobilecli는 범위 밖: 1.0.0 기본 경로의 실조작 로직은 별도 저장소의 Go 바이너리다. 이 도시에는 그 소스를 읽지 않았다 — mobile-mcp 쪽 호출 규율만 검증했다.
  • API 샘플 경계: 이슈·PR·CI 런은 per_page=30 단일 페이지 표본이다. TTFR 93.9h는 표본 기반이지 전수 통계가 아니다.
  • 거부된 엔드포인트: Dependabot 알림·코드 스캔 API가 403 — 해당 상태는 unknown이며 0으로 간주하지 않았다 (C017).
  • 외부 링크 미방문: §12의 외부 목적지(mobilenext.ai, 딥링크 등)는 열지 않았다 — 목적지 설명은 URL 구조와 README 문맥에서만 도출했다.
  • 시점 고정: 모든 수치는 2026-08-25 캡처 관측이다. 마지막 push 2026-08-18 — 살아 있는 프로젝트라 숫자는 곧 낡는다.
정독 커버리지
substantive 28/28 파일 · 5,284줄 (인벤토리 48 blob 전수 분류, 생략 20건 사유 기록)
인스펙션 바운드
기본 한도 내 (시간 16/20분 · REST 21/90 · 파일 28/30 · 줄 5,284/20,000 · 의존 홉 2/3) — 확장 없음
증거
모든 API 응답·blob·원장은 sha256과 함께 공개 증거 인덱스에 고정