nworks 1.1.0 β†’ 1.1.2

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.
Files changed (4) hide show
  1. package/README.ja.md +395 -0
  2. package/README.ko.md +395 -0
  3. package/README.md +201 -200
  4. package/package.json +2 -2
package/README.md CHANGED
@@ -3,15 +3,18 @@
3
3
  [![npm version](https://img.shields.io/npm/v/nworks.svg)](https://www.npmjs.com/package/nworks)
4
4
  [![license](https://img.shields.io/npm/l/nworks.svg)](LICENSE)
5
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.ko.md) | [πŸ‡―πŸ‡΅ ζ—₯本θͺž](README.ja.md)
6
11
 
7
12
  <p align="center">
8
13
  <img src="assets/demo.gif" width="600" alt="nworks demo">
9
14
  </p>
10
15
 
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.**
16
+ Full-featured MCP server for LINE WORKS (NAVER WORKS).
17
+ CLI + MCP server β€” 26 tools covering messages, calendar, drive, mail, tasks, and boards.
15
18
 
16
19
  ## Quickstart
17
20
 
@@ -21,64 +24,70 @@ nworks login --user
21
24
  nworks calendar list
22
25
  ```
23
26
 
24
- ### AI μ—μ΄μ „νŠΈκ°€ μ‹€μ œλ‘œ μ΄λ ‡κ²Œ μ”λ‹ˆλ‹€
27
+ ### AI Agents Actually Use It Like This
25
28
 
26
29
  ```
27
- User: 였늘 일정 μ•Œλ €μ€˜
30
+ User: Show me today's schedule
28
31
 
29
32
  Claude β†’ nworks_calendar_list
30
- β†’ 3건: μŠ€νƒ λ“œμ—…(10:00), μ μ‹¬λ―ΈνŒ…(12:00), μ½”λ“œλ¦¬λ·°(15:00)
33
+ β†’ 3 events: Standup (10:00), Lunch meeting (12:00), Code review (15:00)
31
34
 
32
- User: νŒ€ 채널에 배포 μ™„λ£Œ λ©”μ‹œμ§€ λ³΄λ‚΄μ€˜
35
+ User: Send a deploy complete message to the team channel
33
36
 
34
37
  Claude β†’ nworks_message_send
35
- { "channel": "C001", "text": "v1.2.0 배포 μ™„λ£Œ" }
36
- β†’ λ©”μ‹œμ§€κ°€ μ „μ†‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€
38
+ { "channel": "C001", "text": "v1.2.0 deploy complete" }
39
+ β†’ Message sent
40
+
41
+ User: Check my unread emails and summarize them
42
+
43
+ Claude β†’ nworks_mail_list (unread)
44
+ β†’ 3 unread emails
45
+ Claude β†’ nworks_mail_read (each)
46
+ β†’ "3 unread: 1) Deploy approval from CTO, 2) Meeting invite for Friday, 3) Weekly report reminder"
37
47
  ```
38
48
 
39
49
  ## Install
40
50
 
41
51
  ```bash
42
- npx nworks # λ°”λ‘œ μ‹€ν–‰
43
- npm install -g nworks # κΈ€λ‘œλ²Œ μ„€μΉ˜
52
+ npx nworks # Run directly
53
+ npm install -g nworks # Global install
44
54
  ```
45
55
 
46
- ## 둜그인
56
+ ## Login
47
57
 
48
58
  ```bash
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"
59
+ # User OAuth (calendar, drive, mail, tasks, boards)
60
+ nworks login --user --scope "calendar calendar.read file file.read mail mail.read task task.read board board.read user.read"
51
61
 
52
- # 봇 λ©”μ‹œμ§€ 전솑이 ν•„μš”ν•œ 경우 (Service Account)
62
+ # Bot messaging (Service Account)
53
63
  nworks login
54
64
 
55
- # 인증 확인
65
+ # Check auth status
56
66
  nworks whoami
57
67
 
58
- # λ‘œκ·Έμ•„μ›ƒ
68
+ # Logout
59
69
  nworks logout
60
70
  ```
61
71
 
62
- > `nworks login --user`λŠ” CLIENT_ID + CLIENT_SECRET만 있으면 λ©λ‹ˆλ‹€. ν™˜κ²½λ³€μˆ˜λ‚˜ κΈ°μ‘΄ 섀정에 이미 μžˆλŠ” 값은 λ‹€μ‹œ 물어보지 μ•ŠμŠ΅λ‹ˆλ‹€.
72
+ > `nworks login --user` only requires CLIENT_ID + CLIENT_SECRET. Values already set via environment variables or existing config won't be asked again.
63
73
 
64
- > **Developer Console μ„€μ •**: User OAuthλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ [Developer Console](https://dev.worksmobile.com)μ—μ„œ Redirect URL에 `http://localhost:9876/callback`을 등둝해야 ν•©λ‹ˆλ‹€.
74
+ > **Developer Console**: To use User OAuth, register `http://localhost:9876/callback` as a Redirect URL in the [Developer Console](https://dev.worksmobile.com/en/).
65
75
 
66
76
  ---
67
77
 
68
- ## MCP μ„œλ²„ (AI μ—μ΄μ „νŠΈ 연동)
78
+ ## AI Agent Integration (MCP Server)
69
79
 
70
- Claude Desktop, Cursor λ“±μ—μ„œ MCP server둜 NAVER WORKS 26개 도ꡬλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
71
- λ©”μ‹œμ§€ 전솑, 일정 관리, 파일 μ—…λ‘œλ“œ, 메일, ν•  일, κ²Œμ‹œνŒκΉŒμ§€ β€” AI μ—μ΄μ „νŠΈκ°€ NAVER WORKS μ›Œν¬ν”Œλ‘œμš°λ₯Ό μžλ™ν™”ν•©λ‹ˆλ‹€.
80
+ Works with Claude Desktop, Cursor, and other MCP-compatible clients.
72
81
 
73
- ### μ„€μ •
82
+ ### Setup
74
83
 
75
- λ¨Όμ € λ‘œκ·ΈμΈν•©λ‹ˆλ‹€:
84
+ Login first:
76
85
 
77
86
  ```bash
78
- nworks login --user --scope "calendar,calendar.read,file,file.read,mail,mail.read,task,task.read,board,board.read,user.read"
87
+ nworks login --user --scope "calendar calendar.read file file.read mail mail.read task task.read board board.read user.read"
79
88
  ```
80
89
 
81
- 그리고 MCP 섀정에 μΆ”κ°€ν•©λ‹ˆλ‹€ (`~/.config/claude/claude_desktop_config.json`):
90
+ Then add to your MCP config (`~/.config/claude/claude_desktop_config.json`):
82
91
 
83
92
  ```json
84
93
  {
@@ -91,273 +100,276 @@ nworks login --user --scope "calendar,calendar.read,file,file.read,mail,mail.rea
91
100
  }
92
101
  ```
93
102
 
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 μ—μ΄μ „νŠΈ μ‚¬μš© μ˜ˆμ‹œ
103
+ One login enables all 26 tools. No extra env setup needed.
104
+
105
+ > Without CLI login, an AI agent can call `nworks_setup` β†’ `nworks_login_user` to authenticate via browser directly.
106
+
107
+ ### MCP Tools (26)
108
+
109
+ | Tool | Description | Auth |
110
+ |------|-------------|------|
111
+ | **Setup / Auth** | | |
112
+ | `nworks_setup` | Configure API credentials (Client ID/Secret) | β€” |
113
+ | `nworks_login_user` | User OAuth browser login (all scopes included) | β€” |
114
+ | `nworks_logout` | Delete credentials and tokens | β€” |
115
+ | `nworks_whoami` | Check auth status | β€” |
116
+ | `nworks_doctor` | Diagnose connection (auth, tokens, API health) | β€” |
117
+ | **Messages** | | |
118
+ | `nworks_message_send` | Send message to user/channel | Service Account |
119
+ | `nworks_message_members` | List channel members | Service Account |
120
+ | `nworks_directory_members` | List organization members | Service Account |
121
+ | **Calendar** | | |
122
+ | `nworks_calendar_list` | List calendar events | User OAuth (calendar.read) |
123
+ | `nworks_calendar_create` | Create calendar event | User OAuth (calendar + calendar.read) |
124
+ | `nworks_calendar_update` | Update calendar event | User OAuth (calendar + calendar.read) |
125
+ | `nworks_calendar_delete` | Delete calendar event | User OAuth (calendar + calendar.read) |
126
+ | **Drive** | | |
127
+ | `nworks_drive_list` | List drive files/folders | User OAuth (file.read) |
128
+ | `nworks_drive_upload` | Upload file to drive | User OAuth (file) |
129
+ | `nworks_drive_download` | Download file (saves locally if >5MB) | User OAuth (file.read) |
130
+ | **Mail** | | |
131
+ | `nworks_mail_send` | Send mail | User OAuth (mail) |
132
+ | `nworks_mail_list` | List mailbox | User OAuth (mail.read) |
133
+ | `nworks_mail_read` | Read mail detail | User OAuth (mail.read) |
134
+ | **Tasks** | | |
135
+ | `nworks_task_list` | List tasks | User OAuth (task.read) |
136
+ | `nworks_task_create` | Create task | User OAuth (task + user.read) |
137
+ | `nworks_task_update` | Update/complete task | User OAuth (task + user.read) |
138
+ | `nworks_task_delete` | Delete task | User OAuth (task + user.read) |
139
+ | **Boards** | | |
140
+ | `nworks_board_list` | List boards | User OAuth (board.read) |
141
+ | `nworks_board_posts` | List board posts | User OAuth (board.read) |
142
+ | `nworks_board_read` | Read board post detail | User OAuth (board.read) |
143
+ | `nworks_board_create` | Create board post | User OAuth (board) |
144
+
145
+ ### AI Agent Usage Example
137
146
 
138
147
  ```
139
- User: 내일 μ˜€ν›„ 2μ‹œμ— 회의 작고, νŒ€ 채널에 μ•Œλ €μ€˜
148
+ User: Schedule a meeting tomorrow at 2pm and notify the team channel
140
149
 
141
150
  Claude β†’ nworks_calendar_create
142
- { "summary": "회의", "start": "2026-03-15T14:00:00", "end": "2026-03-15T15:00:00" }
143
- β†’ 일정이 μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€
151
+ { "summary": "Meeting", "start": "2026-03-15T14:00:00", "end": "2026-03-15T15:00:00" }
152
+ β†’ Event created
144
153
 
145
154
  Claude β†’ nworks_message_send
146
- { "channel": "C001", "text": "내일 14:00 νšŒμ˜κ°€ μž‘ν˜”μŠ΅λ‹ˆλ‹€" }
147
- β†’ λ©”μ‹œμ§€κ°€ μ „μ†‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€
155
+ { "channel": "C001", "text": "Meeting scheduled tomorrow at 14:00" }
156
+ β†’ Message sent
157
+
158
+ User: Check my unread emails and summarize them
159
+
160
+ Claude β†’ nworks_mail_list (unread)
161
+ β†’ 3 unread emails
162
+ Claude β†’ nworks_mail_read (each)
163
+ β†’ "3 unread: 1) Deploy approval from CTO, 2) Meeting invite for Friday, 3) Weekly report reminder"
148
164
  ```
149
165
 
150
166
  ---
151
167
 
152
- ## CLI μ‚¬μš©λ²•
168
+ ## CLI Usage
153
169
 
154
- > λͺ¨λ“  λͺ…령어에 `--json` 지원 (νŒŒμ΄ν”„, 슀크립트, μ—μ΄μ „νŠΈ νŒŒμ‹± 용이). `message send`, `mail send`, `drive upload`λŠ” `--dry-run`으둜 μ‹€μ œ 전솑 없이 ν…ŒμŠ€νŠΈ κ°€λŠ₯.
170
+ > All commands support `--json` for pipe/script/agent parsing. `message send`, `mail send`, and `drive upload` support `--dry-run` for testing without sending.
155
171
 
156
- ### λ©”μ‹œμ§€ (Bot API)
172
+ ### Messages (Bot API)
157
173
 
158
174
  ```bash
159
- # μ‚¬μš©μžμ—κ²Œ ν…μŠ€νŠΈ λ©”μ‹œμ§€
160
- nworks message send --to <userId> --text "λ©”μ‹œμ§€"
175
+ # Send text to user
176
+ nworks message send --to <userId> --text "Hello"
161
177
 
162
- # 채널에 ν…μŠ€νŠΈ λ©”μ‹œμ§€
163
- nworks message send --channel <channelId> --text "λ©”μ‹œμ§€"
178
+ # Send text to channel
179
+ nworks message send --channel <channelId> --text "Announcement"
164
180
 
165
- # λ²„νŠΌ λ©”μ‹œμ§€
166
- nworks message send --to <userId> --type button --text "PR 리뷰 μš”μ²­" \
167
- --actions '[{"type":"message","label":"승인","postback":"approve"}]'
181
+ # Button message
182
+ nworks message send --to <userId> --type button --text "PR review request" \
183
+ --actions '[{"type":"message","label":"Approve","postback":"approve"}]'
168
184
 
169
- # 리슀트 λ©”μ‹œμ§€
170
- nworks message send --to <userId> --type list --text "였늘의 ν•  일" \
171
- --elements '[{"title":"μ½”λ“œ 리뷰","subtitle":"#382 PR"}]'
185
+ # List message
186
+ nworks message send --to <userId> --type list --text "Today's tasks" \
187
+ --elements '[{"title":"Code review","subtitle":"PR #382"}]'
172
188
 
173
- # 채널 ꡬ성원 쑰회
189
+ # List channel members
174
190
  nworks message members --channel <channelId>
175
191
  ```
176
192
 
177
- ### 쑰직 (Directory API)
193
+ ### Directory
178
194
 
179
195
  ```bash
180
- nworks directory members # 쑰직 ꡬ성원 λͺ©λ‘
196
+ nworks directory members # List organization members
181
197
  ```
182
198
 
183
- ### μΊ˜λ¦°λ” (User OAuth)
199
+ ### Calendar (User OAuth)
184
200
 
185
201
  ```bash
186
- # 였늘 일정 쑰회
202
+ # List today's events
187
203
  nworks calendar list
188
204
 
189
- # κΈ°κ°„ μ§€μ •
205
+ # Specify date range
190
206
  nworks calendar list --from "2026-03-14T00:00:00+09:00" --until "2026-03-14T23:59:59+09:00"
191
207
 
192
- # 일정 생성
193
- nworks calendar create --title "회의" --start "2026-03-14T14:00+09:00" --end "2026-03-14T15:00+09:00"
208
+ # Create event
209
+ nworks calendar create --title "Meeting" --start "2026-03-14T14:00+09:00" --end "2026-03-14T15:00+09:00"
194
210
 
195
- # μž₯μ†Œ/μ„€λͺ… 포함
196
- nworks calendar create --title "점심 λ―ΈνŒ…" --start "2026-03-14T12:00+09:00" --end "2026-03-14T13:00+09:00" \
197
- --location "강남 식당" --description "λΆ„κΈ° 리뷰"
211
+ # With location/description
212
+ nworks calendar create --title "Lunch" --start "2026-03-14T12:00+09:00" --end "2026-03-14T13:00+09:00" \
213
+ --location "Conference Room" --description "Quarterly review"
198
214
 
199
- # μ°Έμ„μž μ§€μ • + μ•Œλ¦Ό
200
- nworks calendar create --title "νŒ€ 회의" --start "2026-03-14T10:00+09:00" --end "2026-03-14T11:00+09:00" \
215
+ # With attendees + notification
216
+ nworks calendar create --title "Team meeting" --start "2026-03-14T10:00+09:00" --end "2026-03-14T11:00+09:00" \
201
217
  --attendees "user1@example.com,user2@example.com" --notify
202
218
 
203
- # 일정 μˆ˜μ •
204
- nworks calendar update --id <eventId> --title "λ³€κ²½λœ 제λͺ©"
219
+ # Update event
220
+ nworks calendar update --id <eventId> --title "Updated title"
205
221
 
206
- # 일정 μ‚­μ œ
222
+ # Delete event
207
223
  nworks calendar delete --id <eventId>
208
224
  ```
209
225
 
210
- ### λ“œλΌμ΄λΈŒ (User OAuth)
226
+ ### Drive (User OAuth)
211
227
 
212
228
  ```bash
213
- # 파일/폴더 λͺ©λ‘
229
+ # List files/folders
214
230
  nworks drive list
215
231
 
216
- # 파일 μ—…λ‘œλ“œ
232
+ # Upload file
217
233
  nworks drive upload --file ./report.pdf
218
234
 
219
- # νŠΉμ • 폴더에 μ—…λ‘œλ“œ
235
+ # Upload to specific folder
220
236
  nworks drive upload --file ./report.pdf --folder <folderId>
221
237
 
222
- # 파일 λ‹€μš΄λ‘œλ“œ
238
+ # Download file
223
239
  nworks drive download --file-id <fileId>
224
240
 
225
- # λ‹€μš΄λ‘œλ“œ 경둜/파일λͺ… μ§€μ •
241
+ # Specify output path/name
226
242
  nworks drive download --file-id <fileId> --out ./downloads --name report.pdf
227
243
  ```
228
244
 
229
- ### 메일 (User OAuth)
245
+ ### Mail (User OAuth)
230
246
 
231
247
  ```bash
232
- # 메일 전솑
233
- nworks mail send --to "user@example.com" --subject "제λͺ©" --body "λ‚΄μš©"
248
+ # Send mail
249
+ nworks mail send --to "user@example.com" --subject "Subject" --body "Body"
234
250
 
235
- # CC/BCC 포함
236
- nworks mail send --to "user@example.com" --cc "cc@example.com" --subject "제λͺ©" --body "λ‚΄μš©"
251
+ # With CC/BCC
252
+ nworks mail send --to "user@example.com" --cc "cc@example.com" --subject "Subject" --body "Body"
237
253
 
238
- # λ°›μ€νŽΈμ§€ν•¨ λͺ©λ‘
254
+ # List inbox
239
255
  nworks mail list
240
256
 
241
- # 읽지 μ•Šμ€ λ©”μΌλ§Œ
257
+ # Unread only
242
258
  nworks mail list --unread
243
259
 
244
- # 메일 상세 쑰회
260
+ # Read mail detail
245
261
  nworks mail read --id <mailId>
246
262
  ```
247
263
 
248
- ### ν•  일 (User OAuth)
264
+ ### Tasks (User OAuth)
249
265
 
250
266
  ```bash
251
- # ν•  일 λͺ©λ‘
267
+ # List tasks
252
268
  nworks task list
253
269
 
254
- # λ―Έμ™„λ£Œλ§Œ 쑰회
270
+ # Incomplete only
255
271
  nworks task list --status TODO
256
272
 
257
- # ν•  일 생성
258
- nworks task create --title "μ½”λ“œ 리뷰" --body "PR #382 리뷰"
273
+ # Create task
274
+ nworks task create --title "Code review" --body "Review PR #382"
259
275
 
260
- # 마감일 μ§€μ •
261
- nworks task create --title "배포" --due 2026-03-20
276
+ # With due date
277
+ nworks task create --title "Deploy" --due 2026-03-20
262
278
 
263
- # ν•  일 μ™„λ£Œ 처리
279
+ # Mark as done
264
280
  nworks task update --id <taskId> --status done
265
281
 
266
- # ν•  일 μ‚­μ œ
282
+ # Delete task
267
283
  nworks task delete --id <taskId>
268
284
  ```
269
285
 
270
- ### κ²Œμ‹œνŒ (User OAuth)
286
+ ### Boards (User OAuth)
271
287
 
272
288
  ```bash
273
- # κ²Œμ‹œνŒ λͺ©λ‘
289
+ # List boards
274
290
  nworks board list
275
291
 
276
- # κ²Œμ‹œνŒ κΈ€ λͺ©λ‘
292
+ # List posts
277
293
  nworks board posts --board <boardId>
278
294
 
279
- # κΈ€ 상세 쑰회
295
+ # Read post detail
280
296
  nworks board read --board <boardId> --post <postId>
281
297
 
282
- # κΈ€ μž‘μ„±
283
- nworks board create --board <boardId> --title "곡지사항" --body "λ‚΄μš©"
298
+ # Create post
299
+ nworks board create --board <boardId> --title "Announcement" --body "Content"
284
300
 
285
- # μ•Œλ¦Ό λ°œμ†‘ + λŒ“κΈ€ λΉ„ν™œμ„±ν™”
286
- nworks board create --board <boardId> --title "곡지" --body "λ‚΄μš©" --notify --no-comment
301
+ # With notification + disable comments
302
+ nworks board create --board <boardId> --title "Notice" --body "Content" --notify --no-comment
287
303
  ```
288
304
 
289
- ---
290
-
291
- ## OAuth Scope μ„€μ •
292
-
293
- [NAVER WORKS Developer Console](https://dev.worksmobile.com)μ—μ„œ μ•±μ˜ OAuth Scopeλ₯Ό μΆ”κ°€ν•΄μ•Ό ν•©λ‹ˆλ‹€.
294
-
295
- | Scope | μš©λ„ | 인증 방식 | ν•„μš”ν•œ λͺ…λ Ήμ–΄ |
296
- |-------|------|----------|--------------|
297
- | `bot` | Bot λ©”μ‹œμ§€ 전솑 | Service Account | `message send` |
298
- | `bot.read` | Bot 채널/ꡬ성원 쑰회 | Service Account | `message members` |
299
- | `calendar` | μΊ˜λ¦°λ” μ“°κΈ° | User OAuth | `calendar create/update/delete` (calendar.read도 ν•¨κ»˜ ν•„μš”) |
300
- | `calendar.read` | μΊ˜λ¦°λ” 읽기 | User OAuth | `calendar list`, `calendar create/update/delete`의 μ˜μ‘΄μ„± |
301
- | `file` | λ“œλΌμ΄λΈŒ 읽기/μ“°κΈ° | User OAuth | `drive list/upload/download` |
302
- | `file.read` | λ“œλΌμ΄λΈŒ 읽기 μ „μš© | User OAuth | `drive list/download` |
303
- | `mail` | 메일 읽기/μ“°κΈ° | User OAuth | `mail send/list/read` |
304
- | `mail.read` | 메일 읽기 μ „μš© | User OAuth | `mail list/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`의 μ˜μ‘΄μ„± |
308
- | `board` | κ²Œμ‹œνŒ 읽기/μ“°κΈ° | User OAuth | `board list/posts/read/create` |
309
- | `board.read` | κ²Œμ‹œνŒ 읽기 μ „μš© | User OAuth | `board list/posts/read` |
310
-
311
- > **Tip**: scopeλ₯Ό λ³€κ²½ν•œ ν›„μ—λŠ” 토큰을 μž¬λ°œκΈ‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.
312
- > ```bash
313
- > nworks logout && nworks login --user --scope "..."
314
- > ```
315
-
316
- ## μ‚¬μš© μ‹œλ‚˜λ¦¬μ˜€
317
-
318
- ### CI/CD 배포 μ•Œλ¦Ό
305
+ ### CI/CD Deploy Notification
319
306
 
320
307
  ```bash
321
- # GitHub Actionsμ—μ„œ 배포 μ™„λ£Œ ν›„ νŒ€ 채널에 μ•Œλ¦Ό
322
- nworks message send --channel $CHANNEL_ID --text "v${VERSION} 배포 μ™„λ£Œ"
308
+ # Notify team channel after deployment in GitHub Actions
309
+ nworks message send --channel $CHANNEL_ID --text "v${VERSION} deployed"
323
310
  ```
324
311
 
325
- ### νŒ€ μžλ™ν™” 슀크립트
312
+ ### Team Automation Script
326
313
 
327
314
  ```bash
328
- # 맀일 μ•„μΉ¨ νŒ€μ›μ—κ²Œ λ¦¬λ§ˆμΈλ” 전솑
315
+ # Send daily standup reminder to all members
329
316
  for userId in $(nworks directory members --json | jq -r '.users[].userId'); do
330
- nworks message send --to "$userId" --text "였늘의 μŠ€νƒ λ“œμ—… 10μ‹œμž…λ‹ˆλ‹€"
317
+ nworks message send --to "$userId" --text "Standup at 10:00 today"
331
318
  done
332
319
  ```
333
320
 
334
321
  ---
335
322
 
336
- ## Advanced Configuration
323
+ ## OAuth Scopes
324
+
325
+ Add the required scopes in the [LINE WORKS Developer Console](https://dev.worksmobile.com/en/).
326
+
327
+ | Scope | Purpose | Auth | Required For |
328
+ |-------|---------|------|-------------|
329
+ | `bot` | Bot messaging | Service Account | `message send` |
330
+ | `bot.read` | Bot channel/member read | Service Account | `message members` |
331
+ | `calendar` | Calendar write | User OAuth | `calendar create/update/delete` (requires calendar.read) |
332
+ | `calendar.read` | Calendar read | User OAuth | `calendar list`, also needed for calendar write |
333
+ | `file` | Drive read/write | User OAuth | `drive list/upload/download` |
334
+ | `file.read` | Drive read-only | User OAuth | `drive list/download` |
335
+ | `mail` | Mail read/write | User OAuth | `mail send/list/read` |
336
+ | `mail.read` | Mail read-only | User OAuth | `mail list/read` |
337
+ | `task` | Tasks read/write | User OAuth | `task create/update/delete` (requires user.read) |
338
+ | `task.read` | Tasks read-only | User OAuth | `task list` |
339
+ | `user.read` | User info read | Service Account / User OAuth | `directory members`, also needed for task write |
340
+ | `board` | Boards read/write | User OAuth | `board list/posts/read/create` |
341
+ | `board.read` | Boards read-only | User OAuth | `board list/posts/read` |
342
+
343
+ > **Tip**: After changing scopes, reissue your token:
344
+ > ```bash
345
+ > nworks logout && nworks login --user --scope "..."
346
+ > ```
347
+
348
+ ---
337
349
 
338
- ### ν™˜κ²½ λ³€μˆ˜
350
+ ## Environment Variables
339
351
 
340
- ν™˜κ²½λ³€μˆ˜λ‘œ 인증 정보λ₯Ό μ„€μ •ν•˜λ©΄ `nworks login` 없이 λ°”λ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
352
+ Set environment variables to use nworks without `nworks login` (useful for CI/agents).
341
353
 
342
354
  ```bash
343
- # 곡톡 (ν•„μˆ˜)
344
- NWORKS_CLIENT_ID= # ν•„μˆ˜
345
- NWORKS_CLIENT_SECRET= # ν•„μˆ˜
346
-
347
- # 봇 λ©”μ‹œμ§€ 전솑 μ‹œμ—λ§Œ ν•„μš” (User OAuth만 μ“°λ©΄ λΆˆν•„μš”)
348
- NWORKS_SERVICE_ACCOUNT= # 봇 μ „μš©
349
- NWORKS_PRIVATE_KEY_PATH= # 봇 μ „μš©
350
- NWORKS_BOT_ID= # 봇 μ „μš©
351
-
352
- # 선택
353
- NWORKS_DOMAIN_ID= # optional
354
- NWORKS_SCOPE= # optional (κΈ°λ³Έ: bot bot.read user.read)
355
- NWORKS_VERBOSE=1 # optional, 디버그 λ‘œκΉ…
355
+ # Required
356
+ NWORKS_CLIENT_ID=
357
+ NWORKS_CLIENT_SECRET=
358
+
359
+ # Bot messaging only (not needed for User OAuth)
360
+ NWORKS_SERVICE_ACCOUNT=
361
+ NWORKS_PRIVATE_KEY_PATH=
362
+ NWORKS_BOT_ID=
363
+
364
+ # Optional
365
+ NWORKS_DOMAIN_ID=
366
+ NWORKS_SCOPE= # default: bot bot.read user.read
367
+ NWORKS_VERBOSE=1 # debug logging
356
368
  ```
357
369
 
358
- ### MCP μ„œλ²„μ— ν™˜κ²½ λ³€μˆ˜ 직접 μ„€μ •
370
+ ### MCP Server with Environment Variables
359
371
 
360
- `nworks login` λŒ€μ‹  ν™˜κ²½ λ³€μˆ˜λ‘œ 직접 μ„€μ •ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€:
372
+ Instead of `nworks login`, you can pass credentials directly:
361
373
 
362
374
  ```json
363
375
  {
@@ -374,21 +386,10 @@ NWORKS_VERBOSE=1 # optional, 디버그 λ‘œκΉ…
374
386
  }
375
387
  ```
376
388
 
377
- 봇 λ©”μ‹œμ§€λ„ μ‚¬μš©ν•˜λ €λ©΄ `NWORKS_SERVICE_ACCOUNT`, `NWORKS_PRIVATE_KEY_PATH`, `NWORKS_BOT_ID`도 μΆ”κ°€ν•©λ‹ˆλ‹€.
389
+ Add `NWORKS_SERVICE_ACCOUNT`, `NWORKS_PRIVATE_KEY_PATH`, and `NWORKS_BOT_ID` for bot messaging.
378
390
 
379
391
  ---
380
392
 
381
- ## Roadmap
382
-
383
- - ~~**v0.1** β€” λ©”μ‹œμ§€, 쑰직 ꡬ성원, MCP μ„œλ²„~~
384
- - ~~**v0.2** β€” μΊ˜λ¦°λ” 일정 쑰회 + User OAuth~~
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~~
391
-
392
393
  ## License
393
394
 
394
395
  Apache-2.0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nworks",
3
- "version": "1.1.0",
4
- "description": "CLI and MCP server for NAVER WORKS β€” control messages, calendar, drive, mail, tasks, and boards from terminal or AI agents (Claude, Cursor)",
3
+ "version": "1.1.2",
4
+ "description": "CLI and MCP server for NAVER WORKS / LINE WORKS β€” control messages, calendar, drive, mail, tasks, and boards from terminal or AI agents (Claude, Cursor)",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "nworks": "./dist/index.js"