connector
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 목록을 확인하여 연결 테스트를 진행한다.
-
pending_services에 있는 서비스들의 도구가 로드되었는지 ToolSearch로 확인한다.
- 유형 B(OAuth 기반 MCP) 서비스 예외: 유형 B 서비스는 OAuth 인증을 완료해야 도구가 로드된다. 유형 B 서비스가 pending_services에 있고 ToolSearch에 도구가 나타나지 않으면, Read 도구로
~/.claude.json에 해당 서비스의 MCP 설정이 존재하는지 확인한다. 설정이 존재하면 OAuth 인증이 아직 안 된 것이므로 아래 안내를 출력한다:
안내 출력 후 해당 유형 B 서비스 외 다른 pending_services가 있으면 먼저 연결 테스트를 진행한다. 다른 pending_services가 없으면 사용자의 "완료" 입력을 대기한다. 사용자가 "완료"라고 하면 해당 유형 B 서비스의 연결 테스트를 이어서 진행한다.{서비스명}은(는) 로그인이 필요해요! 아래 순서대로 진행해주세요. 1. `/mcp` 를 입력하세요 2. 목록에서 `{서비스의 MCP 서버명}` 을 선택하세요 3. "Authenticate" 를 선택하세요 4. 브라우저에서 로그인을 완료하세요 5. 완료되면 "완료" 라고 말해주세요
- 유형 B(OAuth 기반 MCP) 서비스 예외: 유형 B 서비스는 OAuth 인증을 완료해야 도구가 로드된다. 유형 B 서비스가 pending_services에 있고 ToolSearch에 도구가 나타나지 않으면, Read 도구로
-
도구가 로드됨 → 바로 "연결 테스트" 단계로 이동. pending_services에 있는 서비스만 테스트한다.
-
모든 서비스의 도구가 로드되지 않음 (유형 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 설정 오류 가능성이 높다. 아래 순서로 트러블슈팅한다:
- Read 도구로
~/.claude.json을 읽어 pending_services에 해당하는 MCP 설정이 올바른지 확인한다 (키 존재 여부, URL, 헤더 형식 등). - 문제가 발견되면 사용자에게 알리고 설정을 수정한다.
- 문제가 발견되지 않으면 네트워크(사내망/VPN) 상태를 확인하도록 안내한다.
- 해결되면 다시 재시작을 안내한다. 진전이 없으면 → 트러블슈팅 및 이슈 등록 절차에 따라 GitHub 이슈 등록을 제안한다.
케이스 C: connector.status = "completed" → 재방문
이미 설정을 완료한 사용자다. 아래 "진단" 단계부터 진행하되, state.json의 connected_services가 1개 이상 있고 그 서비스들이 모두 ✅이면 빠른 종료 분기를 탄다.
진단 → (connected_services 1개 이상 & 모두 ✅) → "기존 연결이 모두 정상입니다" + 추가 설정 여부 질문
→ (connected_services 없음 또는 ⚠️/❌ 있음) → 서비스 선택 → 서비스별 설정 → 재시작(필요 시) → 연결 테스트 → 완료 리포트 (자동화 제안 없음)
빠른 종료 조건 충족 시:
- "기존 연결(Slack, Jira …)이 모두 정상입니다!"를 출력한다. (실제 서비스명 나열)
- AskUserQuestion으로 "추가로 설정할 서비스가 있나요?"를 묻는다.
- "네" → 진단 결과 테이블을 다시 표시하고, ⚠️/❌ 상태의 서비스만 서비스 선택으로 이동
- "아니요" → state.json을 변경하지 않고 종료
connected_services가 없거나 빈 배열인 경우(레거시 형식 등)는 빠른 종료를 건너뛰고 일반 진단 흐름으로 진행한다.
재방문(케이스 C)에서는 자동화 스킬 제안을 건너뛴다.
케이스 D: connector.status = "partial" → 일부 연결된 재방문
이전에 일부 서비스만 연결하고 나머지는 건너뛴 사용자가 돌아왔다. 아래 흐름으로 진행한다:
- "일부 도구만 연결된 상태예요" 안내를 출력한다:
- 연결된 서비스:
connected_services목록 (✅) - 미연결/실패 서비스:
failed_services목록 (❌)
- 연결된 서비스:
- AskUserQuestion으로 선택받는다:
- {label: "❌ 서비스 지금 연결하기", description: "실패했거나 건너뛴 서비스를 이어서 연결합니다"}
- {label: "나중에 할게요", description: "현재 연결된 서비스만 사용합니다"}
- "연결하기" →
failed_services+ 미연결 ❌ 서비스만 서비스 선택으로 이동 - "나중에" → 종료
케이스 E: connector.status = "error" → 전체 실패 재방문
이전에 선택한 모든 서비스 연결에 실패한 사용자가 돌아왔다. 케이스 A(신규)와 동일하게 처음부터 진행하되, "이전에 연결에 문제가 있었어요. 다시 시도해볼게요!" 안내를 먼저 출력한다.
진단: 현재 연결 상태 확인
케이스 B(installing)에서는 이 단계를 건너뛴다.
스킬 시작 시 먼저 현재 연결 상태를 진단한다.
확인 방법:
- ToolSearch로
+slack read검색 → Slack 도구 존재 여부 확인 - ToolSearch로
+jira test검색 → Jira MCP 존재 여부 확인. 도구가 있으면mcp__jira__test_jira_connection()호출로 실제 연결 확인 - ToolSearch로
+confluence test검색 → Confluence MCP 존재 여부 확인. 도구가 있으면mcp__confluence__test_confluence_connection()호출로 실제 연결 확인 - ToolSearch로
+biskit check_auth검색 → BISKIT MCP 존재 여부 확인. 도구가 있으면mcp__biskit-report-mcp__check_auth_status()호출로 실제 연결 확인 - ToolSearch로
+apidocs search검색 → API Docs MCP 존재 여부 확인. 도구가 있으면 연결됨 (인증 불필요이므로 도구 존재 = 연결 성공) - Bash로
glab auth status --hostname git.sginfra.net 2>&1실행 → GitLab CLI 인증 상태 확인. 명령이 없으면 glab 미설치 - 유형 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가지다:
- 케이스 B (installing → 재시작 후 /connector 재진입): state.json의
pending_services에 있는 서비스만 테스트한다. - 일반 흐름 (재시작 불필요 또는 같은 세션 내): 선택한 서비스를 모두 테스트한다.
각 서비스의 연결 테스트 방법은 해당 가이드를 참조한다.
유형 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개 이상
-
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키만 업데이트한다.
-
자동화 스킬을 제안한다:
💡 연결된 도구로 바로 업무 자동화를 만들어볼까요? 반복되는 업무(주간보고, 회의록, 발표자료 등)를 대화만으로 자동화 스킬로 만들 수 있어요. ① 좋아요, 만들어볼래요 → automation 스킬의 Phase 1부터 시작 ② 나중에 할게요 → 종료 (나중에 "스킬 만들어줘"로 실행 가능)AskUserQuestion으로 선택을 받는다.
- ① 선택 시: automation 스킬의 Phase 1부터 실행 (Phase 0 건너뜀, 연결 상태를 이미 알고 있으므로)
- ② 선택 시: "나중에 만들고 싶으면 '스킬 만들어줘'라고 말하면 돼요!" 안내 후 종료
케이스 1-b: 첫 실행 + 성공 서비스 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을 기록한다 (다음 실행 시 재실행으로 취급).
-
자동화 스킬을 제안한다 (케이스 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 저장소 밖에 있으므로 토큰이 실수로 커밋될 위험이 없다.