connector

SKILL.md

Smilegate Connector

스마일게이트 업무 도구를 Claude Code에 연결하는 설정 스킬. 비개발자도 따라할 수 있도록 단계별로 안내한다.

연결 대상

서비스 연결 방식 난이도
Slack Connectors (클릭만) 쉬움
Jira MCP (토큰 발급 필요) 보통
Confluence MCP (토큰 발급 필요) 보통
BISKIT MCP (토큰 발급 필요) 보통
API Docs MCP (인증 불필요, 클릭만) 쉬움
GitLab CLI 설치 (토큰 발급 필요) 보통
Amplitude MCP (OAuth 인증, 클릭만) 쉬움

서비스 유형 분류

유형 서비스 연결 방식 재시작 필요
유형 A (토큰 기반 MCP) Jira, Confluence, BISKIT, API Docs 설정 파일에 토큰 추가 + 재시작 O
유형 B (OAuth 기반 MCP) Amplitude claude mcp add -t http + 재시작 + /mcp → Authenticate O (신규 설치 시)
유형 C (비-MCP) Slack, GitLab Connectors / CLI 설치 X
  • 유형 B 핵심 특성: 설치 + 재시작만으로는 도구가 로드되지 않는다. /mcp → 서버 선택 → Authenticate → 브라우저 로그인을 완료해야 도구가 활성화된다. MCP 설정이 이미 존재하면 재시작 없이 /mcp → Authenticate만 진행하면 된다.

실행 흐름

이 스킬이 트리거되면 가장 먼저 state.json을 확인하여 분기한다.

링크 출력 규칙: 모든 URL은 코드 블록 밖에서 마크다운 링크 형식 [텍스트](URL) 으로 표시한다. 코드 블록 안에 URL을 절대 넣지 않는다. 코드 블록 안의 URL은 클릭이 불가능하고 줄바꿈이 발생할 수 있다. 단, JSON 설정 예시의 URL 값은 설정값이므로 코드 블록 안에 표기한다. 링크 뒤에 한글 조사나 글자가 바로 붙으면 링크에 포함되어 404가 발생하므로, 링크 닫는 괄호 ) 뒤에 반드시 공백을 한 칸 넣는다. 예: [페이지](URL) 에서 (O) / [페이지](URL)에서 (X)

상태 확인 및 분기

스킬이 시작되면 Read 도구로 ~/.claude/skills/smilegate-ai-tools/state.json 파일을 읽는다.

하위 호환: connector 키에 status 필드가 없고 completed: true만 있는 경우, status: "completed"로 취급한다. status가 없고 connected_services만 있는 경우도 status: "completed"로 취급한다.

아래 3가지 케이스로 분기한다:

케이스 A: 파일 없음 또는 connector 키 없음 → 신규 설치

처음 방문한 사용자다. 아래 "진단" 단계부터 전체 흐름을 진행한다:

진단 → 서비스 선택 → 서비스별 설정(하나씩) → 재시작(필요 시) → 연결 테스트 → 완료 리포트 → 자동화 제안(첫 실행 시)

케이스 B: connector.status = "installing" → 재시작 후 복귀

