> 인사책 MCP 문서 — 사람·조직. 서버 주소 https://insacheck.com/api/mcp. 전체판 https://insacheck.com/docs/mcp.md · 색인 https://insacheck.com/docs/mcp/llms.txt

# 사람·조직 (people)

직원 · 부서 · 조직도 · 발령 · 평가 · 온보딩 · 합류 요청.

## 할 수 있는 일

- 도구 58개 · 흐름 30개 (AI 로 끝까지 26개 · 화면 안내 4개)
- ORG-01 내 이름과 회사, 역할을 확인해요.
- ORG-02 회사 사람을 이름이나 부서로 찾아요.
- ORG-03 부서나 직책으로 직원 목록을 봐요.
- ORG-04 직원 한 명의 인사 정보를 봐요.
- ORG-05 회사 조직도를 부서 순서대로 봐요.
- ORG-06 부서별 인원수를 봐요.
- ORG-07 새 입사자를 직원으로 등록해요.
- ORG-10 새 부서를 만들어요.
- ORG-11 부서 이름을 바꿔요.
- ORG-12 부서를 다른 부서 밑으로 옮겨요.
- ORG-13 쓰지 않는 부서를 없애요.
- ORG-14 부서장을 정해요.
- ORG-15 직원을 한 부서로 옮겨 넣어요.
- ORG-16 날짜를 정해 직원 인사발령을 내요.
- ORG-17 직원의 직급을 바꿔요.
- ORG-18 직원의 직책이나 부서를 고쳐요.
- ORG-19 직원에게 겸직 부서를 더해요.
- ORG-20 직원의 겸직을 끝내요.
- ORG-21 직원을 휴직 처리해요.
- ORG-22 휴직한 직원을 복직 처리해요.
- ORG-23 지금 휴직 중인 직원을 봐요.
- ORG-24 직원을 퇴사 처리해요.
- ORG-25 잘못 만든 직원이나 중복 직원을 비활성화해요.
- ORG-26 내 퇴직 신청을 올려요.
- ORG-27 올린 퇴직 신청을 거둬요.
- ORG-28 회사를 찾아 가입을 신청해요.

## 도구

조회는 `run_read`, 쓰기는 `run_write` 에 도구 이름(`tool`)과 값(`args`)을 넣어 불러요. 「이름 그대로」인 기본 도구는 바로 불러요. 등급은 0 바로 조회 · 1 바로 하고 5분 안에 되돌리기 · 2 미리보기 → 확정 · 3 앱 승인이에요.

