flow_add_project_participants
ChatGPTInvite or add members to an existing Flow project. ⚠️ This tool adds participants to a project. Confirm with the user before invoking. When to use 프로젝트에 구성원(참여자)을 추가. projectId + 추가할 participantIds 목록. Note participantIds 는 flow_find_employees / flow_get_project(include:["participants"]) 로 얻은 userId 들. Examples - "김대리 이 프로젝트에 추가" → projectId:"2910862", participantIds:["kimdr"].
flow_collect_dept_chain
ChatGPTCollect and summarize what everyone in a department did in Flow over a date range. When to use 한 부서(팀)의 멤버 전원이 기간 내 활동한 프로젝트·과제를 묶어 요약한다. "우리 팀 이번 주/이번 기간 뭐했나" 주간보고·현황 파악용. Input - dept(필수): 부서명(dvsn_nm) - since: 활동일 기준 시작일. 생략 시 최근 14일(프로젝트 체인과 달리 디폴트 있음). Output format=markdown(기본): 멤버 목록 + 프로젝트별 상태 통계 테이블 + 완료/신규/마감초과/상태변경 요약. format=structured: data에 프로젝트별 상태 통계 + 멤버 활동수 (JSON). 공통: counts/meta/orgTree. Common mistakes - 탐색은 "게시물 작성자 ∪ 업무 담당자" 기준 — 남의 글 밑에 업무만 만든 극소수 프로젝트는 누락될 수 있다. - 테스트/데모성 프로젝트(테스트/e2e/private 등)는 자동 제외된다. - 특정 프로젝트 한 개를 깊게 보려면 flow_collect_project_chain 을 쓴다. Examples - "AI사업개발실 이번 주 활동 정리" → dept:"AI사업개발실". 통계 JSON 으로 → format:"structured".
flow_collect_project_chain
ChatGPTCollect one Flow project's tasks, posts and comments to summarize recent progress. When to use 특정 flow 프로젝트 또는 게시물의 과제·게시물·댓글을 하나의 트리로 수집한다. "이 프로젝트/이 게시물에서 무슨 일이 있었나"를 깊게 볼 때. Input (택1 필수) - link: flow 링크 또는 "project:<id>" / 순수 숫자 / 해시 - projectId: 프로젝트 전체 - postId: 특정 게시물 기준 상·하위 업무 트리(앵커 모드) 날짜 디폴트 없음 — since 줄 때만 그 이후 활동분으로 한정. statuses/assignees/priorities 필터 가능. Output format=markdown(기본): text에 마크다운 체인(~5만자 예산, 초과 시 압축/truncated). flow.team/l/ 링크는 3단계 재귀 확장. format=structured: data에 과제/게시물 배열(JSON) — 다운스트림에서 필터·정렬 가능. 값이 있는 사용자 커스텀 컬럼은 과제의 customColumns[{name,value}] 로 실린다(빈 값은 생략). 공통: counts/meta(상태·담당자 집계)/orgTree. Common mistakes - 부서 단위 요약은 이 도구가 아니라 flow_collect_dept_chain 을 쓴다. - 대형 프로젝트는 since 로 기간을 좁히면 빠르고 잘림 없이 받는다. 잘림이 걱정돼 이 도구 대신 flow_get_post 를 전건 순회하는 것은 더 나쁘다 — 호출이 수백~수천 배로 늘어 상류 호출량 제한에 걸리고, 그러면 아무것도 못 받는다. - companyId 는 인증 컨텍스트에서 자동 적용 — 입력으로 받지 않는다. Examples - "이 프로젝트 최근 진행상황" → projectId:"2910862" (또는 link). 구조화 → format:"structured".
flow_create_column
ChatGPTAdd a new custom column to a Flow project board. When to use 기존 프로젝트에 커스텀 컬럼(필드)을 추가. 현 컬럼 구조는 flow_get_project(include:["columns"]) 로 먼저 확인 권장. Notes - 쓰기 작업 — 실제 flow 보드에 컬럼이 추가됨. - 프로젝트 관리자만 추가할 수 있다. 참여자로만 들어가 있는 방은 거부된다 (권한 거부 (403)). 남이 만든 오래된 방에서 자주 걸린다 — 재시도해도 같다. 방장에게 관리자 권한을 받거나, 새 프로젝트를 만들어 거기에 세운다. - type: option 이면 options 로 선택지를 준다(색은 자동 배정). Examples - 선택형: { projectId:"...", name:"우선분류", type:"option", options:["긴급","일반"] }. - 텍스트: { projectId:"...", name:"비고", type:"text" }. Common mistakes - type:"option" 인데 options 누락 — 선택지 없는 빈 옵션 컬럼이 됨. - 같은 이름 컬럼 중복 생성 — 추가 전 flow_get_project(include:["columns"]) 로 확인.
flow_create_event
ChatGPTCreate a new event on a Flow calendar, with attendees, reminders and recurrence. ⚠️ This tool creates a real calendar event. Confirm with the user before invoking. When to use 사용자 의 새 일정을 캘린더에 생성. 참석자/알림/반복 지원. Common mistakes - timestamp 형식: YYYYMMDDHHmmss (14자리). ISO reject. - gmtTime 예: "GMT+09:00" (서버가 GMT 접두어 형태를 요구; "+09:00" 으로 줘도 내부 보정). - allDayYn / publicYn / publicNameYn: "Y" 또는 "N" 만. Examples - "내일 10~11시 '팀 스탠드업'" → calendarSrno(flow_list_calendars 로 확보), eventName:"팀 스탠드업", eventStartTimestamp:"20260621100000", eventFinishTimestamp:"20260621110000", allDayYn:"N", gmtTime:"GMT+09:00", publicYn:"N", publicNameYn:"N".
flow_create_post
ChatGPTWrite a new post or announcement in a Flow project. ⚠️ This tool creates a real post in a project. Confirm with the user before invoking. When to use 특정 프로젝트에 새 게시글 생성 (업무 아님 — 단순 협업 메시지/공지). Do NOT use - 시작·종료 시각이 있는 것(워크숍·회의·행사 공지) → flow_create_schedule. "언제" 가 내용의 핵심이면 여기가 아니다 — 글이라는 말이 붙어 있어도 그렇다. - 상태/우선순위/담당자가 있는 업무 → flow_create_tasks. - 해야 할 항목 목록(체크리스트) → flow_create_todo. Examples - "이 프로젝트에 공지 올려줘" → projectId, title:"공지", contents:"...". 첨부는 files(base64), inline 이미지는 imageFiles. Output {projectId, postId, taskId?, tinyUrl?} — 전 필드 optional. 정상 생성이면 projectId·postId 가 실려 온다. postId 가 비어 오면 생성 결과를 확인할 수 없는 상태다 — 성공으로 단정하지 말고 사용자에게 확인을 요청할 것. Common mistakes - title 1~200자, contents 1~10000자. projectId 는 flow_find_projects 로 확보. - files/imageFiles 의 fileName 은 1~100자이고 / \ : * ? " < > | 를 넣을 수 없다. - fileContents 는 실제 파일 바이트를 읽어 변환한, 줄바꿈 없는 순수 base64(필요한 = 패딩 포함). 임의 생성·data URI prefix 금지. - 이미지 fileName 확장자는 실제 이미지 형식과 일치시킨다. - botId 는 이메일 형식이어야 한다.
flow_create_project
ChatGPTCreate a new Flow project (board). When to use 새 프로젝트(협업 보드)를 만든다. 인증 사용자 명의로 생성되며 본인이 관리자. 반환된 projectId(colabo_srno)로 이어서 업무 추가(flow_create_tasks)·컬럼 추가 등을 수행. Notes - 쓰기 작업 — 실제 flow에 보드가 생성됨. - 현재는 빈 보드만 생성 — 업무/컬럼은 후속 도구로 추가. Examples - { title:"2026 분기 기획", description:"Q3 로드맵" } → projectId 반환. - 보드 세팅 흐름: create_project → flow_set_statuses → flow_create_column → flow_create_tasks.
flow_create_schedule
ChatGPTCreate a schedule post inside a Flow project. ⚠️ This tool creates a real schedule. Confirm with the user before invoking. When to use 프로젝트에 시작·종료 시각이 있는 항목을 올린다(게시물형 일정). 워크숍·회의·행사처럼 "언제" 가 본문의 핵심인 것. 캘린더 이벤트(flow_create_event)와 별개 — 이건 프로젝트 게시물이다. Do NOT use - 시각이 없는 공지·메시지 → flow_create_post. 판별자는 시작/종료 시각의 유무다. - 개인·구독 캘린더에 잡는 약속 → flow_create_event. 여기는 프로젝트 안에 남는 글이다. Common mistakes - startDateTime/endDateTime 은 YYYYMMDDHHmmss 14자리, start ≤ end (뒤집히면 호출 전에 거부된다). - 등록자는 자동으로 본인(호출자). Output {projectId, postId, taskId?, tinyUrl?} — 전 필드 optional. 일정은 postId 가 비어 돌아올 수 있다(정상). 단 projectId 까지 비어 오면 생성 결과를 확인할 수 없는 상태다 — 성공으로 단정하지 말 것. Examples - "킥오프 일정 글 만들어줘" → projectId, title:"킥오프", startDateTime/endDateTime(YYYYMMDDHHmmss), isAllDay:false.
flow_create_tasks
ChatGPTCreate tasks in a Flow project — one, many, or as subtasks of an existing task. ⚠️ This tool creates real work tasks. Confirm with the user before invoking. When to use 프로젝트에 업무를 만드는 모든 경우. 한 건이든 여러 건이든, 하위 업무든 여기다. 입력이 경로를 정한다: - parentTaskId 있음 → 그 업무의 하위 업무를 프리뷰 후 승인·적용 (mode=subtask) - files/imageFiles/viewPermission/botId/customColumns 있음 → 단건 즉시 생성 (mode=single) - 그 외 → 프리뷰 후 적용 (mode=batch) Do NOT use - 새 보드(프로젝트) 자체를 만드는 것 → flow_create_project. 여기는 기존 보드에 업무를 넣는다. - 보드의 상태 체계(대기/진행/완료 단계 목록)를 정의·교체 → flow_set_statuses. - 이미 있는 업무의 상태·담당자·기한 변경 → flow_update_task. 프리뷰 → 적용 (mode=batch 또는 mode=subtask) 응답의 applied 를 먼저 본다. applied:true 면 이미 적용을 시도한 것이므로 created·failed 를 확인한다. 1. confirmToken 없이 호출 → 안 넣고 {applied:false, plan, confirmToken} 반환. 배치 plan 은 상태·커스텀 컬럼을 id로 해소한다. 하위 업무 plan 은 요청 내용과 상위 업무 ID이며 적용 성공 보장은 아니다. 2. 사용자 승인 후 받은 confirmToken 을 그대로 넣어 재호출 → 등록. - 입력이 바뀌면 토큰이 안 맞아 다시 프리뷰부터. 배치의 같은 토큰 재호출은 48시간 동안 저장된 결과를 돌려준다. - 하위 업무 토큰은 1회용이며 10분 후 만료된다. 사용자·기업·서비스와 입력에 묶이고, 적용 시도 전에 소진되어 실패 후에도 재사용할 수 없다. - 하위 업무는 preview:skip 으로 확인을 생략할 수 없다. 구 호출명 flow_create_subtask 도 토큰을 최상위에 넣어 같은 승인 절차를 따른다. - 첨부 단건 경로(mode=single)는 기존처럼 즉시 생성한다. 이미 생성된 요청을 다시 호출하지 않는다. 상태·커스텀 컬럼은 이름으로 - status:"검토중" · fields:{"분류":"개발"} 처럼 이름으로 주면 서버가 id 를 해소·검증한다. 별도 목록 조회가 필요 없고, 없는 이름이면 유효 목록과 함께 거부된다(잘못 들어가기 전에 차단). - 생성과 동시에 ID로 정확히 넣어야 하면 customColumns:[{columnId,value}] 를 쓴다. flow_get_project(include:["columns"])로 컬럼 ID와 OPTION/USER 값 ID를 먼저 확인한다. 단건만 가능하다. - ⚠️ 신규 업무는 기본이 대기(요청) — 시작 전이면 status 를 생략한다. 실제 착수한 것만 "진행". 안 시작한 일을 진행으로 넣으면 워크리스트·스탠드업 신호가 왜곡된다. - 우선순위는 사용자가 요청한 경우에만 priority 로 지정한다. 요청이 없으면 필드를 생략한다. 임의로 normal(보통)을 넣으면 우선순위를 지정하지 않은 업무까지 보통으로 기록된다. - 프로젝트가 자체 단계를 쓰면(예: "검토중") 어느 경로에서든 그 이름 그대로 주면 된다. 하위 업무·첨부 단건 경로는 생성 API 가 기본 5상태만 받으므로, 만든 뒤 그 상태로 옮긴다. 옮기기가 실패하면 업무는 남고 failed 에 사유가 적힌다 — 그때 업무는 대기 상태다. Examples - 한 건: { projectId:"2880254", tasks:[{ title:"기획안 검토", endDate:"20260610", priority:"high" }] } → plan + confirmToken 반환. 토큰을 다시 넣어 등록. - 여러 건: tasks:[{title:"A"},{title:"B",status:"진행"}] - 하위 업무: { projectId:"318821", parentTaskId:"319001", tasks:[{title:"API 문서 초안"}] } → 미리보기만 반환. 사용자 승인 후 같은 입력에 confirmToken을 추가해 1회 적용. - 요청 안에서 부모-자식: tasks:[{title:"부모",tempId:"p1"},{title:"자식",parentTempId:"p1"}] - 첨부: tasks:[{ title:"보고서", contents:"본문", status:"request", files:[{fileName:"a.pdf",fileContents:"<base64>"}] }] Common mistakes - parentTaskId 에 게시글 ID(postId)를 넣기 — 상위 업무 ID 다. 잘못 넣으면 412. - 첨부를 여러 건과 함께 주기 — 첨부 경로는 단건만 된다. 나눠서 호출한다. - 이미지 fileName 확장자는 실제 이미지 형식과 일치시킨다. - 첨부하면서 contents/status 를 빠뜨리기 — 그 경로는 둘 다 필수다. - 담당자 이름을 fields 에 넣기 — 담당자는 workers:[{workerId}] 다. userId 는 flow_find_employees 로 찾는다. - 실패분 재시도 시 성공분까지 다시 호출 — failed 의 것만 골라 넣는다(롤백 없음). Notes - 한 번에 최대 50건. 초과하면 나눠 호출한다. - 하위 업무 경로는 startDate/endDate/workers/첨부/fields 를 받지 않는다 — 주면 그 건만 failed 로 보고된다(조용히 버리지 않는다). - ⚠️ 본문의 `<단어>` 는 프리뷰 경로(mode=batch)에서 사라진다. 업스트림이 태그로 보고 지운다 — List<String> → List, <div>글</div> → 글. 오류도 경고도 없다(2026-08-09 실측). a < b · Map<K, V> · <open 처럼 태그로 안 보이는 것은 남는다. 하위 업무 경로는 평문이라 안 지운다. 살려야 하면 전각 꺾쇠(< >) 를 쓴다 — <(엔티티)는 디코드 후 지워져 더 나쁘고, 백틱도 못 막는다. - ⚠️ 프리뷰 plan 의 content 는 앞부분만 보여준다(실측 약 120자). 본문이 온전한지를 프리뷰로 판단하지 말 것 — 잘린 것은 표시일 뿐 저장은 전문이 들어간다. - ⚠️ 상위 업무 1건이 가질 수 있는 하위 업무는 50건까지다. 51번째부터 업스트림이 원인을 안 밝히는 오류만 돌려준다(재시도해도 같다) — 상위 업무를 나눠야 한다. 구성원 수만큼 하위 업무를 만드는 식이면 50을 넘기 쉽다. 넘을 것 같으면 계층을 포기하고 평면(1뎁스) + 커스텀 컬럼을 쓴다 — 하위 경로는 fields 를 못 받아 그룹을 컬럼으로 둘 수도 없으므로, 계층을 고른 순간 필터·집계를 함께 잃는다.
flow_create_todo
ChatGPTCreate a checklist (TODO list) in a Flow project. ⚠️ This tool creates a real TODO list. Confirm with the user before invoking. When to use 프로젝트에 TODO 리스트 생성 (다중 체크리스트 항목). Difference from flow_create_tasks task = 단일 업무 (상태/우선순위/담당자). todo = 체크리스트 (다중 항목). Common mistakes - todoList 1~50개 필수. - 항목별 contents 1~60자. - endDate 는 YYYYMMDD 8자리. - todoList 항목별 담당자는 자동으로 본인 (호출자) — 다른 사용자 지정 불가. Output {projectId, postId, taskId?, tinyUrl?} — 전 필드 optional. 정상 생성이면 projectId·postId 가 실려 온다(taskId 는 항상 없음). postId 가 비어 오면 생성 결과를 확인할 수 없는 상태다 — 성공으로 단정하지 말고 사용자에게 확인을 요청할 것. Examples - "출시 준비 체크리스트 만들어줘" → projectId, title:"출시 준비", todoList:[{contents:"QA"},{contents:"공지"}].
flow_create_view
ChatGPTCreate a saved custom view on a Flow project board. When to use 프로젝트 보드에 새 보기(화면·뷰) 를 추가한다. 어떤 컬럼을 어떤 순서로 볼지 구성하는 것. "…기준으로 보는 화면/보기 만들어줘" 류가 여기다. 컬럼 ID 는 flow_get_project(include:["columns"]) 로 확인. Do NOT use - 내 할 일을 정렬해서 보여주는 것 → flow_get_my_worklist. 그건 화면을 만드는 게 아니라 조회다. - 일정·업무를 조건으로 찾는 것 → flow_find_events / flow_query_tasks. - 이 도구는 보드 설정을 바꾸는 쓰기다 — 조회 의도라면 여기가 아니다. Notes - 쓰기 작업 — 보드에 새 뷰가 추가됨. (보드엔 기본 뷰가 이미 있어 선택적) - 섹션 그룹·필터는 현재 미지원(기본 그리드 뷰). Examples - { projectId:"...", name:"담당자별", columns:["<담당자 columnId>","<기한 columnId>"], treeMode:true }. Common mistakes - columns 는 컬럼 이름이 아니라 columnId — flow_get_project(include:["columns"]) 로 먼저 확인. - 보드엔 기본 뷰가 이미 있음 — 꼭 필요할 때만 추가.
flow_create_wiki_document
ChatGPTCreate a new document in the Flow wiki. ⚠️ This tool creates a real wiki document. Confirm with the user before invoking. When to use 공개(PUBLIC) 또는 개인(PRIVATE) 위키에 새 문서를 생성합니다. Input - folderType: "PUBLIC"(공개) 또는 "PRIVATE"(개인). 필수. - title: 문서 제목. 선택. - parentId: 부모 폴더/문서 ID. 미지정 시 루트에 생성. flow_find_wiki 응답의 nodes[].id 사용. - contentJson: ProseMirror/Tiptap 형식 초기 내용. 선택. Output 생성된 문서의 docId, folderType, title, parentId 반환.
flow_delete_event
ChatGPTDelete a Flow calendar event; for a recurring event you choose the scope. ⚠️ This tool permanently deletes a calendar event. Confirm with the user before invoking. When to use 캘린더 일정 삭제. eventSrno 필요. Common mistakes - 반복 일정은 repeatEditOption 으로 범위 지정: THIS(이 인스턴스만) / AFTER(이후 모두) / ALL(전체). - 반복 인스턴스 삭제 시 repeatInstanceId 동반 가능. 확인이 필요하다 (2단계) 1. confirmToken 없이 호출 → 아무것도 지우지 않고 {applied:false, plan, confirmToken} 반환. 2. plan.summary 를 사용자에게 그대로 보여주고 동의를 받는다. 3. 같은 인자에 받은 confirmToken 을 붙여 재호출 → 실행되고 {applied:true, result} 반환. 인자를 바꾸면 토큰이 무효다(다시 1번부터). 토큰은 10분·1회용. Examples - "12345 일정 삭제" → eventSrno:"12345". 반복 중 이 회차만 → repeatEditOption:"THIS".
flow_find_alarms
ChatGPTFind your own Flow notifications — the latest list, or filtered by period and keyword. When to use 내 알림을 보는 모든 경우 — 멘션 여부를 묻는 것도 여기다("나 멘션된 거 있어?"). 입력이 경로를 정한다: - 조건 없음 → 최신 알림 목록(커서 페이지네이션, source=list) - searchWord/dateFilter/searchTarget/limit → 조건 조회 (source=search) Do NOT use - 알림을 읽음 처리 → flow_mark_alarm_read. 본 도구는 조회 전용이다. - 마감 임박·지난 업무까지 함께 챙기려는 것 → flow_get_my_worklist. ★ 그 도구도 mentions 를 곁들여 주지만 최근 며칠치 부산물이다. 멘션·알림 자체를 묻는 질문은 여기다. Notes - mode:"UNREAD" 가 안 읽은 것만 거르는 축이고, alarmFilter 는 알림 종류 축이다(별개). - 여기서 얻은 alarmId 로 읽음 처리한다. Examples - "안 읽은 알림 뭐 있어?" → mode:"UNREAD". - "지난주 나를 멘션한 알림" → alarmFilter:["MENTION"], dateFilter:{startDate:"20260801"}.
flow_find_employees
ChatGPTFind people in your company directory — by name or department, the whole roster, or one person by id. When to use 회사 구성원(임직원)을 찾는 모든 경우. 이름·부서로 찾든, 전체 명단을 훑든, 한 사람의 상세를 보든 본 도구 하나다. 입력이 동작을 정한다: - userId → 그 사람 단건 (mode=single) - searchWord/divisionCode 등 조건 → 조건 검색 (mode=search) - 아무 조건 없음 → 회사 전체 명단 첫 페이지 (mode=all) Do NOT use - 부서(조직) 목록 자체 → flow_list_divisions. - 내 정보 → flow_get_my_profile. - 프로젝트에 사람을 추가/초대 → flow_add_project_participants (본 도구는 조회 전용). Notes - 담당자 지정·멘션에 필요한 userId 를 얻는 출발점이다. - 호칭·직책("대표님"·"팀장님")으로 찾으면 여러 명이 올 수 있다(직책 서브스트링 매칭: "대표" → 부대표·대표이사). employees[0] 을 고르지 말고 `bestMatch` 를 쓴다 — 서버가 이름 일치 > 직책 일치(대표→대표이사 > 부대표)로 정한다. - pageSize/cursor 로 페이징. hasNext=true 면 lastCursor 를 다음 cursor 로 전달한다. Privacy 전화번호는 반환하지 않는다. 이메일·부서·직책만. Examples - "김철수 어느 부서야?" → searchWord:"김철수" (userId 를 알면 userId). - "대표님이 쓴 글" → searchWord:"대표님" → bestMatch.userId 를 flow_search registerFilter.ids 에. - "마케팅팀에 누구 있어?" → divisionCode(flow_list_divisions 로 확보) 또는 searchWord:"마케팅". - "회사 전체 명단" → (인자 없음).
flow_find_events
ChatGPTFind Flow calendar events — by date range, by search word, or one event by id. When to use 일정을 찾는 모든 조회. 기간으로 훑든, 이름으로 찾든, 사람·프로젝트로 좁히든, 한 건의 상세(참석자·장소·반복)를 보든 본 도구 하나다. 입력이 동작을 정한다: - eventSrno → 그 일정 상세 (mode=single). 기간 불필요. - projectIds/userFilter/calendarFilter/dateFilter → 여러 일정 소스를 합쳐 조회 (mode=aggregate) - searchWord → 캘린더 이름 검색 (mode=search). 기간은 선택이며 생략하면 서버가 채운다. - 기간만 → 그 구간의 일정 목록 (mode=range) ⚠️ 수정·삭제에 쓸 수 있는 결과인지 확인한다 항목마다 editable/idKind 가 붙는다. - editable:true (idKind:"eventSrno") → flow_update_event / flow_delete_event 에 바로 쓴다. - editable:false (idKind:"postId") → 수정·삭제에 못 쓴다. 합산 경로가 프로젝트 일정 게시물·구독·반복 일정을 섞어 정규화한 결과라서다. 고쳐야 하면 searchWord+기간으로 다시 찾아 eventSrno 를 얻는다. Do NOT use - 캘린더 자체(내 캘린더 목록·기본 캘린더·구독) → flow_list_calendars. 여기는 캘린더가 아니라 그 안의 일정이다. - ★ 단 기간이 함께 언급되면 "캘린더" 라는 말이 나와도 여기다. 캘린더 목록에는 기간이 없으므로, 기간이 붙은 순간 묻는 대상은 일정이다. Notes - Aggregate filters use dateFilter for date boundaries. startDateTime/endDateTime cannot be combined with aggregate filters; exact time filtering is only supported by calendar query/search. - 시각은 timezone(기본 서버 존) 기준. 정확한 구간은 14자리 startDateTime/endDateTime 을 쓴다 — 8자리 dateFilter 는 백엔드 존의 하루 경계다. - timezone 이 적용되는 응답 시각은 일정 시작·종료, 등록 시각, 반복 종료뿐이다 — 화상회의(vcRecords)·알림(notifications) 시각은 백엔드 존 그대로다. - dateFilter 와 startDateTime/endDateTime 은 상호배타다. 둘 중 한 표현만 쓴다. - For my events, explicitly set userFilter:{type:"self"}. Use sortOrder:"asc" for chronological order. Use both absolute boundaries for a specified period, or startDate only for an after-date lookup. - Distinguish "within a period" from "after a date". A monthly count and the nearest event after a date can require different intervals. Do not reuse the count interval as an implied upper boundary for the nearest event. - To find the nearest event after a reference date, use dateFilter:{type:"absolute",startDate:"reference date YYYYMMDD"}, userFilter:{type:"self"} when asking about my events, and sortOrder:"asc". Use the first returned event and express its time relative to the reference date. If empty, extend the horizon or clearly report searchedRange; never conclude that no later event exists outside it. - For a count and nearest event explicitly within the same period, one query suffices. Check searchedRange before drawing conclusions from zero results. - userFilter:{type:"none"} 과 calendarFilter:{calendarType:"ALL"} 은 필터 생략과 같으며 searchWord 검색을 막지 않는다. - "이번 주" 같은 상대 기간은 dateFilter:{type:"relative",value:"CURRENT_WEEK"} 를 쓴다. With searchWord, use absolute dateFilter or 14-digit startDateTime/endDateTime. Either boundary may be omitted; searchedRange reports the bounded interval actually searched. - 프로젝트 안에서 이름으로 찾고 싶으면 searchWord 로 찾은 뒤 결과를 보거나, projectIds 로 기간 조회(mode=aggregate)를 한다. 둘을 한 번에 주면 검색어가 적용되지 않아 거부한다. - eventSrno·합산 조건이 모두 없으면 start/endDateTime 이 필수다. - 이름을 아는데 기간이 애매하면 넉넉한 구간 + searchWord 가 기간만 훑는 것보다 낫다. - aggregate의 truncated:true는 다음 cursor가 없다는 뜻이다. 같은 호출을 반복하지 말고 필터나 limit을 좁힌다. Examples - "오늘 일정 뭐 있어?" → 오늘 00:00:00~23:59:59 (mode=range). - "킥오프 미팅 언제였지?" → searchWord:"킥오프" + 넉넉한 기간 (mode=search). - "그 회의 누가 와?" → eventSrno (mode=single). - "두둠칫 프로젝트 이번 주 일정" → projectIds:["…"], dateFilter:{type:"relative",value:"CURRENT_WEEK"}. - "지정 기간의 내 일정 날짜순" → userFilter:{type:"self"}, dateFilter:{type:"absolute",startDate:"period start YYYYMMDD",endDate:"period end YYYYMMDD"}, sortOrder:"asc". - "김과장 오늘 일정" → userFilter:{type:"named",names:["김과장"]}, dateFilter:{type:"relative",value:"TODAY"}.
flow_find_projects
ChatGPTFind the Flow projects you participate in — the full list, or by keyword search. When to use 프로젝트(공간)를 찾는 모든 경우. projectId 를 얻는 출발점이다. - keywords → 이름으로 검색 (mode=search) - 인자 없음 → 내가 참여 중인 프로젝트 전체 목록 (mode=all) Do NOT use - 공간 안의 글·업무를 키워드로 찾는 것 → flow_search. - 한 프로젝트 안의 항목을 키워드 없이 훑는 것 → flow_list_project_items. - 이미 projectId 를 알고 상세를 보는 것 → flow_get_project. Notes - mode=all 은 lastCursor(숫자), mode=search 는 nextCursor(문자열)로 페이징한다. - 타인이 참여한 프로젝트는 조회할 수 없다(공동 멤버십 추론 차단). 요청받으면 불가하다고 답한다. Examples - "내 프로젝트 목록 보여줘" → (인자 없음). - "마케팅 프로젝트 찾아줘" → keywords:["마케팅"].
flow_find_wiki
ChatGPTFind documents and folders in the Flow wiki — browse the tree or search by keyword. When to use 위키에서 폴더·문서를 찾는 모든 경우. 입력이 경로를 정한다: ★ 발화에 위키를 가리키는 단서가 있어야 한다 — "위키/문서/페이지/가이드/정책" 같은 말. 단서 없이 주제어만 있으면(그 주제가 문서로 있을 법해도) 여기가 아닐 가능성이 높다. - 키워드를 안다 → keywords (mode=search) - 특정 폴더 안을 본다 → parentId (mode=children) - 단서가 없고 위키 전체 구조가 궁금 → 입력 없음 (mode=root) Do NOT use - 프로젝트(공간·보드) 자체를 찾는 것 → flow_find_projects. 위키 문서와 프로젝트는 이름이 겹치기 쉽다 — 찾는 대상이 문서가 아니라 공간이면 그쪽이다. - 문서 본문을 읽을 때 → flow_get_wiki_document. 여기서는 제목·ID 만 나온다. - 업무·게시글·일정 검색 → flow_search. 본 도구는 위키 전용이다. Notes - 여기서 얻은 nodes[].id 가 flow_get_wiki_document / flow_update_wiki 의 docId 다. - 검색 결과의 hasMore:true면 nextPage를 그대로 다음 호출의 page로 사용한다. Examples - "위키에 뭐 있어?" → 입력 없음. - "위키에서 온보딩 찾아줘" → keywords:"온보딩". - "이 폴더 안에 뭐 있어?" → parentId:<앞서 얻은 id>.
flow_get_my_activity
ChatGPTRead what you actually did in Flow over a date range — completed tasks, posts, comments and more. When to use 지난 기간에 내가 한 일이 필요할 때. 업무일지·주간보고·회고·1on1 준비. - "어제 뭐 했지" · "이번 주 한 일 정리해줘" · "8월 첫째 주 회고 쓰게 자료 뽑아줘" Do NOT use - 앞으로 할 일(마감 임박·지연·멘션) → flow_get_my_worklist. 시제가 반대다. - 특정 글·업무를 키워드로 찾기 → flow_search. Output 문장이 아니라 활동 행을 준다 — 일지 문장은 호출자가 쓴다. - type: completed_task(완료) · started_task(시작) · created_task(내가 만들고 내가 맡음) · requested_task(만들어 남에게 요청, assignees 에 이름) · post(쓴 글) · comment(단 댓글) · confirmed_task(내 담당 아닌 업무를 완료 확인) - at 은 시각(YYYYMMDDHHmmss)이라 시간순으로 이야기를 만들 수 있다. - excerpt 는 글·댓글 본문 앞 100자. 업무 활동은 비어 있다. - counts 로 "완료 5건, 댓글 12건" 같은 요약이 바로 나온다. Notes - 범위는 내가 참여한 프로젝트로 한정된다. - 기간은 최대 31일. 넘으면 거부된다 — 참여 프로젝트 전체를 훑는 조회라 넓으면 느리다. - 항목은 at 오름차순이다. 기간이 넓을 때 (주·월) 한 달치는 수백 건이고 항목마다 제목·발췌·링크가 붙는다 — 그대로 받으면 응답이 아주 커진다. - 세기만 할 때 → format:"counts". 항목을 안 싣고 limit 도 안 걸어 잘린 숫자가 안 나온다. - 일부만 필요할 때 → types:["completed_task"] 처럼 좁힌다. 서버에서 거른다. - 기간 상한은 31일이다. 분기·연간이 필요하면 달 단위로 나눠 부른다. 잘렸을 때 (truncated:true) 마지막 항목의 `at` 을 그대로 `start` 로 넣어 다시 부른다. 그게 이어받기다. - 날짜만으로 다시 부르면 같은 날에 몰린 경우 같은 자리를 맴돈다 — 초까지 넣어야 진행한다. - 경계의 1건이 두 번 나올 수 있다(at 이 포함이라). postId+type 으로 중복을 지운다. Examples - "어제 한 일" → { start:"20260808", end:"20260808" } - "이번 주" → { start:"20260803", end:"20260809" } - "지난달 몇 건 했지" → { start:"20260701", end:"20260731", format:"counts" } - "지난주에 끝낸 것만" → { start:"20260727", end:"20260802", types:["completed_task"] } - 이어받기 → 앞 응답의 마지막 at:"20260805143000" 이면 { start:"20260805143000", end:"20260807" }
flow_get_my_profile
ChatGPTRead your own name, department and job title in Flow. When to use API Key 소유자 본인의 구성원 정보(이름/부서/직책/이메일) 조회. "내 정보", "나 누구로 보여" 등. Privacy 전화번호는 반환하지 않음. Output userId, fullname, divisionCode, divisionName, responsibility, email. email 은 미등록이면 null 일 수 있음. Examples - "나 어느 부서야?" → (인자 없음). Notes - 인자 불필요(본인 고정). 타인 정보는 flow_find_employees.
flow_get_my_worklist
ChatGPTShow what you need to handle now in Flow — due soon, overdue, and mentions — ranked. When to use 내가 지금 챙길 일. rank 가 동작을 정한다: - 생략/false → 마감 임박·지난 업무·멘션을 나열 (mode=list) - rank: true → 점수·이유를 매겨 상위 N개만 (mode=focus). "뭐부터 할까"·"우선순위 잡아줘". Do NOT use - 멘션·알림 자체를 묻는 것("나 멘션된 거 있어?", "안 읽은 알림") → flow_find_alarms. 여기의 mentions 는 "지금 챙길 일" 을 판단하려고 곁들이는 최근 며칠치 부산물이다. - 특정 프로젝트 안의 업무·글 목록("여기 업무 뭐뭐 있어") → flow_list_project_items. 본 도구는 프로젝트를 가리지 않고 내 담당만 모은다. - 부서·팀원 현황 → flow_get_team_standup. "내가 지금 챙겨야 할 게 뭐야?" — 인증 사용자(본인) 기준으로 마감 임박/지난 업무 + 나를 멘션한 글을 한 번에. 데일리 스탠드업·업무 시작 시 개인 액션 점검용. Output - overdueActive: 마감 지났고 최근 활동 중인 = 진짜 밀리는 업무 (오래 방치된 좀비는 counts.overdueStale 로 카운트만) - imminent: 오늘~+N일 마감 임박 - mentions: 최근 나를 멘션한 글/댓글 - text: 위를 합친 마크다운 요약 (format=structured 면 생략, 배열만) - coverage (rank=true 일 때): truncated 면 배정이 너무 많아 생성 순 최신 `assignmentBudget` 건만 봤다는 뜻이다. 그 밖의 오래된 업무는 candidateCount·picks 에서 빠져 있다. format=structured 는 text 가 비어 있어 이 필드가 유일한 신호다. Notes - 대상은 기본 본인(인증). userId 로 같은 회사 내 타인 워크리스트도 조회 가능. - 담당(worker) 기준 + 공개(range_type=A) 업무만. 진행률 100% 제외. - 커스텀 상태로만 완료 처리된 일부 업무는 base 상태(대기/진행) 기준이라 드물게 섞일 수 있음. - 부서/프로젝트 단위 현황은 flow_collect_dept_chain / flow_collect_project_chain 을 쓴다. Examples - "나 지금 뭐 챙겨야 해?" → (인자 없음). 타인 → userId 지정. 배열만 필요하면 format:"structured".
flow_get_post
ChatGPTRead one Flow post in full — body, mentions, images and author details. When to use 특정 게시글(postId)의 상세. 본문(outContent, 평문/마크다운) + 멘션·이미지 추출 메타 + 작성자(userId·이름)·작성일시 + 첨부/할일/일정/업무/투표 원본. 게시글 ID 를 알 때. Output notes - 본문은 outContent(읽기용 평문/마크다운) 사용. 표가 포함된 글은 content(원본 JSON)도 함께 제공. - mentions: 본문에 멘션된 사용자 [{userId, name}]. images: 본문 내 이미지 [{url, fileName}]. 첨부 파일·이미지 - attachments(문서)·imageAttachments(이미지)는 목록이다. 문서의 attachUrl 은 세션이 있어야 열려 null 로 온다 — 열려고 하지 말 것. - 내용이 필요하면 includeAttachmentText:true 로 부른다. attachmentTexts[] 에 파일별 text 가 온다 (문서는 본문 텍스트, 이미지는 안에 적힌 글자·표). 못 읽은 것은 status·reason(too_large·too_many_files·timeout)으로 온다. - 글 본문 첨부만 읽는다. 댓글 첨부는 목록만 온다. Notes - 검색(flow_search)의 type:"post" 결과나 프로젝트 글 목록에서 얻은 postId 로 호출. 한 건씩 읽는 도구다. - type:"chat" 결과의 chatId·roomChatSrno는 채팅 메시지 식별자다. 이 도구에 넘기지 말고 검색 결과의 message를 사용. 목록을 이미 받았다면 flow_list_project_items 응답에는 `content`(원문)·`htmlContent` 가 이미 들어 있다. 내용을 알기 위해서라면 목록의 글을 이 도구로 다시 열 필요는 없다. 이 도구가 더 주는 것은 읽기용으로 정규화된 outContent, 멘션·이미지 메타, 첨부/할일/일정/업무/투표 원본이다 — 그게 필요할 때만 쓴다. Do NOT loop 목록에서 얻은 postId 를 전건 순회하지 않는다. 프로젝트의 글·업무·댓글을 한 번에 읽어야 하면 flow_collect_project_chain 을 쓴다 — 한 번의 호출로 끝난다. (실측: 이 도구를 1분에 1,556회 부른 계정이 있었고, 상류 호출량 제한으로 전량 실패했다) Examples - "그 공지글 내용 보여줘" → postId:"78543642" (flow_search/flow_list_project_items 로 확보).
flow_get_project
ChatGPTRead one Flow project — optionally with its participants, columns and status options. When to use 한 프로젝트에 대한 조회. 기본은 제목/설명/참여자수/공개여부/등록자. include 로 필요한 부분만 덧붙인다: - participants — 참여자 명단(userId). 담당자 지정·멘션 전에 필요. - columns — 관리 항목(컬럼) 구성. "이 보드 컬럼 뭐 있어". - statuses — 업무 상태 선택지(대기/진행/완료 등). Do NOT use - 프로젝트를 찾는 것 → flow_find_projects. 여기는 projectId 를 이미 아는 경우다. - 프로젝트 안의 업무·글 목록 → flow_list_project_items. Notes - 참여자 수만 필요하면 include 없이 호출한다 — participantCount 가 기본 응답에 있다. - include 를 켜지 않으면 추가 API 호출도 하지 않는다(응답이 커지지 않는다). Examples - "이 프로젝트 정보 보여줘" → projectId:"2910862". - "이 프로젝트 멤버 누구야?" → include:["participants"]. - "업무 상태 어떤 거 고를 수 있어?" → include:["statuses"].
flow_get_team_standup
ChatGPTRead your team's current work in Flow — what each member has due and what is stuck. When to use 부서원 각자가 "오늘 할 것(마감 임박) + 막힌 것(마감 지남·최근 활동)"을 한 화면에. 데일리 스탠드업·주간 점검 시 팀 현황을 사람별로 자동 브리핑 (수기 입력 불필요). - "스탠드업" · "팀 현황" · "누가 뭐 하고 있나" 는 전부 여기다. 부서명만 주면 된다. Do NOT use - 스탠드업 글을 써 주거나 올리는 것 → 이 도구는 조회 전용이다. 작성은 flow_create_post. ("스탠드업" 은 읽기 요청으로 읽는다 — 팀의 현재 상태를 가져오는 것이지 문구를 짓는 게 아니다.) - 한 사람의 일만 → flow_get_my_worklist. 프로젝트 단위 서사 → flow_collect_dept_chain. Output - members[]: 각 멤버의 imminent(오늘~+N 마감) + blocked(지났고 최근 활동 중) 업무 리스트 - 오래 방치된 overdue(좀비)는 staleCount 로만 (액션 리스트 오염 방지) - text: 멤버별 스탠드업 마크다운 (format=structured 면 배열만) - truncatedMembers: 배정이 너무 많아 생성 순 최신 일부만 본 멤버 이름. 그 멤버의 지난·방치 업무는 실제보다 적을 수 있다. format=structured 는 text 가 비어 있어 이 필드가 유일한 신호다. Notes - 담당(worker) 기준 + 진행률 100% 제외. companyId 는 AuthContext. - "어제 완료한 일"은 미포함 — base 상태(완료=2)가 커스텀상태 완료를 과소집계하고 성능 부담이라 제외. 포워드(임박/막힘) 중심. - 특정 개인은 flow_get_my_worklist, 프로젝트 서사는 flow_collect_dept_chain. Examples - "우리 팀 오늘 현황" → dept:"AI사업개발실". 배열만 → format:"structured".
flow_get_wiki_document
ChatGPTRead the contents of one Flow wiki document. When to use 위키 문서의 전체 내용(contentJson)을 조회합니다. Input docId: 위키 문서 ID (flow_find_wiki 응답의 nodes[].id). Output contentJson: ProseMirror/Tiptap 형식의 문서 JSON. raw 객체 그대로 반환됩니다.
flow_list_calendars
ChatGPTList the Flow calendars you can access and your default one; with a search word, list calendars you could subscribe to. When to use 캘린더 자체에 대한 조회. 입력이 동작을 정한다: - 인자 없음 → 내가 접근 가능한 캘린더 + 기본 캘린더 ID (mode=mine) - searchWord → 아직 구독하지 않은, 구독 가능한 캘린더 검색 (mode=subscribable) Do NOT use - 캘린더 안의 일정을 찾는 것 → flow_find_events. - ★ 기간이 언급되면 여기가 아니다. 캘린더 목록에는 기간 개념이 자체가 없다 — "이번 주/이번 달/오늘" 같은 말이 붙으면 그건 캘린더가 아니라 그 안의 일정을 묻는 것이다. 사용자가 "캘린더 보여줘" 라고 말해도 마찬가지다. Output - mode=mine: editableCalendars / viewOnlyCalendars / projectCalendars + defaultCalendarId + calendarSrno - mode=subscribable: subscribableCalendars (커서 페이지네이션) Notes - "일정은 어느 캘린더에 들어가?" 는 인자 없이 호출해 defaultCalendarId 를 본다. - 일정 쓰기로 이어갈 때는 같은 값을 담은 calendarSrno 를 그대로 전달한다. - 일정 생성은 editableCalendars 의 calendarSrno 만 가능(viewOnly 불가). Examples - "내 캘린더 뭐뭐 있어?" → (인자 없음). - "영업팀 공유 캘린더 찾아줘" → searchWord:"영업".
flow_list_divisions
ChatGPTList your company's department (organization) structure in Flow. When to use 회사 부서(divisionCode, divisionName, 상위부서) 목록 조회. Examples - "우리 회사 부서 뭐 있어?" → (인자 없음). Notes - 인자 불필요. 여기서 얻은 divisionCode 는 flow_find_employees 의 부서 필터에 사용.
flow_list_project_items
ChatGPTList the items in a Flow project — posts, tasks, schedules, todos and votes. When to use 프로젝트 안을 통째로 훑을 때. 예: "그 프로젝트 업무 전부 보여줘", 최근 순으로 쭉 확인. templateType 으로 대상 타입 지정. 응답에 본문이 함께 온다 각 항목은 제목·ID 만이 아니라 `content`(원문) 와 htmlContent, 그리고 remarkCount·taskStatus· 작성자·일시까지 담아 준다. 내용을 알기 위해 목록의 글을 하나씩 다시 열 필요는 없다. flow_get_post 를 추가로 부를 이유는 이 셋뿐이다 — - 읽기용으로 정규화된 평문/마크다운(outContent) 이 필요할 때(목록은 원문 그대로 준다) - 멘션·이미지 메타가 필요할 때 - 첨부/할일/일정/업무/투표 원본이 필요할 때 댓글은 목록에 없다. 댓글이 필요하면 flow_list_comments 를 쓴다(글은 다시 안 열어도 된다). Do NOT use - 찾는 항목의 제목·키워드를 아는 경우 → flow_search (+ projectIds 로 그 프로젝트 한정). 목록은 수백 건이 나와 요약 과정에서 정답이 밀려난다. - postId/taskId 한두 건만 아는 경우 → flow_get_post 등 단건 조회. - 하위 업무 목록 → flow_collect_project_chain(postId). 이 도구는 상위 업무만 돌려준다. Do NOT loop 이 도구의 결과 전건을 flow_get_post 로 하나씩 여는 것은 본문을 두 번 받는 낭비다(위 참고). 프로젝트의 글·업무·댓글을 한 번에 읽어야 하면 flow_collect_project_chain 을 쓴다. (실측: 한 계정이 이 패턴으로 1분에 flow_get_post 를 1,556회 불러 전량 실패했고, 같은 계정의 단건 조회 2.2만 회는 목록이 이미 준 본문을 다시 받은 것이었다) Difference from flow_search 입력 조건으로 갈린다 — 키워드를 알면 search, 단서 없이 전량이 필요하면 이 도구. Filters & Pagination - postId 로 단건 조회. hasNext=true 이면 lastCursor 를 다음 호출 cursor 로 전달. - 결과가 없으면 posts:[] · hasNext:false · lastCursor:-1 이다. - ⚠️ 하위 업무는 목록에 안 나온다(상위 업무만). 그래서 하위 업무의 postId 를 주면 posts:[] 다 — 없는 것이 아니라 이 목록의 대상이 아닌 것이다. 상·하위 트리는 flow_collect_project_chain(postId). Examples - "이 프로젝트 업무 목록" → projectId:"2910862", templateType:"task". 글 목록 → templateType:"post".
flow_mark_alarm_read
ChatGPTMark one of your Flow notifications as read. When to use 알림을 읽음 처리한다. 한 건이든 전부든 본 도구다: - alarmId → 그 알림 한 건 (scope=one) - all: true → 전체. projectId 를 주면 그 프로젝트 알림만 (scope=all) Do NOT use - 알림 목록을 보여달라는 요청 → flow_find_alarms. 본 도구는 상태를 바꾼다. Notes - "읽음 처리해줘" 뿐 아니라 "확인했어"·"봤어"·"처리했어" 처럼 완료를 선언하는 표현도 본 도구. - alarmId 는 flow_find_alarms 응답의 alarmId(숫자 문자열). 이미 읽은 알림 재호출은 무해(idempotent). Examples - "그 알림 읽음 처리" → alarmId:"1234567". - "알림 다 읽음으로 해줘" → all:true.
flow_query_tasks
ChatGPTFilter Flow tasks by status, assignee and due date. When to use 상태·우선순위·담당자·날짜를 조합해 업무를 조회. 프로젝트명만 알면 flow_find_projects로 ID를 먼저 찾은 뒤 projectIds에 전달. Difference from flow_list_project_items list_project_items는 프로젝트 한 곳의 단순 목록. 이 도구는 여러 프로젝트와 복합 조건 조회. Examples - "두둠칫 프로젝트의 진행중 업무" → flow_find_projects → projectIds:[검색된 projectId], statuses:["IN_PROGRESS"] - "내 지연 업무" → assigneeFilter:{type:"self"}, dateFilter:{type:"relative",value:"DELAY",target:"END_DT"} - "지정 기간에 마감인 내 활성 업무" → assigneeFilter:{type:"self"}, statuses:["NOT_STARTED","IN_PROGRESS"], dateFilter:{type:"absolute",startDate:"period start",endDate:"period end",target:"END_DT"}. Replace dates with actual YYYYMMDD values. - "특정 날짜 기준 이미 기한이 지난 내 활성 업무" → statuses:["NOT_STARTED","IN_PROGRESS"], assigneeFilter:{type:"self"}, dateFilter:{type:"absolute",endDate:"day before cutoff YYYYMMDD",target:"END_DT"}. Omit startDate. - "김과장이 만든 긴급 업무" → assigneeFilter:{type:"named",names:["김과장"],role:"author"}, priority:["URGENT"] Notes - Dates use YYYYMMDD with inclusive boundaries. DELAY means currently overdue tasks, not a historical cutoff. Query each requested period separately when comparing periods. - Statuses are current task statuses. Historical status or completion dates cannot be reconstructed. - 프로젝트를 이름으로 지정했으면 전체 목록을 가져오지 말고 flow_find_projects를 사용. - hasMore:true면 nextPage를 page로 넣어 다음 묶음을 조회. 모든 업무를 확인할 때 반복한다. - coverageStatus:PARTIAL means only part of the data was queried. Do not report totalCount as the overall count. - progress·status는 응답 원문을 유지하며, 값이 없는 업무는 해당 필드가 없다. - 프로젝트 자체 단계(검토/보류 …)로 거르려면 flow_get_project(include:["statuses"]) 로 id 를 얻어 statusOptionIds 에 넣는다. 결과의 statusId 가 같은 값이다.
flow_search
ChatGPTSearch across Flow — posts, tasks, schedules, todos, votes and drive files. When to use Flow 콘텐츠를 키워드로 검색. 게시물 종류는 templateType, 댓글·파일·채팅·RAG는 sources로 지정. - all=전체(기본) — 글·업무·일정을 모두 찾는다. post=일반 글만(업무·일정 제외), task=업무, schedule=일정, todo=할일, vote=투표. - 사용자가 "글"·"게시물"·"게시글"이라고만 하면 업무·일정일 수 있으니 all. 종류를 명시했을 때(업무·일정 등)만 좁힌다. - sources: post/comment/file/chat/chat_file/integrated/rag/drive. 생략하면 기본 게시물 검색. 파일을 찾을 때 — file 과 drive 는 다른 것을 본다 - sources:["file"] = 게시글에 첨부된 파일. 글·댓글과 함께 훑을 때. - sources:["drive"] = 파일 저장소. 내 드라이브 + (driveScope:"all" 이면) 협업방 파일함·글첨부. ★ 여기만 파일 본문까지 검색한다. "그 자료 어디 있더라" 는 이쪽이다. - drive 는 백엔드가 달라 다른 소스와 같이 못 쓴다(단독). 둘 다 필요하면 두 번 호출. - drive 는 페이지네이션이 없고 최대 50건이다. 커서를 찾지 말 것. Difference from flow_find_projects 본 도구는 게시물(콘텐츠) 검색. 프로젝트(공간) 자체 검색은 flow_find_projects. Pagination 응답 pagination.hasNext 가 true 이면 nextCursor 를 다음 호출의 nextCursor 로 전달. 사람·공간·기간 (flow-ai 내장 검색과 같은 해석 규칙) - 사람은 말한 그대로 personName 에("대표님"·"김과장"·"June Lee"). 서버가 호칭을 떼고 직책까지 대조해 한 명으로 푼다 (대표→대표이사, 부대표 아님). flow_find_employees 를 먼저 부르지 않는다. "내가/나의"는 registerFilter.includeSelf:true. personRole: 쓴/올린=author(기본), 담당/맡은=assignee. 작성자 필터를 걸면 그 사람 이름·호칭은 keywords 에서 뺀다. - 공간은 spaceName 에("<이름> 방/프로젝트/보드에서"). flow 의 "방"은 프로젝트 공간이기도 하다 — 채팅만 뒤지지 않는다. - 기간은 사용자가 말한 것만. 없으면 dateFilter 생략(SCORE). 계절·행사어(신년·연말·워크샵)는 작성일이 앞뒤로 퍼지니 좁히려면 넉넉히 — 신년/신년사 = 전년 12/1~당해 2/28. - 주제어가 없으면("대표님이 최근 쓴 글") keywords:[] + personName — 서버가 범용 검색어로 채운다. 0건·빗나감일 때 (서버는 재시도하지 않는다 — 한 번에 한 축만 바꿔 다시 부른다) 1. 키워드: 결과 제목에 실제로 쓰인 말로 바꾼다(동의어·상위어 하나). 작성자 필터가 있으면 사람 토큰은 절대 키워드에 넣지 않는다. 2. 기간: 추측해 좁힌 기간을 넓히거나 뺀다(사용자 명시 기간은 유지). 3. 사람 필터: 두 번째 재시도부터 personName/registerFilter 를 빼고 다른 사람이 쓴 관련 글도 본다. 4. 정렬: SCORE↔LATEST 를 바꾼다 — 같은 키워드라도 상위 N건이 통째로 달라진다. 5. quality 를 읽는다: unresolved=["personName"] 은 그 이름이 없다는 뜻(다른 이름), lookupFailed 는 조회 장애(이름을 바꿔도 소용없음), orderType 은 실제 적용 정렬. Examples - "결제 관련 업무 검색" → keywords:["결제"], templateType:"task". 타입 모르면 templateType:"all". - "대표님이 신년에 강조하신 키워드" → keywords:["신년"], personName:"대표님", dateFilter:{startDate:"20251201",endDate:"20260228"} (오늘이 2026년일 때). - "두둠칫 QA 방에서 결제 오류 재현 절차" → keywords:["결제","오류"], spaceName:"두둠칫 QA". - "장애 관련 댓글과 파일" → keywords:["장애"], sources:["comment","file"]. - "이 프로젝트 자료를 의미 기반 검색" → projectIds:["..."], keywords:["..."], sources:["rag"]. - "작년 보고서 파일 어디 있지?" → keywords:["보고서"], sources:["drive"], driveScope:"all". Notes - 프로젝트 이름만 알면 flow_find_projects로 projectId를 먼저 찾는다. - type:"chat" 결과의 chatId는 게시글 postId가 아님. data.message로 바로 답변하고 flow_get_post에 넘기지 않는다. - sources 확장 검색은 cursor 페이지네이션을 제공하지 않는다. - sources 확장 검색과 personName·spaceName 검색은 registerFilter·projectIds·dateFilter·orderType·size를 지원한다. workerFilter·participantFilter·nextCursor와 함께 쓰지 않는다. - 빈 keywords 검색(사람·기간만)은 projectIds 를 무시한다 — 함께 보내면 거절된다. 프로젝트의 업무를 기간으로 보려면 flow_query_tasks(projectIds+dateFilter), 게시글 목록은 flow_list_project_items. - 그 경로에서 templateType 은 적용되지 않는다 — 주더라도 거절하지 않고 응답 ignoredInputs:["templateType"] 로 알린다. 타입으로 좁히려면 sources 없이 다시 부른다. - drive 는 위 필터를 전부 무시하고 keywords·driveScope·size(≤50)만 본다.
flow_set_statuses
ChatGPTDefine or replace a Flow project's status options (workflow stages). When to use 프로젝트 보드가 쓸 상태 목록 자체를 정의·교체한다. "이 보드의 진행 단계를 A/B/C 로" 처럼 선택지 집합을 바꾸는 것이지, 어느 한 업무를 다른 상태로 옮기는 게 아니다. Do NOT use - 업무 하나의 상태를 바꾸는 것 → flow_update_task. 가장 흔한 혼동이다. 구분법: 대상이 보드(선택지 목록)면 여기, 대상이 업무 한 건이면 그쪽이다. Notes - 쓰기 작업 — 보드의 상태 컬럼 옵션이 주어진 목록으로 구성됨. - 프로젝트 관리자만 바꿀 수 있다. 참여자로만 들어가 있으면 거부된다(권한 거부 (403)). ⚠️ 아래 2단계의 미리보기는 통과하고 적용에서 막힌다 — plan 은 우리가 만들고 권한 검사는 실제 적용에서만 돈다. 될 것처럼 보인 뒤 거절되면 이것이다. - category 로 대기/진행/완료/보류 성격 지정(색은 자동). Examples - { projectId:"...", statuses:[{name:"대기",category:"request"},{name:"검토중",category:"progress"}, {name:"완료",category:"complete"}] }. 확인이 필요하다 (2단계) 1. confirmToken 없이 호출 → 아무것도 바꾸지 않고 {applied:false, plan, confirmToken} 반환. plan 에 사라지는 단계와 그 단계에 걸린 업무 수가 적혀 있다 — 그대로 사용자에게 보여준다. ⚠️ 이 도구는 업무를 옮기지 않는다. 사라지는 단계에 업무가 있으면 교체 후 그 업무들이 어느 단계에도 안 붙는다 — flow_update_task 의 taskIds 로 새 단계에 배정할 것. 2. 동의를 받으면 같은 인자에 받은 confirmToken 을 붙여 재호출 → {applied:true, result}. 인자를 바꾸거나 그 사이 단계가 변하면 토큰이 무효다(다시 1번부터). 토큰은 10분·1회용. Common mistakes - 전체 목록을 줘야 함(set=교체). 한 개만 주면 나머지 상태가 사라질 수 있음 → 원하는 전체를 나열. - category 빠뜨림 — request/progress/complete/hold 중 하나 필수.
flow_update_column
ChatGPTRename a custom column on a Flow project board or change its type. ⚠️ This tool modifies a real project column. Confirm with the user before invoking. When to use 기존 커스텀 컬럼의 이름·유형·설명 변경. 컬럼 추가는 flow_create_column. ⚠️ 부분 수정이 아니다 - 서버가 columnType·columnName 을 매번 요구한다. 설명만 바꿀 때도 현재 유형/이름을 같이 보낼 것. - columnDescription 을 생략하면 기존 설명이 지워진다. 유지하려면 현재 값을 그대로 실어야 한다. - 따라서 flow_get_project(include:["columns"]) 로 현재 값을 먼저 읽고 바꿀 필드만 교체해 보낸다. Inputs - columnId 는 flow_get_project(include:["columns"]) 응답의 columnId 값을 그대로 쓴다. - 상태 컬럼(기본 제공)은 이 도구로 수정할 수 없다 — columnType 이 지원 목록 밖이라 거부된다. Result 응답은 보낸 입력을 그대로 되돌려주는 형태라 반영을 보장하지 않는다. 확인이 필요하면 flow_get_project(include:["columns"]) 로 재조회할 것. Examples - "고객사 컬럼 이름을 거래처로" → flow_get_project(include:["columns"]) 로 columnId/유형/설명 확보 후 { projectId, columnId, columnType:"TEXT", columnName:"거래처", columnDescription:"<기존 설명>" }.
flow_update_event
ChatGPTChange the time, contents or attendees of an existing Flow calendar event. ⚠️ This tool modifies an existing calendar event. Confirm with the user before invoking. When to use 기존 일정의 시간/내용/참석자/반복 수정. Common mistakes - 반복 일정 수정 시 repeatEditOption 필수: THIS (이 인스턴스만) / AFTER (이후 모두) / ALL (전체). - 필수 필드 (eventStartTimestamp, eventFinishTimestamp, allDayYn, gmtTime, publicYn, publicNameYn) 매번 전달. - gmtTime 예: "GMT+09:00" (서버가 GMT 접두어 형태를 요구; "+09:00" 으로 줘도 내부 보정). Examples - "그 회의 4시로 미뤄줘" → eventSrno(flow_find_events 로 확보) + eventStartTimestamp/eventFinishTimestamp 변경, 필수 필드 동반.
flow_update_task
ChatGPTChange a Flow task's status, assignees, priority, start date or due date. ⚠️ This tool modifies a real task. Confirm with the user before invoking. When to use 기존 업무의 상태/우선순위/담당자/시작일/종료일/커스텀 컬럼값 변경. 여러 필드를 한 번에 지정 가능. - 대상이 한 건이면 taskId. - 대상이 여럿인데 바꿀 값은 같다면 taskIds (최대 50건). 상태 일괄 이동이 대표 용례다. ⚠️ 업무마다 이 도구를 반복 호출하지 말 것 — 중간에 끊기면 절반만 바뀐 보드가 남는다. Behavior - 지정한 필드만 변경(미지정 필드 유지). 최소 1개 필드 필수. - taskId 와 taskIds 는 둘 중 하나만. 둘 다 주면 거부한다. - 응답 모양이 대상 수에 따라 갈린다: 단건은 {updated, failed}, 복수는 {results:[{taskId, updated, failed}], summary:{total, ok, failed}}. - 복수는 순차 적용한다. 한 건이 실패해도 나머지는 계속하며, 실패한 건만 results 에서 골라 재시도하면 된다(성공분을 다시 밟으면 TASK_STATUS_DUPLICATE_ERROR 가 난다). - ⚠️ workers 는 전체 교체다. 배열에 없는 기존 담당자는 삭제된다(서버가 전원 삭제 후 재등록). "담당자 추가" 요청이면 기존 담당자를 먼저 조회해 함께 넣을 것 — 새 사람만 보내면 나머지가 사라진다. - 커스텀 상태로 바꿀 때는 `statusOptionSrno` — 프로젝트가 flow_set_statuses 로 자체 단계를 쓰면 base 5상태(request/progress/…)로는 그 단계로 못 옮긴다. ID 는 flow_get_project(include:["statuses"]). - 커스텀 상태로 만들 때는 flow_create_tasks 에 상태 이름을 그대로 준다 — 기본(배치) 경로는 서버가 이름을 해소해 생성 시점에 적용하고, 하위 업무·첨부 단건 경로만 생성 API 가 base 5상태만 받아 만든 뒤 옮긴다. 이미 있는 업무를 옮기는 것이 본 도구의 statusOptionSrno 다. - 여러 필드 지정 시 status→priority→workers→startDate→endDate 순차 적용. 일부 실패해도 나머지는 적용되며 결과의 failed 에 사유가 담긴다. - columnValues는 마지막에 순서대로 적용. OPTION/USER 값은 이름이 아니라 조회된 ID를 쓴다. Common mistakes - 같은 status 로 호출 시 flow-api 400 (TASK_STATUS_DUPLICATE_ERROR). - workers 는 flow_find_employees 또는 flow_get_project(include:["participants"]) 로 id 를 먼저 해소. - userId 가 <<email-N>> 처럼 가려져 오면 workers 에 넣지 말고 workerNames:[{name}] 로 이름을 준다. Examples - "첫 번째 업무 완료 처리" → flow_list_project_items 로 taskId 확보 후 projectId+taskId+status:"complete". - "2주차 업무 전부 계획됨으로" → { projectId, taskIds:["46143541","46143558",…], statusOptionSrno:"990931" }
flow_update_wiki
ChatGPTReplace the title or the body of an existing Flow wiki document. ⚠️ This tool overwrites a real wiki document. Confirm with the user before invoking. When to use 기존 위키 문서의 제목·본문을 바꾼다. 둘을 한 번에 줘도 된다. Do NOT use - 새 문서를 만들 때 → flow_create_wiki_document. 확인이 필요하다 (2단계) 1. confirmToken 없이 호출 → 아무것도 안 바꾸고 {applied:false, plan, confirmToken} 반환. plan 에 기존 본문이 몇 자 사라지는지 적혀 있다 — 그대로 사용자에게 보여준다. 2. 동의를 받으면 같은 인자에 받은 confirmToken 을 붙여 재호출 → {applied:true, result}. 인자를 바꾸거나 그 사이 문서가 변하면 토큰이 무효다(다시 1번부터). 토큰은 10분·1회용. Common mistakes - contentJson 은 부분 수정이 아니라 전체 교체다. 먼저 flow_get_wiki_document 로 기존 본문을 읽고 고쳐서 넣는다. - docId 는 flow_find_wiki 로 먼저 찾는다. 제목만 알고 호출하면 실패한다. Output 필드별로 순차 반영하고 updated/failed 로 종합 보고한다 — 한쪽이 실패해도 다른 쪽은 반영된다.