이전에 설정을 완료하고 재시작을 안내받은 사용자가 돌아왔다. connector.pending_services 목록을 확인하여 연결 테스트를 진행한다.

  1. pending_services에 있는 서비스들의 도구가 로드되었는지 ToolSearch로 확인한다.

    • 유형 B(OAuth 기반 MCP) 서비스 예외: 유형 B 서비스는 OAuth 인증을 완료해야 도구가 로드된다. 유형 B 서비스가 pending_services에 있고 ToolSearch에 도구가 나타나지 않으면, Read 도구로 ~/.claude.json에 해당 서비스의 MCP 설정이 존재하는지 확인한다. 설정이 존재하면 OAuth 인증이 아직 안 된 것이므로 아래 안내를 출력한다:
      {서비스명}은(는) 로그인이 필요해요! 아래 순서대로 진행해주세요.
      
      1. `/mcp` 를 입력하세요
      2. 목록에서 `{서비스의 MCP 서버명}` 을 선택하세요
      3. "Authenticate" 를 선택하세요
      4. 브라우저에서 로그인을 완료하세요
      5. 완료되면 "완료" 라고 말해주세요
      
      안내 출력 후 해당 유형 B 서비스 외 다른 pending_services가 있으면 먼저 연결 테스트를 진행한다. 다른 pending_services가 없으면 사용자의 "완료" 입력을 대기한다. 사용자가 "완료"라고 하면 해당 유형 B 서비스의 연결 테스트를 이어서 진행한다.
  2. 도구가 로드됨 → 바로 "연결 테스트" 단계로 이동. pending_services에 있는 서비스만 테스트한다.

  3. 모든 서비스의 도구가 로드되지 않음 (유형 B 서비스도 설정 미존재) → 재시작이 아직 안 됐거나, 설정 오류로 MCP가 로드되지 않은 상태. AskUserQuestion으로 상황을 확인한다:

    • question: "MCP 도구가 아직 로드되지 않았어요. 재시작을 이미 하셨나요?"
    • options: [ {label: "아직 안 했어요", description: "재시작 방법을 안내해드릴게요"}, {label: "이미 재시작했어요", description: "설정을 다시 확인해볼게요"} ]

    "아직 안 했어요" 선택 시 — 아래 재시작 안내를 출력한다:

    1단계: Claude Code 종료

    • Mac / Linux: Ctrl+D 누르기
    • Windows: exit 입력

    2단계: Claude Code 다시 시작

    • 터미널(명령어 입력 창)에서 claude 입력

    3단계: 아래 명령어를 그대로 입력

    /connector

    "이미 재시작했어요" 선택 시 — MCP 설정 오류 가능성이 높다. 아래 순서로 트러블슈팅한다:

    1. Read 도구로 ~/.claude.json을 읽어 pending_services에 해당하는 MCP 설정이 올바른지 확인한다 (키 존재 여부, URL, 헤더 형식 등).
    2. 문제가 발견되면 사용자에게 알리고 설정을 수정한다.
    3. 문제가 발견되지 않으면 네트워크(사내망/VPN) 상태를 확인하도록 안내한다.
    4. 해결되면 다시 재시작을 안내한다. 진전이 없으면 → 트러블슈팅 및 이슈 등록 절차에 따라 GitHub 이슈 등록을 제안한다.

케이스 C: connector.status = "completed" → 재방문

이미 설정을 완료한 사용자다. 아래 "진단" 단계부터 진행하되, state.json의 connected_services1개 이상 있고 그 서비스들이 모두 ✅이면 빠른 종료 분기를 탄다.

진단 → (connected_services 1개 이상 & 모두 ✅) → "기존 연결이 모두 정상입니다" + 추가 설정 여부 질문
     → (connected_services 없음 또는 ⚠️/❌ 있음) → 서비스 선택 → 서비스별 설정 → 재시작(필요 시) → 연결 테스트 → 완료 리포트 (자동화 제안 없음)

빠른 종료 조건 충족 시:

  1. "기존 연결(Slack, Jira …)이 모두 정상입니다!"를 출력한다. (실제 서비스명 나열)
  2. AskUserQuestion으로 "추가로 설정할 서비스가 있나요?"를 묻는다.
    • "네" → 진단 결과 테이블을 다시 표시하고, ⚠️/❌ 상태의 서비스만 서비스 선택으로 이동
    • "아니요" → state.json을 변경하지 않고 종료

connected_services가 없거나 빈 배열인 경우(레거시 형식 등)는 빠른 종료를 건너뛰고 일반 진단 흐름으로 진행한다.

재방문(케이스 C)에서는 자동화 스킬 제안을 건너뛴다.

케이스 D: connector.status = "partial" → 일부 연결된 재방문