| 이름 | 조회/쓰기 | 등급 | 필요 역할 | 범위 | 설명 | 부르는 길 |
|---|---|---|---|---|---|---|
| `query_employees` | 조회 | 0 바로 조회 | dept_manager (팀장 이상) | view | 회사 직원 목록을 조회합니다. 부서/직책으로 필터링 가능. "디자인팀에 누가 있어?", "전체 직원 명단" 같은 질문에 사용하세요. | run_read |
| `query_employee_profile` | 조회 | 0 바로 조회 | dept_manager (팀장 이상) | view | 직원 1명의 상세 프로필 (부서/직책/입사일/고용형태). "이주영 정보 알려줘", "박민수 입사일?" 같은 질문에 사용. 부서장 이상. | run_read |
| `query_org_chart` | 조회 | 0 바로 조회 | dept_manager (팀장 이상) | view | 회사 조직도(부서 트리)를 조회합니다. "조직도 보여줘", "부서 구조" 같은 질문에 사용. 부서장 이상. | run_read |
| `query_headcount_by_department` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 부서별 인원수 현황. "부서별 인원 몇 명?", "조직 규모" 같은 질문에 사용. 대표관리자 또는 인사 권한. | run_read |
| `query_new_hires` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 신규 입사자 목록. "이번달 신규 입사자?", "최근 입사한 사람" 같은 질문에 사용. 대표관리자 또는 인사 권한. | run_read |
| `export_employees_csv` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 직원 명단을 CSV로 내보냅니다(연락처·이메일은 마스킹, 최대 200명). "직원 명단 다운로드", "직원 리스트 엑셀로" 같은 명령에 사용. 인사 권한 필요. | run_read |
| `generate_worker_roster` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 근로자명부(근기법 제41조 법정서식)를 생성합니다 — 성명·성별·생년월일·주소·종사업무·입사일·고용형태. 주민등록번호와 연락처는 명부 법정 기재사항이 아니라 포함하지 않습니다. "근로자명부 뽑아줘", "근로감독 대비 명부" 같은 명령에 사용. 인사 권한 필요. | run_read |
| `add_employee` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 직원을 회사에 직접 등록합니다. "박영희 010-1234-5678 영업팀 대리로 등록해줘" 같은 명령에 사용. 이미 인사책 회원이면 즉시 소속 연결, 아니면 계정을 만들어 연결합니다 (직원이 나중에 카카오/네이버 로그인 시 같은 전화번호로 본인 계정 인증). 인사 권한 필요. | run_write |
| `update_employee_position` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 직원의 직책/부서를 변경(승진/이동)합니다. "이주영 부서장으로 승진", "박민수 개발팀으로 이동" 같은 명령에 사용. 인사 권한 필요. | run_write |
| `transfer_worker` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 인사발령 — 부서/직책을 한 번에 변경하고 발령 이력을 남깁니다 (기존 이력 덮어쓰지 않음). 사업장은 부서를 따르며 to_worksite 는 거절됩니다. "이주영 영업2팀 부서장으로 승진발령", "한미녀 인사팀으로 전보" 같은 명령에 사용. 인사 권한 필요. | run_write |
| `assign_worker_to_worksite` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 사업장은 부서 설정에서 정합니다 — 직원 개인에게 사업장을 지정하지 않으며 이 도구는 항상 거절합니다(OFFICE_FOLLOWS_DEPARTMENT). 사업장을 바꾸려면 부서의 사업장을 정하거나 transfer_worker 로 부서를 옮기세요. | run_write |
| `query_assignment_history` | 조회 | 0 바로 조회 | dept_manager (팀장 이상) | view | 직원의 인사발령 이력(입사/전보/승진/사업장이동/휴직/복직)을 시간순으로 조회합니다. "이주영 발령 이력", "박철수 인사 변동 내역" 같은 질문에 사용. 부서장 이상. | run_read |
| `add_concurrent_assignment` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 겸직/매트릭스 배정 — 직원에게 주소속 외 추가 소속(부서/사업장/프로젝트)을 부여합니다. "이주영을 신사업TF에도 겸직", "박철수 영업팀+마케팅팀 동시소속" 같은 명령에 사용. 주소속은 유지되고 부소속이 추가됩니다. 인사 권한 필요. | run_write |
| `query_worker_assignments` | 조회 | 0 바로 조회 | dept_manager (팀장 이상) | view | 한 직원의 모든 소속(주소속 + 겸직/매트릭스 부소속)을 조회합니다. "이주영 어디어디 소속이야?", "박철수 겸직 현황" 같은 질문에 사용. 부서장 이상. | run_read |
| `end_concurrent_assignment` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 겸직/매트릭스 부소속을 종료합니다. "이주영 신사업TF 겸직 해제" 같은 명령에 사용. query_worker_assignments 의 assignment_id 로 호출(주소속은 해제 불가). 인사 권한 필요. | run_write |
| `put_worker_on_leave` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 직원을 휴직/산재/파견/정직 등 상태로 전환합니다. "이주영 육아휴직 처리 3개월", "박철수 산재 휴직", "김부장 베트남 파견" 같은 명령에 사용. 재직(퇴사 아님)을 유지하면서 상태만 표시 — 헤드카운트·평균임금 근거 보존. 인사 권한 필요. | run_write |
| `return_worker_from_leave` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 휴직/파견 중인 직원을 복직 처리합니다. "이주영 복직", "박철수 산재 복귀" 같은 명령에 사용. 인사 권한 필요. | run_write |
| `query_workers_on_leave` | 조회 | 0 바로 조회 | dept_manager (팀장 이상) | view | 현재 휴직/산재/파견/정직 중인 직원 목록. "지금 휴직자 누구야?", "육아휴직 중인 사람", "파견 나간 직원" 같은 질문에 사용. 부서장 이상(부서장은 본인 부서). | run_read |
| `create_department` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 새 부서/본부/팀을 조직도에 추가합니다. "사업본부 밑에 해외영업팀 만들어", "마케팅 본부 신설" 같은 명령에 사용. 인사 권한 필요. | run_write |
| `rename_department` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 부서 이름을 변경합니다. "마케팅팀을 그로스팀으로 바꿔" 같은 명령에 사용. 인사 권한 필요. | run_write |
| `move_department` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 부서를 다른 상위 부서 밑으로 이동합니다. "인사팀을 경영지원본부 밑으로 옮겨", "영업팀 최상위로" 같은 명령에 사용. 인사 권한 필요. | run_write |
| `archive_department` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 부서를 폐지(보관)합니다. "영업팀 없애줘" 같은 명령에 사용. 하위 부서가 있으면 먼저 정리해야 합니다. 인사 권한 필요. | run_write |
| `assign_department_head` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 부서장을 임명합니다. "이주영을 영업부서장으로", "박철수를 경영지원본부장으로" 같은 명령에 사용. 공동 부서장("김OO도 영업부서장으로", "두 명이 공동 부서장")은 mode:"add". 인사 권한 필요. | run_write |
| `assign_worker_to_department` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 직원을 특정 부서에 배치(이동)합니다. "박철수 인사팀으로 배치", "김영희 영업팀으로 옮겨", "이수진을 영업팀에 넣어줘" 같은 명령에 사용. 인사 권한 필요. (한 직원은 한 부서 — 매트릭스 조직 미지원) | run_write |
| `create_job_grade` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 직급/직무등급을 정의합니다. "사원-대리-과장-차장-부장 직급 만들어", "G1~G5 레벨 체계" 같은 명령에 사용. level 은 서열(낮을수록 하위). 인사 권한 필요. | run_write |
| `query_job_grades` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 회사 직급/직무등급 체계 + 직급별 인원. "우리 직급 체계 어떻게 돼?", "직급별 몇 명?" 같은 질문에 사용. 담당자·권한 관리 권한 필요. | run_read |
| `assign_job_grade` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 직원에게 직급을 부여/변경합니다. "이주영 과장으로", "박철수 G4 배정" 같은 명령에 사용. (승진 발령은 transfer_worker(promotion) 와 함께 쓰면 직책+직급 동시 반영). 인사 권한 필요. | run_write |
| `query_grade_distribution` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 직급별 인원 분포(피라미드 점검). "직급 분포 보여줘", "과장급 이상 몇 명?" 같은 질문에 사용. 담당자·권한 관리 권한 필요. | run_read |
| `query_my_kpi_goals` | 조회 | 0 바로 조회 | employee (직원) | view | 본인의 성과목표(KPI/OKR)와 진척률을 조회합니다. "내 목표 뭐 있어?", "이번 분기 KPI 진척률" 같은 질문에 사용. | run_read |
| `query_team_kpi_goals` | 조회 | 0 바로 조회 | dept_manager (팀장 이상) | view | 본인 팀(또는 특정 직원)의 성과목표 현황을 조회합니다. "우리팀 이번 분기 목표 현황", "팀 KPI 진척률" 같은 질문에 사용. 부서장 이상. | run_read |
| `create_kpi_goal` | 쓰기 | 2 미리보기 → 확정 | dept_manager (팀장 이상) | admin | 팀원에게 성과목표(KPI/OKR)를 부여합니다. "이주영한테 2026-Q3 신규고객 50사 목표 줘" 같은 명령에 사용. 부서장은 웹 부서장 화면과 같은 부서 관리 권한으로 본인 부서원만(본인 제외) · 성과 관리 권한 관리자는 회사 전체. | run_write |
| `update_kpi_progress` | 쓰기 | 1 바로 하고 5분 안에 되돌리기 | employee (직원) | mine | 본인 성과목표의 진척률/현재지표/자기평가를 업데이트합니다. "신규고객 목표 70%로 갱신", "자기평가 4점" 같은 명령에 사용. | run_write |
| `review_kpi_goal` | 쓰기 | 2 미리보기 → 확정 | dept_manager (팀장 이상) | admin | 성과목표를 평가(리뷰)합니다 — 관리자 점수 + 코멘트. "이주영 Q2 목표 4점, 잘했음" 같은 명령에 사용. 웹 관리자 「성과관리」와 같은 성과 관리 권한이 필요하며 본인 목표·중단된 목표는 평가할 수 없습니다. | run_write |
| `open_review_cycle` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 인사평가 사이클(시즌)을 엽니다. "2026 상반기 인사평가 시작 — 자기평가+매니저평가" 같은 명령에 사용. 인사 권한 필요. | run_write |
| `query_review_cycles` | 조회 | 0 바로 조회 | employee (직원) | view | 평가 사이클 목록/현황. "진행중인 평가 있어?", "이번 평가 시즌 현황" 같은 질문에 사용. | run_read |
| `submit_self_review` | 쓰기 | 2 미리보기 → 확정 | employee (직원) | send | 본인 자기평가를 제출합니다. "자기평가 4점, 강점은 협업 약점은 일정관리" 같은 명령에 사용. | run_write |
| `submit_review` | 쓰기 | 2 미리보기 → 확정 | dept_manager (팀장 이상) | admin | 나에게 배정된 팀원/동료 평가를 제출합니다(매니저 또는 피어). "이주영 매니저평가 4점", "박철수 피어리뷰" 같은 명령에 사용. 부서장 이상 · 평가 라운드에서 배정된 항목만 제출할 수 있습니다. | run_write |
| `query_review_results` | 조회 | 0 바로 조회 | dept_manager (팀장 이상) | view | 특정 직원의 평가 결과(자기/매니저/피어 종합). "이주영 평가 결과 보여줘" 같은 질문에 사용. 부서장 이상. | run_read |
| `query_review_progress` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 평가 사이클 진행률(자기평가 제출 현황 등). "이번 평가 몇 명 제출했어?" 같은 질문에 사용. 인사 권한 필요. | run_read |
| `close_review_cycle` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 평가 사이클을 종료합니다. "상반기 평가 마감" 같은 명령에 사용. 인사 권한 필요. | run_write |
| `submit_company_review` | 쓰기 | 2 미리보기 → 확정 | employee (직원) | send | 재직했거나 재직 중인 회사의 리뷰(별점+장단점)를 남깁니다. "전 회사 리뷰 남길래" 에 사용. 실제 소속 이력이 있는 회사만 가능하며 회사당 1개(재작성 시 갱신). 익명으로 공개됩니다. | run_write |
| `query_company_reviews` | 조회 | 0 바로 조회 | employee (직원) | view | 특정 회사의 리뷰(별점 평균 + 익명 장단점)를 조회합니다. "그 회사 평판 어때?", "리뷰 보여줘" 에 사용. 회사 미소속도 사용 가능. | run_read |
| `create_onboarding_template` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 온보딩 체크리스트 템플릿을 만듭니다. "신입 개발자 온보딩 템플릿 — 노트북지급/계정생성/보안교육/멘토배정" 같은 명령에 사용. 인사 권한 필요. | run_write |
| `query_onboarding_templates` | 조회 | 0 바로 조회 | dept_manager (팀장 이상) | view | 온보딩 템플릿 목록. "온보딩 템플릿 뭐 있어?" 같은 질문에 사용. 부서장 이상. | run_read |
| `start_onboarding` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 신규 입사자에게 온보딩 템플릿을 적용해 체크리스트를 생성합니다. "이주영 신입개발자 온보딩 시작" 같은 명령에 사용. 인사 권한 필요. | run_write |
| `query_onboarding_tasks` | 조회 | 0 바로 조회 | employee (직원) | view | 직원의 온보딩 진행 항목. "이주영 온보딩 어디까지 됐어?", "내 온보딩 체크리스트" 같은 질문에 사용. | run_read |
| `complete_onboarding_task` | 쓰기 | 1 바로 하고 5분 안에 되돌리기 | employee (직원) | mine | 온보딩 항목을 완료 처리합니다. "노트북 지급 완료" 같은 명령에 사용. query_onboarding_tasks 의 task_id 로 호출. | run_write |
| `query_onboarding_status` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 전사 온보딩 진행 현황(진행중인 신규입사자 + 완료율). "온보딩 진행중인 사람 누구야?" 같은 질문에 사용. 인사 권한 필요. | run_read |
| `company_search` | 조회 | 0 바로 조회 | employee (직원) | view | 회사 이름이나 사업자번호로 가입할 회사를 찾습니다. "ABC물산 찾아줘", "사업자번호 123-45-67890 회사" 같은 질문에 사용. 아직 회사가 없는 개인 계정만 쓸 수 있어요. 결과의 id 로 join_request 를 부르세요. | run_read |
| `search_company` | 조회 | 0 바로 조회 | employee (직원) | view | 사업자등록번호 또는 상호명으로 회사를 검색합니다. 가입 신청 전에 회사를 찾을 때 사용. "ABC물산 찾아줘", "사업자번호 123-45-67890 회사" 같은 질문에 사용. (가입 신청은 request_join_company) 회사 미소속도 사용 가능. | run_read |
| `join_request` | 쓰기 | 2 미리보기 → 확정 | employee (직원) | send | 찾은 회사에 가입(입사)을 신청합니다. 먼저 신청 내용을 보여 주는 확인이 나오고, 사용자가 승인하면 confirmation_id 를 붙여 다시 부르세요. 회사 이름이 겹치면 후보를 돌려주니 고른 회사의 id 를 company_id 로 넣어 다시 부르세요. 신청하면 그 회사 관리자가 승인해야 소속돼요. 아직 회사가 없는 개인 계정만 쓸 수 있어요. | run_write |
| `request_join_company` | 쓰기 | 2 미리보기 → 확정 | employee (직원) | send | 특정 회사에 소속(입사) 가입을 신청합니다. "ABC물산에 가입 신청해줘", "사업자번호 123-45-67890 회사에 입사 신청" 같은 명령에 사용. 신청하면 그 회사 관리자가 승인해야 소속됩니다. 회사 미소속(신규 가입자)도 사용 가능. | run_write |
| `query_join_requests` | 조회 | 0 바로 조회 | hr_manager (관리자 이상) | view | 우리 회사에 들어온 가입(입사) 신청 목록을 조회합니다. "가입 신청 누가 했어?", "입사 승인 대기자" 같은 질문에 사용. 인사 권한 필요. | run_read |
| `get_company_invite_link` | 조회 | 0 바로 조회 | employee (직원) | view | 우리 회사 초대 링크(가입 링크)를 만들어 보여줍니다. "초대 링크 만들어줘", "가입 링크 다시 보여줘", "직원들이 들어올 회사 코드 뭐야" 같은 질문에 사용. 링크를 받은 사람이 로그인하면 소속 신청이 접수되고, 입사는 관리자 승인 뒤 확정됩니다(링크만으로 입사 0). 14일 뒤 만료 · 다시 부르면 새 링크. 이미 뿌린 링크 폐기는 웹 초대 화면에서. | run_read |
| `personal_find` | 조회 | 0 바로 조회 | employee (직원) | view | 회사와 상관없이 가입한 사람을 상대 전화번호 전체로 찾습니다(예 010-1234-5678). "010-1234-5678 번호 사람 찾아줘" 같은 질문에 사용. 이름이나 번호 일부로는 찾지 않아요. 결과의 id 로 personal_request 를 부르세요. 회사가 없는 개인 계정도 쓸 수 있어요. | run_read |
| `personal_request` | 쓰기 | 2 미리보기 → 확정 | employee (직원) | send | 찾은 사람에게 업무 요청을 보냅니다. "이 사람에게 자료 정리 부탁해줘" 같은 명령에 사용. 먼저 받는 사람과 내용을 보여 주는 확인이 나오고, 사용자가 승인하면 confirmation_id 를 붙여 다시 부르세요. 상대가 수락하기 전에는 요청을 1건만 보낼 수 있고, 하루에 보낼 수 있는 수에도 한도가 있어요. person_id 는 personal_find 결과의 id 예요. | run_write |
| `personal_accept_block` | 쓰기 | 1 바로 하고 5분 안에 되돌리기 | employee (직원) | mine | 받은 업무 요청의 보낸 사람을 수락하거나 차단·신고합니다. "그 요청 수락해줘", "이 사람 차단해줘" 같은 명령에 사용. 수락하면 서로 요청을 주고받을 수 있고, 차단·신고하면 그 사람의 요청이 목록에서 숨겨져요. 방금 한 일은 5분 안에 되돌릴 수 있어요. request_id 는 personal_notices 결과의 request_id 예요. | run_write |
| `personal_notices` | 조회 | 0 바로 조회 | employee (직원) | view | 개인 간 업무 요청 목록을 봅니다. "받은 요청 있어?", "내가 보낸 요청 보여줘" 같은 질문에 사용. 새것부터 보여 주고, box 로 받은 것·보낸 것을 가를 수 있어요. 내가 차단한 사람이 보낸 요청은 보이지 않아요. | run_read |

