CUBE.ai

데스크톱베타

sns-relay

블로그 글 하나로 Threads·인스타그램·페이스북 페이지·네이버 블로그용 초안을 만들고, 내가 승인한 것만 공식 API로 게시하는 Claude 도구입니다.

0. sns-relay 는 무엇이고 왜 만들었나

풀고 싶었던 문제

블로그에 글을 하나 쓰면, 그 글을 알리려고 SNS 마다 다시 써야 합니다. Threads 는 짧고 가볍게, 인스타그램은 사진과 캡션으로, 페이스북은 링크와 함께, 네이버는 소제목을 붙여서. 채널마다 말투와 길이, 사진 규칙이 달라서 글 한 편에 30분~1시간이 더 듭니다. 이 일이 쌓이면 블로그를 쓰는 시간보다 옮기는 시간이 더 길어집니다.

sns-relay 가 하는 일

  1. 블로그 글 주소 또는 메모·사진
  2. 채널별 초안 Claude 가 작성
  3. 내가 검토
  4. 미리보기 dry-run
  5. Threads · Instagram · Facebook 공식 API 로 게시
  6. 네이버 붙여 넣기용 원고
  1. 블로그 글 주소 하나(또는 메모와 사진)를 주면 본문을 읽어 옵니다.
  2. Claude 가 채널마다 맞는 초안을 씁니다. 사실은 원문에 있는 것만 씁니다.
  3. 내가 읽고 승인한 초안만 다음 단계로 갑니다.
  4. 게시 직전에 최종 문구를 미리보기로 한 번 더 보여 줍니다.
  5. 내가 "올려"라고 해야 Meta 의 공식 API 로 올립니다. 네이버는 공식 글쓰기 API 가 없어서 붙여 넣기용 원고를 만들어 주고, 발행은 직접 합니다.

설계에서 지킨 원칙

원칙 이유
사람이 승인한 것만 게시 AI 가 쓴 글이 내 이름으로 바로 나가지 않게 합니다. 초안을 고치면 승인이 자동으로 풀립니다
공식 API 만 사용 화면을 흉내 내는 자동화(매크로·크롤링)는 계정 정지 위험이 있습니다. Meta 가 허락한 방법만 씁니다
중복 게시 방지 게시 결과를 모르면 다시 올리지 않고 사람에게 확인을 받습니다
비밀 값은 내 컴퓨터에만 토큰은 작업 폴더의 .env 파일에만 두고, 화면·로그·대화에 나오지 않게 합니다
내 콘텐츠만 내 블로그 글, 내 메모, 내 유튜브 영상만 다룹니다. 남의 글을 퍼 나르는 도구가 아닙니다

1. 누가 쓰면 좋은가

이런 분께 맞습니다

  • 블로그를 운영하면서 SNS 도 같이 하는 1인 운영자·소상공인·프리랜서. 글은 블로그에 쓰고, SNS 는 알리는 통로로 쓰는 분.
  • 채널마다 글을 다시 쓰는 시간이 아깝지만, AI 가 마음대로 올리는 것은 불안한 분.
  • Claude(Claude Code 또는 Claude Desktop)를 이미 쓰고 있거나 써 볼 생각이 있는 분.
  • 개발자가 아니어도 됩니다. 터미널에 명령어 몇 줄을 붙여 넣을 수 있으면 충분합니다. 막히면 AI 에게 물어볼 프롬프트를 이 문서에 넣어 두었습니다.

이런 경우에는 맞지 않습니다

  • 사람 확인 없이 완전히 자동으로 매일 수십 개씩 올리고 싶은 경우. sns-relay 는 일부러 사람의 승인을 거칩니다.
  • 남의 글이나 영상을 가져와 다시 올리는 경우.
  • 페이스북 개인 프로필에 올리고 싶은 경우. Meta 가 2018년에 막아서 페이지에만 올릴 수 있습니다.
  • 네이버 블로그 자동 발행이 꼭 필요한 경우. 네이버는 공식 글쓰기 API 가 없어서 반자동입니다.

2. 준비물과 걸리는 시간

준비물 설명 어디서
컴퓨터 Windows · macOS · Linux
Node.js 22.12 이상 sns-relay 를 실행하는 프로그램 3-1절
git 저장소를 내려받는 프로그램 3-1절
Claude Code 또는 Claude Desktop AI 와 대화하며 쓰려면 필요합니다. 터미널만 쓸 거면 없어도 됩니다 claude.ai
인스타그램 계정 프로페셔널(비즈니스)로 바꿉니다 5-1절
페이스북 개인 계정 + 페이지 페이지를 새로 만듭니다 5-2절
Threads 계정 공개 계정이어야 합니다 5-3절
(선택) Cloudinary 계정 내 컴퓨터의 사진을 올릴 때 필요합니다 5-10절

걸리는 시간: 설치 15분, Meta 계정·토큰 준비 1~2시간(처음 한 번만), 첫 글 올리기 10분. 토큰 준비는 화면을 오가는 일이 많아서 시간 여유가 있을 때 한 번에 하는 것을 권합니다.

3. 설치

3-1. Node.js 와 git 설치

sns-relay 는 Node.js 위에서 돌아갑니다. 처음 써 보는 분은 Node.js 와 git 을 먼저 설치해야 합니다. 설치 화면은 운영체제와 버전마다 달라서, AI 에게 내 컴퓨터에 맞는 방법을 물어보는 것이 가장 빠릅니다.

아래 프롬프트를 Claude 나 ChatGPT 채팅창에 그대로 붙여 넣으세요. <운영체제> 만 바꿉니다(예: Windows 11, macOS Sonoma).

나는 개발을 처음 해 보는 사람이야. <운영체제> 컴퓨터에
Node.js 22.12 이상(LTS)과 git 을 설치하고 싶어.

1. 공식 사이트에서 받는 방법으로, 클릭 순서대로 하나씩 알려 줘.
2. 설치 중에 나오는 선택지는 기본값으로 둬도 되는지 알려 줘.
3. 설치가 끝난 뒤 터미널(Windows 는 PowerShell)을 여는 방법과,
   아래 명령으로 제대로 설치됐는지 확인하는 방법을 알려 줘.
   node --version
   npm --version
   git --version
4. node 버전이 22.12 보다 낮게 나오면 어떻게 하는지도 알려 줘.

세 명령 모두 버전 번호가 나오면 끝입니다. node --version 이 v22.12.0 이상이어야 합니다.

Claude Code 를 쓰고 있다면 Claude Code 에게 직접 맡겨도 됩니다.

내 컴퓨터에 Node.js(22.12 이상)와 git 이 설치돼 있는지 확인해 줘.
없거나 버전이 낮으면 설치 방법을 알려 주고, 내가 설치한 뒤 다시 확인해 줘.

3-2. sns-relay 설치

터미널을 열고 sns-relay 를 둘 폴더로 이동한 뒤, 아래 명령을 한 줄씩 실행합니다.