이전에 일부 서비스만 연결하고 나머지는 건너뛴 사용자가 돌아왔다. 아래 흐름으로 진행한다:

  1. "일부 도구만 연결된 상태예요" 안내를 출력한다:
    • 연결된 서비스: connected_services 목록 (✅)
    • 미연결/실패 서비스: failed_services 목록 (❌)
  2. AskUserQuestion으로 선택받는다:
    • {label: "❌ 서비스 지금 연결하기", description: "실패했거나 건너뛴 서비스를 이어서 연결합니다"}
    • {label: "나중에 할게요", description: "현재 연결된 서비스만 사용합니다"}
  3. "연결하기" → failed_services + 미연결 ❌ 서비스만 서비스 선택으로 이동
  4. "나중에" → 종료

케이스 E: connector.status = "error" → 전체 실패 재방문

이전에 선택한 모든 서비스 연결에 실패한 사용자가 돌아왔다. 케이스 A(신규)와 동일하게 처음부터 진행하되, "이전에 연결에 문제가 있었어요. 다시 시도해볼게요!" 안내를 먼저 출력한다.


진단: 현재 연결 상태 확인

케이스 B(installing)에서는 이 단계를 건너뛴다.

스킬 시작 시 먼저 현재 연결 상태를 진단한다.

확인 방법:

  1. ToolSearch로 +slack read 검색 → Slack 도구 존재 여부 확인
  2. ToolSearch로 +jira test 검색 → Jira MCP 존재 여부 확인. 도구가 있으면 mcp__jira__test_jira_connection() 호출로 실제 연결 확인
  3. ToolSearch로 +confluence test 검색 → Confluence MCP 존재 여부 확인. 도구가 있으면 mcp__confluence__test_confluence_connection() 호출로 실제 연결 확인
  4. ToolSearch로 +biskit check_auth 검색 → BISKIT MCP 존재 여부 확인. 도구가 있으면 mcp__biskit-report-mcp__check_auth_status() 호출로 실제 연결 확인
  5. ToolSearch로 +apidocs search 검색 → API Docs MCP 존재 여부 확인. 도구가 있으면 연결됨 (인증 불필요이므로 도구 존재 = 연결 성공)
  6. Bash로 glab auth status --hostname git.sginfra.net 2>&1 실행 → GitLab CLI 인증 상태 확인. 명령이 없으면 glab 미설치
  7. 유형 B 서비스 (현재: Amplitude): 해당 서비스의 가이드에 명시된 연결 테스트 방법을 따른다. 도구가 나타나지 않으면 Read 도구로 ~/.claude.json에 해당 서비스의 MCP 설정 존재 여부를 확인한다. 설정 존재 + 도구 미로드 → ⚠️ 인증 필요 (OAuth 미완료 상태). 설정 미존재 → ❌ 미연결.

진단 결과를 테이블로 보여준다:

서비스 상태
Slack ✅ 연결됨 / ❌ 미연결
Jira ✅ 연결됨 / ⚠️ 재연결 필요 / ❌ 미연결
Confluence ✅ 연결됨 / ⚠️ 재연결 필요 / ❌ 미연결
BISKIT ✅ 연결됨 / ⚠️ 재연결 필요 / ❌ 미연결
API Docs ✅ 연결됨 / ❌ 미연결
GitLab ✅ 연결됨 / ⚠️ 재연결 필요 / ❌ 미연결
Amplitude ✅ 연결됨 / ⚠️ 인증 필요 / ❌ 미연결
  • ✅ 연결됨: 도구 존재 + 연결 테스트 성공 (GitLab은 glab 설치 + 인증 완료)
  • ⚠️ 재연결 필요: 도구는 존재하지만 연결 테스트 실패 (토큰 만료 등). GitLab은 glab 설치됨 + 인증 실패
  • ⚠️ 인증 필요 (유형 B 서비스): MCP 설정은 존재하지만 OAuth 인증이 완료되지 않아 도구가 로드되지 않은 상태
  • ❌ 미연결: 도구 자체가 없음 (MCP 설정 없음). GitLab은 glab 미설치
  • Slack, API Docs는 수동 토큰 관리가 불필요하므로 ✅(연결됨)과 ❌(미연결) 두 가지 상태만 존재한다.