도구마다 따로 읽는 문서: [query_employees](https://insacheck.com/docs/mcp/tools/query_employees.md) · [query_employee_profile](https://insacheck.com/docs/mcp/tools/query_employee_profile.md) · [query_org_chart](https://insacheck.com/docs/mcp/tools/query_org_chart.md) · [query_headcount_by_department](https://insacheck.com/docs/mcp/tools/query_headcount_by_department.md) · [query_new_hires](https://insacheck.com/docs/mcp/tools/query_new_hires.md) · [export_employees_csv](https://insacheck.com/docs/mcp/tools/export_employees_csv.md) · [generate_worker_roster](https://insacheck.com/docs/mcp/tools/generate_worker_roster.md) · [add_employee](https://insacheck.com/docs/mcp/tools/add_employee.md) · [update_employee_position](https://insacheck.com/docs/mcp/tools/update_employee_position.md) · [transfer_worker](https://insacheck.com/docs/mcp/tools/transfer_worker.md) · [assign_worker_to_worksite](https://insacheck.com/docs/mcp/tools/assign_worker_to_worksite.md) · [query_assignment_history](https://insacheck.com/docs/mcp/tools/query_assignment_history.md) · [add_concurrent_assignment](https://insacheck.com/docs/mcp/tools/add_concurrent_assignment.md) · [query_worker_assignments](https://insacheck.com/docs/mcp/tools/query_worker_assignments.md) · [end_concurrent_assignment](https://insacheck.com/docs/mcp/tools/end_concurrent_assignment.md) · [put_worker_on_leave](https://insacheck.com/docs/mcp/tools/put_worker_on_leave.md) · [return_worker_from_leave](https://insacheck.com/docs/mcp/tools/return_worker_from_leave.md) · [query_workers_on_leave](https://insacheck.com/docs/mcp/tools/query_workers_on_leave.md) · [create_department](https://insacheck.com/docs/mcp/tools/create_department.md) · [rename_department](https://insacheck.com/docs/mcp/tools/rename_department.md) · [move_department](https://insacheck.com/docs/mcp/tools/move_department.md) · [archive_department](https://insacheck.com/docs/mcp/tools/archive_department.md) · [assign_department_head](https://insacheck.com/docs/mcp/tools/assign_department_head.md) · [assign_worker_to_department](https://insacheck.com/docs/mcp/tools/assign_worker_to_department.md) · [create_job_grade](https://insacheck.com/docs/mcp/tools/create_job_grade.md) · [query_job_grades](https://insacheck.com/docs/mcp/tools/query_job_grades.md) · [assign_job_grade](https://insacheck.com/docs/mcp/tools/assign_job_grade.md) · [query_grade_distribution](https://insacheck.com/docs/mcp/tools/query_grade_distribution.md) · [query_my_kpi_goals](https://insacheck.com/docs/mcp/tools/query_my_kpi_goals.md) · [query_team_kpi_goals](https://insacheck.com/docs/mcp/tools/query_team_kpi_goals.md) · [create_kpi_goal](https://insacheck.com/docs/mcp/tools/create_kpi_goal.md) · [update_kpi_progress](https://insacheck.com/docs/mcp/tools/update_kpi_progress.md) · [review_kpi_goal](https://insacheck.com/docs/mcp/tools/review_kpi_goal.md) · [open_review_cycle](https://insacheck.com/docs/mcp/tools/open_review_cycle.md) · [query_review_cycles](https://insacheck.com/docs/mcp/tools/query_review_cycles.md) · [submit_self_review](https://insacheck.com/docs/mcp/tools/submit_self_review.md) · [submit_review](https://insacheck.com/docs/mcp/tools/submit_review.md) · [query_review_results](https://insacheck.com/docs/mcp/tools/query_review_results.md) · [query_review_progress](https://insacheck.com/docs/mcp/tools/query_review_progress.md) · [close_review_cycle](https://insacheck.com/docs/mcp/tools/close_review_cycle.md) · [submit_company_review](https://insacheck.com/docs/mcp/tools/submit_company_review.md) · [query_company_reviews](https://insacheck.com/docs/mcp/tools/query_company_reviews.md) · [create_onboarding_template](https://insacheck.com/docs/mcp/tools/create_onboarding_template.md) · [query_onboarding_templates](https://insacheck.com/docs/mcp/tools/query_onboarding_templates.md) · [start_onboarding](https://insacheck.com/docs/mcp/tools/start_onboarding.md) · [query_onboarding_tasks](https://insacheck.com/docs/mcp/tools/query_onboarding_tasks.md) · [complete_onboarding_task](https://insacheck.com/docs/mcp/tools/complete_onboarding_task.md) · [query_onboarding_status](https://insacheck.com/docs/mcp/tools/query_onboarding_status.md) · [company_search](https://insacheck.com/docs/mcp/tools/company_search.md) · [search_company](https://insacheck.com/docs/mcp/tools/search_company.md) · [join_request](https://insacheck.com/docs/mcp/tools/join_request.md) · [request_join_company](https://insacheck.com/docs/mcp/tools/request_join_company.md) · [query_join_requests](https://insacheck.com/docs/mcp/tools/query_join_requests.md) · [get_company_invite_link](https://insacheck.com/docs/mcp/tools/get_company_invite_link.md) · [personal_find](https://insacheck.com/docs/mcp/tools/personal_find.md) · [personal_request](https://insacheck.com/docs/mcp/tools/personal_request.md) · [personal_accept_block](https://insacheck.com/docs/mcp/tools/personal_accept_block.md) · [personal_notices](https://insacheck.com/docs/mcp/tools/personal_notices.md)

## 말 → 호출 순서 (흐름)

### ORG-01 내 이름과 회사, 역할을 확인해요.
- 누가: 직원 · 팀장 · 관리자 · 대표 · 회사 없는 개인
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「나 지금 누구로 연결돼 있어?」 「내 회사랑 역할 알려줘」 「내 정보 좀 보여줘」 「내 권한이 뭐야」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"whoami","arguments":{}}
     서버: 몸통 src/routes/mcp-tools/base-whoami.ts:whoami · 웹 API GET /api/workers/me
     다음으로 넘길 값: 이름 · 회사 · 역할 · 쓸 수 있는 일
