nworks 1.2.1 → 1.3.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.ja.md CHANGED
@@ -14,7 +14,9 @@ Featured in [awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-server
14
14
  </p>
15
15
 
16
16
  LINE WORKS (NAVER WORKS) 初のMCPサーバー。
17
- メッセージ、カレンダー、ドライブ、メール、タスク、掲示板 — 26ツール対応のCLI + MCPサーバーです。
17
+ メッセージ、カレンダー、ドライブ、メール、タスク、掲示板 — 36ツール対応のCLI + MCPサーバーです。
18
+
19
+ nworksは、**外部**のAIエージェント(Claude、Cursor)やターミナルからLINE WORKSを*操作*するためのレイヤーです。LINE WORKS自身の社内向けAI(AiStudio、WORKS AI)とは競合せず、補完関係にあります。非公式・コミュニティ運営であり、LINE WORKS / NAVER WORKSとの提携関係はありません。
18
20
 
19
21
  ## クイックスタート
20
22
 
@@ -24,6 +26,8 @@ nworks login --user
24
26
  nworks calendar list
25
27
  ```
26
28
 
29
+ > **初めての方へ:** まずDeveloper Consoleアプリ(Client ID/Secret)、redirect URLの登録、そしてボットメッセージの場合は管理者の承認が必要です。[オンボーディング & 管理者セットアップガイド](ONBOARDING.md)を参照してください。
30
+
27
31
  ### AIエージェントの使用例
28
32
 
29
33
  ```
@@ -100,11 +104,11 @@ nworks login --user --scope "calendar calendar.read file file.read mail mail.rea
100
104
  }
101
105
  ```
102
106
 
103
- 一度のログインで26ツールすべて利用可能。追加のenv設定は不要です。
107
+ 一度のログインで36ツールすべて利用可能。追加のenv設定は不要です。
104
108
 
105
109
  > CLIログインなしでも、AIエージェントが `nworks_setup` → `nworks_login_user` を呼び出せばブラウザから直接認証できます。Client SecretとPrivate Keyのパスは、MCP設定の `env` フィールドまたはシステム環境変数で事前に設定してください。
106
110
 
107
- ### MCPツール一覧(26個)
111
+ ### MCPツール一覧(32個)
108
112
 
109
113
  | ツール | 説明 | 必要な認証 |
110
114
  |--------|------|-----------|
@@ -127,10 +131,14 @@ nworks login --user --scope "calendar calendar.read file file.read mail mail.rea
127
131
  | `nworks_drive_list` | ドライブのファイル/フォルダ一覧 | User OAuth (file.read) |
128
132
  | `nworks_drive_upload` | ドライブにファイルアップロード | User OAuth (file) |
129
133
  | `nworks_drive_download` | ドライブからファイルダウンロード(5MB超はローカル保存) | User OAuth (file.read) |
134
+ | `nworks_sharedrive_list` | 共有ドライブ一覧 | User OAuth (file.read) |
135
+ | `nworks_sharedrive_files` | 共有ドライブのファイル/フォルダ一覧 | User OAuth (file.read) |
136
+ | `nworks_sharedrive_download` | 共有ドライブのファイルをダウンロード (5MB超はローカル保存) | User OAuth (file.read) |
130
137
  | **メール** | | |
131
138
  | `nworks_mail_send` | メール送信 | User OAuth (mail) |
132
139
  | `nworks_mail_list` | メールボックス一覧 | User OAuth (mail.read) |
133
140
  | `nworks_mail_read` | メール詳細表示 | User OAuth (mail.read) |
141
+ | `nworks_mail_download_attachment` | メール添付ファイルのダウンロード (5MB超はローカル保存) | User OAuth (mail.read) |
134
142
  | **タスク** | | |
135
143
  | `nworks_task_list` | タスク一覧 | User OAuth (task.read) |
136
144
  | `nworks_task_create` | タスク作成 | User OAuth (task + user.read) |
@@ -141,6 +149,13 @@ nworks login --user --scope "calendar calendar.read file file.read mail mail.rea
141
149
  | `nworks_board_posts` | 掲示板の投稿一覧 | User OAuth (board.read) |
142
150
  | `nworks_board_read` | 掲示板の投稿詳細 | User OAuth (board.read) |
143
151
  | `nworks_board_create` | 掲示板に投稿作成 | User OAuth (board) |
152
+ | **連絡先** | | |
153
+ | `nworks_contact_list` | 連絡先一覧 | User OAuth (contact.read) |
154
+ | `nworks_contact_get` | 連絡先の詳細 | User OAuth (contact.read) |
155
+ | `nworks_contact_create` | 連絡先の作成 | User OAuth (contact) |
156
+ | `nworks_contact_update` | 連絡先の更新 | User OAuth (contact) |
157
+ | `nworks_contact_delete` | 連絡先の削除 | User OAuth (contact) |
158
+ | `nworks_contact_list_tags` | 連絡先タグ一覧 | User OAuth (contact.read) |
144
159
 
145
160
  ### AIエージェント使用例
146
161
 
@@ -240,6 +255,18 @@ nworks drive download --file-id <fileId>
240
255
 
241
256
  # 出力先/ファイル名指定
242
257
  nworks drive download --file-id <fileId> --out ./downloads --name report.pdf
258
+
259
+ # 共有ドライブ一覧
260
+ nworks drive sharedrive-list
261
+
262
+ # 共有ドライブのファイル一覧 (ルート)
263
+ nworks drive sharedrive-files --sharedrive <sharedriveId>
264
+
265
+ # 共有ドライブのフォルダ内ファイル一覧
266
+ nworks drive sharedrive-files --sharedrive <sharedriveId> --folder <fileId>
267
+
268
+ # 共有ドライブのファイルをダウンロード
269
+ nworks drive sharedrive-download --sharedrive <sharedriveId> --file-id <fileId>
243
270
  ```
