seongil
목록

안 쓰는 갤럭시 폰을 MCP 서버로 만들기: Tailscale로 인터넷에서 붙는 방법 (삽질 포함)

약 24분MCPTailscaleAndroidClaude Code

0. 이 글에서 하는 일

서랍에 있던 갤럭시 폰을 Claude Code에서 MCP로 연결할 수 있는 상태로 만듭니다. USB 케이블은 쓰지 않고, 사설망(Tailscale)으로 인터넷을 통해 붙습니다.

Claude Code (Mac)
   │  Tailscale 사설망
   ▼
폰 안의 MCP 서버 (Android Remote Control MCP)
   │  접근성 서비스
   ▼
화면 읽기 / 터치 / 입력
  • 준비물: Galaxy 폰(저는 S21), Mac, Claude Code, Google 계정 하나, 30~60분
  • 폰 조건: Android 13 이상이어야 합니다. 낮으면 설치할 때 파싱 오류가 납니다.
  • 사용한 앱: Android Remote Control MCP v1.12.0 (GMS 버전), Tailscale
  • 사진의 빨간 숫자는 눌러야 하는 순서입니다.

먼저 읽어 주세요 (주의 3가지)

  1. 접근성 서비스는 폰 전체를 읽고 조작하는 권한입니다. 메인 폰이 아니라 안 쓰는 폰에만 쓰고, 작업이 끝나면 꺼 주세요.
  2. 자동화가 금지된 서비스가 있습니다. 쿠팡과 배민 약관을 직접 확인해 봤는데 둘 다 자동 접속을 막는 조항이 있었습니다. 자세한 내용은 9장에 정리했습니다.
  3. 토큰과 포트는 공개하지 마세요. 폰 제어 주소를 공유기 포트포워딩이나 공개 터널(ngrok 등)로 인터넷에 열면 누구나 폰을 만질 수 있게 됩니다. 이 글은 사설망(Tailscale) 안에서만 쓰는 방법입니다.

1. Tailscale 준비 (폰 + Mac)

Tailscale은 내 기기끼리만 연결되는 사설망을 만들어 주는 앱입니다. 폰과 Mac 모두 같은 계정으로 로그인해야 서로 보입니다.

1-1. 폰에 Tailscale 설치

Play 스토어에서 tailscale을 검색해 설치를 누릅니다.

Play 스토어에서 Tailscale 설치

설치 전에 Play 스토어가 아래처럼 “인증이 필요합니다”라고 하면 다시 시도를 누르세요. 계속 안 되면 폰에 Google 계정이 로그인되어 있는지 확인합니다.

Play 스토어 인증 오류에서 다시 시도

1-2. 폰에서 로그인하고 기기 연결

앱을 열어 로그인하면 브라우저에서 아래 화면이 나옵니다. 어느 계정의 tailnet에 이 폰을 붙일지 확인하고 Connect를 누릅니다. (사진에서 이메일과 기기 이름은 가렸습니다.)

Tailscale Connect device 화면

1-3. Mac에도 Tailscale 설치하고 같은 계정으로 로그인

Tailscale 다운로드 페이지에서 Mac 앱을 설치하고 폰과 같은 계정으로 로그인합니다.

여기서 한참 헤맸습니다. 로그인은 됐는데 앱에는 Not Connected만 뜨고, 터미널에서 tailscale status를 실행해도 응답이 없었습니다. 원인은 macOS가 Tailscale의 네트워크 확장 승인을 기다리고 있었기 때문입니다.

① 승인 대기 상태인지 확인하기

터미널에서 이 명령을 실행합니다.

systemextensionsctl list | grep -i tailscale

줄 끝에 [activated waiting for user]가 보이면 승인 대기 상태입니다. [activated enabled]면 이미 승인된 것이니 ③으로 넘어가세요.

② 시스템 설정에서 승인하기

macOS 버전에 따라 승인 위치가 다릅니다. 아래 두 곳을 차례로 확인하세요.

  1. 시스템 설정 → 개인정보 보호 및 보안을 열고 맨 아래까지 스크롤합니다. Tailscale 시스템 소프트웨어가 차단됐다는 안내와 허용 버튼이 있으면 누르고, Touch ID나 비밀번호로 인증합니다.
  2. 거기에 없으면 시스템 설정 → 일반 → 로그인 항목 및 확장 프로그램으로 갑니다. 아래쪽 확장 프로그램 영역에서 네트워크 확장 프로그램(오른쪽 ⓘ 버튼)을 열고 Tailscale을 켭니다.
  3. “VPN 구성을 추가하려 한다”는 창이 뜨면 허용하고 다시 인증합니다.