```

- 필요한 값 · 되묻기: 따로 필요한 값은 없어요.
- 끝: 내 이름과 회사, 역할, 쓸 수 있는 일을 알려 줘요.
- 화면: 메뉴 → 내 정보 (/worker/profile)
- 하면 안 되는 것: 다른 사람 정보는 이 흐름으로 보지 않아요.

### ORG-02 회사 사람을 이름이나 부서로 찾아요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「김가상 찾아줘」 「영업1팀에 누구 있어?」 「개발부 대리 누구야」 「이가상님 어느 부서야」

호출 순서 (POST /api/mcp · tools/call):

```text
  (값이 없으면 먼저 물어요: 「누구를 찾을까요?」)
  1. tools/call {"name":"search","arguments":{"query":"김가상","kind":"people"}}
     서버: 몸통 src/routes/mcp-tools/base-search.ts:search
     다음으로 넘길 값: 이름 · 부서 · 직책
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구인가요?」 → 고른 id 로 같은 줄을 다시
```

- 필요한 값 · 되묻기: 찾을 이름이나 부서, 직책 중 하나가 필요해요. / 같은 이름이 여럿이면 부서로 골라요.
- 끝: 이름, 부서, 직책이 맞는 사람을 목록으로 보여 줘요.
- 화면: 메뉴 → 조직도 (/worker/my-company)
- 하면 안 되는 것: 다른 회사 사람은 찾지 않아요. / 연락처나 급여는 이 흐름에서 안 보여 줘요.

### ORG-03 부서나 직책으로 직원 목록을 봐요.
- 누가: 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「영업1팀 직원 보여줘」 「개발부에 누구 있어?」 「우리 부서 사람 연락처 알려줘」 「과장 직책 직원 목록 줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_employees","args":{"department":"영업1팀"}}}
     서버: 몸통 src/routes/mcp-tool-handlers.ts:query_employees
     다음으로 넘길 값: 이름 · 부서 · 직책 · 연락처
```

- 필요한 값 · 되묻기: 부서나 직책은 말에 있을 때만 걸러요. / 둘 다 없으면 볼 수 있는 직원 전부예요.
- 끝: 걸러 낸 직원의 이름, 부서, 직책을 목록으로 보여 줘요.
- 화면: 메뉴 → 팀원 (/worker/team/members)
- 하면 안 되는 것: 부서장은 맡은 부서 범위만 볼 수 있어요. / 급여는 이 흐름에서 안 보여 줘요.

### ORG-04 직원 한 명의 인사 정보를 봐요.
- 누가: 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「이가상 인사 정보 보여줘」 「박가상 입사일이 언제야」 「김가상 어느 부서에 무슨 직책이야」 「정신입 계약 기간 알려줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  (값이 없으면 먼저 물어요: 「누구 정보를 볼까요?」)
  1. tools/call {"name":"run_read","arguments":{"tool":"query_employee_profile","args":{"worker":"이가상"}}}
     서버: 몸통 src/routes/mcp-tools/org-payroll.ts:query_employee_profile · 웹 API GET /api/admin/employees/:id/hr-card
     다음으로 넘길 값: 부서 · 직책 · 입사일 · 계약 기간
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구인가요?」 → 고른 id 로 같은 줄을 다시
```

- 필요한 값 · 되묻기: 직원 이름이 필요해요. / 같은 이름이 여럿이면 부서로 골라요.
- 끝: 직원의 부서, 직책, 입사일, 계약 기간을 알려 줘요.
- 화면: 설정 → 사람·권한 → 직원 명단 (/admin/enterprise/people-roster)
- 하면 안 되는 것: 급여는 이 흐름에서 안 보여 줘요. / 맡은 범위 밖 직원은 볼 수 없어요.

### ORG-05 회사 조직도를 부서 순서대로 봐요.
- 누가: 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「조직도 보여줘」 「부서 구조 알려줘」 「영업부 밑에 어떤 팀이 있어?」 「부서장이 누구누구야」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_org_chart","args":{}}}
     서버: 몸통 src/routes/mcp-tools/org-payroll.ts:query_org_chart · 웹 API GET /api/admin/enterprise/org-chart/data
     다음으로 넘길 값: 부서 이름 · 상위 부서 · 부서장 · 인원
```

- 필요한 값 · 되묻기: 따로 필요한 값은 없어요.
- 끝: 부서 이름, 상위 부서, 부서장, 인원을 보여 줘요.
- 화면: 설정 → 사람·권한 → 조직도 (/admin/enterprise/departments)
- 하면 안 되는 것: 부서장은 맡은 부서 범위만 볼 수 있어요. / 이 흐름에서는 조직을 바꾸지 않아요.