git clone https://github.com/SomySam/sns-relay.git
cd sns-relay
npm install
npm install -g .
sns-relay --version
명령 하는 일
git clone … 저장소를 내 컴퓨터로 내려받습니다
cd sns-relay 내려받은 폴더로 들어갑니다
npm install 필요한 부품을 받고 빌드까지 합니다
npm install -g . 어느 폴더에서든 sns-relay 명령을 쓸 수 있게 등록합니다
sns-relay --version 버전 번호가 나오면 성공입니다
  • 등록한 명령은 방금 내려받은 폴더를 가리킵니다. 이 폴더를 지우거나 옮기지 마세요.
  • npm install -g git+https://... 같은 한 줄 설치는 빌드를 건너뛰어 실패하니 쓰지 않습니다.

Claude Code 에게 맡기는 프롬프트

https://github.com/SomySam/sns-relay 저장소를 설치해 줘.
README 의 「설치」 절차(git clone → npm install → npm install -g .)를 그대로 따르고,
마지막에 sns-relay --version 으로 확인해 줘.
저장소 폴더는 <원하는 위치, 예: D:\sns-relay> 에 둬.

4. 작업 폴더 만들기

초안과 게시 기록, 비밀 값(토큰)이 쌓이는 폴더입니다. 저장소 폴더와 따로 만듭니다. 예를 들어 저장소가 D:\sns-relay 라면 작업 폴더는 D:\my-sns-work 처럼 둡니다.

sns-relay init --dir <작업 폴더>

폴더 안에 다음이 생깁니다.

파일 역할
config.json 채널 설정과 말투 메모
.env 토큰·시크릿을 적는 파일. 5장에서 채웁니다
.gitignore .env 가 실수로 git 에 올라가지 않게 막습니다
work/ 글마다 만든 초안과 상태

5. 토큰 발급부터 .env 채우기까지

5-0. 먼저 읽어 두기

토큰이 뭔가요? sns-relay 가 내 대신 글을 올리려면 Meta 에게 "이 프로그램이 내 계정에 글을 올려도 된다"는 허락을 받아야 합니다. 그 허락을 담은 긴 문자열이 토큰입니다. 비밀번호와 비슷해서 남에게 보이면 안 됩니다.

전체 순서

  1. 5-1 인스타 프로페셔널 전환
  2. 5-2 페이스북 페이지 만들기
  3. 5-3 Threads 공개 계정 확인
  4. 5-4 Meta 개발자 등록
  5. 5-5 앱 1개 만들기 이용 사례 3개
  6. 5-6 기본 앱 ID·시크릿
  7. 5-7 Threads 토큰
  8. 5-8 Instagram 토큰
  9. 5-9 페이스북 페이지 토큰
  10. 5-10 선택: Cloudinary
  11. 5-11 doctor 로 점검

무엇을 어디서 받아 .env 의 어느 칸에 넣는가

.env 칸 무엇 어디서 절
META_APP_ID, META_APP_SECRET 기본 앱 ID·시크릿 앱 대시보드 › 앱 설정 › 기본 설정 5-6
THREADS_APP_ID, THREADS_APP_SECRET Threads 앱 ID·시크릿 이용 사례 › Threads API 액세스 › 설정 5-7
THREADS_TOKEN Threads 토큰 같은 화면의 「사용자 토큰 생성기」 5-7
THREADS_USER_ID Threads 계정 숫자 ID 토큰으로 조회(프롬프트 제공) 5-7
IG_APP_ID, IG_APP_SECRET Instagram 앱 ID·시크릿 이용 사례 › Instagram 로그인이 포함된 API 설정 5-8
IG_TOKEN Instagram 토큰 같은 화면의 「계정 추가」 5-8
IG_USER_ID 인스타 계정 숫자 ID 토큰으로 조회(프롬프트 제공) 5-8
FB_PAGE_ID 페이스북 페이지 숫자 ID 페이지 선택 창 또는 페이지 정보 5-9
FB_PAGE_TOKEN 페이지 토큰 sns-relay token page 가 자동으로 적음 5-9
THREADS_TOKEN_EXPIRES_AT, IG_TOKEN_EXPIRES_AT 만료일 sns-relay token refresh 가 자동으로 적음 5-11
CLOUDINARY_* 사진 업로드용(선택) Cloudinary 대시보드 5-10

꼭 지킬 것

  • 토큰·시크릿은 채팅창(Claude, ChatGPT 등)에 붙여 넣지 마세요. 메모장으로 .env 를 열어 직접 붙여 넣습니다.
  • 캡처를 AI 에게 보내 질문할 때는 시크릿과 토큰 칸을 가린 뒤 보냅니다. 앱 ID 는 공개돼도 되는 값입니다.
  • .env 에는 키=값 형태로, = 뒤에 따옴표·공백·# 주석 없이 붙여 넣습니다.

.env 파일 여는 법: 작업 폴더에서 .env 를 오른쪽 클릭 → 「연결 프로그램」 → 메모장. 파일이 안 보이면 탐색기 「보기」에서 「숨긴 항목」을 켭니다(macOS 는 Finder 에서 Cmd + Shift + .).

화면 안내 기준: 모두 PC 웹 브라우저 기준입니다. Meta 화면은 자주 바뀌므로 메뉴 이름이 조금 다르면 비슷한 이름을 찾으세요. 아래 캡처는 2026년 9월 실제 진행 화면이며, 개인 정보는 회색 상자로 가렸습니다.

5-1. 인스타그램 프로페셔널 계정으로 바꾸기

개인 계정은 API 로 글을 올릴 수 없습니다. 프로페셔널 계정으로 바꿔야 합니다.

  1. PC 에서 instagram.com 에 로그인합니다.
  2. 왼쪽 아래 ☰(더 보기) → 설정을 엽니다.
  3. 「내 인사이트 및 도구」 아래 「프로페셔널 계정」을 누릅니다.
인스타그램 설정 화면. 「내 인사이트 및 도구」 아래에 「프로페셔널 계정」 메뉴가 있다
인스타그램 설정 화면. 「내 인사이트 및 도구」 아래에 「프로페셔널 계정」 메뉴가 있다
  1. 계정 유형은 「비즈니스」를 고릅니다. 크리에이터도 되지만 비즈니스가 제약이 적습니다.
  2. 카테고리를 고릅니다(예: 블로그).
  3. 「Facebook 페이지 연결」을 물으면 건너뛰어도 됩니다. sns-relay 는 인스타 로그인 방식을 써서 페이지와 연결하지 않아도 됩니다.

💡 자주 막히는 곳: 프로필 링크는 PC 에서 못 바꿉니다

프로필에 블로그 주소를 넣고 싶어서 PC 의 「프로필 편집」을 열면 웹사이트 칸이 회색입니다. 안내 문구대로 휴대폰 인스타그램 앱에서만 바꿀 수 있습니다.

