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