244
271
 
245
272
  ### メール(User OAuth)
@@ -259,6 +286,12 @@ nworks mail list --unread
259
286
 
260
287
  # メール詳細表示
261
288
  nworks mail read --id <mailId>
289
+
290
+ # メール添付ファイルのダウンロード
291
+ nworks mail download-attachment --id <mailId> --attachment-id <attachmentId>
292
+
293
+ # 保存先/ファイル名を指定
294
+ nworks mail download-attachment --id <mailId> --attachment-id <attachmentId> --out ./downloads --name invoice.pdf
262
295
  ```
263
296
 
264
297
  ### タスク(User OAuth)
@@ -302,6 +335,34 @@ nworks board create --board <boardId> --title "お知らせ" --body "内容"
302
335
  nworks board create --board <boardId> --title "通知" --body "内容" --notify --no-comment
303
336
  ```
304
337
 
338
+ ### 連絡先 (User OAuth)
339
+
340
+ ```bash
341
+ # 連絡先一覧
342
+ nworks contact list
343
+
344
+ # タグで絞り込み
345
+ nworks contact list --tag <contactTagId>
346
+
347
+ # 連絡先の詳細
348
+ nworks contact get --id <contactId>
349
+
350
+ # 連絡先の作成
351
+ nworks contact create --payload '{"contactName":{"lastName":"金","firstName":"哲秀"},"emails":[{"email":"chulsoo@example.com","primary":true}],"permission":{"accessibleRange":"MEMBER","isCoEditing":false,"accessibleMembers":[{"id":"<自分のuserId>","type":"USER"}]}}'
352
+
353
+ # 連絡先の更新
354
+ nworks contact update --id <contactId> --payload '{"telephones":[{"type":"CELLPHONE","telephone":"010-1234-5678","primary":true}]}'
355
+
356
+ # 連絡先の削除
357
+ nworks contact delete --id <contactId>
358
+
359
+ # 連絡先タグ一覧
360
+ nworks contact list-tags
361
+ ```
362
+
363
+ > `contact create` は `contactName` と `permission` が必須で、`permission.accessibleMembers` に最低1名(通常は自分)が必要です。自分のuserIdは `nworks whoami` で確認できます。
364
+
365
+
305
366
  ### CI/CDデプロイ通知