PC 의 프로필 편집 화면. 웹사이트 칸 아래에 「링크 수정은 모바일에서만 가능합니다」라고 적혀 있다
PC 의 프로필 편집 화면. 웹사이트 칸 아래에 「링크 수정은 모바일에서만 가능합니다」라고 적혀 있다

휴대폰 앱: 프로필 → 프로필 편집 → 링크 → 외부 링크 추가 → 주소 입력 → ✓.

5-2. 페이스북 페이지 만들기

페이스북 개인 프로필에는 프로그램이 글을 올릴 수 없습니다. 글을 올릴 페이지가 따로 필요합니다.

  1. PC 브라우저 주소창에 facebook.com/pages/create 를 입력합니다. 나중에 Meta 개발자 등록에 쓸 개인 계정으로 로그인한 상태여야 합니다.
  2. 페이지 이름(인스타 계정과 맞추면 좋습니다), 카테고리(예: 블로그), 소개를 넣고 「페이지 만들기」를 누릅니다.
  3. 이어지는 설정 화면은 웹사이트와 프로필 사진만 넣고 나머지는 「건너뛰기」 해도 됩니다. WhatsApp 연결, Instagram 연결도 건너뜁니다.

5-3. Threads 계정 확인

  • Threads 계정이 공개 상태인지 확인합니다. 비공개면 5-7절에서 토큰 버튼이 눌리지 않습니다. Threads 설정 → 개인정보 보호 → 「비공개 프로필」을 끕니다.
  • Threads 사용자 이름을 적어 둡니다. 인스타 이름과 다를 수 있습니다. 예를 들어 인스타는 myblog, Threads 는 my.blog 처럼 점이 들어가기도 합니다. 5-7절의 테스터 추가에는 Threads 이름을 써야 합니다.

5-4. Meta 개발자 등록

  1. developers.facebook.com 에 들어가 페이지를 만든 그 페이스북 계정으로 로그인합니다.
  2. 오른쪽 위 「시작하기」를 누르고 약관 동의, 휴대폰 인증을 합니다. 직업을 물으면 「개발자」를 고릅니다.
  3. 끝나면 「앱」 화면이 나옵니다.
Meta 개발자 앱 화면. 「아직 앱 없음」과 초록색 「앱 만들기」 버튼이 보인다
Meta 개발자 앱 화면. 「아직 앱 없음」과 초록색 「앱 만들기」 버튼이 보인다

💡 자주 막히는 곳: 인증 문자가 안 와요

  • 국가는 대한민국(+82), 번호는 맨 앞 0을 빼고 넣습니다. 010-1234-5678 → 10 1234 5678
  • Meta 문자는 해외 번호로 와서 스팸함이나 통신사 「국제 문자 수신 차단」에 걸리기 쉽습니다.
  • 「다시 보내기」를 여러 번 누르면 한동안 막힙니다. 몇 시간 뒤에 한 번만 다시 요청합니다.
  • 그래도 안 되면 페이스북 계정 센터 → 개인정보 → 연락처 정보에서 휴대폰을 먼저 인증한 뒤 다시 시도합니다.

5-5. 앱 만들기 (이용 사례 3개를 앱 하나에)

Threads, 인스타그램, 페이스북을 앱 하나로 모두 처리합니다.

① 안내 창 — 초록색 「앱 만들기」를 누르면 새 방식 안내 창이 뜹니다. 파란 「앱 만들기」를 누릅니다.

「Meta를 통해 앱을 만들 수 있는 새로운 방법이 있습니다」 안내 창. 오른쪽 아래에 「앱 만들기」 버튼
「Meta를 통해 앱을 만들 수 있는 새로운 방법이 있습니다」 안내 창. 오른쪽 아래에 「앱 만들기」 버튼

② 앱 상세 정보

앱 만들기 첫 단계 「앱 상세 정보」. 앱 이름과 앱 연락처 이메일 칸이 있다
앱 만들기 첫 단계 「앱 상세 정보」. 앱 이름과 앱 연락처 이메일 칸이 있다
  • 앱 이름: 예) My SNS Relay. 이름에 Facebook, Instagram, Meta, FB, IG 가 들어가면 거절됩니다. 사용자에게는 보이지 않고 나중에 바꿀 수 있습니다.
  • 앱 연락처 이메일: 자주 확인하는 메일. Meta 가 앱 제한·정책 안내를 이 주소로 보냅니다.
  • 「다음」을 누릅니다.

③ 이용 사례 — 처음에는 「추천(6)」으로 걸러져 있어서 필요한 항목이 다 보이지 않습니다.

이용 사례 추가 화면. 왼쪽 필터가 「추천 (6)」으로 선택되어 있다
이용 사례 추가 화면. 왼쪽 필터가 「추천 (6)」으로 선택되어 있다
  1. 왼쪽 필터에서 「콘텐츠 관리 (5)」를 누릅니다. 필요한 세 항목이 한 화면에 모입니다.
  2. 아래 세 개를 모두 체크합니다.
    • Threads API 액세스
    • Instagram에서 메시지 및 콘텐츠 관리
    • 페이지의 모든 부분 관리
「콘텐츠 관리 (5)」 필터. Threads API 액세스와 Instagram에서 메시지 및 콘텐츠 관리가 체크되어 있고, 맨 아래 「페이지의 모든 부분 관리」도 체크해야 한다
「콘텐츠 관리 (5)」 필터. Threads API 액세스와 Instagram에서 메시지 및 콘텐츠 관리가 체크되어 있고, 맨 아래 「페이지의 모든 부분 관리」도 체크해야 한다
  1. 왼쪽 아래가 「이용 사례 3개 추가됨」이 되면 「다음」을 누릅니다.

💡 자주 막히는 질문: 앱을 채널마다 따로 만들어야 하나요?

아닙니다. 「모두 (20)」에서 Threads 를 체크하면 인스턴트 게임, Facebook 로그인, 데이터 전송처럼 함께 쓸 수 없는 몇 개만 회색으로 바뀝니다. 인스타그램과 페이지 항목은 그대로 고를 수 있으니 앱 하나면 됩니다.

「모두 (20)」 필터에서 Threads API 액세스를 체크하자 인스턴트 게임과 Facebook 로그인 항목만 회색으로 바뀐 화면
「모두 (20)」 필터에서 Threads API 액세스를 체크하자 인스턴트 게임과 Facebook 로그인 항목만 회색으로 바뀐 화면

목록 맨 아래의 「이용 사례 없이 앱 만들기」나 「기타」는 고르지 않습니다.

이용 사례 목록 맨 아래. 「일부 이용 사례는 동일한 앱에서 함께 사용할 수 없습니다」 안내와 「기타」 항목
이용 사례 목록 맨 아래. 「일부 이용 사례는 동일한 앱에서 함께 사용할 수 없습니다」 안내와 「기타」 항목