### ORG-06 부서별 인원수를 봐요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「부서별로 몇 명이야」 「전체 인원 알려줘」 「영업부 인원이 몇 명이야」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_headcount_by_department","args":{}}}
     서버: 몸통 src/routes/mcp-tools/org-payroll.ts:query_headcount_by_department
     다음으로 넘길 값: 전체 인원 · 부서별 인원
```

- 필요한 값 · 되묻기: 따로 필요한 값은 없어요.
- 끝: 전체 인원과 부서별 인원을 알려 줘요.
- 화면: 설정 → 사람·권한 → 직원 명단 (/admin/enterprise/people-roster)
- 하면 안 되는 것: 퇴사한 직원은 세지 않아요.

### ORG-07 새 입사자를 직원으로 등록해요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「정신입 영업2팀 사원으로 등록해줘」 「신입 직원 추가해줘 010-1234-5678」 「한신입 오늘 입사로 넣어줘」 「오신입 등록해 줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  (값이 없으면 먼저 물어요: 「휴대폰 번호가 어떻게 되나요?」)
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"add_employee","args":{"name":"정신입","phone":"010-1234-5678","department":"영업2팀","position":"사원","joined_at":"2026-10-21"}}}
     서버: 몸통 src/routes/mcp-tools/membership.ts:add_employee · 함수 src/lib/mcp-person-lookup.ts:findAddEmployeeWorker · 웹 API POST /api/workers/invite {name, phone, email, department, position, joined_at}
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「근속을 이어받을까요, 새로 시작할까요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"add_employee","args":{"name":"정신입","phone":"010-1234-5678","department":"영업2팀","position":"사원","joined_at":"2026-10-21"},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/membership.ts:add_employee · 함수 src/lib/mcp-person-lookup.ts:findAddEmployeeWorker · 웹 API POST /api/workers/invite {name, phone, email, department, position, joined_at}
     다음으로 넘길 값: 등록된 직원 이름
```

- 필요한 값 · 되묻기: 이름과 휴대폰 번호가 꼭 필요해요. / 부서, 직책, 입사일은 말에 있을 때만 넣어요. / 퇴사한 적 있는 사람이면 근속을 어떻게 할지 물어요.
- 끝: 직원 한 명과 소속이 한 번에 생겨요.
- 화면: 설정 → 사람·권한 → 직원 명단 (/admin/enterprise/people-roster)
- 하면 안 되는 것: 확인 없이 등록하지 않아요. / 입사일을 등록일로 마음대로 넣지 않아요.

### ORG-08 직원을 초대 링크로 불러요.
- 누가: 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「직원 초대 링크 만들어줘」 「새 직원한테 초대장 보내고 싶어」 「회사 초대 링크는 어디서 만들어?」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 링크는 화면에서 만들어 카톡이나 문자로 보내요.
- 끝: 초대 링크를 만들어 직원에게 보낼 수 있어요.
- 화면: 설정 → 사람·권한 → 초대·가입 → 직원 초대·승인 (/invite/company)
- 하면 안 되는 것: 초대 문자를 AI 가 대신 보내지 않아요. / 이전 링크 폐기는 모르는 사람에게 퍼졌을 때만 해요.

### ORG-09 가입 신청한 사람을 승인해요.
- 누가: 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「가입 신청 승인해줘」 「소속 신청 온 사람 있어?」 「신청한 직원 받아주고 싶어」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_join_requests","args":{}}}
     서버: 몸통 src/routes/mcp-tools/membership.ts:query_join_requests
     다음으로 넘길 값: 신청한 사람 · 신청 시각
```

- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / AI 로는 기다리는 신청 목록만 볼 수 있어요.
- 끝: 기다리는 가입 신청을 보여 주고 승인은 화면으로 안내해요.
- 화면: 설정 → 사람·권한 → 초대·가입 → 직원 초대·승인 (/admin/enterprise/approval)
- 하면 안 되는 것: 승인과 반려는 AI 로 하지 않아요. / 모르는 사람의 신청은 거절해요.

### ORG-10 새 부서를 만들어요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「영업부 밑에 영업4팀 만들어줘」 「개발부 새로 만들어줘」 「경영지원 부서 추가해 줘」 「조직도에 해외영업팀 넣어줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  (값이 없으면 먼저 물어요: 「부서 이름을 뭐라고 할까요?」)
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"create_department","args":{"name":"영업4팀","parent":"영업부","kind":"team"}}}
     서버: 몸통 src/routes/mcp-tools/org-chart.ts:create_department · 웹 API POST /api/admin/departments {name, parent_id, kind, executive_worker_id}
     다음으로 넘길 값: confirmation_id
     그다음: 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"create_department","args":{"name":"영업4팀","parent":"영업부","kind":"team"},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/org-chart.ts:create_department · 웹 API POST /api/admin/departments {name, parent_id, kind, executive_worker_id}
     다음으로 넘길 값: 새 부서 이름
```

- 필요한 값 · 되묻기: 부서 이름이 꼭 필요해요. / 상위 부서가 없으면 맨 위에 만들어요. / 같은 이름의 부서가 이미 있으면 만들지 않아요.
- 끝: 새 부서가 조직도에 생겨요.
- 화면: 설정 → 사람·권한 → 조직도 (/admin/enterprise/departments)
- 하면 안 되는 것: 확인 없이 만들지 않아요. / 부서장은 이 줄에서 정하지 않아요.

### ORG-11 부서 이름을 바꿔요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「개발부 이름을 연구개발부로 바꿔줘」 「영업1팀을 영업1본부로 고쳐줘」 「경영지원 부서 이름 변경해줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"rename_department","args":{"department":"개발부","new_name":"연구개발부"}}}
     서버: 몸통 src/routes/mcp-tools/org-chart.ts:rename_department · 웹 API PATCH /api/admin/departments/:id {name}
     다음으로 넘길 값: confirmation_id
     그다음: 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"rename_department","args":{"department":"개발부","new_name":"연구개발부"},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/org-chart.ts:rename_department · 웹 API PATCH /api/admin/departments/:id {name}
     다음으로 넘길 값: 바뀐 부서 이름
```

- 필요한 값 · 되묻기: 지금 부서 이름과 새 이름이 꼭 필요해요.
- 끝: 부서 이름이 새 이름으로 바뀌어요.
- 화면: 설정 → 사람·권한 → 조직도 (/admin/enterprise/departments)
- 하면 안 되는 것: 확인 없이 바꾸지 않아요. / 부서 안 사람은 그대로 둬요.

### ORG-12 부서를 다른 부서 밑으로 옮겨요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「영업2팀을 영업부 밑으로 옮겨줘」 「개발부를 맨 위로 올려줘」 「영업3팀 상위 부서를 경영지원으로 바꿔줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"move_department","args":{"department":"영업2팀","new_parent":"영업부"}}}
     서버: 몸통 src/routes/mcp-tools/org-chart.ts:move_department · 웹 API PATCH /api/admin/departments/:id {parent_id}
     다음으로 넘길 값: confirmation_id
     그다음: 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"move_department","args":{"department":"영업2팀","new_parent":"영업부"},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/org-chart.ts:move_department · 웹 API PATCH /api/admin/departments/:id {parent_id}
     다음으로 넘길 값: 옮겨진 부서 · 새 상위 부서
```

- 필요한 값 · 되묻기: 옮길 부서와 새 상위 부서가 필요해요. / 맨 위로 올리려면 최상위라고 말해요.
- 끝: 부서의 상위 부서가 바뀌어 조직도에 반영돼요.
- 화면: 설정 → 사람·권한 → 조직도 (/admin/enterprise/departments)
- 하면 안 되는 것: 자기 아래 부서 밑으로는 옮기지 않아요. / 확인 없이 옮기지 않아요.