306
367
 
307
368
  ```bash
@@ -339,11 +400,16 @@ done
339
400
  | `user.read` | ユーザー情報取得 | Service Account / User OAuth | `directory members`、タスク書き込みの依存関係 |
340
401
  | `board` | 掲示板読み書き | User OAuth | `board list/posts/read/create` |
341
402
  | `board.read` | 掲示板読み取り専用 | User OAuth | `board list/posts/read` |
403
+ | `contact` | 連絡先の読み書き | User OAuth | `contact create/update/delete` (contact.read が必要) |
404
+ | `contact.read` | 連絡先の読み取り専用 | User OAuth | `contact list/get/list-tags` |
342
405
 
343
- > **ヒント**: scopeを変更した後はトークンを再発行してください。
406
+ > **プリセット**を使うとscopeを個別に列挙するより簡単です:
344
407
  > ```bash
345
- > nworks logout && nworks login --user --scope "..."
408
+ > nworks login --user --preset all # デフォルト: 一度のログインで全機能
409
+ > nworks login --user --preset readonly # 読み取り専用scope
346
410
  > ```
411
+ > `default`は`all`のエイリアスです。メッセージ送信はService Account(ボット)を使うため、プリセットに関係なく動作します。
412
+ > 再ログインしても権限は狭まりません — 新たに要求したscopeが既存トークンとマージされるため、プリセットの切り替えは権限を追加するだけです。個別に選ぶ場合は`--scope "calendar calendar.read"`を指定してください。
347
413
 
348
414
  ---
349
415
 
package/README.ko.md CHANGED
@@ -14,7 +14,9 @@ Featured in [awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-server
14
14
  </p>
15
15
 
16
16
  NAVER WORKS (LINE WORKS) 최초의 MCP 서버.
17
- 메시지, 캘린더, 드라이브, 메일, 할 일, 게시판 — 26개 도구를 CLI와 AI 에이전트에서 쓸 수 있습니다.
17
+ 메시지, 캘린더, 드라이브, 메일, 할 일, 게시판 — 36개 도구를 CLI와 AI 에이전트에서 쓸 수 있습니다.
18
+
19
+ nworks는 **외부** AI 에이전트(Claude, Cursor)와 터미널에서 LINE WORKS를 *다루기* 위한 도구입니다. LINE WORKS 자체의 사내용 AI(AiStudio, WORKS AI)와 겹치지 않고 상호 보완합니다. 비공식·커뮤니티 프로젝트이며 LINE WORKS / NAVER WORKS와 제휴 관계가 없습니다.
18
20
 
19
21
  ## Quickstart
20
22
 
@@ -24,6 +26,8 @@ nworks login --user
24
26
  nworks calendar list
25
27
  ```
26
28
 
29
+ > **처음이신가요?** 먼저 Developer Console 앱(Client ID/Secret), redirect URL 등록, 그리고 봇 메시지의 경우 관리자 승인이 필요합니다. [온보딩 & 관리자 설정 가이드](ONBOARDING.md)를 참고하세요.
30
+
27
31
  ### AI 에이전트가 실제로 이렇게 씁니다
28
32
 
29
33
  ```
@@ -100,11 +104,11 @@ nworks login --user --scope "calendar calendar.read file file.read mail mail.rea
100
104
  }
101
105
  ```
102
106
 
103
- 로그인 한 번이면 26개 도구 모두 사용 가능. 별도 env 설정 불필요.
107
+ 로그인 한 번이면 36개 도구 모두 사용 가능. 별도 env 설정 불필요.
104
108
 
105
109
  > **MCP에서 AI 에이전트가 직접 설정하기**: CLI 로그인 없이도 AI 에이전트가 `nworks_setup` → `nworks_login_user` 순서로 호출하면 브라우저 로그인만으로 전체 기능을 사용할 수 있습니다. Client Secret과 Private Key 경로는 MCP 설정의 `env` 필드 또는 시스템 환경변수로 미리 설정해야 합니다.
106
110
 
107
- ### MCP 도구 목록 (26개)
111
+ ### MCP 도구 목록 (32개)
108
112
 
