# nworks [![npm version](https://img.shields.io/npm/v/nworks.svg)](https://www.npmjs.com/package/nworks) [![license](https://img.shields.io/npm/l/nworks.svg)](LICENSE) [![npm downloads](https://img.shields.io/npm/dm/nworks.svg)](https://www.npmjs.com/package/nworks) [![nworks MCP server](https://glama.ai/mcp/servers/yjcho9317/nworks/badges/score.svg)](https://glama.ai/mcp/servers/yjcho9317/nworks) Featured in [awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers) [๐Ÿ‡บ๐Ÿ‡ธ English](README.md) | ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด | [๐Ÿ‡ฏ๐Ÿ‡ต ๆ—ฅๆœฌ่ชž](README.ja.md)

nworks demo

NAVER WORKS (LINE WORKS) ์ตœ์ดˆ์˜ MCP ์„œ๋ฒ„. ๋ฉ”์‹œ์ง€, ์บ˜๋ฆฐ๋”, ๋“œ๋ผ์ด๋ธŒ, ๋ฉ”์ผ, ํ•  ์ผ, ๊ฒŒ์‹œํŒ โ€” 26๊ฐœ ๋„๊ตฌ๋ฅผ CLI์™€ AI ์—์ด์ „ํŠธ์—์„œ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ## Quickstart ```bash npm install -g nworks nworks login --user nworks calendar list ``` ### AI ์—์ด์ „ํŠธ๊ฐ€ ์‹ค์ œ๋กœ ์ด๋ ‡๊ฒŒ ์”๋‹ˆ๋‹ค ``` User: ์˜ค๋Š˜ ์ผ์ • ์•Œ๋ ค์ค˜ Claude โ†’ nworks_calendar_list โ†’ 3๊ฑด: ์Šคํƒ ๋“œ์—…(10:00), ์ ์‹ฌ๋ฏธํŒ…(12:00), ์ฝ”๋“œ๋ฆฌ๋ทฐ(15:00) User: ํŒ€ ์ฑ„๋„์— ๋ฐฐํฌ ์™„๋ฃŒ ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด์ค˜ Claude โ†’ nworks_message_send { "channel": "C001", "text": "v1.2.0 ๋ฐฐํฌ ์™„๋ฃŒ" } โ†’ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค User: ์ฝ์ง€ ์•Š์€ ๋ฉ”์ผ ํ™•์ธํ•˜๊ณ  ์š”์•ฝํ•ด์ค˜ Claude โ†’ nworks_mail_list (unread) โ†’ ์ฝ์ง€ ์•Š์€ ๋ฉ”์ผ 3ํ†ต Claude โ†’ nworks_mail_read (๊ฐ๊ฐ) โ†’ "3ํ†ต: 1) CTO ๋ฐฐํฌ ์Šน์ธ, 2) ๊ธˆ์š”์ผ ํšŒ์˜ ์ดˆ๋Œ€, 3) ์ฃผ๊ฐ„ ๋ณด๊ณ  ๋ฆฌ๋งˆ์ธ๋”" ``` ## Install ```bash npx nworks # ๋ฐ”๋กœ ์‹คํ–‰ npm install -g nworks # ๊ธ€๋กœ๋ฒŒ ์„ค์น˜ ``` ## ๋กœ๊ทธ์ธ ```bash # User OAuth (์บ˜๋ฆฐ๋”, ๋“œ๋ผ์ด๋ธŒ, ๋ฉ”์ผ, ํ•  ์ผ, ๊ฒŒ์‹œํŒ) nworks login --user --scope "calendar calendar.read file file.read mail mail.read task task.read board board.read user.read" # ๋ด‡ ๋ฉ”์‹œ์ง€ ์ „์†ก์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ (Service Account) nworks login # ์ธ์ฆ ํ™•์ธ nworks whoami # ๋กœ๊ทธ์•„์›ƒ nworks logout ``` > `nworks login --user`๋Š” CLIENT_ID + CLIENT_SECRET๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ๋ณ€์ˆ˜๋‚˜ ๊ธฐ์กด ์„ค์ •์— ์ด๋ฏธ ์žˆ๋Š” ๊ฐ’์€ ๋‹ค์‹œ ๋ฌผ์–ด๋ณด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. > **Developer Console ์„ค์ •**: User OAuth๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด [Developer Console](https://dev.worksmobile.com)์—์„œ Redirect URL์— `http://localhost:9876/callback`์„ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. --- ## AI ์—์ด์ „ํŠธ ์—ฐ๋™ (MCP ์„œ๋ฒ„) Claude Desktop, Cursor ๋“ฑ MCP ํ˜ธํ™˜ ํด๋ผ์ด์–ธํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ### ์„ค์ • ๋จผ์ € ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค: ```bash nworks login --user --scope "calendar calendar.read file file.read mail mail.read task task.read board board.read user.read" ``` ๊ทธ๋ฆฌ๊ณ  MCP ์„ค์ •์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค (`~/.config/claude/claude_desktop_config.json`): ```json { "mcpServers": { "nworks": { "command": "nworks", "args": ["mcp"] } } } ``` ๋กœ๊ทธ์ธ ํ•œ ๋ฒˆ์ด๋ฉด 26๊ฐœ ๋„๊ตฌ ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ๋ณ„๋„ env ์„ค์ • ๋ถˆํ•„์š”. > **MCP์—์„œ AI ์—์ด์ „ํŠธ๊ฐ€ ์ง์ ‘ ์„ค์ •ํ•˜๊ธฐ**: CLI ๋กœ๊ทธ์ธ ์—†์ด๋„ AI ์—์ด์ „ํŠธ๊ฐ€ `nworks_setup` โ†’ `nworks_login_user` ์ˆœ์„œ๋กœ ํ˜ธ์ถœํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ๋กœ๊ทธ์ธ๋งŒ์œผ๋กœ ์ „์ฒด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Client Secret๊ณผ Private Key ๊ฒฝ๋กœ๋Š” MCP ์„ค์ •์˜ `env` ํ•„๋“œ ๋˜๋Š” ์‹œ์Šคํ…œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๋ฏธ๋ฆฌ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ### MCP ๋„๊ตฌ ๋ชฉ๋ก (26๊ฐœ) | ๋„๊ตฌ | ์„ค๋ช… | ํ•„์š” ์ธ์ฆ | |------|------|----------| | **์„ค์ •/์ธ์ฆ** | | | | `nworks_setup` | API ์ธ์ฆ ์ •๋ณด ์„ค์ • (Client ID ๋“ฑ). Client Secret์€ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ • | โ€” | | `nworks_login_user` | User OAuth ๋ธŒ๋ผ์šฐ์ € ๋กœ๊ทธ์ธ (์ „์ฒด scope ์ž๋™ ํฌํ•จ) | โ€” | | `nworks_logout` | ์ธ์ฆ ์ •๋ณด ๋ฐ ํ† ํฐ ์‚ญ์ œ | โ€” | | `nworks_whoami` | ์ธ์ฆ ์ƒํƒœ ํ™•์ธ | โ€” | | `nworks_doctor` | ์—ฐ๊ฒฐ ์ƒํƒœ ์ง„๋‹จ (์ธ์ฆ, ํ† ํฐ, API ์ ๊ฒ€) | โ€” | | **๋ฉ”์‹œ์ง€** | | | | `nworks_message_send` | ์‚ฌ์šฉ์ž/์ฑ„๋„์— ๋ฉ”์‹œ์ง€ ์ „์†ก | Service Account | | `nworks_message_members` | ์ฑ„๋„ ๊ตฌ์„ฑ์› ์กฐํšŒ | Service Account | | `nworks_directory_members` | ์กฐ์ง ๊ตฌ์„ฑ์› ์กฐํšŒ | Service Account | | **์บ˜๋ฆฐ๋”** | | | | `nworks_calendar_list` | ์บ˜๋ฆฐ๋” ์ผ์ • ์กฐํšŒ | User OAuth (calendar.read) | | `nworks_calendar_create` | ์บ˜๋ฆฐ๋” ์ผ์ • ์ƒ์„ฑ | User OAuth (calendar + calendar.read) | | `nworks_calendar_update` | ์บ˜๋ฆฐ๋” ์ผ์ • ์ˆ˜์ • | User OAuth (calendar + calendar.read) | | `nworks_calendar_delete` | ์บ˜๋ฆฐ๋” ์ผ์ • ์‚ญ์ œ | User OAuth (calendar + calendar.read) | | **๋“œ๋ผ์ด๋ธŒ** | | | | `nworks_drive_list` | ๋“œ๋ผ์ด๋ธŒ ํŒŒ์ผ/ํด๋” ๋ชฉ๋ก | User OAuth (file.read) | | `nworks_drive_upload` | ๋“œ๋ผ์ด๋ธŒ ํŒŒ์ผ ์—…๋กœ๋“œ | User OAuth (file) | | `nworks_drive_download` | ๋“œ๋ผ์ด๋ธŒ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ (5MB ์ดˆ๊ณผ ์‹œ ๋กœ์ปฌ ์ €์žฅ) | User OAuth (file.read) | | **๋ฉ”์ผ** | | | | `nworks_mail_send` | ๋ฉ”์ผ ์ „์†ก | User OAuth (mail) | | `nworks_mail_list` | ๋ฉ”์ผ ๋ชฉ๋ก ์กฐํšŒ | User OAuth (mail.read) | | `nworks_mail_read` | ๋ฉ”์ผ ์ƒ์„ธ ์กฐํšŒ | User OAuth (mail.read) | | **ํ•  ์ผ** | | | | `nworks_task_list` | ํ•  ์ผ ๋ชฉ๋ก ์กฐํšŒ | User OAuth (task.read) | | `nworks_task_create` | ํ•  ์ผ ์ƒ์„ฑ | User OAuth (task + user.read) | | `nworks_task_update` | ํ•  ์ผ ์ˆ˜์ •/์™„๋ฃŒ | User OAuth (task + user.read) | | `nworks_task_delete` | ํ•  ์ผ ์‚ญ์ œ | User OAuth (task + user.read) | | **๊ฒŒ์‹œํŒ** | | | | `nworks_board_list` | ๊ฒŒ์‹œํŒ ๋ชฉ๋ก ์กฐํšŒ | User OAuth (board.read) | | `nworks_board_posts` | ๊ฒŒ์‹œํŒ ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ | User OAuth (board.read) | | `nworks_board_read` | ๊ฒŒ์‹œํŒ ๊ธ€ ์ƒ์„ธ ์กฐํšŒ | User OAuth (board.read) | | `nworks_board_create` | ๊ฒŒ์‹œํŒ ๊ธ€ ์ž‘์„ฑ | User OAuth (board) | ### AI ์—์ด์ „ํŠธ ์‚ฌ์šฉ ์˜ˆ์‹œ ``` User: ๋‚ด์ผ ์˜คํ›„ 2์‹œ์— ํšŒ์˜ ์žก๊ณ , ํŒ€ ์ฑ„๋„์— ์•Œ๋ ค์ค˜ Claude โ†’ nworks_calendar_create { "summary": "ํšŒ์˜", "start": "2026-03-15T14:00:00", "end": "2026-03-15T15:00:00" } โ†’ ์ผ์ •์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค Claude โ†’ nworks_message_send { "channel": "C001", "text": "๋‚ด์ผ 14:00 ํšŒ์˜๊ฐ€ ์žกํ˜”์Šต๋‹ˆ๋‹ค" } โ†’ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค User: ์ฝ์ง€ ์•Š์€ ๋ฉ”์ผ ํ™•์ธํ•˜๊ณ  ์š”์•ฝํ•ด์ค˜ Claude โ†’ nworks_mail_list (unread) โ†’ ์ฝ์ง€ ์•Š์€ ๋ฉ”์ผ 3ํ†ต Claude โ†’ nworks_mail_read (๊ฐ๊ฐ) โ†’ "3ํ†ต: 1) CTO ๋ฐฐํฌ ์Šน์ธ, 2) ๊ธˆ์š”์ผ ํšŒ์˜ ์ดˆ๋Œ€, 3) ์ฃผ๊ฐ„ ๋ณด๊ณ  ๋ฆฌ๋งˆ์ธ๋”" ``` --- ## CLI ์‚ฌ์šฉ๋ฒ• > ๋ชจ๋“  ๋ช…๋ น์–ด์— `--json` ์ง€์› (ํŒŒ์ดํ”„, ์Šคํฌ๋ฆฝํŠธ, ์—์ด์ „ํŠธ ํŒŒ์‹ฑ ์šฉ์ด). `message send`, `mail send`, `drive upload`๋Š” `--dry-run`์œผ๋กœ ์‹ค์ œ ์ „์†ก ์—†์ด ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ. ### ๋ฉ”์‹œ์ง€ (Bot API) ```bash # ์‚ฌ์šฉ์ž์—๊ฒŒ ํ…์ŠคํŠธ ๋ฉ”์‹œ์ง€ nworks message send --to --text "๋ฉ”์‹œ์ง€" # ์ฑ„๋„์— ํ…์ŠคํŠธ ๋ฉ”์‹œ์ง€ nworks message send --channel --text "๋ฉ”์‹œ์ง€" # ๋ฒ„ํŠผ ๋ฉ”์‹œ์ง€ nworks message send --to --type button --text "PR ๋ฆฌ๋ทฐ ์š”์ฒญ" \ --actions '[{"type":"message","label":"์Šน์ธ","postback":"approve"}]' # ๋ฆฌ์ŠคํŠธ ๋ฉ”์‹œ์ง€ nworks message send --to --type list --text "์˜ค๋Š˜์˜ ํ•  ์ผ" \ --elements '[{"title":"์ฝ”๋“œ ๋ฆฌ๋ทฐ","subtitle":"#382 PR"}]' # ์ฑ„๋„ ๊ตฌ์„ฑ์› ์กฐํšŒ nworks message members --channel ``` ### ์กฐ์ง (Directory API) ```bash nworks directory members # ์กฐ์ง ๊ตฌ์„ฑ์› ๋ชฉ๋ก ``` ### ์บ˜๋ฆฐ๋” (User OAuth) ```bash # ์˜ค๋Š˜ ์ผ์ • ์กฐํšŒ nworks calendar list # ๊ธฐ๊ฐ„ ์ง€์ • nworks calendar list --from "2026-03-14T00:00:00+09:00" --until "2026-03-14T23:59:59+09:00" # ์ผ์ • ์ƒ์„ฑ nworks calendar create --title "ํšŒ์˜" --start "2026-03-14T14:00+09:00" --end "2026-03-14T15:00+09:00" # ์žฅ์†Œ/์„ค๋ช… ํฌํ•จ nworks calendar create --title "์ ์‹ฌ ๋ฏธํŒ…" --start "2026-03-14T12:00+09:00" --end "2026-03-14T13:00+09:00" \ --location "๊ฐ•๋‚จ ์‹๋‹น" --description "๋ถ„๊ธฐ ๋ฆฌ๋ทฐ" # ์ฐธ์„์ž ์ง€์ • + ์•Œ๋ฆผ nworks calendar create --title "ํŒ€ ํšŒ์˜" --start "2026-03-14T10:00+09:00" --end "2026-03-14T11:00+09:00" \ --attendees "user1@example.com,user2@example.com" --notify # ์ผ์ • ์ˆ˜์ • nworks calendar update --id --title "๋ณ€๊ฒฝ๋œ ์ œ๋ชฉ" # ์ผ์ • ์‚ญ์ œ nworks calendar delete --id ``` ### ๋“œ๋ผ์ด๋ธŒ (User OAuth) ```bash # ํŒŒ์ผ/ํด๋” ๋ชฉ๋ก nworks drive list # ํŒŒ์ผ ์—…๋กœ๋“œ nworks drive upload --file ./report.pdf # ํŠน์ • ํด๋”์— ์—…๋กœ๋“œ nworks drive upload --file ./report.pdf --folder # ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ nworks drive download --file-id # ๋‹ค์šด๋กœ๋“œ ๊ฒฝ๋กœ/ํŒŒ์ผ๋ช… ์ง€์ • nworks drive download --file-id --out ./downloads --name report.pdf ``` ### ๋ฉ”์ผ (User OAuth) ```bash # ๋ฉ”์ผ ์ „์†ก nworks mail send --to "user@example.com" --subject "์ œ๋ชฉ" --body "๋‚ด์šฉ" # CC/BCC ํฌํ•จ nworks mail send --to "user@example.com" --cc "cc@example.com" --subject "์ œ๋ชฉ" --body "๋‚ด์šฉ" # ๋ฐ›์€ํŽธ์ง€ํ•จ ๋ชฉ๋ก nworks mail list # ์ฝ์ง€ ์•Š์€ ๋ฉ”์ผ๋งŒ nworks mail list --unread # ๋ฉ”์ผ ์ƒ์„ธ ์กฐํšŒ nworks mail read --id ``` ### ํ•  ์ผ (User OAuth) ```bash # ํ•  ์ผ ๋ชฉ๋ก nworks task list # ๋ฏธ์™„๋ฃŒ๋งŒ ์กฐํšŒ nworks task list --status TODO # ํ•  ์ผ ์ƒ์„ฑ nworks task create --title "์ฝ”๋“œ ๋ฆฌ๋ทฐ" --body "PR #382 ๋ฆฌ๋ทฐ" # ๋งˆ๊ฐ์ผ ์ง€์ • nworks task create --title "๋ฐฐํฌ" --due 2026-03-20 # ํ•  ์ผ ์™„๋ฃŒ ์ฒ˜๋ฆฌ nworks task update --id --status done # ํ•  ์ผ ์‚ญ์ œ nworks task delete --id ``` ### ๊ฒŒ์‹œํŒ (User OAuth) ```bash # ๊ฒŒ์‹œํŒ ๋ชฉ๋ก nworks board list # ๊ฒŒ์‹œํŒ ๊ธ€ ๋ชฉ๋ก nworks board posts --board # ๊ธ€ ์ƒ์„ธ ์กฐํšŒ nworks board read --board --post # ๊ธ€ ์ž‘์„ฑ nworks board create --board --title "๊ณต์ง€์‚ฌํ•ญ" --body "๋‚ด์šฉ" # ์•Œ๋ฆผ ๋ฐœ์†ก + ๋Œ“๊ธ€ ๋น„ํ™œ์„ฑํ™” nworks board create --board --title "๊ณต์ง€" --body "๋‚ด์šฉ" --notify --no-comment ``` ### CI/CD ๋ฐฐํฌ ์•Œ๋ฆผ ```bash # GitHub Actions์—์„œ ๋ฐฐํฌ ์™„๋ฃŒ ํ›„ ํŒ€ ์ฑ„๋„์— ์•Œ๋ฆผ nworks message send --channel $CHANNEL_ID --text "v${VERSION} ๋ฐฐํฌ ์™„๋ฃŒ" ``` ### ํŒ€ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ ```bash # ๋งค์ผ ์•„์นจ ํŒ€์›์—๊ฒŒ ๋ฆฌ๋งˆ์ธ๋” ์ „์†ก for userId in $(nworks directory members --json | jq -r '.users[].userId'); do nworks message send --to "$userId" --text "์˜ค๋Š˜์˜ ์Šคํƒ ๋“œ์—… 10์‹œ์ž…๋‹ˆ๋‹ค" done ``` --- ## OAuth Scope ์„ค์ • [NAVER WORKS Developer Console](https://dev.worksmobile.com)์—์„œ ์•ฑ์˜ OAuth Scope๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. | Scope | ์šฉ๋„ | ์ธ์ฆ ๋ฐฉ์‹ | ํ•„์š”ํ•œ ๋ช…๋ น์–ด | |-------|------|----------|--------------| | `bot` | Bot ๋ฉ”์‹œ์ง€ ์ „์†ก | Service Account | `message send` | | `bot.read` | Bot ์ฑ„๋„/๊ตฌ์„ฑ์› ์กฐํšŒ | Service Account | `message members` | | `calendar` | ์บ˜๋ฆฐ๋” ์“ฐ๊ธฐ | User OAuth | `calendar create/update/delete` (calendar.read๋„ ํ•จ๊ป˜ ํ•„์š”) | | `calendar.read` | ์บ˜๋ฆฐ๋” ์ฝ๊ธฐ | User OAuth | `calendar list`, `calendar create/update/delete`์˜ ์˜์กด์„ฑ | | `file` | ๋“œ๋ผ์ด๋ธŒ ์ฝ๊ธฐ/์“ฐ๊ธฐ | User OAuth | `drive list/upload/download` | | `file.read` | ๋“œ๋ผ์ด๋ธŒ ์ฝ๊ธฐ ์ „์šฉ | User OAuth | `drive list/download` | | `mail` | ๋ฉ”์ผ ์ฝ๊ธฐ/์“ฐ๊ธฐ | User OAuth | `mail send/list/read` | | `mail.read` | ๋ฉ”์ผ ์ฝ๊ธฐ ์ „์šฉ | User OAuth | `mail list/read` | | `task` | ํ•  ์ผ ์ฝ๊ธฐ/์“ฐ๊ธฐ | User OAuth | `task create/update/delete` (user.read๋„ ํ•จ๊ป˜ ํ•„์š”) | | `task.read` | ํ•  ์ผ ์ฝ๊ธฐ ์ „์šฉ | User OAuth | `task list` | | `user.read` | ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ | Service Account / User OAuth | `directory members`, `task create/update/delete`์˜ ์˜์กด์„ฑ | | `board` | ๊ฒŒ์‹œํŒ ์ฝ๊ธฐ/์“ฐ๊ธฐ | User OAuth | `board list/posts/read/create` | | `board.read` | ๊ฒŒ์‹œํŒ ์ฝ๊ธฐ ์ „์šฉ | User OAuth | `board list/posts/read` | > **Tip**: scope๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„์—๋Š” ํ† ํฐ์„ ์žฌ๋ฐœ๊ธ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. > ```bash > nworks logout && nworks login --user --scope "..." > ``` --- ## ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ธ์ฆ ์ •๋ณด๋ฅผ ์„ค์ •ํ•˜๋ฉด `nworks login` ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (CI/์—์ด์ „ํŠธ์šฉ). ```bash # ๊ณตํ†ต (ํ•„์ˆ˜) NWORKS_CLIENT_ID= NWORKS_CLIENT_SECRET= # ๋ด‡ ๋ฉ”์‹œ์ง€ ์ „์†ก ์‹œ์—๋งŒ ํ•„์š” (User OAuth๋งŒ ์“ฐ๋ฉด ๋ถˆํ•„์š”) NWORKS_SERVICE_ACCOUNT= NWORKS_PRIVATE_KEY_PATH= NWORKS_BOT_ID= # ์„ ํƒ NWORKS_DOMAIN_ID= NWORKS_SCOPE= # ๊ธฐ๋ณธ: bot bot.read user.read NWORKS_VERBOSE=1 # ๋””๋ฒ„๊ทธ ๋กœ๊น… ``` ### MCP ์„œ๋ฒ„์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ง์ ‘ ์„ค์ • ๋ฏผ๊ฐ ์ •๋ณด(Client Secret, Private Key ๊ฒฝ๋กœ)๋Š” MCP ์„ค์ •์˜ `env` ํ•„๋“œ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Client ID ๋“ฑ ๋ฏผ๊ฐํ•˜์ง€ ์•Š์€ ๊ฐ’์€ AI ์—์ด์ „ํŠธ๊ฐ€ `nworks_setup` tool๋กœ ์ง์ ‘ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ```json { "mcpServers": { "nworks": { "command": "npx", "args": ["-y", "nworks", "mcp"], "env": { "NWORKS_CLIENT_SECRET": "", "NWORKS_PRIVATE_KEY_PATH": "" } } } } ``` --- ## License Apache-2.0