nworks-plus 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.ko.md ADDED
@@ -0,0 +1,416 @@
1
+ # nworks
2
+
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)
6
+ [![nworks MCP server](https://glama.ai/mcp/servers/yjcho9317/nworks/badges/score.svg)](https://glama.ai/mcp/servers/yjcho9317/nworks)
7
+
8
+ Featured in [awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers)
9
+
10
+ [๐Ÿ‡บ๐Ÿ‡ธ English](README.md) | ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด | [๐Ÿ‡ฏ๐Ÿ‡ต ๆ—ฅๆœฌ่ชž](README.ja.md)
11
+
12
+ <p align="center">
13
+ <img src="assets/demo.gif" width="600" alt="nworks demo">
14
+ </p>
15
+
16
+ NAVER WORKS (LINE WORKS) ์ตœ์ดˆ์˜ MCP ์„œ๋ฒ„.
17
+ ๋ฉ”์‹œ์ง€, ์บ˜๋ฆฐ๋”, ๋“œ๋ผ์ด๋ธŒ, ๋ฉ”์ผ, ํ•  ์ผ, ๊ฒŒ์‹œํŒ โ€” 28๊ฐœ ๋„๊ตฌ๋ฅผ CLI์™€ AI ์—์ด์ „ํŠธ์—์„œ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
18
+
19
+ ## Quickstart
20
+
21
+ ```bash
22
+ npm install -g nworks
23
+ nworks login --user
24
+ nworks calendar list
25
+ ```
26
+
27
+ ### AI ์—์ด์ „ํŠธ๊ฐ€ ์‹ค์ œ๋กœ ์ด๋ ‡๊ฒŒ ์”๋‹ˆ๋‹ค
28
+
29
+ ```
30
+ User: ์˜ค๋Š˜ ์ผ์ • ์•Œ๋ ค์ค˜
31
+
32
+ Claude โ†’ nworks_calendar_list
33
+ โ†’ 3๊ฑด: ์Šคํƒ ๋“œ์—…(10:00), ์ ์‹ฌ๋ฏธํŒ…(12:00), ์ฝ”๋“œ๋ฆฌ๋ทฐ(15:00)
34
+
35
+ User: ํŒ€ ์ฑ„๋„์— ๋ฐฐํฌ ์™„๋ฃŒ ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด์ค˜
36
+
37
+ Claude โ†’ nworks_message_send
38
+ { "channel": "C001", "text": "v1.2.0 ๋ฐฐํฌ ์™„๋ฃŒ" }
39
+ โ†’ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค
40
+
41
+ User: ์ฝ์ง€ ์•Š์€ ๋ฉ”์ผ ํ™•์ธํ•˜๊ณ  ์š”์•ฝํ•ด์ค˜
42
+
43
+ Claude โ†’ nworks_mail_list (unread)
44
+ โ†’ ์ฝ์ง€ ์•Š์€ ๋ฉ”์ผ 3ํ†ต
45
+ Claude โ†’ nworks_mail_read (๊ฐ๊ฐ)
46
+ โ†’ "3ํ†ต: 1) CTO ๋ฐฐํฌ ์Šน์ธ, 2) ๊ธˆ์š”์ผ ํšŒ์˜ ์ดˆ๋Œ€, 3) ์ฃผ๊ฐ„ ๋ณด๊ณ  ๋ฆฌ๋งˆ์ธ๋”"
47
+ ```
48
+
49
+ ## Install
50
+
51
+ ```bash
52
+ npx nworks # ๋ฐ”๋กœ ์‹คํ–‰
53
+ npm install -g nworks # ๊ธ€๋กœ๋ฒŒ ์„ค์น˜
54
+ ```
55
+
56
+ ## ๋กœ๊ทธ์ธ
57
+
58
+ ```bash
59
+ # User OAuth (์บ˜๋ฆฐ๋”, ๋“œ๋ผ์ด๋ธŒ, ๋ฉ”์ผ, ํ•  ์ผ, ๊ฒŒ์‹œํŒ)
60
+ nworks login --user --scope "calendar calendar.read file file.read mail mail.read task task.read board board.read user.read"
61
+
62
+ # ๋ด‡ ๋ฉ”์‹œ์ง€ ์ „์†ก์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ (Service Account)
63
+ nworks login
64
+
65
+ # ์ธ์ฆ ํ™•์ธ
66
+ nworks whoami
67
+
68
+ # ๋กœ๊ทธ์•„์›ƒ
69
+ nworks logout
70
+ ```
71
+
72
+ > `nworks login --user`๋Š” CLIENT_ID + CLIENT_SECRET๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ๋ณ€์ˆ˜๋‚˜ ๊ธฐ์กด ์„ค์ •์— ์ด๋ฏธ ์žˆ๋Š” ๊ฐ’์€ ๋‹ค์‹œ ๋ฌผ์–ด๋ณด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
73
+
74
+ > **Developer Console ์„ค์ •**: User OAuth๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด [Developer Console](https://dev.worksmobile.com)์—์„œ Redirect URL์— `http://localhost:9876/callback`์„ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
75
+
76
+ ---
77
+
78
+ ## AI ์—์ด์ „ํŠธ ์—ฐ๋™ (MCP ์„œ๋ฒ„)
79
+
80
+ Claude Desktop, Cursor ๋“ฑ MCP ํ˜ธํ™˜ ํด๋ผ์ด์–ธํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
81
+
82
+ ### ์„ค์ •
83
+
84
+ ๋จผ์ € ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค:
85
+
86
+ ```bash
87
+ nworks login --user --scope "calendar calendar.read file file.read mail mail.read task task.read board board.read user.read"
88
+ ```
89
+
90
+ ๊ทธ๋ฆฌ๊ณ  MCP ์„ค์ •์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค (`~/.config/claude/claude_desktop_config.json`):
91
+
92
+ ```json
93
+ {
94
+ "mcpServers": {
95
+ "nworks": {
96
+ "command": "nworks",
97
+ "args": ["mcp"]
98
+ }
99
+ }
100
+ }
101
+ ```
102
+
103
+ ๋กœ๊ทธ์ธ ํ•œ ๋ฒˆ์ด๋ฉด 28๊ฐœ ๋„๊ตฌ ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ๋ณ„๋„ env ์„ค์ • ๋ถˆํ•„์š”.
104
+
105
+ > **MCP์—์„œ AI ์—์ด์ „ํŠธ๊ฐ€ ์ง์ ‘ ์„ค์ •ํ•˜๊ธฐ**: CLI ๋กœ๊ทธ์ธ ์—†์ด๋„ AI ์—์ด์ „ํŠธ๊ฐ€ `nworks_setup` โ†’ `nworks_login_user` ์ˆœ์„œ๋กœ ํ˜ธ์ถœํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ๋กœ๊ทธ์ธ๋งŒ์œผ๋กœ ์ „์ฒด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Client Secret๊ณผ Private Key ๊ฒฝ๋กœ๋Š” MCP ์„ค์ •์˜ `env` ํ•„๋“œ ๋˜๋Š” ์‹œ์Šคํ…œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๋ฏธ๋ฆฌ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
106
+
107
+ ### MCP ๋„๊ตฌ ๋ชฉ๋ก (28๊ฐœ)
108
+
109
+ | ๋„๊ตฌ | ์„ค๋ช… | ํ•„์š” ์ธ์ฆ |
110
+ |------|------|----------|
111
+ | **์„ค์ •/์ธ์ฆ** | | |
112
+ | `nworks_setup` | API ์ธ์ฆ ์ •๋ณด ์„ค์ • (Client ID ๋“ฑ). Client Secret์€ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ • | โ€” |
113
+ | `nworks_login_user` | User OAuth ๋ธŒ๋ผ์šฐ์ € ๋กœ๊ทธ์ธ (์ „์ฒด scope ์ž๋™ ํฌํ•จ) | โ€” |
114
+ | `nworks_logout` | ์ธ์ฆ ์ •๋ณด ๋ฐ ํ† ํฐ ์‚ญ์ œ | โ€” |
115
+ | `nworks_whoami` | ์ธ์ฆ ์ƒํƒœ ํ™•์ธ | โ€” |
116
+ | `nworks_doctor` | ์—ฐ๊ฒฐ ์ƒํƒœ ์ง„๋‹จ (์ธ์ฆ, ํ† ํฐ, API ์ ๊ฒ€) | โ€” |
117
+ | **๋ฉ”์‹œ์ง€** | | |
118
+ | `nworks_message_send` | ์‚ฌ์šฉ์ž/์ฑ„๋„์— ๋ฉ”์‹œ์ง€ ์ „์†ก | Service Account |
119
+ | `nworks_message_members` | ์ฑ„๋„ ๊ตฌ์„ฑ์› ์กฐํšŒ | Service Account |
120
+ | `nworks_directory_members` | ์กฐ์ง ๊ตฌ์„ฑ์› ์กฐํšŒ | Service Account |
121
+ | **์บ˜๋ฆฐ๋”** | | |
122
+ | `nworks_calendar_list` | ๋ชจ๋“  ์บ˜๋ฆฐ๋”์˜ ์ผ์ • ์กฐํšŒ (์ง‘๊ณ„) | User OAuth (calendar.read) |
123
+ | `nworks_calendar_calendars` | ์บ˜๋ฆฐ๋” ๋ชฉ๋ก ๋ฐ ID ์กฐํšŒ | User OAuth (calendar.read) |
124
+ | `nworks_calendar_create` | ์บ˜๋ฆฐ๋” ์ผ์ • ์ƒ์„ฑ | User OAuth (calendar + calendar.read) |
125
+ | `nworks_calendar_update` | ์บ˜๋ฆฐ๋” ์ผ์ • ์ˆ˜์ • | User OAuth (calendar + calendar.read) |
126
+ | `nworks_calendar_delete` | ์บ˜๋ฆฐ๋” ์ผ์ • ์‚ญ์ œ | User OAuth (calendar + calendar.read) |
127
+ | **๋“œ๋ผ์ด๋ธŒ** | | |
128
+ | `nworks_drive_list` | ๋“œ๋ผ์ด๋ธŒ ํŒŒ์ผ/ํด๋” ๋ชฉ๋ก | User OAuth (file.read) |
129
+ | `nworks_drive_upload` | ๋“œ๋ผ์ด๋ธŒ ํŒŒ์ผ ์—…๋กœ๋“œ | User OAuth (file) |
130
+ | `nworks_drive_download` | ๋“œ๋ผ์ด๋ธŒ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ (5MB ์ดˆ๊ณผ ์‹œ ๋กœ์ปฌ ์ €์žฅ) | User OAuth (file.read) |
131
+ | **๋ฉ”์ผ** | | |
132
+ | `nworks_mail_send` | ๋ฉ”์ผ ์ „์†ก | User OAuth (mail) |
133
+ | `nworks_mail_list` | ๋ฉ”์ผ ๋ชฉ๋ก ์กฐํšŒ | User OAuth (mail.read) |
134
+ | `nworks_mail_read` | ๋ฉ”์ผ ์ƒ์„ธ ์กฐํšŒ (๋ณธ๋ฌธ ์ •์ œ ํ‰๋ฌธ) | User OAuth (mail.read) |
135
+ | `nworks_mail_attachment` | ์ฒจ๋ถ€ํŒŒ์ผ ํ…์ŠคํŠธ ์ฝ๊ธฐ (txt/csv/json/html ๋“ฑ) | User OAuth (mail.read) |
136
+ | **ํ•  ์ผ** | | |
137
+ | `nworks_task_list` | ํ•  ์ผ ๋ชฉ๋ก ์กฐํšŒ | User OAuth (task.read) |
138
+ | `nworks_task_create` | ํ•  ์ผ ์ƒ์„ฑ | User OAuth (task + user.read) |
139
+ | `nworks_task_update` | ํ•  ์ผ ์ˆ˜์ •/์™„๋ฃŒ | User OAuth (task + user.read) |
140
+ | `nworks_task_delete` | ํ•  ์ผ ์‚ญ์ œ | User OAuth (task + user.read) |
141
+ | **๊ฒŒ์‹œํŒ** | | |
142
+ | `nworks_board_list` | ๊ฒŒ์‹œํŒ ๋ชฉ๋ก ์กฐํšŒ | User OAuth (board.read) |
143
+ | `nworks_board_posts` | ๊ฒŒ์‹œํŒ ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ | User OAuth (board.read) |
144
+ | `nworks_board_read` | ๊ฒŒ์‹œํŒ ๊ธ€ ์ƒ์„ธ ์กฐํšŒ | User OAuth (board.read) |
145
+ | `nworks_board_create` | ๊ฒŒ์‹œํŒ ๊ธ€ ์ž‘์„ฑ | User OAuth (board) |
146
+
147
+ ### AI ์—์ด์ „ํŠธ ์‚ฌ์šฉ ์˜ˆ์‹œ
148
+
149
+ ```
150
+ User: ๋‚ด์ผ ์˜คํ›„ 2์‹œ์— ํšŒ์˜ ์žก๊ณ , ํŒ€ ์ฑ„๋„์— ์•Œ๋ ค์ค˜
151
+
152
+ Claude โ†’ nworks_calendar_create
153
+ { "summary": "ํšŒ์˜", "start": "2026-03-15T14:00:00", "end": "2026-03-15T15:00:00" }
154
+ โ†’ ์ผ์ •์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
155
+
156
+ Claude โ†’ nworks_message_send
157
+ { "channel": "C001", "text": "๋‚ด์ผ 14:00 ํšŒ์˜๊ฐ€ ์žกํ˜”์Šต๋‹ˆ๋‹ค" }
158
+ โ†’ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค
159
+
160
+ User: ์ฝ์ง€ ์•Š์€ ๋ฉ”์ผ ํ™•์ธํ•˜๊ณ  ์š”์•ฝํ•ด์ค˜
161
+
162
+ Claude โ†’ nworks_mail_list (unread)
163
+ โ†’ ์ฝ์ง€ ์•Š์€ ๋ฉ”์ผ 3ํ†ต
164
+ Claude โ†’ nworks_mail_read (๊ฐ๊ฐ)
165
+ โ†’ "3ํ†ต: 1) CTO ๋ฐฐํฌ ์Šน์ธ, 2) ๊ธˆ์š”์ผ ํšŒ์˜ ์ดˆ๋Œ€, 3) ์ฃผ๊ฐ„ ๋ณด๊ณ  ๋ฆฌ๋งˆ์ธ๋”"
166
+ ```
167
+
168
+ ---
169
+
170
+ ## CLI ์‚ฌ์šฉ๋ฒ•
171
+
172
+ > ๋ชจ๋“  ๋ช…๋ น์–ด์— `--json` ์ง€์› (ํŒŒ์ดํ”„, ์Šคํฌ๋ฆฝํŠธ, ์—์ด์ „ํŠธ ํŒŒ์‹ฑ ์šฉ์ด). `message send`, `mail send`, `drive upload`๋Š” `--dry-run`์œผ๋กœ ์‹ค์ œ ์ „์†ก ์—†์ด ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ.
173
+
174
+ ### ๋ฉ”์‹œ์ง€ (Bot API)
175
+
176
+ ```bash
177
+ # ์‚ฌ์šฉ์ž์—๊ฒŒ ํ…์ŠคํŠธ ๋ฉ”์‹œ์ง€
178
+ nworks message send --to <userId> --text "๋ฉ”์‹œ์ง€"
179
+
180
+ # ์ฑ„๋„์— ํ…์ŠคํŠธ ๋ฉ”์‹œ์ง€
181
+ nworks message send --channel <channelId> --text "๋ฉ”์‹œ์ง€"
182
+
183
+ # ๋ฒ„ํŠผ ๋ฉ”์‹œ์ง€
184
+ nworks message send --to <userId> --type button --text "PR ๋ฆฌ๋ทฐ ์š”์ฒญ" \
185
+ --actions '[{"type":"message","label":"์Šน์ธ","postback":"approve"}]'
186
+
187
+ # ๋ฆฌ์ŠคํŠธ ๋ฉ”์‹œ์ง€
188
+ nworks message send --to <userId> --type list --text "์˜ค๋Š˜์˜ ํ•  ์ผ" \
189
+ --elements '[{"title":"์ฝ”๋“œ ๋ฆฌ๋ทฐ","subtitle":"#382 PR"}]'
190
+
191
+ # ์ฑ„๋„ ๊ตฌ์„ฑ์› ์กฐํšŒ
192
+ nworks message members --channel <channelId>
193
+ ```
194
+
195
+ ### ์กฐ์ง (Directory API)
196
+
197
+ ```bash
198
+ nworks directory members # ์กฐ์ง ๊ตฌ์„ฑ์› ๋ชฉ๋ก
199
+ ```
200
+
201
+ ### ์บ˜๋ฆฐ๋” (User OAuth)
202
+
203
+ ```bash
204
+ # ์˜ค๋Š˜ ์ผ์ • ์กฐํšŒ (๋ชจ๋“  ์บ˜๋ฆฐ๋” ์ง‘๊ณ„)
205
+ nworks calendar list
206
+
207
+ # ์บ˜๋ฆฐ๋” ๋ชฉ๋ก ๋ฐ ID ์กฐํšŒ
208
+ nworks calendar calendars
209
+
210
+ # ๊ธฐ๊ฐ„ ์ง€์ •
211
+ nworks calendar list --from "2026-03-14T00:00:00+09:00" --until "2026-03-14T23:59:59+09:00"
212
+
213
+ # ํŠน์ • ์บ˜๋ฆฐ๋”๋งŒ ์กฐํšŒ
214
+ nworks calendar list --calendar "<calendarId>"
215
+
216
+ # ์ผ์ • ์ƒ์„ฑ
217
+ nworks calendar create --title "ํšŒ์˜" --start "2026-03-14T14:00+09:00" --end "2026-03-14T15:00+09:00"
218
+
219
+ # ์žฅ์†Œ/์„ค๋ช… ํฌํ•จ
220
+ nworks calendar create --title "์ ์‹ฌ ๋ฏธํŒ…" --start "2026-03-14T12:00+09:00" --end "2026-03-14T13:00+09:00" \
221
+ --location "๊ฐ•๋‚จ ์‹๋‹น" --description "๋ถ„๊ธฐ ๋ฆฌ๋ทฐ"
222
+
223
+ # ์ฐธ์„์ž ์ง€์ • + ์•Œ๋ฆผ
224
+ nworks calendar create --title "ํŒ€ ํšŒ์˜" --start "2026-03-14T10:00+09:00" --end "2026-03-14T11:00+09:00" \
225
+ --attendees "user1@example.com,user2@example.com" --notify
226
+
227
+ # ์ผ์ • ์ˆ˜์ •
228
+ nworks calendar update --id <eventId> --title "๋ณ€๊ฒฝ๋œ ์ œ๋ชฉ"
229
+
230
+ # ์ผ์ • ์‚ญ์ œ
231
+ nworks calendar delete --id <eventId>
232
+ ```
233
+
234
+ ### ๋“œ๋ผ์ด๋ธŒ (User OAuth)
235
+
236
+ ```bash
237
+ # ํŒŒ์ผ/ํด๋” ๋ชฉ๋ก
238
+ nworks drive list
239
+
240
+ # ํŒŒ์ผ ์—…๋กœ๋“œ
241
+ nworks drive upload --file ./report.pdf
242
+
243
+ # ํŠน์ • ํด๋”์— ์—…๋กœ๋“œ
244
+ nworks drive upload --file ./report.pdf --folder <folderId>
245
+
246
+ # ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ
247
+ nworks drive download --file-id <fileId>
248
+
249
+ # ๋‹ค์šด๋กœ๋“œ ๊ฒฝ๋กœ/ํŒŒ์ผ๋ช… ์ง€์ •
250
+ nworks drive download --file-id <fileId> --out ./downloads --name report.pdf
251
+ ```
252
+
253
+ ### ๋ฉ”์ผ (User OAuth)
254
+
255
+ ```bash
256
+ # ๋ฉ”์ผ ์ „์†ก
257
+ nworks mail send --to "user@example.com" --subject "์ œ๋ชฉ" --body "๋‚ด์šฉ"
258
+
259
+ # CC/BCC ํฌํ•จ
260
+ nworks mail send --to "user@example.com" --cc "cc@example.com" --subject "์ œ๋ชฉ" --body "๋‚ด์šฉ"
261
+
262
+ # ๋ฐ›์€ํŽธ์ง€ํ•จ ๋ชฉ๋ก
263
+ nworks mail list
264
+
265
+ # ์ฝ์ง€ ์•Š์€ ๋ฉ”์ผ๋งŒ
266
+ nworks mail list --unread
267
+
268
+ # ๋ฉ”์ผ ์ƒ์„ธ ์กฐํšŒ (๋ณธ๋ฌธ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •์ œ๋œ ํ‰๋ฌธ)
269
+ nworks mail read --id <mailId>
270
+
271
+ # ์›๋ณธ HTML ๋ณธ๋ฌธ ๊ทธ๋Œ€๋กœ ๋ณด๊ธฐ
272
+ nworks mail read --id <mailId> --html
273
+
274
+ # ์ฒจ๋ถ€ํŒŒ์ผ ํ…์ŠคํŠธ ์ฝ๊ธฐ (txt/csv/json/html/ics ๋“ฑ). attachmentId๋Š” `mail read`๋กœ ์กฐํšŒ
275
+ nworks mail attachment --id <mailId> --attachment <attachmentId>
276
+
277
+ # ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฒจ๋ถ€(PDFยท์ด๋ฏธ์ง€ยท์˜คํ”ผ์Šค ๋ฌธ์„œ)๋Š” ํŒŒ์ผ๋กœ ์ €์žฅ
278
+ nworks mail attachment --id <mailId> --attachment <attachmentId> --out ./downloads
279
+ ```
280
+
281
+ > ๋ฉ”์ผ ๋ณธ๋ฌธ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ HTML ํƒœ๊ทธ๋ฅผ ์ œ๊ฑฐํ•œ ์ฝ๊ธฐ ์ข‹์€ ํ‰๋ฌธ์œผ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค (AI ์š”์•ฝ์— ์ ํ•ฉ).
282
+ > ์›๋ณธ HTML์ด ํ•„์š”ํ•˜๋ฉด `--html`(CLI) ๋˜๋Š” `format: "html" | "both"`(MCP `nworks_mail_read`)์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
283
+ >
284
+ > `mail attachment`๋Š” ํ…์ŠคํŠธ๋ฅ˜ ์ฒจ๋ถ€๋ฅผ ๋ณธ๋ฌธ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค(HTML์€ ์ •์ œ). PDFยท์˜คํ”ผ์Šคยท์ด๋ฏธ์ง€ ๊ฐ™์€
285
+ > ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ํ…์ŠคํŠธ ์ถ”์ถœ์ด ์•ˆ ๋˜๋ฉฐ `--out`์œผ๋กœ ์ €์žฅํ•˜์„ธ์š”.
286
+
287
+ ### ํ•  ์ผ (User OAuth)
288
+
289
+ ```bash
290
+ # ํ•  ์ผ ๋ชฉ๋ก
291
+ nworks task list
292
+
293
+ # ๋ฏธ์™„๋ฃŒ๋งŒ ์กฐํšŒ
294
+ nworks task list --status TODO
295
+
296
+ # ํ•  ์ผ ์ƒ์„ฑ
297
+ nworks task create --title "์ฝ”๋“œ ๋ฆฌ๋ทฐ" --body "PR #382 ๋ฆฌ๋ทฐ"
298
+
299
+ # ๋งˆ๊ฐ์ผ ์ง€์ •
300
+ nworks task create --title "๋ฐฐํฌ" --due 2026-03-20
301
+
302
+ # ํ•  ์ผ ์™„๋ฃŒ ์ฒ˜๋ฆฌ
303
+ nworks task update --id <taskId> --status done
304
+
305
+ # ํ•  ์ผ ์‚ญ์ œ
306
+ nworks task delete --id <taskId>
307
+ ```
308
+
309
+ ### ๊ฒŒ์‹œํŒ (User OAuth)
310
+
311
+ ```bash
312
+ # ๊ฒŒ์‹œํŒ ๋ชฉ๋ก
313
+ nworks board list
314
+
315
+ # ๊ฒŒ์‹œํŒ ๊ธ€ ๋ชฉ๋ก
316
+ nworks board posts --board <boardId>
317
+
318
+ # ๊ธ€ ์ƒ์„ธ ์กฐํšŒ
319
+ nworks board read --board <boardId> --post <postId>
320
+
321
+ # ๊ธ€ ์ž‘์„ฑ
322
+ nworks board create --board <boardId> --title "๊ณต์ง€์‚ฌํ•ญ" --body "๋‚ด์šฉ"
323
+
324
+ # ์•Œ๋ฆผ ๋ฐœ์†ก + ๋Œ“๊ธ€ ๋น„ํ™œ์„ฑํ™”
325
+ nworks board create --board <boardId> --title "๊ณต์ง€" --body "๋‚ด์šฉ" --notify --no-comment
326
+ ```
327
+
328
+ ### CI/CD ๋ฐฐํฌ ์•Œ๋ฆผ
329
+
330
+ ```bash
331
+ # GitHub Actions์—์„œ ๋ฐฐํฌ ์™„๋ฃŒ ํ›„ ํŒ€ ์ฑ„๋„์— ์•Œ๋ฆผ
332
+ nworks message send --channel $CHANNEL_ID --text "v${VERSION} ๋ฐฐํฌ ์™„๋ฃŒ"
333
+ ```
334
+
335
+ ### ํŒ€ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ
336
+
337
+ ```bash
338
+ # ๋งค์ผ ์•„์นจ ํŒ€์›์—๊ฒŒ ๋ฆฌ๋งˆ์ธ๋” ์ „์†ก
339
+ for userId in $(nworks directory members --json | jq -r '.users[].userId'); do
340
+ nworks message send --to "$userId" --text "์˜ค๋Š˜์˜ ์Šคํƒ ๋“œ์—… 10์‹œ์ž…๋‹ˆ๋‹ค"
341
+ done
342
+ ```
343
+
344
+ ---
345
+
346
+ ## OAuth Scope ์„ค์ •
347
+
348
+ [NAVER WORKS Developer Console](https://dev.worksmobile.com)์—์„œ ์•ฑ์˜ OAuth Scope๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
349
+
350
+ | Scope | ์šฉ๋„ | ์ธ์ฆ ๋ฐฉ์‹ | ํ•„์š”ํ•œ ๋ช…๋ น์–ด |
351
+ |-------|------|----------|--------------|
352
+ | `bot` | Bot ๋ฉ”์‹œ์ง€ ์ „์†ก | Service Account | `message send` |
353
+ | `bot.read` | Bot ์ฑ„๋„/๊ตฌ์„ฑ์› ์กฐํšŒ | Service Account | `message members` |
354
+ | `calendar` | ์บ˜๋ฆฐ๋” ์“ฐ๊ธฐ | User OAuth | `calendar create/update/delete` (calendar.read๋„ ํ•จ๊ป˜ ํ•„์š”) |
355
+ | `calendar.read` | ์บ˜๋ฆฐ๋” ์ฝ๊ธฐ | User OAuth | `calendar list`, `calendar create/update/delete`์˜ ์˜์กด์„ฑ |
356
+ | `file` | ๋“œ๋ผ์ด๋ธŒ ์ฝ๊ธฐ/์“ฐ๊ธฐ | User OAuth | `drive list/upload/download` |
357
+ | `file.read` | ๋“œ๋ผ์ด๋ธŒ ์ฝ๊ธฐ ์ „์šฉ | User OAuth | `drive list/download` |
358
+ | `mail` | ๋ฉ”์ผ ์ฝ๊ธฐ/์“ฐ๊ธฐ | User OAuth | `mail send/list/read` |
359
+ | `mail.read` | ๋ฉ”์ผ ์ฝ๊ธฐ ์ „์šฉ | User OAuth | `mail list/read` |
360
+ | `task` | ํ•  ์ผ ์ฝ๊ธฐ/์“ฐ๊ธฐ | User OAuth | `task create/update/delete` (user.read๋„ ํ•จ๊ป˜ ํ•„์š”) |
361
+ | `task.read` | ํ•  ์ผ ์ฝ๊ธฐ ์ „์šฉ | User OAuth | `task list` |
362
+ | `user.read` | ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ | Service Account / User OAuth | `directory members`, `task create/update/delete`์˜ ์˜์กด์„ฑ |
363
+ | `board` | ๊ฒŒ์‹œํŒ ์ฝ๊ธฐ/์“ฐ๊ธฐ | User OAuth | `board list/posts/read/create` |
364
+ | `board.read` | ๊ฒŒ์‹œํŒ ์ฝ๊ธฐ ์ „์šฉ | User OAuth | `board list/posts/read` |
365
+
366
+ > **Tip**: scope๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„์—๋Š” ํ† ํฐ์„ ์žฌ๋ฐœ๊ธ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
367
+ > ```bash
368
+ > nworks logout && nworks login --user --scope "..."
369
+ > ```
370
+
371
+ ---
372
+
373
+ ## ํ™˜๊ฒฝ ๋ณ€์ˆ˜
374
+
375
+ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ธ์ฆ ์ •๋ณด๋ฅผ ์„ค์ •ํ•˜๋ฉด `nworks login` ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (CI/์—์ด์ „ํŠธ์šฉ).
376
+
377
+ ```bash
378
+ # ๊ณตํ†ต (ํ•„์ˆ˜)
379
+ NWORKS_CLIENT_ID=
380
+ NWORKS_CLIENT_SECRET=
381
+
382
+ # ๋ด‡ ๋ฉ”์‹œ์ง€ ์ „์†ก ์‹œ์—๋งŒ ํ•„์š” (User OAuth๋งŒ ์“ฐ๋ฉด ๋ถˆํ•„์š”)
383
+ NWORKS_SERVICE_ACCOUNT=
384
+ NWORKS_PRIVATE_KEY_PATH=
385
+ NWORKS_BOT_ID=
386
+
387
+ # ์„ ํƒ
388
+ NWORKS_DOMAIN_ID=
389
+ NWORKS_SCOPE= # ๊ธฐ๋ณธ: bot bot.read user.read
390
+ NWORKS_VERBOSE=1 # ๋””๋ฒ„๊ทธ ๋กœ๊น…
391
+ ```
392
+
393
+ ### MCP ์„œ๋ฒ„์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ง์ ‘ ์„ค์ •
394
+
395
+ ๋ฏผ๊ฐ ์ •๋ณด(Client Secret, Private Key ๊ฒฝ๋กœ)๋Š” MCP ์„ค์ •์˜ `env` ํ•„๋“œ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Client ID ๋“ฑ ๋ฏผ๊ฐํ•˜์ง€ ์•Š์€ ๊ฐ’์€ AI ์—์ด์ „ํŠธ๊ฐ€ `nworks_setup` tool๋กœ ์ง์ ‘ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
396
+
397
+ ```json
398
+ {
399
+ "mcpServers": {
400
+ "nworks": {
401
+ "command": "npx",
402
+ "args": ["-y", "nworks", "mcp"],
403
+ "env": {
404
+ "NWORKS_CLIENT_SECRET": "<Client Secret>",
405
+ "NWORKS_PRIVATE_KEY_PATH": "<Private Key ํŒŒ์ผ ์ ˆ๋Œ€ ๊ฒฝ๋กœ (Service Account ์‚ฌ์šฉ ์‹œ)>"
406
+ }
407
+ }
408
+ }
409
+ }
410
+ ```
411
+
412
+ ---
413
+
414
+ ## License
415
+
416
+ Apache-2.0