④ 비즈니스 — 「아직 비즈니스 포트폴리오를 연결하지 않겠습니다」를 고르고 「다음」. 내 계정에만 쓸 때는 필요 없습니다.

⑤ 요구 사항 — 앱을 공개(라이브)할 때의 조건 안내입니다. 읽고 「다음」.

⑥ 개요 — 「앱 만들기」를 누릅니다. 페이스북 비밀번호를 다시 물으면 직접 입력합니다.

앱 대시보드에 이용 사례 3개가 보이면 성공입니다. 왼쪽 위 안내 창(1/7)은 닫아도 됩니다.

앱 대시보드. 「앱 맞춤 설정 및 요건」 아래에 Threads, Instagram, 페이지 이용 사례 세 줄이 보인다
앱 대시보드. 「앱 맞춤 설정 및 요건」 아래에 Threads, Instagram, 페이지 이용 사례 세 줄이 보인다

5-6. 기본 앱 ID·시크릿 → META_APP_ID, META_APP_SECRET

  1. 앱 대시보드 왼쪽 아래 「앱 설정」 → 「기본 설정」을 엽니다.
  2. 앱 ID 를 .env 의 META_APP_ID= 뒤에 붙여 넣습니다.
  3. 앱 시크릿 코드 옆 「표시」를 누르고(비밀번호를 물을 수 있습니다) 나온 값을 META_APP_SECRET= 뒤에 붙여 넣습니다.

⚠ 앱은 하나지만 ID·시크릿은 세 쌍입니다. 기본 앱, Threads, Instagram 이 각각 다른 번호를 씁니다. 5-7, 5-8절에서 나머지 두 쌍을 받습니다.

5-7. Threads 토큰

① 게시 권한 확인

  1. 대시보드에서 「Threads API 액세스 맞춤 설정 이용 사례」를 누릅니다.
  2. 「권한 및 기능」에서 threads_basic 과 threads_content_publish 가 「추가됨」인지 봅니다. threads_content_publish 옆에 「추가」 버튼이 있으면 누릅니다.

② 내 Threads 계정을 테스터로 추가

  1. 왼쪽 메뉴 「앱 역할」 → 「역할」을 엽니다.
  2. 「사람 추가」 → 역할 「Threads 테스터」 → Threads 사용자 이름(인스타 이름 아님)을 입력하고 추가합니다.

③ Threads 에서 초대 수락

  1. PC 에서 threads.com 에 로그인하고 설정을 엽니다.
  2. 「설정 더 보기」 → 「웹사이트 권한」 → 「초대」 탭에서 내 앱 초대를 수락합니다.

💡 자주 막히는 곳: 「웹사이트 권한」이 안 보여요

PC 웹 설정의 첫 화면에는 「웹사이트 권한」이 없습니다. 「설정 더 보기」 안에 들어 있습니다.

Threads PC 웹 설정 화면. 왼쪽 메뉴에 계정 센터, 개인정보 보호, 계정 상태, 「설정 더 보기」가 있다
Threads PC 웹 설정 화면. 왼쪽 메뉴에 계정 센터, 개인정보 보호, 계정 상태, 「설정 더 보기」가 있다

그래도 없으면 휴대폰 Threads 앱에서 프로필 → ☰ → 설정 → 계정 → 웹사이트 권한 → 초대로 수락합니다. 초대 목록이 비어 있으면 ②에서 Threads 이름을 잘못 넣은 경우가 많습니다.

④ 앱 ID·시크릿과 토큰 받기

  1. Threads 이용 사례 화면 왼쪽에서 「설정」을 엽니다.
  2. 위쪽 Threads 앱 ID → .env 의 THREADS_APP_ID=
  3. Threads 앱 시크릿 코드 옆 「보기」 → THREADS_APP_SECRET=
  4. 아래 「사용자 토큰 생성기」에서 내 계정 옆 「액세스 토큰 생성하기」를 누릅니다.
Threads 이용 사례의 설정 화면. 위에 Threads 앱 ID와 시크릿, 아래 「사용자 토큰 생성기」에 내 계정과 「액세스 토큰 생성하기」 버튼이 있다
Threads 이용 사례의 설정 화면. 위에 Threads 앱 ID와 시크릿, 아래 「사용자 토큰 생성기」에 내 계정과 「액세스 토큰 생성하기」 버튼이 있다

💡 자주 막히는 곳: 「액세스 토큰 생성하기」가 회색이라 안 눌려요

화면 설명대로 토큰은 공개 Threads 계정에만 만들 수 있습니다. 가장 흔한 원인은 비공개 계정입니다.

  1. Threads 설정 → 개인정보 보호 → 「비공개 프로필」을 끕니다.
  2. 이 Meta 화면을 새로고침(F5) 합니다. 실제로 이 두 단계로 풀렸습니다.
  3. 그래도 회색이면 ①의 threads_content_publish 가 추가됐는지, ③의 초대 수락이 끝났는지 확인합니다. 수락이 화면에 늦게 반영될 수 있으니 몇 분 뒤 다시 봅니다.
  1. 동의 창이 뜹니다. 권한 목록에 「Create and share posts on Threads profile」(글 게시 권한)이 있는지 확인하고, 파란 「(내 계정) 계정으로 계속」을 누르면 60일짜리 토큰이 나옵니다.
Threads 권한 요청 창. 권한 목록에 Create and share posts on Threads profile이 있고 아래에 파란 「계정으로 계속」 버튼
Threads 권한 요청 창. 권한 목록에 Create and share posts on Threads profile이 있고 아래에 파란 「계정으로 계속」 버튼
  • 「액세스 권한 수정」에서 게시 권한을 끄지 마세요. 답글·인사이트 같은 나머지 선택 항목은 켜 둬도 됩니다.
  1. 나온 토큰을 바로 복사해 .env 의 THREADS_TOKEN= 뒤에 붙여 넣고 저장합니다. 창을 닫으면 다시 볼 수 없습니다. 놓쳤다면 「액세스 토큰 생성하기」를 다시 누르면 새 토큰이 나옵니다.

⑤ THREADS_USER_ID 채우기

계정의 숫자 ID 는 토큰으로 조회해야 나옵니다. 토큰을 주소창에 붙여 넣는 방법은 기록이 남아 권하지 않습니다. Claude Code 에게 아래처럼 맡기면 토큰 값을 보지 않고 채워 줍니다.

<작업 폴더>/.env 의 THREADS_TOKEN 으로 Threads API 의 /me 를
fields=id,username 으로 조회해서, 나온 id 를 같은 파일의 THREADS_USER_ID= 에 채워 줘.
토큰 값은 화면·로그·답변 어디에도 출력하지 마. 조회된 username 만 알려 줘.

