> 인사책 MCP 문서 — 일정·근무표. 서버 주소 https://insacheck.com/api/mcp. 전체판 https://insacheck.com/docs/mcp.md · 색인 https://insacheck.com/docs/mcp/llms.txt

# 일정·근무표 (schedule)

내 일정 · 교대 근무표 · 근무 교환 · 자원 예약.

## 할 수 있는 일

- 도구 15개 · 흐름 20개 (AI 로 끝까지 11개 · 화면 안내 9개)
- SCH-01 돌아가며 근무하는 한 달 교대표를 한 번에 짜요.
- SCH-03 우리 팀 근무 일정을 기간별로 봐요.
- SCH-04 새 근무조(주간 · 야간 틀)를 만들어요.
- SCH-06 내 근무 일정을 봐요.
- SCH-07 직원 한 명의 하루 근무를 배정해요.
- SCH-13 동료와 근무 날짜를 서로 바꾸자고 신청해요.
- SCH-14 내 근무 교환 신청이 어떻게 됐는지 봐요.
- SCH-16 우리 회사 근무조와 시간대를 봐요.
- SCH-17 회의실이나 차량을 예약해요.
- SCH-18 내가 잡은 예약을 봐요.
- SCH-19 내가 잡은 예약을 취소해요.

## 도구

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

| 이름 | 조회/쓰기 | 등급 | 필요 역할 | 범위 | 설명 | 부르는 길 |
|---|---|---|---|---|---|---|
| `query_my_schedule` | 조회 | 0 바로 조회 | employee (직원) | view | 본인 근무 스케줄(시프트). "이번주 내 근무 일정?", "내일 몇시 출근?" 같은 질문에 사용. | run_read |
| `query_team_shifts` | 조회 | 0 바로 조회 | dept_manager (팀장 이상) | view | 본인 팀의 기간별 근무 스케줄. "이번주 우리팀 시프트", "8월 1일 누가 야간이야?" 같은 질문에 사용. 부서장 이상. | run_read |
| `query_shift_templates` | 조회 | 0 바로 조회 | employee (직원) | view | 회사 시프트(근무조) 템플릿 목록. "우리 회사 근무조 뭐 있어?", "교대 시간대 알려줘" 같은 질문에 사용. | run_read |
| `create_shift_template` | 쓰기 | 2 미리보기 → 확정 | hr_manager (관리자 이상) | admin | 시프트(근무조) 템플릿을 만듭니다. "주간조 09시~18시 만들어", "야간조 22시~06시 추가" 같은 명령에 사용. 인사 권한 필요. | run_write |
| `assign_shift` | 쓰기 | 2 미리보기 → 확정 | dept_manager (팀장 이상) | admin | 직원에게 특정 날짜 시프트를 배정합니다. "이주영 내일 야간조 배정", "박민수 월요일 야간조로 배치", "8월 1일 김철수 휴무" 같은 명령에 사용. 워커당 하루 1개(재배정 시 덮어쓰기). 부서장은 본인 팀원만. | run_write |
| `generate_rotation` | 쓰기 | 2 미리보기 → 확정 | dept_manager (팀장 이상) | admin | 순환 교대표를 자동 생성합니다. 직원들에게 패턴(예: ["주간","야간","휴무"])을 돌려가며 일괄 배정 — 한 달치 교대표를 한 번에. "간호1팀 5명 주간-야간-휴무 패턴으로 이번달 교대표 짜줘" 같은 명령에 사용. 부서장 이상. | run_write |
| `request_shift_swap` | 쓰기 | 2 미리보기 → 확정 | employee (직원) | send | 근무(시프트) 교환을 신청합니다. "나 8월 3일 야간인데 김철수랑 8월 5일이랑 바꾸고 싶어" 같은 명령에 사용. 상대/날짜 지정. 승인되면 두 근무가 교환됩니다. | run_write |
| `query_shift_swaps` | 조회 | 0 바로 조회 | employee (직원) | view | 교대 교환 신청 목록(대기/완료). "교환 신청 뭐 있어?", "내 교대 교환 상태" 같은 질문에 사용. | run_read |
| `query_resources` | 조회 | 0 바로 조회 | employee (직원) | view | 예약 가능한 사내 자원(회의실/차량/장비) 목록. "회의실 뭐있어?", "예약 가능한 자원" 같은 질문에 사용. | run_read |
| `create_resource_reservation` | 쓰기 | 2 미리보기 → 확정 | employee (직원) | send | 회의실/차량/장비를 예약합니다. "내일 오후 2시 회의실B 예약", "금요일 사내차량 예약" 같은 명령에 사용. | run_write |
| `query_my_reservations` | 조회 | 0 바로 조회 | employee (직원) | view | 본인 자원 예약 목록. "내 예약 뭐있어?" 같은 질문에 사용. | run_read |
| `cancel_reservation` | 쓰기 | 2 미리보기 → 확정 | employee (직원) | send | 본인 자원 예약을 취소합니다. "회의실 예약 취소해줘" 같은 명령에 사용. | run_write |
| `calendar_events` | 조회 | 0 바로 조회 | employee (직원) | view | 팀 캘린더 일정 보기(캘린더 · 일정 조회). from~to 기간(기본 오늘부터 7일 · 최대 62일) 또는 q 낱말로 찾기. 내가 볼 수 있는 일정만(회사 공개 · 우리 부서 공개 · 내가 참석자). | run_read |
| `calendar_event_get` | 조회 | 0 바로 조회 | employee (직원) | view | 팀 캘린더 일정 한 건 보기(시간 · 장소 · 메모 · 참석자). 볼 수 없는 일정은 not_found. | run_read |
| `calendar_event_create` | 쓰기 | 2 미리보기 → 확정 | employee (직원) | send | 팀 캘린더에 일정 추가(일정 만들기 · 회의 잡기). date=YYYY-MM-DD, start_time·end_time=HH:MM(시각을 안 주면 종일 · 끝을 안 주면 1시간), attendees=초대할 사람 이름·번호(초대 알림이 가요), visibility=attendees(참석자만 · 기본)·dept(우리 부서)·company(회사 전체). 미리보기 후 확정. | run_write |