109
113
  | 도구 | 설명 | 필요 인증 |
110
114
  |------|------|----------|
@@ -127,10 +131,14 @@ nworks login --user --scope "calendar calendar.read file file.read mail mail.rea
127
131
  | `nworks_drive_list` | 드라이브 파일/폴더 목록 | User OAuth (file.read) |
128
132
  | `nworks_drive_upload` | 드라이브 파일 업로드 | User OAuth (file) |
129
133
  | `nworks_drive_download` | 드라이브 파일 다운로드 (5MB 초과 시 로컬 저장) | User OAuth (file.read) |
134
+ | `nworks_sharedrive_list` | 공유 드라이브 목록 조회 | User OAuth (file.read) |
135
+ | `nworks_sharedrive_files` | 공유 드라이브 파일/폴더 목록 조회 | User OAuth (file.read) |
136
+ | `nworks_sharedrive_download` | 공유 드라이브 파일 다운로드 (5MB 초과 시 로컬 저장) | User OAuth (file.read) |
130
137
  | **메일** | | |
131
138
  | `nworks_mail_send` | 메일 전송 | User OAuth (mail) |
132
139
  | `nworks_mail_list` | 메일 목록 조회 | User OAuth (mail.read) |
133
140
  | `nworks_mail_read` | 메일 상세 조회 | User OAuth (mail.read) |
141
+ | `nworks_mail_download_attachment` | 메일 첨부파일 다운로드 (5MB 초과 시 로컬 저장) | User OAuth (mail.read) |
134
142
  | **할 일** | | |
135
143
  | `nworks_task_list` | 할 일 목록 조회 | User OAuth (task.read) |
136
144
  | `nworks_task_create` | 할 일 생성 | User OAuth (task + user.read) |
@@ -141,6 +149,13 @@ nworks login --user --scope "calendar calendar.read file file.read mail mail.rea
141
149
  | `nworks_board_posts` | 게시판 글 목록 조회 | User OAuth (board.read) |
142
150
  | `nworks_board_read` | 게시판 글 상세 조회 | User OAuth (board.read) |
143
151
  | `nworks_board_create` | 게시판 글 작성 | User OAuth (board) |
152
+ | **연락처** | | |
153
+ | `nworks_contact_list` | 연락처 목록 조회 | User OAuth (contact.read) |
154
+ | `nworks_contact_get` | 연락처 상세 조회 | User OAuth (contact.read) |
155
+ | `nworks_contact_create` | 연락처 생성 | User OAuth (contact) |
156
+ | `nworks_contact_update` | 연락처 수정 | User OAuth (contact) |
157
+ | `nworks_contact_delete` | 연락처 삭제 | User OAuth (contact) |
158
+ | `nworks_contact_list_tags` | 연락처 태그 목록 조회 | User OAuth (contact.read) |
144
159
 
145
160
  ### AI 에이전트 사용 예시
146
161
 
@@ -240,6 +255,18 @@ nworks drive download --file-id <fileId>
240
255
 
241
256
  # 다운로드 경로/파일명 지정
242
257
  nworks drive download --file-id <fileId> --out ./downloads --name report.pdf
258
+
259
+ # 공유 드라이브 목록
260
+ nworks drive sharedrive-list
261
+
262
+ # 공유 드라이브 파일 목록 (루트)
263
+ nworks drive sharedrive-files --sharedrive <sharedriveId>
264
+
265
+ # 공유 드라이브 폴더 내 파일 목록
266
+ nworks drive sharedrive-files --sharedrive <sharedriveId> --folder <fileId>
267
+
268
+ # 공유 드라이브 파일 다운로드
269
+ nworks drive sharedrive-download --sharedrive <sharedriveId> --file-id <fileId>
243
270
  ```
244
271
 
245
272
  ### 메일 (User OAuth)
@@ -259,6 +286,12 @@ nworks mail list --unread
259
286
 
260
287
  # 메일 상세 조회
261
288
  nworks mail read --id <mailId>
289
+
290
+ # 메일 첨부파일 다운로드
291
+ nworks mail download-attachment --id <mailId> --attachment-id <attachmentId>
292
+
293
+ # 저장 경로/파일명 지정
294
+ nworks mail download-attachment --id <mailId> --attachment-id <attachmentId> --out ./downloads --name invoice.pdf
262
295
  ```