5-8. Instagram 토큰

  1. 대시보드에서 「Instagram에서 메시지 및 콘텐츠 관리 맞춤 설정 이용 사례」를 누르고 「Instagram 로그인이 포함된 API 설정」을 엽니다.
  2. 위쪽 Instagram 앱 ID → IG_APP_ID=, Instagram 앱 시크릿 코드 옆 「표시」 → IG_APP_SECRET=
  3. 1번 「필수 메시지 권한 추가」의 파란 「Add all required permissions」를 먼저 누릅니다. instagram_business_basic, instagram_business_content_publish 가 여기서 추가됩니다.
  4. 2번 「액세스 토큰 생성」의 「계정 추가」를 누릅니다.

💡 자주 막히는 곳: 「앱에 사람을 추가하세요」 창이 떠요

인스타 계정이 아직 테스터가 아니면 이 창이 먼저 뜹니다. 여기서 위쪽의 일반 「테스터」가 아니라 아래쪽 「Instagram 테스터」를 고르고, 인스타 사용자 이름을 넣어 추가합니다.

「앱에 사람을 추가하세요」 창. 관리자·개발자·테스터·분석 사용자 아래 「이 앱에 대한 추가 역할」에 Instagram 테스터가 따로 있다
「앱에 사람을 추가하세요」 창. 관리자·개발자·테스터·분석 사용자 아래 「이 앱에 대한 추가 역할」에 Instagram 테스터가 따로 있다

그다음 인스타그램에서 초대를 수락합니다. PC 웹 instagram.com: ☰ → 설정 → 「앱 및 웹사이트」(안 보이면 설정 검색창에 「앱」 입력) → 「테스터 초대」 탭 → 수락. PC 에 없으면 휴대폰 앱의 설정 → 웹사이트 권한 → 앱 및 웹사이트 → 테스터 초대에서 수락합니다. 수락한 뒤 Meta 화면을 새로고침하고 「계정 추가」를 다시 누릅니다.

  1. 인스타 로그인과 권한 허용을 마치면 토큰이 나옵니다. 바로 복사해 IG_TOKEN= 뒤에 붙여 넣고 저장합니다.
  2. IG_USER_ID 는 인스타 사용자 이름이 아니라 숫자입니다. Claude Code 에게 맡깁니다.
<작업 폴더>/.env 의 IG_TOKEN 으로 Instagram API(graph.instagram.com)의 /me 를
fields=user_id,username 으로 조회해서, 나온 user_id 를 IG_USER_ID= 에 채워 줘.
토큰 값은 화면·로그·답변 어디에도 출력하지 마. 조회된 username 만 알려 줘.

5-9. 페이스북 페이지 토큰

페이지 토큰은 발급 버튼이 따로 없습니다. Graph API 탐색기에서 1시간짜리 임시 토큰을 받으면, sns-relay token page 가 그것을 만료 없는 페이지 토큰으로 바꿔 .env 에 적습니다.

① 권한 먼저 켜기

대시보드 → 「페이지의 모든 부분 관리 맞춤 설정 이용 사례」 → 「권한 및 기능」에서 아래 세 개 옆 「추가」를 누릅니다.

권한 동의 창에 보이는 이름 용도
pages_manage_posts 페이지 콘텐츠 제작 및 관리 글 게시
pages_read_engagement 페이지에 게시된 콘텐츠 읽기 게시 확인
pages_show_list 관리 중인 페이지 리스트를 표시 페이지 토큰 조회

💡 자주 막히는 곳: 탐색기의 「권한 추가」 목록에 pages_manage_posts 가 안 보여요

탐색기 목록에는 이용 사례에서 이미 추가한 권한만 나옵니다. 아래처럼 pages_show_list 만 보이면 ①을 아직 안 한 것입니다. ①을 한 뒤 탐색기를 새로고침(F5) 하면 보입니다. 칸에 pages_ 를 입력하면 빨리 찾습니다.

Graph API 탐색기 오른쪽 패널. 권한 추가 목록에 business_management, pages_show_list, instagram_manage_comments 만 보인다
Graph API 탐색기 오른쪽 패널. 권한 추가 목록에 business_management, pages_show_list, instagram_manage_comments 만 보인다

② 탐색기에서 임시 토큰 받기

  1. developers.facebook.com/tools/explorer 에 들어갑니다.
  2. 오른쪽 「Meta 앱」에서 내 앱을 고릅니다.
  3. 「권한 추가」에서 위 세 권한을 모두 고릅니다.
  4. 「Generate Access Token」을 누릅니다. 페이지 선택 창이 뜹니다.

③ 페이지 선택 창

  1. 「현재 페이지에만 옵트 인」을 고릅니다. 앱이 글을 올릴 페이지에만 권한을 주는 것이 안전합니다. 「모든 현재 및 향후 페이지」는 나중에 만드는 페이지까지 자동으로 열어 줍니다.
「앱에서 액세스하도록 할 페이지 선택」 창. 「모든 현재 및 향후 페이지에 옵트 인」과 「현재 페이지에만 옵트 인」 두 선택지
「앱에서 액세스하도록 할 페이지 선택」 창. 「모든 현재 및 향후 페이지에 옵트 인」과 「현재 페이지에만 옵트 인」 두 선택지
  1. 5-2절에서 만든 페이지 하나만 체크하고 「계속」을 누릅니다. 페이지 이름 아래 숫자가 페이지 ID 입니다. .env 의 FB_PAGE_ID= 뒤에 적어 둡니다.
「현재 페이지에만 옵트 인」을 고른 뒤 페이지 하나가 체크된 화면. 페이지 이름 아래에 숫자 ID가 있다(캡처에서는 가림)
「현재 페이지에만 옵트 인」을 고른 뒤 페이지 하나가 체크된 화면. 페이지 이름 아래에 숫자 ID가 있다(캡처에서는 가림)
  1. 액세스 요청 검토 화면에서 권한 세 줄이 모두 「페이지 1개 선택됨」인지 확인하고 「저장」을 누릅니다.
「액세스 요청 검토」 화면. 페이지 콘텐츠 제작 및 관리, 페이지에 게시된 콘텐츠 읽기, 관리 중인 페이지 리스트를 표시 세 줄과 「저장」 버튼
「액세스 요청 검토」 화면. 페이지 콘텐츠 제작 및 관리, 페이지에 게시된 콘텐츠 읽기, 관리 중인 페이지 리스트를 표시 세 줄과 「저장」 버튼
  1. 탐색기 위쪽 「액세스 토큰」 칸에 긴 문자열이 채워집니다. 이것을 복사합니다. 약 1시간 뒤 만료되니 바로 다음 단계로 갑니다.

④ 페이지 토큰으로 바꾸기

META_APP_ID, META_APP_SECRET, FB_PAGE_ID 가 .env 에 채워져 있어야 합니다. 터미널에서 실행합니다.

sns-relay token page --dir <작업 폴더>

토큰을 물으면 ③에서 복사한 값을 붙여 넣고 Enter. 입력은 화면에 보이지 않고 셸 기록에도 남지 않습니다. 결과는 .env 의 FB_PAGE_TOKEN 에만 적힙니다.