다시 ①의 명령을 실행해 [activated enabled]로 바뀌었는지 확인합니다.

③ 그래도 Connecting…에서 멈출 때

저는 승인한 뒤에도 VPN 상태가 Connecting…에서 멈췄습니다. 이럴 때는 이렇게 합니다.

  1. 시스템 설정 → VPN을 엽니다.
  2. VPN 목록에서 Tailscale 줄을 찾습니다. 오른쪽에 스위치가 있고 아래에 Connecting… 같은 상태 글자가 보입니다.
  3. 스위치를 끄고 10초쯤 기다린 뒤 다시 켭니다.
  4. 상태가 Connected로 바뀌면 성공입니다.

저는 이 방법으로 연결됐습니다. 왜 이게 먹혔는지는 정확히 모릅니다.

④ 연결 확인

연결되면 Tailscale 앱 왼쪽 위에 Connected가 뜨고, Devices 목록에 같은 계정으로 로그인한 폰(저는 s21)이 초록 점으로 보입니다. 폰이 목록에 안 보이면 폰의 Tailscale 앱이 켜져 있는지, 같은 계정인지부터 확인하세요. (사진에서 계정, 다른 기기 이름, IP는 가렸습니다.)

Mac의 Tailscale 앱: Connected 표시와 Devices 목록의 폰

그래도 안 붙으면 이 순서로 시도해 보세요.

  1. VPN 스위치 껐다 켜기
  2. Tailscale 앱 완전 종료 후 다시 실행
  3. Mac 재시작
  4. 다른 VPN(저는 Proton VPN)이 켜져 있으면 끄고 다시 시도

2. APK 다운로드 (GitHub 공식 릴리스)

이 앱은 Play 스토어에 없어서 GitHub 릴리스에서 APK 파일을 받아 설치합니다. 폰의 브라우저에서 바로 받는 게 가장 쉽습니다.

2-1. “Edge (rolling)” 페이지로 들어왔다면 나가세요

릴리스 페이지를 찾다 보면 Edge (rolling)이라는 Pre-release 항목이 먼저 보일 수 있습니다. 이건 개발 중인 빌드(main을 계속 다시 빌드)라서 불안정할 수 있습니다. 페이지 안내에도 “안정판이 아니다, 실제 사용에는 latest stable release를 설치하라”고 적혀 있습니다.

Edge (rolling) Pre-release 페이지는 받지 않기

**Releases 페이지에서 Latest로 표시된 안정판(제가 쓴 건 v1.12.0)**으로 들어가세요.

2-2. 파일 4개 중 gms-release.apk 선택

아래로 내려 Assets를 열면 APK가 4개 있습니다.

파일 화면 표시 크기 고를까?
...-foss-debug.apk 199MB 아니요
...-foss-release.apk 168MB 아니요 (Google 서비스가 없는 폰용)
...-gms-debug.apk 200MB 아니요 (디버그 빌드)
...-gms-release.apk 169MB 이것
  • gms / foss: 갤럭시에는 Google Play 서비스가 있으니 gms입니다. foss는 Google 서비스가 없는 기기용입니다. 헷갈리면 gms를 고르라는 것이 README의 안내입니다.
  • release / debug: debug는 개발용 빌드입니다. README에 두 빌드의 차이를 설명한 곳은 없어서 일반적인 구분으로 판단했습니다.
Assets에서 gms-release.apk 선택

2-3. 다운로드

파일 형식 경고가 뜨는 건 APK라서 나오는 정상 안내입니다. 파일 이름이 ...v1.12.0-gms-release.apk이고 출처가 release-assets.githubusercontent.com인지 확인한 뒤 다운로드를 누릅니다.

다운로드 경고에서 파일 이름 확인 후 다운로드

다운로드가 끝나면 알림에 “파일 다운로드 완료”가 뜹니다. 그 알림을 탭하면 설치 화면으로 넘어갑니다.

다운로드 완료 알림 탭

2-4. (선택) 파일이 맞는지 해시로 확인

GitHub는 릴리스 파일마다 SHA-256 값을 보여 줍니다. gms-release.apk의 값은 v1.12.0 기준으로 아래와 같고, 화면에 보이는 sha256:31bb19…와 앞부분이 같습니다.