이미 연결된 서비스(✅)는 건너뛴다. ⚠️ 또는 ❌ 상태의 서비스만 설정을 진행한다. 전체 7개 서비스가 모두 ✅이면 "모든 서비스가 연결되어 있습니다!"를 출력하고 기본 사용법을 안내한 뒤 종료한다.

케이스 C(재방문)에서는 위 조건 대신 connected_services 기준 빠른 종료를 먼저 확인한다. 케이스 C 설명 참조.

서비스 선택

설정이 필요한 서비스(⚠️/❌)가 있으면 먼저 추천 안내를 출력한다:

💡 추천: 처음이시라면 Slack, Jira, Confluence, BISKIT 4가지를 먼저 설정하세요! 가장 많이 사용되는 핵심 서비스입니다.

이후 AskUserQuestion으로 설정할 서비스를 선택받는다:

  • question: "어떤 서비스를 설정할까요? (⬆⬇ 화살표로 이동, Space로 선택, Enter로 확인)"
  • options: ⚠️/❌ 상태의 서비스만 동적으로 표시. 사용자가 아무것도 선택하지 않고 Enter만 누르거나 "Other"로 "건너뛰기"/"나중에" 등을 입력하면, "나중에 다시 /connector로 설정할 수 있어요!"를 안내하고 종료한다.
    • {label: "Slack", description: "Slack 채널 읽기/검색 (클릭 몇 번이면 끝)"}
    • {label: "Jira", description: "Jira 이슈 조회/생성/관리 (토큰 발급 필요)"}
    • {label: "Jira ⚠️ 재연결", description: "토큰 만료 또는 오류 — 토큰을 다시 발급받아 연결합니다"}
    • {label: "Confluence", description: "Wiki 페이지 조회/검색 (토큰 발급 필요)"}
    • {label: "Confluence ⚠️ 재연결", description: "토큰 만료 또는 오류 — 토큰을 다시 발급받아 연결합니다"}
    • {label: "BISKIT", description: "게임 데이터 리포트 조회 (토큰 발급 필요)"}
    • {label: "BISKIT ⚠️ 재연결", description: "토큰 만료 또는 오류 — 토큰을 다시 발급받아 연결합니다"}
    • {label: "API Docs", description: "SGP API 명세 검색 (인증 불필요, 바로 설치)"}
    • {label: "GitLab", description: "사내 GitLab CLI 설치 및 연결 (토큰 발급 필요)"}
    • {label: "GitLab ⚠️ 재연결", description: "토큰 만료 또는 오류 — 토큰을 다시 발급받아 연결합니다"}
    • {label: "Amplitude", description: "프로덕트 분석 (이벤트, 차트, 퍼널, 실험) — OAuth 인증, 바로 설치"}
    • {label: "Amplitude ⚠️ 인증 필요", description: "OAuth 인증만 진행합니다 (MCP 설정은 이미 존재)"}
  • multiSelect: true
  • 해당 상태의 서비스만 옵션에 표시한다 (예: Jira가 ❌이면 "Jira"만, ⚠️이면 "Jira ⚠️ 재연결"만. Amplitude가 ⚠️이면 "Amplitude ⚠️ 인증 필요"만)

서비스별 설정

선택한 서비스를 아래 순서대로 하나씩 설정한다. 각 서비스의 상세 절차는 해당 가이드를 참조한다.

순서 서비스 가이드 재시작 필요
1 Slack references/slack.md X
2 Jira references/jira.md O (MCP)
3 Confluence references/confluence.md O (MCP)
4 BISKIT references/biskit.md O (MCP)
5 API Docs references/apidocs.md O (MCP)
6 GitLab references/gitlab.md X
7 Amplitude references/amplitude.md O (MCP)