「FB_PAGE_ID … 페이지의 토큰이 없습니다」가 나오면 ③에서 그 페이지를 체크하지 않았거나 FB_PAGE_ID 숫자가 틀린 것입니다. .env 는 바뀌지 않았으니 ②부터 다시 하면 됩니다.

5-10. (선택) 사진 자동 업로드 — Cloudinary

인스타그램·Threads 는 인터넷에 공개된 이미지 주소만 받습니다. 내 컴퓨터의 사진이나 WebP 대표 이미지를 쓰려면 Cloudinary 가 JPEG 공개 주소로 바꿔 줍니다. 블로그 대표 이미지가 이미 JPEG 공개 주소라면 건너뛰어도 됩니다.

  1. console.cloudinary.com 에서 무료 가입합니다. 카드는 필요 없습니다.
  2. 대시보드의 Product Environment Credentials 에서 세 값을 찾습니다. API Secret 은 눈 모양 아이콘을 눌러야 보입니다.
.env 칸 대시보드 항목
CLOUDINARY_CLOUD_NAME Cloud name
CLOUDINARY_API_KEY API Key
CLOUDINARY_API_SECRET API Secret
  1. 작업 폴더 config.json 에 "imageHost": "cloudinary" 한 줄을 더합니다. 다른 항목은 그대로 둡니다.
{
  "channels": ["threads", "instagram", "facebook", "naver"],
  "imageHost": "cloudinary"
}

무료 요금제는 월 25 크레딧(저장 1GB, 전송 1GB, 또는 변환 1,000회가 각각 1크레딧)이고 이미지 한 장은 10MB 까지입니다. SNS 사진 기준으로 매달 수백 건 게시까지는 무료 안입니다(어림값이며 원본이 크면 줄어듭니다).

5-11. 점검

sns-relay doctor --dir <작업 폴더>

채널마다 토큰이 살아 있는지, 어느 계정인지, 만료일이 언제인지 읽기만 해서 보여 줍니다. 토큰 값은 출력하지 않습니다.

표시 뜻 할 일
✔ 정상 없음
⚠ 경고(만료일 모름, 만료가 가까움 등) 안내대로 합니다. 게시는 됩니다
✖ 오류(값 없음, 토큰 만료, 권한 부족, ID 불일치 등) 해당 절로 돌아가 고칩니다
  • 처음에는 Threads·Instagram 에 「만료일을 모릅니다」 경고가 나옵니다. 토큰을 받고 24시간이 지난 뒤 아래를 한 번 실행하면 만료일이 적히고 60일이 연장됩니다.
sns-relay token refresh threads --dir <작업 폴더>
sns-relay token refresh instagram --dir <작업 폴더>
  • 「USER_ID 가 토큰의 계정과 다릅니다」는 5-7⑤, 5-8⑥의 프롬프트로 다시 채우면 됩니다.

사용할 채널이 모두 ✔ 가 되면 준비 끝입니다. 수고하셨습니다.

6. 사용법 세 가지

세 방법 모두 같은 작업 폴더와 같은 안전장치를 씁니다. 편한 것 하나만 고르면 됩니다.

(a) Claude Code 플러그인 (b) Claude Desktop (c) 터미널 CLI
이런 분께 Claude Code 를 이미 쓰는 분. 가장 권합니다 채팅 앱이 편한 분 AI 없이 직접 하고 싶은 분
쓰는 모습 "이 글 SNS 에 올려 줘" 라고 말하기 프롬프트 draft_sns_posts 에 주소 넣기 sns-relay fetch … 등 명령 입력
초안 작성 Claude 가 씀 Claude 가 씀 내가 직접(또는 다른 AI 로) 씀
설정 난이도 쉬움 보통(설정 파일 편집) 쉬움

(a)와 (b)를 같은 앱에 둘 다 연결하면 도구가 두 번 보이니 하나만 연결합니다.

(a) Claude Code 플러그인

플러그인을 설치하면 스킬(초안 작성부터 승인 요청까지의 절차)과 MCP 서버(Claude 가 sns-relay 를 부르는 연결)가 함께 들어옵니다.

  1. Claude Code 입력창에서 실행합니다.
/plugin marketplace add SomySam/sns-relay
/plugin install sns-relay@sns-relay
  1. MCP 서버가 작업 폴더를 알도록 환경 변수 SNS_RELAY_DIR 을 설정합니다.
    • Windows: 터미널에서 setx SNS_RELAY_DIR "<작업 폴더>"
    • macOS / Linux: 셸 설정 파일(~/.zshrc 등)에 export SNS_RELAY_DIR=<작업 폴더> 를 추가합니다. 터미널에서 시작한 Claude Code 에만 적용됩니다.
  2. Claude Code 를 모든 창까지 완전히 종료했다가 다시 켭니다.
  3. /mcp 를 실행해 sns-relay 가 connected 인지 확인합니다.

Claude Code 에게 맡기는 프롬프트

sns-relay 플러그인을 쓰려고 해. 작업 폴더는 <작업 폴더> 야.
README 의 「Claude Code 스킬 / 플러그인」 절차대로 SNS_RELAY_DIR 환경 변수를 설정해 주고,
재시작 뒤 /mcp 에서 무엇을 확인하면 되는지 알려 줘.

첫 사용: "이 글 SNS 에 올려 줘 <블로그 글 주소>" 라고 말합니다. 이후 흐름은 8장에 있습니다.

(b) Claude Desktop (MCP)

Claude Desktop 의 설정 파일 claude_desktop_config.json 에 sns-relay 를 등록합니다. 파일은 Claude Desktop 설정 → 개발자 → 「구성 편집」으로 열 수 있습니다.

macOS / Linux:

{"mcpServers":{"sns-relay":{"command":"sns-relay","args":["mcp","--dir","<작업 폴더>"]}}}

Windows 는 npm 전역 명령을 앱이 바로 실행하지 못하므로 node 로 실행합니다. 터미널에서 npm root -g 를 실행해 나온 폴더를 <npm root -g 결과> 자리에 넣습니다.

{"mcpServers":{"sns-relay":{"command":"node","args":["<npm root -g 결과>\\sns-relay\\dist\\cli\\index.js","mcp","--dir","<작업 폴더>"]}}}
  • JSON 안에서는 경로의 \ 를 \\ 로 두 번 씁니다. 예: D:\\my-sns-work
  • 이미 mcpServers 가 있으면 sns-relay 항목만 그 안에 더합니다.
  • Claude Desktop 을 완전히 종료했다가 다시 켭니다.

AI 에게 맡기는 프롬프트 (Claude Code 나 다른 채팅 AI)

Windows 에서 Claude Desktop 에 sns-relay MCP 서버를 등록하려고 해.
작업 폴더는 <작업 폴더> 야. npm root -g 를 실행해서 경로를 확인한 뒤,
claude_desktop_config.json 의 mcpServers 에 sns-relay 항목을 추가해 줘.
기존 항목은 지우지 말고, JSON 경로의 역슬래시는 두 번 써 줘.

