nworks 0.7.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,85 +1,158 @@
1
1
  # nworks
2
2
 
3
- NAVER WORKS CLI — built for humans and AI agents.
3
+ [![npm version](https://img.shields.io/npm/v/nworks.svg)](https://www.npmjs.com/package/nworks)
4
+ [![license](https://img.shields.io/npm/l/nworks.svg)](LICENSE)
5
+ [![npm downloads](https://img.shields.io/npm/dm/nworks.svg)](https://www.npmjs.com/package/nworks)
4
6
 
5
- ## Install
7
+ <p align="center">
8
+ <img src="assets/demo.gif" width="600" alt="nworks demo">
9
+ </p>
10
+
11
+ First full MCP server for NAVER WORKS.
12
+ NAVER WORKS API를 스크립트나 AI 에이전트에서 쓰기 쉽게 만든 CLI + MCP 서버입니다.
13
+
14
+ **Automate messages, calendar, drive, mail, tasks, and boards — from CLI or AI agents.**
15
+
16
+ ## Quickstart
6
17
 
7
18
  ```bash
8
- npx nworks
19
+ npm install -g nworks
20
+ nworks login --user
21
+ nworks calendar list
22
+ ```
23
+
24
+ ### AI 에이전트가 실제로 이렇게 씁니다
25
+
9
26
  ```
27
+ User: 오늘 일정 알려줘
28
+
29
+ Claude → nworks_calendar_list
30
+ → 3건: 스탠드업(10:00), 점심미팅(12:00), 코드리뷰(15:00)
31
+
32
+ User: 팀 채널에 배포 완료 메시지 보내줘
10
33
 
11
- Or install globally:
34
+ Claude nworks_message_send
35
+ { "channel": "C001", "text": "v1.2.0 배포 완료" }
36
+ → 메시지가 전송되었습니다
37
+ ```
38
+
39
+ ## Install
12
40
 
13
41
  ```bash
14
- npm install -g nworks
42
+ npx nworks # 바로 실행
43
+ npm install -g nworks # 글로벌 설치
15
44
  ```
16
45
 
17
- ## Quick Start
46
+ ## 로그인
18
47
 
19
48
  ```bash
20
- # 서비스 계정 로그인
21
- nworks login \
22
- --client-id <CLIENT_ID> \
23
- --client-secret <CLIENT_SECRET> \
24
- --service-account <SERVICE_ACCOUNT> \
25
- --private-key <PATH_TO_KEY> \
26
- --bot-id <BOT_ID>
49
+ # User OAuth (캘린더, 드라이브, 메일, 할 일, 게시판)
50
+ nworks login --user --scope "calendar,calendar.read,file,file.read,mail,mail.read,task,task.read,board,board.read,user.read"
27
51
 
28
- # User OAuth 로그인 (캘린더, 드라이브 사용자 API용)
29
- nworks login --user --scope "calendar,calendar.read,file,mail,task,board,user.read"
52
+ # 메시지 전송이 필요한 경우 (Service Account)
53
+ nworks login
30
54
 
31
55
  # 인증 확인
32
56
  nworks whoami
33
57
 
34
- # 메시지 전송
35
- nworks message send --to <userId> --text "배포 완료했습니다"
58
+ # 로그아웃
59
+ nworks logout
60
+ ```
36
61
 
37
- # 조직 구성원 조회
38
- nworks directory members
62
+ > `nworks login --user`는 CLIENT_ID + CLIENT_SECRET만 있으면 됩니다. 환경변수나 기존 설정에 이미 있는 값은 다시 물어보지 않습니다.
39
63
 
40
- # 오늘 일정 조회
41
- nworks calendar list
64
+ > **Developer Console 설정**: User OAuth를 사용하려면 [Developer Console](https://dev.worksmobile.com)에서 Redirect URL에 `http://localhost:9876/callback`을 등록해야 합니다.
42
65
 
43
- # 일정 생성
44
- nworks calendar create --title "회의" --start "2026-03-14T14:00+09:00" --end "2026-03-14T15:00+09:00"
66
+ ---
45
67
 
46
- # 드라이브 파일 목록
47
- nworks drive list
68
+ ## MCP 서버 (AI 에이전트 연동)
48
69
 
49
- # 파일 업로드
50
- nworks drive upload --file ./report.pdf
70
+ Claude Desktop, Cursor 등에서 MCP server로 NAVER WORKS 26개 도구를 사용할 수 있습니다.
71
+ 메시지 전송, 일정 관리, 파일 업로드, 메일, 할 일, 게시판까지 — AI 에이전트가 NAVER WORKS 워크플로우를 자동화합니다.
51
72
 
52
- # 메일 전송
53
- nworks mail send --to "user@example.com" --subject "제목" --body "내용"
73
+ ### 설정
54
74
 
55
- # 받은편지함 조회
56
- nworks mail list
75
+ 먼저 로그인합니다:
57
76
 
58
- # 할 일 목록
59
- nworks task list
60
-
61
- # 할 일 생성
62
- nworks task create --title "코드 리뷰" --body "PR #382 리뷰"
77
+ ```bash
78
+ nworks login --user --scope "calendar,calendar.read,file,file.read,mail,mail.read,task,task.read,board,board.read,user.read"
79
+ ```
63
80
 
64
- # 게시판 목록
65
- nworks board list
81
+ 그리고 MCP 설정에 추가합니다 (`~/.config/claude/claude_desktop_config.json`):
66
82
 
67
- # 게시판 글 작성
68
- nworks board create --board <boardId> --title "공지사항" --body "내용"
83
+ ```json
84
+ {
85
+ "mcpServers": {
86
+ "nworks": {
87
+ "command": "nworks",
88
+ "args": ["mcp"]
89
+ }
90
+ }
91
+ }
69
92
  ```
70
93
 
71
- ## CLI Commands
94
+ 끝입니다. 인증 한 번으로 26개 도구 모두 사용 가능 — 별도 env 설정이 필요 없습니다.
95
+
96
+ > **MCP에서 AI 에이전트가 직접 설정하기**: CLI 로그인 없이도 AI 에이전트가 `nworks_setup` → `nworks_login_user` 순서로 호출하면 브라우저 로그인만으로 전체 기능을 사용할 수 있습니다.
97
+
98
+ ### MCP 도구 목록 (26개)
99
+
100
+ | 도구 | 설명 | 필요 인증 |
101
+ |------|------|----------|
102
+ | **설정/인증** | | |
103
+ | `nworks_setup` | API 인증 정보 설정 (Client ID/Secret 등) | — |
104
+ | `nworks_login_user` | User OAuth 브라우저 로그인 (전체 scope 자동 포함) | — |
105
+ | `nworks_logout` | 인증 정보 및 토큰 삭제 | — |
106
+ | `nworks_whoami` | 인증 상태 확인 | — |
107
+ | `nworks_doctor` | 연결 상태 진단 (인증, 토큰, API 점검) | — |
108
+ | **메시지** | | |
109
+ | `nworks_message_send` | 사용자/채널에 메시지 전송 | Service Account |
110
+ | `nworks_message_members` | 채널 구성원 조회 | Service Account |
111
+ | `nworks_directory_members` | 조직 구성원 조회 | Service Account |
112
+ | **캘린더** | | |
113
+ | `nworks_calendar_list` | 캘린더 일정 조회 | User OAuth (calendar.read) |
114
+ | `nworks_calendar_create` | 캘린더 일정 생성 | User OAuth (calendar + calendar.read) |
115
+ | `nworks_calendar_update` | 캘린더 일정 수정 | User OAuth (calendar + calendar.read) |
116
+ | `nworks_calendar_delete` | 캘린더 일정 삭제 | User OAuth (calendar + calendar.read) |
117
+ | **드라이브** | | |
118
+ | `nworks_drive_list` | 드라이브 파일/폴더 목록 | User OAuth (file.read) |
119
+ | `nworks_drive_upload` | 드라이브 파일 업로드 | User OAuth (file) |
120
+ | `nworks_drive_download` | 드라이브 파일 다운로드 (5MB 초과 시 로컬 저장) | User OAuth (file.read) |
121
+ | **메일** | | |
122
+ | `nworks_mail_send` | 메일 전송 | User OAuth (mail) |
123
+ | `nworks_mail_list` | 메일 목록 조회 | User OAuth (mail.read) |
124
+ | `nworks_mail_read` | 메일 상세 조회 | User OAuth (mail.read) |
125
+ | **할 일** | | |
126
+ | `nworks_task_list` | 할 일 목록 조회 | User OAuth (task.read) |
127
+ | `nworks_task_create` | 할 일 생성 | User OAuth (task + user.read) |
128
+ | `nworks_task_update` | 할 일 수정/완료 | User OAuth (task + user.read) |
129
+ | `nworks_task_delete` | 할 일 삭제 | User OAuth (task + user.read) |
130
+ | **게시판** | | |
131
+ | `nworks_board_list` | 게시판 목록 조회 | User OAuth (board.read) |
132
+ | `nworks_board_posts` | 게시판 글 목록 조회 | User OAuth (board.read) |
133
+ | `nworks_board_read` | 게시판 글 상세 조회 | User OAuth (board.read) |
134
+ | `nworks_board_create` | 게시판 글 작성 | User OAuth (board) |
135
+
136
+ ### AI 에이전트 사용 예시
137
+
138
+ ```
139
+ User: 내일 오후 2시에 회의 잡고, 팀 채널에 알려줘
72
140
 
73
- ### 인증
141
+ Claude → nworks_calendar_create
142
+ { "summary": "회의", "start": "2026-03-15T14:00:00", "end": "2026-03-15T15:00:00" }
143
+ → 일정이 생성되었습니다
74
144
 
75
- ```bash
76
- nworks login [options] # 서비스 계정 로그인 (대화형 또는 플래그)
77
- nworks login --user # User OAuth 로그인 (브라우저)
78
- nworks login --user --scope calendar.read # scope 지정
79
- nworks whoami # 인증 상태 확인
80
- nworks logout # 로그아웃
145
+ Claude → nworks_message_send
146
+ { "channel": "C001", "text": "내일 14:00 회의가 잡혔습니다" }
147
+ 메시지가 전송되었습니다
81
148
  ```
82
149
 
150
+ ---
151
+
152
+ ## CLI 사용법
153
+
154
+ > 모든 명령어에 `--json` 지원 (파이프, 스크립트, 에이전트 파싱 용이). `message send`, `mail send`, `drive upload`는 `--dry-run`으로 실제 전송 없이 테스트 가능.
155
+
83
156
  ### 메시지 (Bot API)
84
157
 
85
158
  ```bash
@@ -107,22 +180,16 @@ nworks message members --channel <channelId>
107
180
  nworks directory members # 조직 구성원 목록
108
181
  ```
109
182
 
110
- ### 캘린더 (User OAuth 필요)
183
+ ### 캘린더 (User OAuth)
111
184
 
112
185
  ```bash
113
186
  # 오늘 일정 조회
114
187
  nworks calendar list
115
188
 
116
- # 기간 지정 (타임존 필수)
189
+ # 기간 지정
117
190
  nworks calendar list --from "2026-03-14T00:00:00+09:00" --until "2026-03-14T23:59:59+09:00"
118
191
 
119
- # 특정 사용자의 일정
120
- nworks calendar list --user <userId>
121
-
122
192
  # 일정 생성
123
- nworks calendar create --title "회의" --start "2026-03-14T14:00:00+09:00" --end "2026-03-14T15:00:00+09:00"
124
-
125
- # 초 생략 가능
126
193
  nworks calendar create --title "회의" --start "2026-03-14T14:00+09:00" --end "2026-03-14T15:00+09:00"
127
194
 
128
195
  # 장소/설명 포함
@@ -136,36 +203,22 @@ nworks calendar create --title "팀 회의" --start "2026-03-14T10:00+09:00" --e
136
203
  # 일정 수정
137
204
  nworks calendar update --id <eventId> --title "변경된 제목"
138
205
 
139
- # 시간 변경
140
- nworks calendar update --id <eventId> --start "2026-03-14T15:00+09:00" --end "2026-03-14T16:00+09:00"
141
-
142
206
  # 일정 삭제
143
207
  nworks calendar delete --id <eventId>
144
208
  ```
145
209
 
146
- > **Note**: 캘린더 API는 User OAuth가 필요합니다. 먼저 `nworks login --user --scope "calendar calendar.read"`를 실행하세요.
147
-
148
- ### 드라이브 (User OAuth 필요)
210
+ ### 드라이브 (User OAuth)
149
211
 
150
212
  ```bash
151
- # 루트 파일/폴더 목록
213
+ # 파일/폴더 목록
152
214
  nworks drive list
153
215
 
154
- # 특정 폴더 내 파일 목록
155
- nworks drive list --folder <folderId>
156
-
157
- # 페이지네이션
158
- nworks drive list --count 50 --cursor <nextCursor>
159
-
160
- # 파일 업로드 (루트)
216
+ # 파일 업로드
161
217
  nworks drive upload --file ./report.pdf
162
218
 
163
219
  # 특정 폴더에 업로드
164
220
  nworks drive upload --file ./report.pdf --folder <folderId>
165
221
 
166
- # 동일 파일명 덮어쓰기
167
- nworks drive upload --file ./report.pdf --overwrite
168
-
169
222
  # 파일 다운로드
170
223
  nworks drive download --file-id <fileId>
171
224
 
@@ -173,9 +226,7 @@ nworks drive download --file-id <fileId>
173
226
  nworks drive download --file-id <fileId> --out ./downloads --name report.pdf
174
227
  ```
175
228
 
176
- > **Note**: 드라이브 API는 User OAuth가 필요합니다. 먼저 `nworks login --user --scope file`을 실행하세요. 읽기만 필요하면 `file.read` scope로 충분합니다.
177
-
178
- ### 메일 (User OAuth 필요)
229
+ ### 메일 (User OAuth)
179
230
 
180
231
  ```bash
181
232
  # 메일 전송
@@ -194,12 +245,10 @@ nworks mail list --unread
194
245
  nworks mail read --id <mailId>
195
246
  ```
196
247
 
197
- > **Note**: 메일 API는 User OAuth가 필요합니다. 먼저 `nworks login --user --scope mail`을 실행하세요. 읽기만 필요하면 `mail.read` scope로 충분합니다.
198
-
199
- ### 할 일 (User OAuth 필요)
248
+ ### (User OAuth)
200
249
 
201
250
  ```bash
202
- # 할 일 목록 (기본 카테고리)
251
+ # 할 일 목록
203
252
  nworks task list
204
253
 
205
254
  # 미완료만 조회
@@ -214,16 +263,11 @@ nworks task create --title "배포" --due 2026-03-20
214
263
  # 할 일 완료 처리
215
264
  nworks task update --id <taskId> --status done
216
265
 
217
- # 할 일 미완료로 되돌리기
218
- nworks task update --id <taskId> --status todo
219
-
220
266
  # 할 일 삭제
221
267
  nworks task delete --id <taskId>
222
268
  ```
223
269
 
224
- > **Note**: 할 일 API는 User OAuth가 필요합니다. 먼저 `nworks login --user --scope "task user.read"`를 실행하세요. (`user.read`는 사용자 ID 조회에 필요) 읽기만 필요하면 `nworks login --user --scope "task.read user.read"`로 충분합니다.
225
-
226
- ### 게시판 (User OAuth 필요)
270
+ ### 게시판 (User OAuth)
227
271
 
228
272
  ```bash
229
273
  # 게시판 목록
@@ -242,36 +286,7 @@ nworks board create --board <boardId> --title "공지사항" --body "내용"
242
286
  nworks board create --board <boardId> --title "공지" --body "내용" --notify --no-comment
243
287
  ```
244
288
 
245
- > **Note**: 게시판 API는 User OAuth가 필요합니다. 먼저 `nworks login --user --scope board`를 실행하세요. 읽기만 필요하면 `board.read` scope로 충분합니다.
246
-
247
- ### MCP 서버
248
-
249
- ```bash
250
- nworks mcp # stdio MCP 서버 시작
251
- nworks mcp --list-tools # 등록된 tool 목록
252
- ```
253
-
254
- ## MCP 서버 연동 (Claude Desktop)
255
-
256
- `~/.config/claude/claude_desktop_config.json`:
257
-
258
- ```json
259
- {
260
- "mcpServers": {
261
- "nworks": {
262
- "command": "npx",
263
- "args": ["-y", "nworks", "mcp"],
264
- "env": {
265
- "NWORKS_CLIENT_ID": "<Client ID>",
266
- "NWORKS_CLIENT_SECRET": "<Client Secret>",
267
- "NWORKS_SERVICE_ACCOUNT": "<Service Account>",
268
- "NWORKS_PRIVATE_KEY_PATH": "<Private Key 경로>",
269
- "NWORKS_BOT_ID": "<Bot ID>"
270
- }
271
- }
272
- }
273
- }
274
- ```
289
+ ---
275
290
 
276
291
  ## OAuth Scope 설정
277
292
 
@@ -281,39 +296,30 @@ nworks mcp --list-tools # 등록된 tool 목록
281
296
  |-------|------|----------|--------------|
282
297
  | `bot` | Bot 메시지 전송 | Service Account | `message send` |
283
298
  | `bot.read` | Bot 채널/구성원 조회 | Service Account | `message members` |
284
- | `user.read` | 조직 구성원 조회 | Service Account | `directory members` |
285
- | `calendar` | 캘린더 쓰기 | User OAuth | `calendar create/update/delete` (+ `calendar.read` 필요) |
286
- | `calendar.read` | 캘린더 읽기 | User OAuth | `calendar list` |
299
+ | `calendar` | 캘린더 쓰기 | User OAuth | `calendar create/update/delete` (calendar.read도 함께 필요) |
300
+ | `calendar.read` | 캘린더 읽기 | User OAuth | `calendar list`, `calendar create/update/delete`의 의존성 |
287
301
  | `file` | 드라이브 읽기/쓰기 | User OAuth | `drive list/upload/download` |
288
302
  | `file.read` | 드라이브 읽기 전용 | User OAuth | `drive list/download` |
289
303
  | `mail` | 메일 읽기/쓰기 | User OAuth | `mail send/list/read` |
290
304
  | `mail.read` | 메일 읽기 전용 | User OAuth | `mail list/read` |
291
- | `task` | 할 일 읽기/쓰기 | User OAuth | `task list/create/update/delete` (+ `user.read` 필요) |
292
- | `task.read` | 할 일 읽기 전용 | User OAuth | `task list` (+ `user.read` 필요) |
305
+ | `task` | 할 일 읽기/쓰기 | User OAuth | `task create/update/delete` (user.read 함께 필요) |
306
+ | `task.read` | 할 일 읽기 전용 | User OAuth | `task list` |
307
+ | `user.read` | 사용자 정보 조회 | Service Account / User OAuth | `directory members`, `task create/update/delete`의 의존성 |
293
308
  | `board` | 게시판 읽기/쓰기 | User OAuth | `board list/posts/read/create` |
294
309
  | `board.read` | 게시판 읽기 전용 | User OAuth | `board list/posts/read` |
295
310
 
296
311
  > **Tip**: scope를 변경한 후에는 토큰을 재발급해야 합니다.
297
312
  > ```bash
298
- > nworks logout && nworks login ...
313
+ > nworks logout && nworks login --user --scope "..."
299
314
  > ```
300
315
 
301
- > **Developer Console 설정**: User OAuth를 사용하려면 Developer Console에서 Redirect URL에 `http://localhost:9876/callback`을 등록해야 합니다.
302
-
303
316
  ## 사용 시나리오
304
317
 
305
318
  ### CI/CD 배포 알림
306
319
 
307
320
  ```bash
308
321
  # GitHub Actions에서 배포 완료 후 팀 채널에 알림
309
- nworks message send --channel $CHANNEL_ID --text "v${VERSION} 배포 완료"
310
- ```
311
-
312
- ### AI 에이전트 메시지
313
-
314
- ```bash
315
- # Claude Desktop / Cursor에서 MCP tool로 직접 메시지 전송
316
- # nworks mcp 서버가 nworks_message_send tool을 제공
322
+ nworks message send --channel $CHANNEL_ID --text "v${VERSION} 배포 완료"
317
323
  ```
318
324
 
319
325
  ### 팀 자동화 스크립트
@@ -321,34 +327,67 @@ nworks message send --channel $CHANNEL_ID --text "✅ v${VERSION} 배포 완료"
321
327
  ```bash
322
328
  # 매일 아침 팀원에게 리마인더 전송
323
329
  for userId in $(nworks directory members --json | jq -r '.users[].userId'); do
324
- nworks message send --to "$userId" --text "📋 오늘의 스탠드업 10시입니다"
330
+ nworks message send --to "$userId" --text "오늘의 스탠드업 10시입니다"
325
331
  done
326
332
  ```
327
333
 
328
- ## 환경 변수
334
+ ---
335
+
336
+ ## Advanced Configuration
337
+
338
+ ### 환경 변수
339
+
340
+ 환경변수로 인증 정보를 설정하면 `nworks login` 없이 바로 사용할 수 있습니다.
329
341
 
330
342
  ```bash
343
+ # 공통 (필수)
331
344
  NWORKS_CLIENT_ID= # 필수
332
345
  NWORKS_CLIENT_SECRET= # 필수
333
- NWORKS_SERVICE_ACCOUNT= # 필수
334
- NWORKS_PRIVATE_KEY_PATH= # 필수
335
- NWORKS_BOT_ID= # 필수
346
+
347
+ # 봇 메시지 전송 시에만 필요 (User OAuth만 쓰면 불필요)
348
+ NWORKS_SERVICE_ACCOUNT= # 봇 전용
349
+ NWORKS_PRIVATE_KEY_PATH= # 봇 전용
350
+ NWORKS_BOT_ID= # 봇 전용
351
+
352
+ # 선택
336
353
  NWORKS_DOMAIN_ID= # optional
337
354
  NWORKS_SCOPE= # optional (기본: bot bot.read user.read)
338
355
  NWORKS_VERBOSE=1 # optional, 디버그 로깅
339
356
  ```
340
357
 
341
- 환경변수가 설정되면 `nworks login` 없이 바로 사용 가능합니다.
358
+ ### MCP 서버에 환경 변수 직접 설정
359
+
360
+ `nworks login` 대신 환경 변수로 직접 설정할 수도 있습니다:
361
+
362
+ ```json
363
+ {
364
+ "mcpServers": {
365
+ "nworks": {
366
+ "command": "npx",
367
+ "args": ["-y", "nworks", "mcp"],
368
+ "env": {
369
+ "NWORKS_CLIENT_ID": "<Client ID>",
370
+ "NWORKS_CLIENT_SECRET": "<Client Secret>"
371
+ }
372
+ }
373
+ }
374
+ }
375
+ ```
376
+
377
+ 봇 메시지도 사용하려면 `NWORKS_SERVICE_ACCOUNT`, `NWORKS_PRIVATE_KEY_PATH`, `NWORKS_BOT_ID`도 추가합니다.
378
+
379
+ ---
342
380
 
343
381
  ## Roadmap
344
382
 
345
383
  - ~~**v0.1** — 메시지, 조직 구성원, MCP 서버~~
346
384
  - ~~**v0.2** — 캘린더 일정 조회 + User OAuth~~
347
- - ~~**v0.3** — 드라이브 파일 조회/업로드/다운로드 (`nworks drive`)~~
348
- - ~~**v0.4** — 메일 (`nworks mail send/list/read`)~~
349
- - ~~**v0.5** — 할 일 (`nworks task list/create/update/delete`)~~
350
- - ~~**v0.6** — 캘린더 쓰기 (`nworks calendar create/update/delete`)~~
351
- - ~~**v0.7** — 게시판 (`nworks board list/posts/read/create`)~~
385
+ - ~~**v0.3** — 드라이브 파일 조회/업로드/다운로드~~
386
+ - ~~**v0.4** — 메일 (`mail send/list/read`)~~
387
+ - ~~**v0.5** — 할 일 (`task list/create/update/delete`)~~
388
+ - ~~**v0.6** — 캘린더 쓰기 (`calendar create/update/delete`)~~
389
+ - ~~**v0.7** — 게시판 (`board list/posts/read/create`)~~
390
+ - ~~**v1.0** — User OAuth 단독 로그인, MCP/CLI 인증 UX 개선, AI 에이전트 전용 설정 flow (nworks_setup → nworks_login_user), scope 자동 확장, 한국어 에러 안내, nworks doctor~~
352
391
 
353
392
  ## License
354
393