31bb19f1b179b649d15a5000de19f3e1ecb7c9cd1bbfec9f4b6f3336fa3296c4

파일을 PC에 받았다면 이렇게 비교할 수 있습니다.

shasum -a 256 android-remote-control-mcp-v1.12.0-gms-release.apk

이 해시는 “GitHub에 올라온 파일과 내가 받은 파일이 같다”는 것만 확인해 줍니다. 만든 사람이 누구인지까지 보증하지는 않습니다. 공식 저장소에서 받는다는 점이 신뢰의 근거입니다.


3. 설치

  1. 설치를 누릅니다.
설치 확인
  1. 삼성이 “앱 설치가 권장되지 않음 / 인증되지 않은 출처의 앱”이라고 경고합니다. Play 스토어에서 받은 앱이 아니라서 나오는 경고입니다. 위에서 확인한 공식 파일이라면 무시하고 설치를 누릅니다.
보안 경고에서 무시하고 설치
  1. “앱이 설치되었습니다”가 나오면 열기를 누릅니다.
설치 완료 후 열기

기기에 따라 브라우저에 “이 출처의 앱 설치 허용”을 먼저 묻는 화면이 나올 수 있습니다. 제 폰에서는 위 순서로 바로 설치됐습니다.


4. 접근성 서비스 켜기 (제일 많이 헤맨 곳)

이 앱이 폰 화면을 읽고 터치하려면 안드로이드 접근성 서비스를 켜야 합니다. Android 13 이상에서는 Play 스토어 밖에서 APK로 직접 설치한 앱의 접근성 권한이 기본으로 막혀 있어서, “제한된 설정 허용”이라는 단계가 필요합니다.

4-1. 앱의 Settings → Permissions

앱 아래쪽 Settings 탭에서 Permissions로 들어갑니다.

앱 Settings에서 Permissions 선택

4-2. Accessibility Service의 Enable

Required에 있는 Accessibility Service의 Enable을 누릅니다. 나머지(Notifications, Camera, Location, Microphone 등)는 해당 기능을 쓸 때만 켜면 됩니다. 앱도 “필요한 권한만 허용하라”고 안내합니다.

Permissions에서 Accessibility Service Enable

Enable을 누른 뒤에 어떤 화면이 나오는지는 기기와 안드로이드 버전에 따라 다릅니다.

  • 보안상 이 설정을 켤 수 없다는 안내가 뜨거나, 접근성 화면에서 스위치가 회색이라 눌러도 안 켜지면: 안내를 닫고 4-3으로 갑니다.
  • 접근성 설정 화면이 열리고 스위치를 바로 켤 수 있으면: 4-4의 마지막 단계(스위치 켜고 허용)로 바로 갑니다.

4-3. 앱 정보에서 “제한된 설정 허용”

여기서 제가 한참 막혔습니다. 가이드에는 설정 → 앱 → Android Remote Control MCP → 오른쪽 위 ⋮ → 제한된 설정 허용이라고 되어 있는데, 처음에는 ⋮ 메뉴 자체가 없었습니다.

처음에는 ⋮ 메뉴가 없는 앱 정보 화면

제 폰에서는 처음에 ⋮ 메뉴가 없다가, 4-2에서 Enable을 한 번 누른 뒤에 같은 화면에 ⋮ 메뉴가 생기고 그 안에 제한된 설정 허용이 나타난 것으로 보입니다. (모든 기종에서 그렇다고 장담하지는 못합니다.) 메뉴가 안 보이면 4-2를 한 번 해 본 뒤 다시 확인해 보세요.

순서대로 따라 하면 이렇습니다.

  1. 폰의 설정 → 앱을 엽니다.
  2. 앱 목록에서 Android Remote Control MCP를 찾아 누릅니다. (목록이 길면 위쪽 검색 아이콘으로 android 정도만 입력해 찾으면 빠릅니다.)
  3. 애플리케이션 정보 화면 **오른쪽 위의 ⋮(점 세 개)**를 누릅니다.
  4. 메뉴에 제한된 설정 허용이 있으면 누르고, PIN, 패턴, 지문 중 하나로 인증합니다.
앱 정보의 ⋮ 메뉴에서 제한된 설정 허용

4-4. 설정 → 접근성 → 설치된 앱에서 스위치 켜기

이제 폰의 설정 → 접근성으로 갑니다. (앱 권한 화면이 아니라 접근성 메뉴입니다.) 설치된 앱을 누릅니다.