263
296
 
264
297
  ### 할 일 (User OAuth)
@@ -302,6 +335,34 @@ nworks board create --board <boardId> --title "공지사항" --body "내용"
302
335
  nworks board create --board <boardId> --title "공지" --body "내용" --notify --no-comment
303
336
  ```
304
337
 
338
+ ### 연락처 (User OAuth)
339
+
340
+ ```bash
341
+ # 연락처 목록
342
+ nworks contact list
343
+
344
+ # 태그로 필터링
345
+ nworks contact list --tag <contactTagId>
346
+
347
+ # 연락처 상세 조회
348
+ nworks contact get --id <contactId>
349
+
350
+ # 연락처 생성
351
+ nworks contact create --payload '{"contactName":{"lastName":"김","firstName":"철수"},"emails":[{"email":"chulsoo@example.com","primary":true}],"permission":{"accessibleRange":"MEMBER","isCoEditing":false,"accessibleMembers":[{"id":"<내 userId>","type":"USER"}]}}'
352
+
353
+ # 연락처 수정
354
+ nworks contact update --id <contactId> --payload '{"telephones":[{"type":"CELLPHONE","telephone":"010-1234-5678","primary":true}]}'
355
+
356
+ # 연락처 삭제
357
+ nworks contact delete --id <contactId>
358
+
359
+ # 연락처 태그 목록
360
+ nworks contact list-tags
361
+ ```
362
+
363
+ > `contact create`는 `contactName`과 `permission`이 필수이며, `permission.accessibleMembers`에 최소 1명(보통 본인)이 있어야 합니다. 본인 userId는 `nworks whoami`로 확인합니다.
364
+
365
+
305
366
  ### CI/CD 배포 알림
306
367
 
307
368
  ```bash
@@ -339,11 +400,16 @@ done
339
400
  | `user.read` | 사용자 정보 조회 | Service Account / User OAuth | `directory members`, `task create/update/delete`의 의존성 |
340
401
  | `board` | 게시판 읽기/쓰기 | User OAuth | `board list/posts/read/create` |
341
402
  | `board.read` | 게시판 읽기 전용 | User OAuth | `board list/posts/read` |
403
+ | `contact` | 연락처 읽기/쓰기 | User OAuth | `contact create/update/delete` (contact.read 필요) |
404
+ | `contact.read` | 연락처 읽기 전용 | User OAuth | `contact list/get/list-tags` |
342
405
 
343
- > **Tip**: scope를 변경한 후에는 토큰을 재발급해야 합니다.
406
+ > **프리셋**이 scope를 일일이 나열하는 것보다 간단합니다:
344
407
  > ```bash
345
- > nworks logout && nworks login --user --scope "..."
408
+ > nworks login --user --preset all # 기본값: 한 번 로그인으로 전체 기능
409
+ > nworks login --user --preset readonly # 읽기 전용 scope
346
410
  > ```
411
+ > `default`는 `all`의 별칭입니다. 메시지 전송은 Service Account(봇)를 쓰므로 프리셋과 무관하게 동작합니다.
412
+ > 재로그인해도 권한은 줄지 않습니다. 새로 요청한 scope가 기존 토큰과 합쳐지므로, 프리셋을 바꿔도 권한이 추가되기만 합니다. 직접 고른 조합은 `--scope "calendar calendar.read"`로 지정하세요.
347
413
 
348
414
  ---
349
415
 