첫 사용: 입력창의 프롬프트 목록에서 draft_sns_posts 를 골라 글 주소를 넣고 시작합니다. 실제 게시는 미리보기(dry-run)를 먼저 거쳐야 열립니다.

(c) 터미널 CLI

AI 없이 명령으로 직접 합니다. 작업 폴더에서 실행하거나 명령마다 --dir <작업 폴더> 를 붙입니다.

sns-relay fetch <글 주소>                          # 본문 가져오기 + 채널별 빈 초안 파일
sns-relay rules                                   # 초안 작성 규칙 보기
# work/<id>/drafts/*.md 를 메모장 등으로 열어 본문을 채웁니다
sns-relay drafts <id>                             # 초안 검증
sns-relay approve <id> --channels threads,facebook # 검토한 채널만 승인
sns-relay publish <id> --dry-run                  # 게시 전 최종 확인
sns-relay publish <id> --channels threads         # 실제 게시(채널을 꼭 지정)
sns-relay status                                  # 글 × 채널 상태

<id> 는 fetch 가 알려 주는 작업 이름입니다. 전체 명령은 README 의 「터미널 (CLI)」 절에 있습니다.

7. 말투 설정

기본 규칙은 누구나 쓰는 공통 원칙입니다. 내 계정 말투는 작업 폴더 config.json 의 notes 에 적습니다. 사실에 관한 규칙을 뺀 나머지는 메모가 우선합니다.

{
  "notes": {
    "common": "짧은 호흡, 핵심만, 위트 있게. 1인칭으로 혼잣말하듯.",
    "threads": "마지막은 가벼운 질문으로 닫기.",
    "naver": "소제목마다 예시 하나씩."
  }
}
  • common 은 모든 채널에, threads · instagram · facebook · naver 는 그 채널에만 적용됩니다.
  • 기존 config.json 의 다른 항목은 그대로 두고 notes 만 고칩니다.

8. 첫 글 올리기

Claude 와 대화하는 흐름입니다. (a) 플러그인은 스킬이, (b) Desktop 은 draft_sns_posts 프롬프트가 같은 절차를 따릅니다.

  1. 글 주소를 알려 줍니다.

나: 이 글 SNS 에 올려 줘 <블로그 글 주소>

  1. Claude 가 글을 가져와 채널별 초안을 쓰고 검증 결과와 함께 보여 줍니다. 오류(✖)는 Claude 가 고치고, 경고(⚠)는 알려 줍니다.
  2. 초안을 읽고 고칠 곳을 말합니다. 고치면 승인이 풀리니 다시 확인합니다.

나: 스레드는 첫 문장을 좀 더 가볍게 바꿔 줘

  1. 마음에 드는 채널만 명시해 승인합니다. "좋아요"만 말하면 Claude 가 어느 채널인지 되묻습니다.

나: threads, facebook 승인

  1. 게시 전 미리보기(dry-run)를 봅니다. 채널별 최종 문구와 링크, 인스타그램은 이미지 확인 결과까지 나옵니다. 아직 아무것도 올라가지 않았습니다.
  2. 괜찮으면 명시적으로 허락합니다.

나: 올려

  1. Claude 가 게시물 주소를 알려 주고 채널별 상태를 보여 줍니다. 승인하지 않은 채널과 네이버는 올라가지 않습니다.

처음 게시한 뒤 꼭 확인할 것: Meta 앱이 개발 모드이면 게시물이 앱 관리자·테스터에게만 보일 수 있습니다. 로그아웃한 시크릿 창에서 게시물 주소를 열어 보세요. 안 보이면 앱을 라이브로 전환해야 합니다.

결과 불명이 나오면

응답이 끊기는 등으로 게시됐는지 알 수 없으면 ? 결과 불명 으로 표시됩니다.

  1. 다시 게시하지 않습니다. 중복 게시를 막기 위한 안전장치입니다.
  2. 1~2분 뒤 상태를 다시 확인합니다.
  3. 계속 불명이면 해당 채널에서 글이 실제로 올라갔는지 직접 봅니다.
  4. Claude 에게 결과를 알려 확정합니다.

나: threads 에 올라갔어. 주소는 <게시물 주소>

나: threads 에는 안 올라갔어

CLI 로는 다음과 같습니다.

sns-relay resolve <id> threads --published <게시물 주소>
sns-relay resolve <id> threads --not-published

8-1. 글감·사진으로 올리기

블로그 글이 없어도 내 메모와 사진으로 올릴 수 있습니다.

나: 이 사진이랑 메모로 SNS 글 올려 줘

터미널로는 다음과 같습니다.

sns-relay new --title "<제목>" --text <글감 파일> --image <사진 파일 또는 주소> [--link <주소>] --dir <작업 폴더>
  • 로컬 사진 파일은 5-10절의 Cloudinary 가 필요합니다. 공개 이미지 주소는 없어도 됩니다.
  • --link 를 주지 않으면 링크 없이 올라갑니다. Threads 는 이미지 글, 페이스북은 사진 글, 인스타그램은 이미지와 캡션입니다.
  • 사진 여러 장: --image 를 여러 번 줍니다(최대 10장). 첫 장이 대표이고, 인스타그램은 첫 장 비율로 잘립니다. Claude Code 에서는 입력창에 여러 장을 올리면 됩니다.
  • sns-relay image 에 사진을 하나만 주면 사진이 한 장이 됩니다(목록 전체를 바꿈).
  • 링크가 있는 글은 여러 장이 인스타그램에만 올라가고, Threads·페이스북은 링크 글로 올라갑니다.
  • 여러 장 게시는 준비에 몇 분 걸릴 수 있습니다.
  • 여러 장 기능은 글감 작업에 쓰는 것을 권합니다(블로그 글을 다시 가져오면 사진 목록이 블로그 대표 이미지로 돌아갑니다).
  • 네이버 원고에는 사진을 직접 붙여 넣습니다.

8-2. 대표 이미지가 WebP 일 때

인스타그램은 JPEG 만 받습니다. 대표 이미지가 WebP 라면 JPEG 로 옮깁니다(5-10절 준비 필요).

sns-relay image <id> --article --dir <작업 폴더>

이미지가 바뀌므로 승인이 풀립니다. 다시 확인하고 승인한 뒤 미리보기를 봅니다.

9. 네이버 올리기

네이버는 공식 글쓰기 API 가 없어서 자동으로 올리지 않습니다. 승인된 네이버 초안을 붙여 넣기용 원고로 받아 직접 발행합니다.

  1. 붙여 넣기용 원고를 만듭니다. work/<id>/naver.md 가 만들어지고 기본 앱으로 열립니다(열지 않으려면 --no-open).