접근성에서 설치된 앱 선택

목록에서 Android Remote Control MCP를 선택합니다.

설치된 앱 목록에서 Android Remote Control MCP 선택

스위치를 켜면 “기기를 완전히 제어하도록 허용하시겠습니까?“라는 경고가 뜹니다. 화면의 모든 내용을 읽고 나 대신 앱을 조작할 수 있게 한다는 뜻이니, 문구를 읽고 허용을 누릅니다.

접근성 스위치 켜고 허용

5. 서버 설정과 시작

5-1. 바인딩 주소를 NETWORK로 바꾸기

앱은 처음에 폰 자기 자신(LOCALHOST)에서만 접속을 받습니다. Mac에서 붙으려면 외부 접속을 허용하는 **NETWORK(0.0.0.0)**로 바꿔야 합니다. Settings → General(포트, 주소, 자동 시작 설정)에서 바꿨습니다.

Settings에서 General 선택

순서대로 따라 하면 이렇습니다. (항목 이름과 선택 방식은 앱 버전에 따라 조금 다를 수 있습니다.)

  1. 앱 아래쪽 Settings 탭에서 맨 위 General(포트, 주소, 기기, 자동 시작)을 누릅니다.
  2. 목록에서 바인딩 주소(Binding address) 항목을 찾아 LOCALHOST에서 **NETWORK**로 바꿉니다.
  3. 아래쪽 Server 탭으로 돌아가 서버를 시작합니다. 이미 켜져 있었다면 Stop 후 다시 Start를 눌러 새 설정으로 다시 띄웁니다.
  4. 바뀌었는지는 5-2의 서버 로그로 확인합니다. Binding address changed LOCALHOST → NETWORK가 찍히면 됩니다.

NETWORK로 바꾸면 같은 네트워크의 다른 기기도 접속을 시도할 수 있습니다. 그래서 토큰이 필수고, 공개 인터넷에는 절대 열면 안 됩니다. 이 글에서는 Tailscale 사설망 안에서만 접속합니다.

5-2. Server 탭에서 상태 확인

Server 탭에서 아래 세 가지를 확인합니다.

  1. MCP Server가 초록불 Running인지 (꺼져 있으면 Start)
  2. Copy All로 연결 정보를 복사합니다. 토큰은 별표로 가려져 있고, 복사한 값에 토큰이 들어갈 수 있으니 어디에도 공개하지 마세요.
  3. 아래 로그에 Binding address changed LOCALHOST → NETWORK와 Server started on 0.0.0.0:8080이 찍혔는지
Server 탭에서 상태, 연결 정보, 로그 확인

사진에서 IP 주소는 가렸습니다. 기본 포트는 8080, 접속 경로는 /mcp입니다.

주의: 앱이 보여 주는 IP는 같은 Wi-Fi 안에서 쓰는 주소입니다. Tailscale로 접속할 때는 이 주소가 아니라 폰의 **Tailscale IP(100.x.y.z)**를 씁니다. 폰의 Tailscale 앱이나 Mac의 tailscale status에서 확인할 수 있습니다.


6. Mac에서 연결 확인

Mac의 Tailscale이 Connected인 상태에서, 폰의 Tailscale IP를 찾습니다.

tailscale status

OS 칸이 android인 줄이 폰입니다. 그 줄의 100.x.y.z가 폰의 Tailscale IP입니다. (IP와 계정, Mac 이름은 가렸습니다.)

100.x.x.x   <내 Mac 이름>   <계정>@   macOS     -
100.x.x.x   s21            <계정>@   android   -

6-1. 먼저 토큰 없이 찔러 보기 (401이 나오면 성공)

토큰 없이 요청해도 서버가 살아 있는지 알 수 있습니다. 이 명령에는 비밀 값이 들어가지 않아 안전합니다. <TAILSCALE_IP>에 위에서 찾은 폰 IP를 넣으세요.

curl -i -m 10 http://<TAILSCALE_IP>:8080/mcp

제 환경에서는 이렇게 나왔습니다.

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="http://<TAILSCALE_IP>:8080/.well-known/oauth-protected-resource/mcp"
Content-Type: application/json

{"error":"unauthorized","message":"Authentication required"}

401 Unauthorized는 서버에 정상적으로 닿았고, 인증이 필요하다는 뜻입니다. 연결과 인증 보호가 둘 다 동작한다는 좋은 신호입니다.