### ORG-13 쓰지 않는 부서를 없애요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「영업3팀 없애줘」 「해외영업팀 부서 폐지해줘」 「안 쓰는 부서 지워줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"archive_department","args":{"department":"영업3팀"}}}
     서버: 몸통 src/routes/mcp-tools/org-chart.ts:archive_department · 함수 src/lib/org-member-detach.ts:promoteRemainingAffiliation · 웹 API DELETE /api/admin/departments/:id
     다음으로 넘길 값: confirmation_id
     그다음: 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"archive_department","args":{"department":"영업3팀"},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/org-chart.ts:archive_department · 함수 src/lib/org-member-detach.ts:promoteRemainingAffiliation · 웹 API DELETE /api/admin/departments/:id
     다음으로 넘길 값: 없앤 부서 이름
```

- 필요한 값 · 되묻기: 없앨 부서 이름이 꼭 필요해요. / 부서 안 사람이 있으면 미리보기에서 알려 줘요.
- 끝: 부서가 조직도에서 빠져요.
- 화면: 설정 → 사람·권한 → 조직도 (/admin/enterprise/departments)
- 하면 안 되는 것: 기본 부서는 없애지 않아요. / 확인 없이 없애지 않아요.

### ORG-14 부서장을 정해요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「영업1팀 팀장을 이가상으로 해줘」 「개발부 부서장 정해줘」 「박가상도 영업부 공동 부서장으로 넣어줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  (값이 없으면 먼저 물어요: 「누구를 부서장으로 할까요?」)
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"assign_department_head","args":{"department":"영업1팀","worker":"이가상","mode":"replace"}}}
     서버: 몸통 src/routes/mcp-tools/org-chart.ts:assign_department_head · 함수 src/lib/department-head-membership.ts:assignHeadWithMembership
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구인가요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"assign_department_head","args":{"department":"영업1팀","worker":"이가상","mode":"replace"},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/org-chart.ts:assign_department_head · 함수 src/lib/department-head-membership.ts:assignHeadWithMembership
     다음으로 넘길 값: 부서 · 새 부서장
```

- 필요한 값 · 되묻기: 부서와 부서장이 될 사람이 필요해요. / 공동 부서장은 「도 부서장으로」라고 말할 때만 더해요.
- 끝: 부서장이 새로 정해지거나 공동으로 더해져요.
- 화면: 설정 → 사람·권한 → 조직도 (/admin/enterprise/departments)
- 하면 안 되는 것: 확인 없이 바꾸지 않아요. / 말이 없으면 기존 부서장을 바꾸는 쪽으로 해요.