sns-relay naver <id> --dir <작업 폴더>
  1. 네이버 블로그 글쓰기 화면을 엽니다.
  2. 원고의 「제목」 칸 내용을 제목에 붙여 넣습니다. 칸 제목 줄(## …)은 빼고 그 아래 내용만 복사합니다.
  3. 「본문」 칸 내용을 본문에 붙여 넣습니다.
  4. 「소제목」 칸을 보고 본문의 소제목에 제목 서식을 입힙니다.
  5. 발행 버튼 → 발행 설정 창의 「태그 편집」에 「태그」 칸의 태그를 하나씩 입력하고 Enter 로 확정합니다. 쉼표로 이어 붙이면 한 태그가 됩니다.
  6. 발행합니다.
  7. 발행된 글 주소를 Claude 에게 알려 주면 기록됩니다. CLI 로는 sns-relay mark naver <id> --url <발행 주소> --dir <작업 폴더> 입니다.

10. 후킹·문투 바꾸기

  • 이번 글만 바꾸려면 대화로 요청합니다.

나: 스레드 첫 문장 후킹 3안 보여 줘

Claude 가 채널별로 현재 첫 문장과 3안을 보여 주고, 고른 안으로 첫 문장만 고칩니다.

  • Claude Desktop 에서는 프롬프트 rewrite_hooks 에 작업 이름을 넣어 같은 일을 할 수 있습니다.
  • 계속 적용하려면 7장의 notes 를 고칩니다.
  • 내용이 바뀐 초안은 승인이 풀립니다. 이미 게시된 칸은 고치지 않습니다.

11. 유지 관리

언제 할 일 명령
한 달에 한 번 토큰 상태 점검. 만료 14일 전부터 경고합니다 sns-relay doctor
Threads·인스타 토큰 만료 전(60일) 60일 연장. 발급 24시간 뒤부터 가능, 만료되면 새로 발급 sns-relay token refresh threads / instagram
페이스북 데이터 접근 기한 전(90일) 페이지 토큰 자체는 만료가 없지만 앱의 데이터 접근 기한이 있습니다. 5-9절 ②~④를 다시 합니다 sns-relay token page
업데이트가 나왔을 때 저장소 폴더에서 실행. 플러그인은 /plugin marketplace update sns-relay git pull → npm install
  • 만료일은 UTC 날짜로 적힙니다(한국 시간보다 최대 하루 이르게 보일 수 있습니다).
  • 토큰을 갱신하면 .env 의 값 뒤에 붙인 # 주석은 지워집니다.

12. 문제 해결

증상 원인과 해결
sns-relay 명령을 찾을 수 없다 3-2절의 npm install -g . 를 저장소 폴더에서 다시 실행하고, 터미널을 새로 엽니다
인증 문자가 안 온다 5-4절 「자주 막히는 곳」
이용 사례에 인스타·페이지 항목이 안 보인다 필터가 「추천」입니다. 「콘텐츠 관리」를 누릅니다(5-5절)
Threads 초대 수락 메뉴가 없다 설정 → 「설정 더 보기」 → 「웹사이트 권한」(5-7절 ③)
「액세스 토큰 생성하기」가 회색 Threads 비공개 해제 후 새로고침(5-7절 ④)
인스타 「계정 추가」에서 사람 추가 창이 뜬다 「Instagram 테스터」로 추가하고 수락(5-8절)
탐색기 권한 목록에 pages_ 권한이 없다 이용 사례의 「권한 및 기능」에서 먼저 추가(5-9절 ①)
플러그인 MCP 가 연결되지 않는다 SNS_RELAY_DIR 설정 뒤 Claude Code 를 모든 창까지 재시작. 한 번 실패하면 약 15분간 재시도를 건너뜁니다. sns-relay --version 으로 설치도 확인합니다
? 결과 불명 다시 게시하지 않습니다. 8장 「결과 불명이 나오면」
Cloudinary ✖ .env 의 세 값을 다시 확인합니다
로컬 사진을 쓰라는데 imageHost 오류 config.json 의 imageHost 를 cloudinary 로(5-10절)
인스타 게시가 이미지 때문에 막힌다 JPEG, 가로세로 비율 0.8~1.91, 8MB 이하여야 합니다
게시했는데 나만 보인다 앱이 개발 모드입니다. 라이브로 전환합니다
토큰 오류·만료로 실패 doctor 로 채널을 확인하고, Threads·인스타는 token refresh(만료됐으면 새로 발급), 페이스북은 token page 로 다시 발급

막히는 화면이 있으면 토큰·시크릿을 가린 캡처와 함께 Claude 에게 이렇게 물어보세요.

sns-relay 튜토리얼 <절 번호>를 따라 하는 중인데 이 화면에서 막혔어.
캡처를 보고 다음에 무엇을 눌러야 하는지 알려 줘. (토큰·시크릿은 가렸어)

부록 A. 유튜브 영상으로 올리기 (준비 중)

아직 정식 버전에 들어가지 않은 기능입니다. 개발과 테스트는 끝났고, 실제 영상으로 한 번 확인한 뒤 v0.3.0 에서 열릴 예정입니다. 열리면 이 절을 채웁니다.

예정된 내용은 다음과 같습니다.

  • 내 채널 영상만 다룹니다. config.json 에 내 채널 핸들(@…)을 적어 확인합니다.
  • 영상 내용은 유튜브 스튜디오에서 받은 자막 파일(.srt 등)로 읽습니다. 초안은 자막에 있는 내용만 씁니다.
  • 추가 토큰은 필요 없습니다. 영상 제목·썸네일은 공개 정보로 가져옵니다. 나중에 구글 로그인으로 자막을 자동으로 받는 기능이 생기면, 그때 필요한 발급 절차를 5장에 더합니다.
  • 게시 모양: Threads·페이스북은 영상 링크 카드, 인스타그램은 영상 썸네일 사진입니다.

부록 B. 용어 풀이

용어 뜻
토큰 프로그램이 내 계정에 글을 올려도 된다는 허락을 담은 문자열. 비밀번호처럼 다룹니다
앱 ID / 앱 시크릿 Meta 개발자 앱의 번호와 비밀번호. ID 는 공개돼도 되고, 시크릿은 비밀입니다
테스터 심사를 받지 않은 앱을 써 볼 수 있게 허락된 계정. 내 계정에만 쓸 때는 나를 테스터로 넣으면 됩니다
이용 사례 Meta 앱이 무엇을 할지 고르는 묶음(Threads, 인스타, 페이지 등)
.env 비밀 값을 적어 두는 파일. git 에 올라가지 않게 막혀 있습니다
MCP Claude 가 바깥 프로그램(여기서는 sns-relay)을 부를 수 있게 하는 연결 방식
스킬 Claude 가 따르는 작업 절차서. 플러그인에 들어 있습니다
dry-run 실제로 올리지 않고 결과만 미리 보는 것
Graph API 탐색기 Meta 가 개발자에게 주는 시험용 화면. 여기서 페이지용 임시 토큰을 받습니다