도구마다 따로 읽는 문서: [query_my_schedule](https://insacheck.com/docs/mcp/tools/query_my_schedule.md) · [query_team_shifts](https://insacheck.com/docs/mcp/tools/query_team_shifts.md) · [query_shift_templates](https://insacheck.com/docs/mcp/tools/query_shift_templates.md) · [create_shift_template](https://insacheck.com/docs/mcp/tools/create_shift_template.md) · [assign_shift](https://insacheck.com/docs/mcp/tools/assign_shift.md) · [generate_rotation](https://insacheck.com/docs/mcp/tools/generate_rotation.md) · [request_shift_swap](https://insacheck.com/docs/mcp/tools/request_shift_swap.md) · [query_shift_swaps](https://insacheck.com/docs/mcp/tools/query_shift_swaps.md) · [query_resources](https://insacheck.com/docs/mcp/tools/query_resources.md) · [create_resource_reservation](https://insacheck.com/docs/mcp/tools/create_resource_reservation.md) · [query_my_reservations](https://insacheck.com/docs/mcp/tools/query_my_reservations.md) · [cancel_reservation](https://insacheck.com/docs/mcp/tools/cancel_reservation.md) · [calendar_events](https://insacheck.com/docs/mcp/tools/calendar_events.md) · [calendar_event_get](https://insacheck.com/docs/mcp/tools/calendar_event_get.md) · [calendar_event_create](https://insacheck.com/docs/mcp/tools/calendar_event_create.md)

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

### SCH-01 돌아가며 근무하는 한 달 교대표를 한 번에 짜요.
- 누가: 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「이가상 박가상 주간 야간 휴무로 돌려서 한 달 교대표 짜줘」 「교대 근무표 자동으로 만들어 줘」 「1조 2조 돌아가며 근무하게 11월 표 짜줘」 「교대 근무표 어떻게 짜요?」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_shift_templates","args":{}}}
     서버: 몸통 src/routes/mcp-tools/shift.ts:query_shift_templates · 함수 src/lib/shift-roster-palette.ts:templatePaletteFromRow
     다음으로 넘길 값: 근무조 이름
  (값이 없으면 먼저 물어요: 「누구에게 어떤 순서로 몇 일치를 짤까요?」)
  2-미리보기. tools/call {"name":"run_write","arguments":{"tool":"generate_rotation","args":{"workers":["이가상","박가상"],"pattern":["주간","야간","휴무"],"from_date":"2026-11-02","days":28}}}
     서버: 몸통 src/routes/mcp-tools/shift-ops.ts:generate_rotation · 함수 src/lib/shift-write-gate.ts:assertShiftWriteRules
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구를 넣을까요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"run_write","arguments":{"tool":"generate_rotation","args":{"workers":["이가상","박가상"],"pattern":["주간","야간","휴무"],"from_date":"2026-11-02","days":28},"confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/shift-ops.ts:generate_rotation · 함수 src/lib/shift-write-gate.ts:assertShiftWriteRules
     다음으로 넘길 값: 만든 칸 수
```

- 필요한 값 · 되묻기: 근무조 이름(주간 · 야간 등)이 먼저 만들어져 있어야 해요. / 대상 직원 · 반복 순서 · 시작일 · 일수를 말해요. / 한 번에 넣을 인원과 건수에 상한이 있어요.
- 끝: 직원마다 순환 패턴으로 근무표 칸이 한꺼번에 채워져요.
- 화면: 근무규정 → 교대조 편성 (/worker/schedule/setup/shifts)
- 하면 안 되는 것: 확정된 달은 이 길로 바꾸지 않아요. / 미리보기 확인을 받기 전에는 쓰지 않아요.

### SCH-02 우리 부서를 교대조 근무로 바꿔요.
- 누가: 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「우리 부서를 교대조 근무로 바꿔줘」 「생산직 교대조 근무제 설정하고 싶어요」 「교대 근무로 설정하는 법 알려줘」 「부서 근무형태를 교대조로 변경해줘」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 바꿀 부서를 먼저 정해요. / 표가 넓어서 컴퓨터(PC)에서 하길 권해요.
- 끝: 부서가 교대조 근무로 바뀌어 근무표를 짤 수 있어요.
- 화면: 근무규정 → + → 근무형태 설정 (/worker/schedule/setup/work-mode)
- 하면 안 되는 것: 「상위를 따름」을 누르면 교대조 설정이 풀려요.

### SCH-03 우리 팀 근무 일정을 기간별로 봐요.
- 누가: 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「이번 주 우리 팀 근무표 보여줘」 「이번 달 팀원 일정 한눈에 보고 싶어」 「10월 25일 누가 야간이야?」 「팀 시프트 알려줘」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_team_shifts","args":{"from_date":"2026-10-21","days":7}}}
     서버: 몸통 src/routes/mcp-tools/shift.ts:query_team_shifts · 함수 src/lib/mcp-team-scope.ts:resolveMcpTeamScope
     다음으로 넘길 값: 날짜 · 직원 · 근무조 · 시간
```

- 필요한 값 · 되묻기: 기간 말이 없으면 오늘부터 7일이에요. / 한 번에 최대 31일까지 봐요.
- 끝: 팀원별 근무 날짜 · 근무조 · 시간을 보여 줘요.
- 화면: 팀 → 팀원 근무일정 (/worker/team/schedule)
- 하면 안 되는 것: 내 팀 범위 밖 직원은 보여 주지 않아요. / 일반 직원에게는 이 흐름을 열지 않아요.

### SCH-04 새 근무조(주간 · 야간 틀)를 만들어요.
- 누가: 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「야간조 22시부터 7시까지 만들어줘」 「주간조 8시 반부터 5시 반으로 근무조 추가해줘」 「교대 근무조 새로 만들어 줘」 「오전 파트조 하나 만들어줘」

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

```text
  (값이 없으면 먼저 물어요: 「조 이름과 시작 · 종료 시각을 알려 주세요.」)
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"create_shift_template","args":{"name":"야간조","start_time":"22:00","end_time":"07:00","break_minutes":60,"end_day_offset":1}}}
     서버: 몸통 src/routes/mcp-tools/shift.ts:create_shift_template · 함수 src/lib/shift-roster.ts:legacyTemplateBreakColumns · 웹 API POST /api/admin/shift-templates {name, start_time, end_time, break_minutes}
     다음으로 넘길 값: confirmation_id
     그다음: 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"create_shift_template","args":{"name":"야간조","start_time":"22:00","end_time":"07:00","break_minutes":60,"end_day_offset":1},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/shift.ts:create_shift_template · 함수 src/lib/shift-roster.ts:legacyTemplateBreakColumns · 웹 API POST /api/admin/shift-templates {name, start_time, end_time, break_minutes}
     다음으로 넘길 값: 근무조 번호
```

- 필요한 값 · 되묻기: 조 이름과 시작 · 종료 시각을 말해요. / 종료가 다음 날이면 그렇게 말해요. / 휴게 시간을 안 말하면 60분이에요.
- 끝: 새 근무조가 근무조 목록에 생겨요.
- 화면: 근무규정 → 교대조 편성 (/worker/schedule/setup/shifts)
- 하면 안 되는 것: 미리보기 확인을 받기 전에는 만들지 않아요. / 이미 짠 근무표는 바뀌지 않아요.

### SCH-05 다음 주 근무표 초안을 화면에서 짜요.
- 누가: 팀장 · 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「다음 주 근무표 초안 만들어줘」 「직원별로 칸 채워서 근무표 짜줘」 「우리 부서 근무표 어디서 짜요」 「주간 편성은 어떻게 해요」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 교대조 근무인 부서만 짤 수 있어요. / 표가 넓어서 컴퓨터(PC)에서 해요.
- 끝: 주간 편성 칸을 채우고 초안을 저장해요.
- 화면: 근무규정 → 교대조 편성 → 주간 편성 (/worker/schedule/setup/shifts)
- 하면 안 되는 것: 초안을 AI 가 대신 확정하지 않아요.

### SCH-06 내 근무 일정을 봐요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「이번 주 내 근무 일정 알려줘」 「내일 몇 시 출근이야?」 「다음 주 근무표 보여줘」 「이번 달 내 근무 언제야」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_my_schedule","args":{"from_date":"2026-10-21","days":7}}}
     서버: 몸통 src/routes/mcp-tools/ops.ts:query_my_schedule · 웹 API GET /api/workers/me/shifts
     다음으로 넘길 값: 날짜 · 시작 · 끝 · 상태
```

- 필요한 값 · 되묻기: 기간 말이 없으면 오늘부터 7일이에요. / 한 번에 최대 31일까지 봐요.
- 끝: 날짜별 근무 시작 · 끝 시각과 상태를 보여 줘요.
- 화면: 근무일정 (/worker/schedule)
- 하면 안 되는 것: 다른 사람의 근무표는 이 흐름으로 보지 않아요. / 아직 게시 전인 달은 비어 있을 수 있어요.

### SCH-07 직원 한 명의 하루 근무를 배정해요.
- 누가: 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「이가상 내일 야간조로 배정해줘」 「박가상 10월 25일 휴무로 해줘」 「한신입 모레 주간조 넣어줘」 「오신입 금요일 근무 배정해줘」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_shift_templates","args":{}}}
     서버: 몸통 src/routes/mcp-tools/shift.ts:query_shift_templates · 함수 src/lib/shift-roster-palette.ts:templatePaletteFromRow
     다음으로 넘길 값: 근무조 번호 · 근무조 이름
  (값이 없으면 먼저 물어요: 「누구를 며칠에 어느 근무조로 넣을까요?」)
  2-미리보기. tools/call {"name":"run_write","arguments":{"tool":"assign_shift","args":{"worker":"이가상","work_date":"2026-10-22"}}}
     넘겨받는 값: 1.templates.0.template_id → shift_template_id
     서버: 몸통 src/routes/mcp-tools/shift.ts:assign_shift · 함수 src/lib/shift-write-gate.ts:assertShiftWriteRules · 웹 API POST /api/admin/shift-assignments {worker_id, work_date, shift_template_id}
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구를 배정할까요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"run_write","arguments":{"tool":"assign_shift","args":{"worker":"이가상","work_date":"2026-10-22"},"confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 1.templates.0.template_id → shift_template_id · 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/shift.ts:assign_shift · 함수 src/lib/shift-write-gate.ts:assertShiftWriteRules · 웹 API POST /api/admin/shift-assignments {worker_id, work_date, shift_template_id}
     다음으로 넘길 값: 배정 결과
```

- 필요한 값 · 되묻기: 직원 · 날짜 · 근무조를 말해요. / 휴무 · 휴일 · 병가도 상태로 배정할 수 있어요.
- 끝: 그 직원의 그날 근무가 한 칸 정해져요(다시 하면 덮어써요).
- 화면: 근무규정 → 교대조 편성 → 주간 편성 (/worker/schedule/setup/shifts)
- 하면 안 되는 것: 부서장은 자기 팀원만 배정해요. / 확정된 달은 이 길로 바꾸지 않아요.

### SCH-08 다 짠 근무표를 확정해 직원에게 보여 줘요.
- 누가: 팀장 · 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「근무표 확정해서 직원에게 보여줘」 「다 짠 근무표 게시해 줘」 「편성 확정 눌러줘」 「직원들한테 근무표 공개하고 싶어」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 먼저 「초안 저장」을 눌러야 해요. / 「직원에게 게시하기」 권한이 있는 사람만 보여요.
- 끝: 근무표가 직원에게 공개되고 알림이 가요.
- 화면: 근무규정 → 교대조 편성 → 편성 확정 (/worker/schedule/setup/shifts)
- 하면 안 되는 것: 「확인 없이 확정」은 동의를 못 받았을 때만 써요.

### SCH-09 쉬고 싶은 날(희망 휴무)을 내요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「쉬고 싶은 날 낼래요」 「희망 휴무 신청하고 싶어요」 「다음 달 이틀 쉬고 싶어」 「내 희망 휴무 어디서 내요」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 부서가 희망 휴무를 열었을 때만 보여요. / 교대조 근무 직원만 낼 수 있어요.
- 끝: 내 희망 휴무 날짜가 부서에 전달돼요.
- 화면: 근무일정 → 희망 휴무 (/worker/schedule)
- 하면 안 되는 것: 휴가 신청은 이 화면이 아니에요.

### SCH-10 근무표 가안에 동의하거나 안 되는 날을 알려요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「근무표 가안이 왔는데 어떻게 해?」 「근무표 가안에 동의할게」 「안 되는 날이 있다고 알려줘」 「가안 확인했어」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 관리자가 가안을 보낸 부서의 직원에게만 보여요.
- 끝: 동의 또는 안 되는 날이 관리자에게 전달돼요.
- 화면: 근무일정 → 근무표 가안 (/worker/schedule)
- 하면 안 되는 것: 동의 여부를 AI 가 대신 정하지 않아요.

### SCH-11 시간대별 최소 근무 인원을 정해요.
- 누가: 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「시간대마다 최소 몇 명 있어야 하는지 정하고 싶어」 「편성 기준 설정하려면?」 「사람 모자란 시간을 알려 주게 해줘」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 요일 · 시간 · 인원수를 미리 정해 두세요.
- 끝: 기준을 저장하면 모자란 시간을 표시해 줘요.
- 화면: 교대조 편성 → 주간 편성 → ⚙ 편성 기준 (/worker/schedule/setup/shifts)
- 하면 안 되는 것: 기준이 없으면 모자란 인원을 알려 주지 않아요.

### SCH-12 부서장이나 점장에게 근무표 짜기를 맡겨요.
- 누가: 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「부서장에게 근무표 짜기 맡기고 싶어」 「점장한테 편성 권한 줘」 「근무표 편성 담당자 지정해줘」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 맡길 직원과 범위(부서)를 정해요. / 대표 또는 회사 관리자만 할 수 있어요.
- 끝: 그 사람이 맡은 부서 근무표를 짤 수 있어요.
- 화면: 누구에게 편성을 맡길까요 → 편성 맡기기 (/worker/schedule/setup/one-off)
- 하면 안 되는 것: 맡은 사람이 다른 사람에게 다시 넘길 수는 없어요.

### SCH-13 동료와 근무 날짜를 서로 바꾸자고 신청해요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「10월 28일 근무를 한신입이랑 30일로 바꾸고 싶어」 「교대 교환 신청해 줘」 「야간 근무 박가상과 맞바꿀래」 「근무 날짜 서로 바꿔줘」

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

```text
  (값이 없으면 먼저 물어요: 「내 근무일 · 상대 · 상대 근무일을 알려 주세요.」)
  1-미리보기. tools/call {"name":"run_write","arguments":{"tool":"request_shift_swap","args":{"my_date":"2026-10-28","target_worker":"한신입","target_date":"2026-10-30","reason":"병원 진료"}}}
     서버: 몸통 src/routes/mcp-tools/shift-ops.ts:request_shift_swap · 함수 src/lib/shift-swap-roster.ts:createShiftSwapRequest · 웹 API POST /api/worker/shift-swap {my_date, target_worker_id, target_date, reason}
     다음으로 넘길 값: confirmation_id
     그다음: 후보가 여럿이면(needs_choice) 「같은 이름이 여럿이에요. 누구와 바꿀까요?」 → 고른 id 로 같은 줄을 다시 · 미리보기를 사용자에게 보여 주고 「네」를 받아요
  1-확정. tools/call {"name":"run_write","arguments":{"tool":"request_shift_swap","args":{"my_date":"2026-10-28","target_worker":"한신입","target_date":"2026-10-30","reason":"병원 진료"},"confirmation_id":"<1-미리보기.confirmation_id>"}}
     넘겨받는 값: 1-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/shift-ops.ts:request_shift_swap · 함수 src/lib/shift-swap-roster.ts:createShiftSwapRequest · 웹 API POST /api/worker/shift-swap {my_date, target_worker_id, target_date, reason}
     다음으로 넘길 값: 교환 신청 번호
```

- 필요한 값 · 되묻기: 내 근무일 · 상대 이름 · 상대 근무일을 말해요. / 같은 부서 직원끼리만 바꿀 수 있어요. / 상대가 수락한 뒤 팀장이 승인해요.
- 끝: 교환 신청이 만들어지고 상대에게 알림이 가요.
- 화면: 교대 교환 (/worker/shift-swap)
- 하면 안 되는 것: 미리보기 확인을 받기 전에는 신청하지 않아요. / 승인 전에는 근무가 바뀌지 않아요.

### SCH-14 내 근무 교환 신청이 어떻게 됐는지 봐요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「교환 신청 뭐 있어?」 「내 교대 교환 어떻게 됐어?」 「근무 바꾸자는 요청 온 거 있어?」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_shift_swaps","args":{"status":"pending"}}}
     서버: 몸통 src/routes/mcp-tools/shift-ops.ts:query_shift_swaps · 웹 API GET /api/worker/shift-swap
     다음으로 넘길 값: 신청자 · 상대 · 근무일 · 상태
```

- 필요한 값 · 되묻기: 상태를 말하지 않으면 기다리는 신청만 봐요. / 직원은 나와 관련된 신청만 보여요.
- 끝: 교환 신청의 상대 · 날짜 · 상태를 보여 줘요.
- 화면: 교대 교환 (/worker/shift-swap)
- 하면 안 되는 것: 다른 사람 사이의 신청은 직원에게 보여 주지 않아요.

### SCH-15 팀원이 낸 근무 교환 신청을 승인해요.
- 누가: 팀장 · 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「교대 교환 승인해줘」 「팀원 근무 교환 신청 승인할게」 「교환 신청 반려해 줘」 「교환 승인 기다리는 거 있어?」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_shift_swaps","args":{"status":"pending"}}}
     서버: 몸통 src/routes/mcp-tools/shift-ops.ts:query_shift_swaps · 웹 API GET /api/worker/shift-swap
     다음으로 넘길 값: 신청자 · 상대 · 근무일
```

- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 상대 직원이 먼저 수락해야 승인할 수 있어요.
- 끝: 승인하면 두 사람의 근무가 서로 바뀌어요.
- 화면: 팀 → 승인함 → 교대 교환 (/worker/team/approvals)
- 하면 안 되는 것: AI 가 교환을 승인하거나 반려하지 않아요.

### SCH-16 우리 회사 근무조와 시간대를 봐요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「우리 회사 근무조 뭐 있어?」 「교대 시간대 알려줘」 「야간조는 몇 시부터야」 「주간조 휴게는 몇 분이야」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_shift_templates","args":{}}}
     서버: 몸통 src/routes/mcp-tools/shift.ts:query_shift_templates · 함수 src/lib/shift-roster-palette.ts:templatePaletteFromRow
     다음으로 넘길 값: 근무조 이름 · 시간 · 휴게
```

- 필요한 값 · 되묻기: 따로 필요한 값은 없어요.
- 끝: 근무조 이름 · 시간 · 휴게를 보여 줘요.
- 화면: 근무일정 (/worker/schedule)
- 하면 안 되는 것: 근무조를 만들거나 지우지 않아요.

### SCH-17 회의실이나 차량을 예약해요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「내일 오후 2시 회의실 B 예약해줘」 「회의실 뭐 있어? 하나 잡아줘」 「금요일 오전 법인차량 예약해줘」 「3시부터 4시까지 회의실 잡아줘」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_resources","args":{"resource_type":"room"}}}
     서버: 몸통 src/routes/mcp-tools/resource.ts:query_resources
     다음으로 넘길 값: 자원 이름 · 수용 인원
  (값이 없으면 먼저 물어요: 「어느 자원을 몇 시부터 몇 시까지 잡을까요?」)
  2-미리보기. tools/call {"name":"run_write","arguments":{"tool":"create_resource_reservation","args":{"resource":"회의실 B","start_at":"2026-10-22T14:00","end_at":"2026-10-22T15:00","purpose":"주간 회의","participant_count":6}}}
     서버: 몸통 src/routes/mcp-tools/resource.ts:create_resource_reservation · 웹 API POST /api/reservations {resource_id, start_at, end_at, purpose, participant_count}
     다음으로 넘길 값: confirmation_id
     그다음: 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"run_write","arguments":{"tool":"create_resource_reservation","args":{"resource":"회의실 B","start_at":"2026-10-22T14:00","end_at":"2026-10-22T15:00","purpose":"주간 회의","participant_count":6},"confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/resource.ts:create_resource_reservation · 웹 API POST /api/reservations {resource_id, start_at, end_at, purpose, participant_count}
     다음으로 넘길 값: 예약 번호 · 상태
```

- 필요한 값 · 되묻기: 자원 이름과 시작 · 종료 시각을 말해요. / 이미 예약된 시간은 잡을 수 없어요. / 승인이 필요하면 결재 대기로 들어가요.
- 끝: 예약이 신청되고 승인되면 확정돼요.
- 화면: 회의실 예약 (/worker/reservation)
- 하면 안 되는 것: 미리보기 확인을 받기 전에는 신청하지 않아요. / 겹치는 시간에는 예약하지 않아요.

### SCH-18 내가 잡은 예약을 봐요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「내 예약 뭐 있어?」 「회의실 예약 내역 보여줘」 「내가 잡은 차량 예약 알려줘」

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

```text
  1. tools/call {"name":"run_read","arguments":{"tool":"query_my_reservations","args":{}}}
     서버: 몸통 src/routes/mcp-tools/resource.ts:query_my_reservations · 웹 API GET /api/reservations/my
     다음으로 넘길 값: 예약 번호 · 자원 이름 · 시간 · 상태
```

- 필요한 값 · 되묻기: 따로 필요한 값은 없어요. / 내 예약만 보여요.
- 끝: 내 예약의 자원 · 시간 · 상태를 보여 줘요.
- 화면: 회의실 예약 → 내 예약 (/worker/reservation/my)
- 하면 안 되는 것: 다른 사람의 예약은 이 흐름으로 보지 않아요.

### SCH-19 내가 잡은 예약을 취소해요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: AI 로 끝까지 돼요
- 이렇게 말해요: 「회의실 예약 취소해줘」 「내일 차량 예약 취소할래」 「아까 잡은 예약 없던 걸로 해줘」

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

```text
  (값이 없으면 먼저 물어요: 「어느 예약을 취소할까요?」)
  1. tools/call {"name":"run_read","arguments":{"tool":"query_my_reservations","args":{}}}
     서버: 몸통 src/routes/mcp-tools/resource.ts:query_my_reservations · 웹 API GET /api/reservations/my
     다음으로 넘길 값: 예약 번호 · 자원 이름 · 시간
  2-미리보기. tools/call {"name":"run_write","arguments":{"tool":"cancel_reservation","args":{}}}
     넘겨받는 값: 1.reservations.0.reservation_id → reservation_id
     서버: 몸통 src/routes/mcp-tools/resource.ts:cancel_reservation · 웹 API DELETE /api/reservations/:id
     다음으로 넘길 값: confirmation_id
     그다음: 미리보기를 사용자에게 보여 주고 「네」를 받아요
  2-확정. tools/call {"name":"run_write","arguments":{"tool":"cancel_reservation","args":{},"confirmation_id":"<2-미리보기.confirmation_id>"}}
     넘겨받는 값: 1.reservations.0.reservation_id → reservation_id · 2-미리보기.confirmation_id → confirmation_id
     서버: 몸통 src/routes/mcp-tools/resource.ts:cancel_reservation · 웹 API DELETE /api/reservations/:id
     다음으로 넘길 값: 취소 결과
```

- 필요한 값 · 되묻기: 예약이 여러 개면 어느 것인지 물어요. / 내가 잡은 예약만 취소할 수 있어요.
- 끝: 그 예약이 취소돼요.
- 화면: 회의실 예약 → 내 예약 (/worker/reservation/my)
- 하면 안 되는 것: 취소 확인을 받기 전에는 취소하지 않아요. / 다른 사람의 예약은 취소하지 않아요.

### SCH-20 캘린더에 일정을 만들고 한눈에 봐요.
- 누가: 직원 · 팀장 · 관리자 · 대표
- 방식: 아직 AI 로 안 돼요 · 대신 화면
- 이렇게 말해요: 「캘린더에 일정 넣어줘」 「이번 달 일정 한눈에 보고 싶어」 「일정 하나 만들어 줘」 「오늘 일정 알려줘」
- 호출 순서: 없음(화면에서 해요)
- 필요한 값 · 되묻기: 아직 AI 로 안 돼요 · 대신 화면에서 해요. / 일정은 캘린더 화면에서 만들어요.
- 끝: 일정이 캘린더에 생기고 날짜별로 보여요.
- 화면: 하단 메뉴 → 업무(또는 캘린더) (/worker/calendar)
- 하면 안 되는 것: AI 가 일정을 대신 만들거나 지우지 않아요.

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

- ATT-20 팀원의 근무일에 근무조를 정해요. → https://insacheck.com/docs/mcp/attendance.md
- ATT-21 여러 사람의 교대표를 패턴으로 한 번에 만들어요. → https://insacheck.com/docs/mcp/attendance.md
- MULTI-22 내 근무 일정을 보고 근무 교환을 신청해요. → https://insacheck.com/docs/mcp/multi.md

## 안 되는 것 · 대안

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

- 우리 부서를 교대조 근무로 바꿔요. → 근무규정 → + → 근무형태 설정 (/worker/schedule/setup/work-mode)
- 다음 주 근무표 초안을 화면에서 짜요. → 근무규정 → 교대조 편성 → 주간 편성 (/worker/schedule/setup/shifts)
- 다 짠 근무표를 확정해 직원에게 보여 줘요. → 근무규정 → 교대조 편성 → 편성 확정 (/worker/schedule/setup/shifts)
- 쉬고 싶은 날(희망 휴무)을 내요. → 근무일정 → 희망 휴무 (/worker/schedule)
- 근무표 가안에 동의하거나 안 되는 날을 알려요. → 근무일정 → 근무표 가안 (/worker/schedule)
- 시간대별 최소 근무 인원을 정해요. → 교대조 편성 → 주간 편성 → ⚙ 편성 기준 (/worker/schedule/setup/shifts)
- 부서장이나 점장에게 근무표 짜기를 맡겨요. → 누구에게 편성을 맡길까요 → 편성 맡기기 (/worker/schedule/setup/one-off)
- 팀원이 낸 근무 교환 신청을 승인해요. → 팀 → 승인함 → 교대 교환 (/worker/team/approvals)
- 캘린더에 일정을 만들고 한눈에 봐요. → 하단 메뉴 → 업무(또는 캘린더) (/worker/calendar)