### ORG-15 직원을 한 부서로 옮겨 넣어요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「정신입 한신입 오신입을 영업2팀으로 넣어줘」 「이가상을 영업1팀으로 옮겨줘」 「신입 세 명 영업2팀에 넣어줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"assign_worker_to_department","args":{"worker":"정신입","department":"영업2팀"}}}
     서버: 몸통 src/routes/mcp-tools/org-chart.ts:assign_worker_to_department · 함수 src/lib/affiliation-department.ts:resolveAffiliationDepartment
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구인가요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"assign_worker_to_department","args":{"worker":"정신입","department":"영업2팀"},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/org-chart.ts:assign_worker_to_department · 함수 src/lib/affiliation-department.ts:resolveAffiliationDepartment
     다음으로 넘길 값: 옮겨진 직원
  2-미리보기. tools/call {"name":"run_write","arguments":{"tool":"assign_worker_to_department","args":{"worker":"한신입","department":"영업2팀"}}}
     서버: 몸통 src/routes/mcp-tools/org-chart.ts:assign_worker_to_department
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구인가요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"run_write","arguments":{"tool":"assign_worker_to_department","args":{"worker":"한신입","department":"영업2팀"},"confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/org-chart.ts:assign_worker_to_department
     다음으로 넘길 값: 옮겨진 직원
  3-미리보기. tools/call {"name":"run_write","arguments":{"tool":"assign_worker_to_department","args":{"worker":"오신입","department":"영업2팀"}}}
     서버: 몸통 src/routes/mcp-tools/org-chart.ts:assign_worker_to_department
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구인가요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  3-확정. tools/call {"name":"run_write","arguments":{"tool":"assign_worker_to_department","args":{"worker":"오신입","department":"영업2팀"},"confirmation_id":"<3-미리보기.confirmation_id>"}}
     넘겨받는 값: 3-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/org-chart.ts:assign_worker_to_department
     다음으로 넘길 값: 옮겨진 직원
```

- 필요한 값 · 되묻기: 직원 이름과 부서가 필요해요. / 여러 명이면 한 명씩 미리보기를 보여 줘요.
- 끝: 직원의 주 부서가 새 부서로 바뀌어요.
- 화면: 설정 → 사람·권한 → 조직도 (/admin/enterprise/departments)
- 하면 안 되는 것: 확인 없이 옮기지 않아요. / 날짜를 정해 발령하는 일은 인사발령으로 해요.

### ORG-16 날짜를 정해 직원 인사발령을 내요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「이가상 11월 1일자로 영업2팀 발령 내줘」 「박가상 과장으로 승진 발령해줘」 「정신입 영업1팀으로 전보 처리해줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"transfer_worker","args":{"worker":"이가상","to_department":"영업2팀","to_position":"대리","change_type":"dept_change","effective_date":"2026-11-01","reason":"조직 개편"}}}
     서버: 몸통 src/routes/mcp-tools/orgmodel.ts:transfer_worker
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구인가요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"transfer_worker","args":{"worker":"이가상","to_department":"영업2팀","to_position":"대리","change_type":"dept_change","effective_date":"2026-11-01","reason":"조직 개편"},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/orgmodel.ts:transfer_worker
     다음으로 넘길 값: 발령 내용 · 효력일
```

- 필요한 값 · 되묻기: 직원 이름이 꼭 필요해요. / 부서, 직책, 효력일은 말에 있을 때만 넣어요. / 효력일이 없으면 오늘이에요.
- 끝: 발령 기록이 남고 직원의 부서나 직책이 바뀌어요.
- 화면: 설정 → 사람·권한 → 조직도 (/admin/enterprise/org-manage)
- 하면 안 되는 것: 확인 없이 발령하지 않아요. / 사업장은 이 줄에서 바꾸지 않아요.

### ORG-17 직원의 직급을 바꿔요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「김가상을 부사장으로 바꿔줘」 「이가상 직급 과장으로 올려줘」 「박가상 직급 대리로 정해줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"assign_job_grade","args":{"worker":"김가상","grade":"부사장"}}}
     서버: 몸통 src/routes/mcp-tools/jobgrades.ts:assign_job_grade
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구인가요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"assign_job_grade","args":{"worker":"김가상","grade":"부사장"},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/jobgrades.ts:assign_job_grade
     다음으로 넘길 값: 바뀐 직급
```

- 필요한 값 · 되묻기: 직원 이름과 직급이 꼭 필요해요. / 직급 목록에 없으면 먼저 직급을 만들어야 해요.
- 끝: 직원의 직급이 새 직급으로 바뀌어요.
- 화면: 설정 → 사람·권한 → 직급 체계 (/admin/enterprise/job-grades)
- 하면 안 되는 것: 확인 없이 바꾸지 않아요. / 직급과 직책은 서로 달라요.

### ORG-18 직원의 직책이나 부서를 고쳐요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「박가상 직책을 경영지원팀장으로 바꿔줘」 「내 직책이 대표이사로 나와 고쳐줘」 「관리부 직원으로 직책 정리해줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"update_employee_position","args":{"worker":"박가상","position":"경영지원팀장"}}}
     서버: 몸통 src/routes/mcp-tools/org-payroll.ts:update_employee_position · 웹 API PATCH /api/workers/:id {position, department, role}
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구인가요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"update_employee_position","args":{"worker":"박가상","position":"경영지원팀장"},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/org-payroll.ts:update_employee_position · 웹 API PATCH /api/workers/:id {position, department, role}
     다음으로 넘길 값: 바뀐 직책
```

- 필요한 값 · 되묻기: 직원 이름이 꼭 필요해요. / 새 직책이나 새 부서 중 하나는 말해야 해요.
- 끝: 직원의 직책이나 부서 글자가 바뀌어요.
- 화면: 설정 → 사람·권한 → 직원 명단 (/admin/enterprise/people-roster)
- 하면 안 되는 것: 확인 없이 바꾸지 않아요. / 직급을 바꾸는 일은 직급 흐름으로 해요.

### ORG-19 직원에게 겸직 부서를 더해요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「이가상 영업2팀 겸직으로 넣어줘」 「박가상 개발부도 같이 맡게 해줘」 「정신입 프로젝트로 영업1팀에 파견해줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"add_concurrent_assignment","args":{"worker":"이가상","department":"영업2팀","position":"대리","assignment_type":"concurrent"}}}
     서버: 몸통 src/routes/mcp-tools/states.ts:add_concurrent_assignment · 함수 src/lib/concurrent-affiliation.ts:createConcurrentAffiliation
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구인가요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"add_concurrent_assignment","args":{"worker":"이가상","department":"영업2팀","position":"대리","assignment_type":"concurrent"},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/states.ts:add_concurrent_assignment · 함수 src/lib/concurrent-affiliation.ts:createConcurrentAffiliation
     다음으로 넘길 값: 겸직 부서
```

- 필요한 값 · 되묻기: 직원 이름과 겸직 부서가 필요해요. / 종류를 말하지 않으면 겸직으로 해요.
- 끝: 직원에게 겸직 소속이 한 줄 더 생겨요.
- 화면: 설정 → 사람·권한 → 조직도 (/admin/enterprise/org-manage)
- 하면 안 되는 것: 확인 없이 더하지 않아요. / 주 부서는 이 줄에서 바꾸지 않아요.

### ORG-20 직원의 겸직을 끝내요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「오신입 겸직 끝내줘」 「박가상 영업2팀 겸직 해제해줘」 「정신입 파견 소속 종료해줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_worker_assignments","args":{"worker":"오신입"}}}
     서버: 몸통 src/routes/mcp-tools/states.ts:query_worker_assignments
     다음으로 넘길 값: 소속 번호 · 부서 · 종류
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구인가요?」 → 고른 id 로 같은 줄을 다시
  (값이 없으면 먼저 물어요: 「어느 겸직을 끝낼까요?」)
  2-미리보기. tools/call {"name":"run_write","arguments":{"tool":"end_concurrent_assignment","args":{}}}
     넘겨받는 값: 1.assignments.1.assignment_id → assignment_id
     서버: 몸통 src/routes/mcp-tools/states.ts:end_concurrent_assignment
     다음으로 넘길 값: confirmation_id
     그다음: 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"run_write","arguments":{"tool":"end_concurrent_assignment","args":{},"confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 1.assignments.1.assignment_id → assignment_id · 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/states.ts:end_concurrent_assignment
     다음으로 넘길 값: 끝난 겸직
```

- 필요한 값 · 되묻기: 직원 이름이 필요해요. / 겸직이 여러 개면 어느 것인지 물어요.
- 끝: 고른 겸직 소속이 끝나고 기록이 남아요.
- 화면: 설정 → 사람·권한 → 조직도 (/admin/enterprise/org-manage)
- 하면 안 되는 것: 주 부서는 이 흐름으로 끝내지 않아요. / 확인 없이 끝내지 않아요.

### ORG-21 직원을 휴직 처리해요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「한신입 육아휴직 처리해줘」 「이가상 11월부터 병가 휴직으로 해줘」 「정신입 휴직 넣어줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"put_worker_on_leave","args":{"worker":"한신입","state":"parental_leave","from_date":"2026-11-01","to_date":"2027-10-31","note":"육아휴직"}}}
     서버: 몸통 src/routes/mcp-tools/states.ts:put_worker_on_leave
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구인가요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"put_worker_on_leave","args":{"worker":"한신입","state":"parental_leave","from_date":"2026-11-01","to_date":"2027-10-31","note":"육아휴직"},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/states.ts:put_worker_on_leave
     다음으로 넘길 값: 휴직 종류 · 시작일
```

- 필요한 값 · 되묻기: 직원 이름과 휴직 종류가 필요해요. / 시작일이 없으면 오늘이에요. / 돌아올 날짜는 말에 있을 때만 넣어요.
- 끝: 직원의 상태가 휴직으로 바뀌어요.
- 화면: 설정 → 사람·권한 → 직원 명단 (/admin/enterprise/people-roster)
- 하면 안 되는 것: 확인 없이 휴직 처리하지 않아요. / 퇴사 처리와는 달라요.

### ORG-22 휴직한 직원을 복직 처리해요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「한신입 복직 처리해줘」 「이가상 오늘부로 돌아왔어」 「육아휴직 끝난 직원 복직시켜줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"return_worker_from_leave","args":{"worker":"한신입","return_date":"2026-10-21"}}}
     서버: 몸통 src/routes/mcp-tools/states.ts:return_worker_from_leave
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구인가요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"return_worker_from_leave","args":{"worker":"한신입","return_date":"2026-10-21"},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/states.ts:return_worker_from_leave
     다음으로 넘길 값: 복직일
```

- 필요한 값 · 되묻기: 직원 이름이 꼭 필요해요. / 복직일이 없으면 오늘이에요.
- 끝: 직원의 상태가 다시 근무 중으로 바뀌어요.
- 화면: 설정 → 사람·권한 → 직원 명단 (/admin/enterprise/people-roster)
- 하면 안 되는 것: 확인 없이 복직 처리하지 않아요. / 휴직 중이 아닌 직원은 바꾸지 않아요.

### ORG-23 지금 휴직 중인 직원을 봐요.
- 누가: 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「지금 휴직 중인 사람 누구야」 「육아휴직 중인 직원 보여줘」 「휴직자 목록 알려줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_workers_on_leave","args":{"state":"parental_leave"}}}
     서버: 몸통 src/routes/mcp-tools/states.ts:query_workers_on_leave
     다음으로 넘길 값: 이름 · 휴직 종류 · 복직 예정일
```

- 필요한 값 · 되묻기: 휴직 종류는 말에 있을 때만 걸러요. / 종류가 없으면 휴직 중인 직원 전부예요.
- 끝: 휴직 중인 직원의 이름, 종류, 복직 예정일을 보여 줘요.
- 화면: 설정 → 사람·권한 → 직원 명단 (/admin/enterprise/people-roster)
- 하면 안 되는 것: 부서장은 맡은 부서 범위만 볼 수 있어요.

### ORG-24 직원을 퇴사 처리해요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「오신입 12월 31일자로 퇴사 처리해줘」 「직원 퇴사 처리는 어떻게 해?」 「이가상 퇴사일 오늘로 처리해줘」 「퇴사자 정리해 줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  (값이 없으면 먼저 물어요: 「마지막 근무일이 언제예요?」)
  1. tools/call {"name":"run_write","arguments":{"tool":"resign_process","args":{"worker":"오신입","last_day":"2026-12-31","reason":"개인 사정"}}}
     서버: 몸통 src/routes/mcp-tools/m4-resign.ts:resign_process · 함수 src/lib/worker-offboard.ts:offboardWorkerFromEnterprise · 웹 API DELETE /api/workers/:id {left_at}
     다음으로 넘길 값: 퇴사일
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구인가요?」 → 고른 id 로 같은 줄을 다시 · 앱에서 사람이 승인한 뒤 같은 인자로 다시 불러요
```

- 필요한 값 · 되묻기: 직원 이름과 마지막 근무일이 꼭 필요해요. / 사유는 말에 있을 때만 넣어요. / 인사책 앱에서 대표가 승인해야 끝나요.
- 끝: 승인 뒤에 직원이 퇴사 상태로 바뀌어요.
- 화면: 설정 → 사람·권한 → 직원 명단 (/admin/enterprise/people-roster)
- 하면 안 되는 것: 앱 승인 없이 퇴사 처리하지 않아요. / 마지막 회사 관리자는 퇴사 처리하지 않아요.

### ORG-25 잘못 만든 직원이나 중복 직원을 비활성화해요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「한신입이 두 명인데 한 명 비활성화해줘」 「쉬는 직원을 명단에서 숨겨줘」 「중복 등록된 직원 정리해줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  1. tools/call {"name":"run_write","arguments":{"tool":"employee_deactivate_grant","args":{"action":"deactivate","worker":"한신입","reason":"중복 등록"}}}
     서버: 몸통 src/routes/mcp-tools/m4-resign.ts:employee_deactivate_grant · 함수 src/lib/people-roster-deactivate.ts:deactivateEmployee
     다음으로 넘길 값: 비활성화된 직원
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구인가요?」 → 고른 id 로 같은 줄을 다시 · 앱에서 사람이 승인한 뒤 같은 인자로 다시 불러요
```

- 필요한 값 · 되묻기: 직원 이름이 꼭 필요해요. / 같은 이름이 여럿이면 부서로 골라요. / 인사책 앱에서 대표가 승인해야 끝나요.
- 끝: 승인 뒤에 직원이 명단에서 빠져요.
- 화면: 설정 → 사람·권한 → 직원 명단 (/admin/enterprise/people-roster)
- 하면 안 되는 것: 앱 승인 없이 비활성화하지 않아요. / 두 줄을 한 줄로 합치지는 않아요.

### ORG-26 내 퇴직 신청을 올려요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「퇴직원 낼게요 마지막 근무일은 12월 31일이에요」 「나 12월 말에 퇴사하려고」 「퇴직 신청 넣어줘」

호출 순서 (POST /api/mcp · tools/call):

```text
  (값이 없으면 먼저 물어요: 「마지막 근무일이 언제예요?」)
  1. tools/call {"name":"run_write","arguments":{"tool":"resign_request","args":{"last_day":"2026-12-31","reason":"개인 사정"}}}
     서버: 몸통 src/routes/mcp-tools/m4-resign.ts:resign_request
     다음으로 넘길 값: 신청 번호 · 마지막 근무일
     그다음: 앱에서 사람이 승인한 뒤 같은 인자로 다시 불러요
```

- 필요한 값 · 되묻기: 마지막 근무일이 꼭 필요해요. / 사유는 말에 있을 때만 넣어요. / 인사책 앱에서 내가 승인해야 올라가요. / 앱에는 같은 신청 화면이 따로 없어요.
- 끝: 퇴직 신청이 한 건 올라가요.
- 화면: 메뉴 → 내 정보 (/worker/profile)
- 하면 안 되는 것: 앱 승인 없이 올리지 않아요. / 회원 탈퇴와는 달라요.

### ORG-27 올린 퇴직 신청을 거둬요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「퇴직 신청 취소할래」 「퇴직원 철회해줘」 「퇴사 안 하기로 했어」

호출 순서 (POST /api/mcp · tools/call):

```text
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"resign_withdraw","args":{}}}
     서버: 몸통 src/routes/mcp-tools/m4-resign.ts:resign_withdraw
     다음으로 넘길 값: confirmation_id
     그다음: 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"resign_withdraw","args":{},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/m4-resign.ts:resign_withdraw
     다음으로 넘길 값: 철회된 신청