package/README.md CHANGED
@@ -14,7 +14,9 @@ Featured in [awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-server
14
14
  </p>
15
15
 
16
16
  Full-featured MCP server for LINE WORKS (NAVER WORKS).
17
- CLI + MCP server — 26 tools covering messages, calendar, drive, mail, tasks, and boards.
17
+ CLI + MCP server — 36 tools covering messages, calendar, drive, mail, tasks, and boards.
18
+
19
+ nworks lets **external** AI agents (Claude, Cursor) and your terminal *operate* LINE WORKS from the outside — complementary to LINE WORKS' own in-product AI (AiStudio, WORKS AI), not a replacement. Unofficial and community-maintained; not affiliated with LINE WORKS / NAVER WORKS.
18
20
 
19
21
  ## Quickstart
20
22
 
@@ -24,6 +26,8 @@ nworks login --user
24
26
  nworks calendar list
25
27
  ```
26
28
 
29
+ > **First time?** You first need a Developer Console app (Client ID/Secret), a registered redirect URL, and — for bot messaging — admin approval. See the [Onboarding & Admin Setup guide](ONBOARDING.md).
30
+
27
31
  ### AI Agents Actually Use It Like This
28
32
 
29
33
  ```
@@ -100,11 +104,11 @@ Then add to your MCP config (`~/.config/claude/claude_desktop_config.json`):
100
104
  }
101
105
  ```
102
106
 
103
- One login enables all 26 tools. No extra env setup needed.
107
+ One login enables all 36 tools. No extra env setup needed.
104
108
 
105
109
  > Without CLI login, an AI agent can call `nworks_setup` → `nworks_login_user` to authenticate via browser directly. Client Secret and Private Key path must be pre-configured via MCP config `env` field or system environment variables.
106
110
 
107
- ### MCP Tools (26)
111
+ ### MCP Tools (32)
108
112
 
109
113
  | Tool | Description | Auth |
110
114
  |------|-------------|------|
@@ -127,10 +131,14 @@ One login enables all 26 tools. No extra env setup needed.
127
131
  | `nworks_drive_list` | List drive files/folders | User OAuth (file.read) |
128
132
  | `nworks_drive_upload` | Upload file to drive | User OAuth (file) |
129
133
  | `nworks_drive_download` | Download file (saves locally if >5MB) | User OAuth (file.read) |
134
+ | `nworks_sharedrive_list` | List shared drives | User OAuth (file.read) |
135
+ | `nworks_sharedrive_files` | List files/folders in a shared drive | User OAuth (file.read) |
136
+ | `nworks_sharedrive_download` | Download a shared drive file (saves locally if >5MB) | User OAuth (file.read) |
130
137
  | **Mail** | | |
131
138
  | `nworks_mail_send` | Send mail | User OAuth (mail) |
132
139
  | `nworks_mail_list` | List mailbox | User OAuth (mail.read) |
133
140
  | `nworks_mail_read` | Read mail detail | User OAuth (mail.read) |
141
+ | `nworks_mail_download_attachment` | Download a mail attachment (saves locally if >5MB) | User OAuth (mail.read) |
134
142
  | **Tasks** | | |
135
143
  | `nworks_task_list` | List tasks | User OAuth (task.read) |
136
144
  | `nworks_task_create` | Create task | User OAuth (task + user.read) |
@@ -141,6 +149,13 @@ One login enables all 26 tools. No extra env setup needed.
141
149
  | `nworks_board_posts` | List board posts | User OAuth (board.read) |
142
150
  | `nworks_board_read` | Read board post detail | User OAuth (board.read) |
143
151
  | `nworks_board_create` | Create board post | User OAuth (board) |
152
+ | **Contacts** | | |
153
+ | `nworks_contact_list` | List contacts | User OAuth (contact.read) |
154
+ | `nworks_contact_get` | Get contact detail | User OAuth (contact.read) |
155
+ | `nworks_contact_create` | Create contact | User OAuth (contact) |
156
+ | `nworks_contact_update` | Update contact | User OAuth (contact) |
157
+ | `nworks_contact_delete` | Delete contact | User OAuth (contact) |
158
+ | `nworks_contact_list_tags` | List contact tags | User OAuth (contact.read) |
144
159
 
145
160
  ### AI Agent Usage Example
146
161
 
@@ -240,6 +255,18 @@ nworks drive download --file-id <fileId>
240
255
 
241
256
  # Specify output path/name
242
257
  nworks drive download --file-id <fileId> --out ./downloads --name report.pdf
258
+
259
+ # List shared drives
260
+ nworks drive sharedrive-list
261
+
262
+ # List files in a shared drive (root)
263
+ nworks drive sharedrive-files --sharedrive <sharedriveId>
264
+
265
+ # List files in a shared drive folder
266
+ nworks drive sharedrive-files --sharedrive <sharedriveId> --folder <fileId>
267
+
268
+ # Download a shared drive file
269
+ nworks drive sharedrive-download --sharedrive <sharedriveId> --file-id <fileId>
243
270
  ```