각 서비스는 해당 가이드의 절차에 따라 설정까지만 진행한다. 연결 테스트는 모든 설정이 끝난 뒤 일괄 수행한다.

유형 B 서비스가 ⚠️ 인증 필요 상태에서 선택된 경우: MCP 설정 파일에 해당 서비스 항목이 이미 존재하므로 claude mcp add 명령을 다시 실행하거나 재시작할 필요가 없다. /mcp → 서버 선택 → Authenticate → 브라우저 로그인만 진행하면 된다. 해당 서비스 가이드의 "OAuth 인증" 절차만 따른다.

⚠️ Jira, Confluence, BISKIT, API Docs, GitLab은 사내망 또는 VPN 연결이 필요합니다.

Jira/Confluence 공통 사용자 ID

Jira와 Confluence를 모두 선택한 경우, 사용자 ID는 한 번만 입력받는다.

재연결(⚠️) 시: 먼저 ~/.claude.json의 기존 MCP 설정에서 사용자 ID를 읽는다. 기존 ID가 있으면 "기존 사용자 ID({기존ID})를 그대로 사용할까요?"로 확인하고, 사용자가 변경을 원할 때만 새로 입력받는다. 아래 메시지를 출력하고 다음 사용자 입력을 사용자 ID로 처리한다:

사용자 ID를 입력해주세요 (Jira/Confluence 공통, 예: hyuntaekim) (사용자 ID를 모르시면 "모르겠어요"라고 말해주세요)

  • 사용자가 ID처럼 보이는 값을 입력하면 → 사용자 ID로 처리한다.
  • 사용자가 "모르겠어요" / "잘 모르겠어요" 등을 입력하면 → Jira 프로필 페이지 또는 Confluence 프로필 페이지 에서 사용자 이름을 확인할 수 있다고 안내한 뒤, 다시 입력을 요청한다.

MCP 설정 파일 일괄 업데이트

토큰 기반 MCP 서비스(Jira/Confluence/BISKIT)를 1개 이상 선택한 경우:

  • 모든 토큰 입력이 끝난 후, Read 도구로 설정 파일을 읽고 기존 mcpServers의 다른 서비스 설정을 보존한 채 선택한 서비스를 한번에 추가(신규) 또는 해당 키만 덮어쓰기(재연결)한다. claude mcp add로 이미 추가된 서비스(API Docs, Amplitude 등)의 설정을 삭제하지 않는다.
  • 각 서비스의 MCP 설정 JSON은 해당 가이드를 참조한다.

중요: 토큰은 민감정보이므로 대화 내용에 그대로 노출하지 않는다. 입력받은 토큰 값의 앞뒤 공백과 줄바꿈을 제거(trim)한 뒤 설정 파일에 저장한다. 대화에서는 마스킹하여 표시한다.

비-MCP 서비스 즉시 테스트

MCP 서비스와 비-MCP 서비스(Slack, GitLab)를 함께 선택한 경우, 비-MCP 서비스는 재시작이 필요 없으므로 설정 직후 바로 테스트한다. 이 테스트 결과는 state.json의 connected_services에 반영된다.

Slack, GitLab만 선택한 경우 (MCP 서비스 없음), 재시작이 필요 없으므로 설정 → 테스트 → 완료 리포트로 바로 이동한다. state.json에 installing 상태를 저장하지 않는다.

재시작

MCP 서비스를 1개 이상 설정한 경우, 모든 서비스의 설정이 끝난 후 Claude Code를 한 번만 재시작한다.

유형 B 서비스 예외: 유형 B 서비스를 ⚠️ 인증 필요 상태에서 선택하여 OAuth만 진행한 경우(신규 claude mcp add를 실행하지 않은 경우), 해당 서비스를 재시작이 필요한 서비스에 포함하지 않는다. 이 경우 /mcp → Authenticate 후 즉시 연결 테스트가 가능하며, 재시작이 필요한 다른 MCP 서비스가 없다면 재시작 안내 자체를 건너뛴다.