```

- 필요한 값 · 되묻기: 대기 중인 내 퇴직 신청이 있어야 해요. / 신청 번호는 말에 있을 때만 넣어요.
- 끝: 기다리던 퇴직 신청이 철회돼요.
- 화면: 메뉴 → 내 정보 (/worker/profile)
- 하면 안 되는 것: 확인 없이 철회하지 않아요. / 이미 처리된 신청은 거둘 수 없어요.

### ORG-28 회사를 찾아 가입을 신청해요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「가상컴퍼니 찾아서 가입 신청해줘」 「우리 회사에 들어가고 싶어」 「회사 이름으로 소속 신청할래」

호출 순서 (POST /api/mcp · tools/call):

```text
  (값이 없으면 먼저 물어요: 「어느 회사를 찾을까요?」)
  1. tools/call {"name":"run_read","arguments":{"tool":"search_company","args":{"query":"가상컴퍼니"}}}
     서버: 몸통 src/routes/mcp-tools/membership.ts:search_company · 함수 src/lib/public-enterprise-search.ts:searchPublicEnterprises · 웹 API GET /api/enterprises/search
     다음으로 넘길 값: 회사 이름
     그다음: 후보가 여럿이면(needs_choice) 「어느 회사에 신청할까요?」 → 고른 id 로 같은 줄을 다시
  2-미리보기. tools/call {"name":"run_write","arguments":{"tool":"request_join_company","args":{"company":"가상컴퍼니","department":"개발부","position":"사원"}}}
     서버: 몸통 src/routes/mcp-tools/membership.ts:request_join_company
     다음으로 넘길 값: confirmation_id
     그다음: 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"run_write","arguments":{"tool":"request_join_company","args":{"company":"가상컴퍼니","department":"개발부","position":"사원"},"confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/membership.ts:request_join_company
     다음으로 넘길 값: 신청 상태
```

- 필요한 값 · 되묻기: 회사 이름이나 사업자번호가 필요해요. / 희망 부서와 직책은 말에 있을 때만 넣어요. / 회사 관리자가 승인해야 들어가요.
- 끝: 찾은 회사에 가입 신청이 한 건 올라가요.
- 화면: 회사 찾기 (/worker/search)
- 하면 안 되는 것: 확인 없이 신청하지 않아요. / 승인은 이 흐름에서 하지 않아요.

### ORG-29 직원의 입사일을 바꿔요.
- 누가: 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「이가상 입사일 3월 2일로 바꿔줘」 「정신입 입사일 수정하고 싶어」 「입사일 고치는 곳이 어디야」 「연차 기준 입사일을 정정해줘」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 입사일은 직원 이름을 눌러 인사카드에서 고쳐요.
- 끝: 인사카드에서 입사일을 고칠 수 있어요.
- 화면: 설정 → 사람·권한 → 직원 명단 → 직원 이름 (/admin/enterprise/people-roster)
- 하면 안 되는 것: 입사일은 연차를 세는 기준일이에요. / 계약 시작일과 다를 수 있어요.

### ORG-30 직원의 이름이나 연락처 오타를 고쳐요.
- 누가: 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「직원 이름 오타 고쳐줘」 「이가상 연락처가 잘못 들어갔어」 「기본 정보를 고쳤는데 그대로 보여」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 계정을 쓰기 시작한 직원 정보는 본인만 고칠 수 있어요.
- 끝: 계정이 없는 직원의 오타는 인사카드에서 고칠 수 있어요.
- 화면: 설정 → 사람·권한 → 직원 명단 → 직원 이름 (/admin/enterprise/people-roster)
- 하면 안 되는 것: 회사가 직원 본인의 신원을 마음대로 바꾸지 않아요.

### 이 영역 도구가 나오는 다른 흐름

- ADM-08 부서별 인원을 봐요. → https://insacheck.com/docs/mcp/admin.md
- ADM-19 이번 달 새로 들어온 직원을 봐요. → https://insacheck.com/docs/mcp/admin.md
- MULTI-04 직원을 찾고 그 사람 정보를 봐요. → https://insacheck.com/docs/mcp/multi.md

## 안 되는 것 · 대안

아직 AI 로 안 되는 일이에요. 대신 화면에서 해요.

- 직원을 초대 링크로 불러요. → 설정 → 사람·권한 → 초대·가입 → 직원 초대·승인 (/invite/company)
- 가입 신청한 사람을 승인해요. → 설정 → 사람·권한 → 초대·가입 → 직원 초대·승인 (/admin/enterprise/approval)
- 직원의 입사일을 바꿔요. → 설정 → 사람·권한 → 직원 명단 → 직원 이름 (/admin/enterprise/people-roster)
- 직원의 이름이나 연락처 오타를 고쳐요. → 설정 → 사람·권한 → 직원 명단 → 직원 이름 (/admin/enterprise/people-roster)