244
271
 
245
272
  ### Mail (User OAuth)
@@ -259,6 +286,12 @@ nworks mail list --unread
259
286
 
260
287
  # Read mail detail
261
288
  nworks mail read --id <mailId>
289
+
290
+ # Download a mail attachment
291
+ nworks mail download-attachment --id <mailId> --attachment-id <attachmentId>
292
+
293
+ # Specify output path/name
294
+ nworks mail download-attachment --id <mailId> --attachment-id <attachmentId> --out ./downloads --name invoice.pdf
262
295
  ```
263
296
 
264
297
  ### Tasks (User OAuth)
@@ -302,6 +335,34 @@ nworks board create --board <boardId> --title "Announcement" --body "Content"
302
335
  nworks board create --board <boardId> --title "Notice" --body "Content" --notify --no-comment
303
336
  ```
304
337
 
338
+ ### Contacts (User OAuth)
339
+
340
+ ```bash
341
+ # List contacts
342
+ nworks contact list
343
+
344
+ # Filter by tag
345
+ nworks contact list --tag <contactTagId>
346
+
347
+ # Get contact detail
348
+ nworks contact get --id <contactId>
349
+
350
+ # Create contact
351
+ nworks contact create --payload '{"contactName":{"lastName":"Kim","firstName":"Chulsoo"},"emails":[{"email":"chulsoo@example.com","primary":true}],"permission":{"accessibleRange":"MEMBER","isCoEditing":false,"accessibleMembers":[{"id":"<yourUserId>","type":"USER"}]}}'
352
+
353
+ # Update contact
354
+ nworks contact update --id <contactId> --payload '{"telephones":[{"type":"CELLPHONE","telephone":"010-1234-5678","primary":true}]}'
355
+
356
+ # Delete contact
357
+ nworks contact delete --id <contactId>
358
+
359
+ # List contact tags
360
+ nworks contact list-tags
361
+ ```
362
+
363
+ > `contact create` requires `contactName` and `permission`; `permission.accessibleMembers` must list at least one member (usually yourself). Get your own user ID from `nworks whoami`.
364
+
365
+
305
366
  ### CI/CD Deploy Notification
306
367
 
307
368
  ```bash
@@ -339,11 +400,16 @@ Add the required scopes in the [LINE WORKS Developer Console](https://dev.worksm
339
400
  | `user.read` | User info read | Service Account / User OAuth | `directory members`, also needed for task write |
340
401
  | `board` | Boards read/write | User OAuth | `board list/posts/read/create` |
341
402
  | `board.read` | Boards read-only | User OAuth | `board list/posts/read` |
403
+ | `contact` | Contacts read/write | User OAuth | `contact create/update/delete` (requires contact.read) |
404
+ | `contact.read` | Contacts read-only | User OAuth | `contact list/get/list-tags` |
342
405
 
343
- > **Tip**: After changing scopes, reissue your token:
406
+ > **Presets** are simpler than listing scopes:
344
407
  > ```bash
345
- > nworks logout && nworks login --user --scope "..."
408
+ > nworks login --user --preset all # default: full functionality in one login
409
+ > nworks login --user --preset readonly # read-only scopes
346
410
  > ```
411
+ > `default` is an alias of `all`. Message sending uses the Service Account (bot), so it works regardless of preset.
412
+ > Re-login never narrows access — newly requested scopes are merged with the existing token, so switching presets only adds capability. For a hand-picked set use `--scope "calendar calendar.read"`.
347
413
 
348
414
  ---
349
415