유형 B + 다른 MCP 혼합 시: 유형 B 서비스가 OAuth를 완료했지만 다른 MCP 서비스(유형 A) 때문에 재시작이 필요한 경우, 재시작 안내 전에 유형 B 서비스의 연결 테스트를 즉시 수행한다. 테스트 성공 시 connected_services에 추가하고 pending_services에서 제외한다. 이렇게 하면 재시작 후 케이스 B에서 유형 B 서비스가 누락되지 않는다.

state.json에 installing 상태 저장

재시작 안내를 출력하기 직전에, ~/.claude/skills/smilegate-ai-tools/state.json 파일을 생성/업데이트한다:

{
  "connector": {
    "status": "installing",
    "pending_services": ["{MCP 재시작이 필요한 설정 서비스 목록}"],
    "connected_services": ["{이미 연결 완료된 전체 서비스 목록}"],
    "failed_services": [],
    "first_completed_at": "{기존 값 보존 또는 null}",
    "last_updated_at": "{현재 ISO 8601 시각}"
  }
}
  • pending_services: 이번에 설정했지만 재시작이 필요한 MCP 서비스만 포함 (Jira, Confluence, BISKIT, API Docs, Amplitude 중 선택한 것)
  • connected_services: 기존 state.json에 connected_services가 있었다면 그 목록을 유지하고, 이번 세션에서 즉시 테스트 성공한 비-MCP 서비스(Slack, GitLab)를 추가한다. 중복을 제거한다.
  • failed_services: 빈 배열로 초기화. 연결 테스트 실패 서비스는 완료 리포트 단계에서 업데이트된다.
  • first_completed_at: 기존 state.json에 이 값이 있었다면 반드시 보존한다. 없었다면 포함하지 않는다.
  • 파일이 이미 존재하면 기존 내용을 보존하고 connector 키만 업데이트한다.

재시작 안내 메시지

state.json 저장 후 아래 메시지를 출력한다:

설정 파일에 {설정한 서비스 목록} 설정이 추가되었습니다!


⚠️ 아래 세 단계를 반드시 따라해주세요!

1단계: Claude Code 종료

  • Mac / Linux: Ctrl+D 누르기
  • Windows: exit 입력

2단계: Claude Code 다시 시작

  • 터미널(명령어 입력 창)에서 claude 입력

3단계: 아래 명령어를 그대로 입력

/connector

이 명령어를 입력하면 자동으로 연결 테스트가 시작됩니다.


연결 테스트

이 단계에 진입하는 경로는 2가지다:

  1. 케이스 B (installing → 재시작 후 /connector 재진입): state.json의 pending_services에 있는 서비스만 테스트한다.
  2. 일반 흐름 (재시작 불필요 또는 같은 세션 내): 선택한 서비스를 모두 테스트한다.

각 서비스의 연결 테스트 방법은 해당 가이드를 참조한다.

유형 B 서비스 테스트 시: 해당 서비스 가이드에 "테스트 전 안내" 섹션이 있으면 반드시 먼저 출력한다. OAuth 인증이 안 되어 있으면 도구가 로드되지 않으므로, /mcp → Authenticate를 먼저 안내해야 한다.

연결 실패 시 트러블슈팅 → references/troubleshoot.md

완료 리포트

모든 설정이 끝나면 최종 상태를 요약한다.

실제 설정한 서비스만 표시하고, 연결 테스트 결과에 따라 ✅(성공)/❌(실패)를 표시한다.

출력 형식 (코드 블록 없이 마크다운으로):

스마일게이트 커넥터 설정 완료!

연결 상태: (설정한 서비스만 표시)

  • {서비스명}: ✅ 연결됨 또는 ❌ 연결 실패

기본 사용법: (연결 성공한 서비스만 표시)