6-2. 토큰을 넣어서 확인

폰에서 복사한 토큰을 <TOKEN>에 넣어 실행합니다. 토큰이 들어가는 명령이니 터미널 출력을 올릴 때 주의하세요.

curl -i -H "Authorization: Bearer <TOKEN>" http://<TAILSCALE_IP>:8080/mcp

결과는 이렇게 해석합니다.

  • 401: 서버에는 닿았는데 토큰이 틀립니다.
  • 연결 거부나 타임아웃: 폰에서 서버가 Start 상태인지, 바인딩이 NETWORK인지, 두 기기가 같은 계정으로 Tailscale에 연결돼 있는지 확인하세요.
  • 401이 아닌 다른 HTTP 응답: 서버에 닿았고 토큰도 통과했다는 뜻입니다.

7. Claude Code에 MCP 서버로 등록

토큰이 들어가는 명령이니 채팅창이 아니라 본인 터미널에서 실행하세요. --scope user로 등록하면 설정이 프로젝트 저장소가 아니라 내 사용자 설정에만 저장됩니다.

claude mcp add --transport http --scope user android-phone http://<TAILSCALE_IP>:8080/mcp --header "Authorization: Bearer <TOKEN>"

등록됐는지 확인합니다.

claude mcp list

저는 목록에 android-phone: ... (HTTP) - ✔ Connected가 뜨는 것까지 확인했습니다.

스크린샷 주의: claude mcp list는 다른 MCP 서버의 주소와 인증 헤더 값을 평문으로 출력할 수 있습니다. 이 출력을 블로그나 SNS에 올릴 때는 반드시 가리세요. 방금 등록한 서버의 Tailscale IP도 함께 나옵니다. 토큰은 ~/.claude.json에 평문으로 저장됩니다.


8. 다음 단계: Claude에서 실제로 써 보기

이 글은 폰을 MCP 서버로 만들고 Claude Code에 등록해 Connected가 뜨는 것까지를 다룹니다. Claude가 폰 도구를 실제로 호출해 화면을 읽고 조작하는 단계는 아직 검증하지 못했습니다. 등록하기 전에 시작한 세션에서는 폰 도구가 도구 목록에 보이지 않았고, 새 세션에서 확인하는 것은 다음 글로 미룹니다.

직접 해 보실 때는 이렇게 하세요.

  1. MCP를 등록한 뒤에 새 세션을 엽니다. (등록 전에 시작한 세션에는 도구가 안 보일 수 있습니다.)
  2. 처음에는 읽기만 하는 작업(화면 캡처, 설치된 앱 목록 보기)으로 확인합니다.
  3. 결제나 주문 같은 되돌리기 어려운 동작은 사람이 직접 하는 것이 안전합니다.

9. 약관 체크: 이 서비스를 자동화해도 될까?

원래 목적은 배달앱과 쇼핑앱을 폰에서 자동으로 조작해 보는 것이었습니다. 그래서 먼저 약관을 확인했는데, 결과가 이렇습니다. (법률 자문이 아니라 약관 문구를 확인한 것입니다. 약관은 개정될 수 있으니 인용 전에 원문 페이지에서 직접 확인하세요.)

쿠팡 이용약관 (확인한 본문의 부칙 기준 2026-09-03 시행. 페이지의 ‘다른 버전 보기’ 목록에는 2026.09.04가 가장 최신으로 표시됩니다)

  • 제12조(회원의 의무) 제2항 제4호가 쿠팡의 사전 승인이나 협의 없이 로봇, 스파이더, 스크레이퍼 또는 기타 자동화된 수단으로 사이버몰에 접근하는 행위를 금지합니다. 제31조 제2항도 금지행위는 제12조에 따른다고 정하고 있습니다.
  • 이 앱처럼 화면을 자동으로 조작하는 방식은 이 조항에 해당할 가능성이 큽니다.

배달의민족 서비스 이용약관 (페이지에 표시된 시행일: 2026-08-01)

  • 제10조의2 제2항 제5호가 자동 접속 프로그램 등 회사가 제공하지 않은 크롤링 방법으로 앱·웹·서버에 접근해 데이터를 수집, 이용하는 행위를 금지합니다.
  • 위반 시 제13조에 따라 주의, 경고, 일시정지, 영구이용정지, 계약해지 등이 가능하고, 제19조 제3항에 따라 쿠폰 회수나 회원자격 제한도 가능합니다.
  • 이 조항은 “데이터를 수집·이용하는 크롤링”을 말하고 있어서, 화면 조작으로 주문만 하는 방식이 정확히 해당하는지는 문구만으로 단정하기 어렵습니다. 하지만 약관이 “자동 접속 프로그램 사용”을 직접 예로 들고 있고 다른 업무 방해 금지 조항도 있어서, 안전하다고 볼 수는 없습니다.