서비스별 예시 문구:

  • Slack: "Slack에서 #general 채널 최근 메시지 보여줘", "Slack에서 '배포' 관련 메시지 검색해줘"
  • Jira: "나한테 할당된 Jira 이슈 보여줘", "PROJ-123 이슈 상태 알려줘"
  • Confluence: "최근 업데이트된 Wiki 페이지 보여줘", "'프로젝트 계획' 관련 문서 검색해줘"
  • BISKIT: "카제나 어제 DAU 알려줘", "에픽세븐 이번 주 매출은?"
  • API Docs: "결제 관련 API 명세 찾아줘", "사용자 인증 API 스펙 알려줘"
  • GitLab: "내 MR 목록 보여줘", "feature 브랜치에서 MR 만들어줘"
  • Amplitude: "이번 주 DAU 차트 보여줘", "회원가입 퍼널 분석해줘"

연결 실패한 서비스가 있으면 트러블슈팅 안내를 함께 표시한다.

팁: 토큰이 만료되거나 연결에 문제가 생기면 "커넥터 설정해줘" 한 마디로 이 스킬을 다시 실행할 수 있습니다.

연결 실패 서비스가 있는 경우: 완료 리포트 출력 후 반드시 아래 질문을 한다.

❌로 표시된 서비스가 있어요. 어떻게 할까요?

① 지금 다시 시도하기 → 실패한 서비스만 재설정 (서비스 선택 단계로 돌아감)
② 나중에 하기 → 실패한 서비스는 건너뛰고 진행

AskUserQuestion으로 선택을 받는다.

  • ① 선택 시: 실패한 서비스만 "서비스 선택" 단계로 돌아가서 재설정한다.
  • ② 선택 시: 실패한 서비스를 제외하고 성공한 서비스만으로 아래 "자동화 스킬 제안"으로 진행한다.

모든 서비스가 연결 성공한 경우: 바로 아래 "자동화 스킬 제안" 섹션으로 진행한다.

⚠️ 완료 리포트를 출력한 후 여기서 멈추지 않는다. 실패 서비스 처리 또는 자동화 스킬 제안을 반드시 이어서 실행한다.

자동화 스킬 제안 (첫 실행 시만)

완료 리포트를 출력한 후, 첫 실행 여부를 확인한다.

확인 방법: state.json의 connector.first_completed_at 값으로 판단한다.

  • first_completed_at이 없다 → 첫 실행 (한 번도 completed된 적 없음)
  • first_completed_at이 있다 → 재실행 (이전에 이미 completed를 거침)
  • 하위 호환: 레거시 형식(completed: true만 있고 first_completed_at이 없는 경우)은 재실행으로 취급한다. 이미 한 번 완료한 사용자이기 때문이다.

이 기준을 사용하면, 케이스 C(completed) → 추가 서비스 설치 → 케이스 B(installing)로 돌아온 사용자에게 자동화를 다시 제안하지 않는다.

케이스 1: 첫 실행 + 연결 성공 서비스 1개 이상

  1. state.json의 connector를 completed 상태로 업데이트한다:

    {
      "connector": {
        "status": "completed",
        "connected_services": ["{연결 성공한 전체 서비스 목록}"],
        "first_completed_at": "{현재 날짜}",
        "last_updated_at": "{현재 ISO 8601 시각}"
      }
    }
    
    • pending_services는 제거한다 (더 이상 대기 중인 서비스가 없으므로).
    • connected_services에는 이번에 테스트 성공한 서비스 + installing 상태에 이미 기록되어 있던 connected_services를 합치고 중복을 제거한다. (installing 상태가 없었다면 테스트 성공한 서비스만 포함)
    • 파일이 이미 존재하면 기존 내용을 보존하고 connector 키만 업데이트한다.
  2. 자동화 스킬을 제안한다:

    💡 연결된 도구로 바로 업무 자동화를 만들어볼까요?
    
    반복되는 업무(주간보고, 회의록, 발표자료 등)를
    대화만으로 자동화 스킬로 만들 수 있어요.
    
    ① 좋아요, 만들어볼래요 → automation 스킬의 Phase 1부터 시작
    ② 나중에 할게요 → 종료 (나중에 "스킬 만들어줘"로 실행 가능)
    

    AskUserQuestion으로 선택을 받는다.

    • ① 선택 시: automation 스킬의 Phase 1부터 실행 (Phase 0 건너뜀, 연결 상태를 이미 알고 있으므로)
    • ② 선택 시: "나중에 만들고 싶으면 '스킬 만들어줘'라고 말하면 돼요!" 안내 후 종료

케이스 1-b: 첫 실행 + 성공 서비스 1개 이상 + 실패 서비스 있음 + "나중에 하기" 선택

실패 서비스가 있고 사용자가 "나중에 하기"를 선택한 경우:

  1. state.json의 connector를 partial 상태로 업데이트한다:

    {
      "connector": {
        "status": "partial",
        "connected_services": ["{연결 성공한 전체 서비스 목록}"],
        "failed_services": ["{연결 실패한 서비스 목록}"],
        "first_completed_at": "{현재 날짜}",
        "last_updated_at": "{현재 ISO 8601 시각}"
      }
    }
    
    • pending_services는 제거한다.
    • first_completed_at을 기록한다 (다음 실행 시 재실행으로 취급).
  2. 자동화 스킬을 제안한다 (케이스 1과 동일 — 연결 성공 서비스가 1개 이상이므로 제안 가능).

케이스 2: 첫 실행 + 연결 성공 서비스 0개

state.json의 connector를 error 상태로 업데이트한다:

{
  "connector": {
    "status": "error",
    "connected_services": [],
    "failed_services": ["{이번에 실패한 서비스 목록}"],
    "last_updated_at": "{현재 ISO 8601 시각}"
  }
}
  • pending_services는 제거한다.
  • first_completed_at은 포함하지 않는다 (한 번도 완료한 적 없으므로).
  • 다음 /connector 실행 시 케이스 E로 진입하여 처음부터 재시도한다.

완료 리포트와 트러블슈팅 안내를 출력하고 종료한다.

케이스 3: 재실행 (first_completed_at이 이미 존재)

이전에 한 번 이상 완료한 사용자다. state.json을 업데이트하고, 자동화 제안은 건너뛴다. 완료 리포트만 출력하고 종료한다.

케이스 3-a: 연결 성공 서비스 1개 이상

state.json의 connector를 아래와 같이 업데이트한다:

{
  "connector": {
    "status": "completed",
    "connected_services": ["{연결 성공한 전체 서비스 목록 (중복 제거)}"],
    "first_completed_at": "{기존 값 반드시 보존}",
    "last_updated_at": "{현재 ISO 8601 시각}"
  }
}
  • connected_services: 이번에 테스트 성공한 서비스 + 기존에 이미 연결되어 있던 서비스를 합친 뒤 중복을 제거한다.
  • first_completed_at: 기존 state.json의 값을 반드시 보존한다. 이 값이 변경되면 첫 실행/재실행 판단이 깨진다.

케이스 3-b: 연결 성공 서비스 0개 (전체 실패)

state.json을 아래와 같이 업데이트한다:

  • 기존 connected_services가 있으면 → status: "partial", failed_services: 이번 실패 서비스
  • 기존 connected_services가 없거나 빈 배열이면 → status: "error", failed_services: 이번 실패 서비스
  • 두 경우 모두 first_completed_at은 기존 값을 반드시 보존한다.

트러블슈팅을 안내하고 종료한다.

MCP 설정 위치

MCP는 항상 전역 설정 파일에 추가한다. OS마다 경로가 다르다:

OS 설정 파일 경로
Mac / Linux ~/.claude.json
Windows %USERPROFILE%\.claude.json (예: C:\Users\hyuntaekim\.claude.json)

전역 설정 파일에 저장하면 모든 프로젝트에서 사용할 수 있다. Git 저장소 밖에 있으므로 토큰이 실수로 커밋될 위험이 없다.

Weekly Installs
14
First Seen
Feb 23, 2026
Installed on
claude-code14
opencode10
gemini-cli10
github-copilot10
codex10
amp10