제 결론: 쿠팡과 배민은 이 방식으로 자동 조작하지 않기로 했습니다. 다른 서비스도 쓰기 전에 약관에서 자동, 프로그램, 로봇, 크롤러, 매크로, 비정상 같은 단어를 검색해 보세요.


10. 보안 체크리스트

  • 접근성 서비스는 이 앱에만 줬고, 안 쓸 때는 끈다
  • 서버를 안 쓸 때는 앱 Server 탭에서 Stop
  • 바인딩을 NETWORK로 열었으니 토큰을 항상 켜 둔다
  • 폰 제어 주소를 공유기 포트포워딩이나 공개 터널(ngrok, Cloudflare)로 열지 않는다. 앱 Settings에 Tunnel 메뉴가 있지만 이 글에서는 쓰지 않았습니다.
  • 토큰은 채팅, 블로그, 스크린샷에 노출하지 않는다 (노출됐다면 토큰을 다시 만든다)
  • claude mcp list 출력은 다른 서버의 인증 값까지 나올 수 있으니 올리기 전에 가린다
  • 이 앱 README는 프로젝트를 “연구 및 교육 목적, as-is”라고 밝힙니다. 책임은 사용자에게 있습니다
  • 앱의 Privacy Mode(개인 데이터를 AI 제공자에게 숨김)는 README가 “최선의 완화책이지 보장은 아니다”라고 하니 믿고 맡기지 않는다

11. 삽질 모음 (증상 → 원인 → 해결)

증상 원인(추정 포함) 해결
Play 스토어에 “인증이 필요합니다” 스토어 인증 오류 다시 시도, 안 되면 Google 계정 로그인 확인
받은 페이지가 Edge (rolling) Pre-release 개발 빌드 페이지 Latest 안정판 릴리스로 이동
APK가 4개라 뭘 받을지 모름 gms/foss × release/debug gms-release.apk
설치 시 “앱 설치가 권장되지 않음” Play/Galaxy 스토어 밖에서 받은 앱 공식 파일이면 무시하고 설치
앱 정보에 ⋮ 메뉴가 없음 제한된 설정 항목이 아직 안 생김 앱에서 Accessibility Enable을 한 번 눌러 본 뒤 다시 확인 (제 폰 기준)
접근성 스위치가 회색/막힘 사이드로딩 앱의 제한된 설정 ⋮ → 제한된 설정 허용 후 다시
Mac Tailscale이 Not Connected, tailscale status가 멈춤 macOS 네트워크 확장이 승인 대기(activated waiting for user) 시스템 설정에서 확장 승인
승인 뒤에도 Connecting…에서 멈춤 확장 기동이 안 풀린 것으로 추정 VPN 스위치 껐다 켜기 (안 되면 앱 재실행, 재시작)
log show ...가 “too many arguments” zsh의 log 내장 명령이 가림 /usr/bin/log show ...
앱이 보여 주는 IP로 안 붙음 그 IP는 같은 Wi-Fi용 폰의 Tailscale IP(100.x.y.z) 사용
MCP를 등록했는데 도구가 안 보임 등록 전에 시작한 세션 새 세션을 열어 확인 (추정)

마무리

정리하면 이 글에서 한 일은 이렇습니다.

  1. 폰과 Mac을 같은 계정의 Tailscale로 연결
  2. GitHub 공식 릴리스에서 gms-release.apk를 받아 설치
  3. 제한된 설정을 풀고 접근성 서비스를 켬
  4. 서버를 NETWORK 모드로 시작하고 토큰 확인
  5. Mac에서 연결 확인 후 Claude Code에 MCP 서버로 등록 (Connected까지 확인)

가장 시간을 많이 쓴 곳은 **접근성의 “제한된 설정”**과 Mac Tailscale의 시스템 확장 승인이었습니다. 두 군데만 알고 시작하면 훨씬 빨리 끝납니다. 실제로 Claude가 폰을 조작하는 부분은 검증이 끝나면 후속 글로 이어 쓰겠습니다.

참고 링크