nworks
nworks is a full-featured MCP server for LINE WORKS (NAVER WORKS) providing 26 tools across messaging, calendar, drive, mail, tasks, and boards — accessible via CLI and AI agent interfaces (Claude Desktop, Cursor, etc.).
Setup & Authentication
Configure API credentials (Client ID/Secret, Service Account, Bot ID)
Perform User OAuth browser login, check auth status, logout, and diagnose connection issues
Messages (Service Account)
Send text, button, or list messages to users or channels
List channel members and retrieve all organization directory members
Calendar (User OAuth)
List, create, update, and delete calendar events with attendees, location, descriptions, and notifications
Drive (User OAuth)
List files/folders, upload files (base64 or local path), and download files (returns content or saves locally)
Mail (User OAuth)
Send emails with CC/BCC support, list inbox (with unread filtering), and read full email details
Tasks (User OAuth)
List (filter by status), create (with due dates and assignees), update (including completion status), and delete tasks
Boards (User OAuth)
List boards, view and read board posts, and create new posts with notification and comment options
Supports environment variable configuration for CI/CD and automation.
Provides a suite of tools for interacting with NAVER WORKS, enabling automation of messages, calendar management, file operations in Drive, email communication, task tracking, and board interactions.
nworks
Featured in awesome-mcp-servers
Full-featured MCP server for LINE WORKS (NAVER WORKS). CLI + MCP server — 36 tools covering messages, calendar, drive, mail, tasks, and boards.
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.
Quickstart
npm install -g nworks
nworks login --user
nworks calendar listFirst 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.
AI Agents Actually Use It Like This
User: Show me today's schedule
Claude → nworks_calendar_list
→ 3 events: Standup (10:00), Lunch meeting (12:00), Code review (15:00)
User: Send a deploy complete message to the team channel
Claude → nworks_message_send
{ "channel": "C001", "text": "v1.2.0 deploy complete" }
→ Message sent
User: Check my unread emails and summarize them
Claude → nworks_mail_list (unread)
→ 3 unread emails
Claude → nworks_mail_read (each)
→ "3 unread: 1) Deploy approval from CTO, 2) Meeting invite for Friday, 3) Weekly report reminder"Related MCP server: synology-office-mcp
Install
npx nworks # Run directly
npm install -g nworks # Global installLogin
# User OAuth (calendar, drive, mail, tasks, boards)
nworks login --user --scope "calendar calendar.read file file.read mail mail.read task task.read board board.read user.read"
# Bot messaging (Service Account)
nworks login
# Check auth status
nworks whoami
# Logout
nworks logout
nworks login --useronly requires CLIENT_ID + CLIENT_SECRET. Values already set via environment variables or existing config won't be asked again.
Developer Console: To use User OAuth, register
http://localhost:9876/callbackas a Redirect URL in the Developer Console.
AI Agent Integration (MCP Server)
Works with Claude Desktop, Cursor, and other MCP-compatible clients.
Setup
Login first:
nworks login --user --scope "calendar calendar.read file file.read mail mail.read task task.read board board.read user.read"Then add to your MCP config (~/.config/claude/claude_desktop_config.json):
{
"mcpServers": {
"nworks": {
"command": "nworks",
"args": ["mcp"]
}
}
}One login enables all 36 tools. No extra env setup needed.
Without CLI login, an AI agent can call
nworks_setup→nworks_login_userto authenticate via browser directly. Client Secret and Private Key path must be pre-configured via MCP configenvfield or system environment variables.
MCP Tools (32)
Tool | Description | Auth |
Setup / Auth | ||
| Configure API credentials (Client ID, etc.). Client Secret is set via env | — |
| User OAuth browser login (all scopes included) | — |
| Delete credentials and tokens | — |
| Check auth status | — |
| Diagnose connection (auth, tokens, API health) | — |
Messages | ||
| Send message to user/channel | Service Account |
| List channel members | Service Account |
| List organization members | Service Account |
Calendar | ||
| List calendar events | User OAuth (calendar.read) |
| Create calendar event | User OAuth (calendar + calendar.read) |
| Update calendar event | User OAuth (calendar + calendar.read) |
| Delete calendar event | User OAuth (calendar + calendar.read) |
Drive | ||
| List drive files/folders | User OAuth (file.read) |
| Upload file to drive | User OAuth (file) |
| Download file (saves locally if >5MB) | User OAuth (file.read) |
| List shared drives | User OAuth (file.read) |
| List files/folders in a shared drive | User OAuth (file.read) |
| Download a shared drive file (saves locally if >5MB) | User OAuth (file.read) |
| Send mail | User OAuth (mail) |
| List mailbox | User OAuth (mail.read) |
| Read mail detail | User OAuth (mail.read) |
| Download a mail attachment (saves locally if >5MB) | User OAuth (mail.read) |
Tasks | ||
| List tasks | User OAuth (task.read) |
| Create task | User OAuth (task + user.read) |
| Update/complete task | User OAuth (task + user.read) |
| Delete task | User OAuth (task + user.read) |
Boards | ||
| List boards | User OAuth (board.read) |
| List board posts | User OAuth (board.read) |
| Read board post detail | User OAuth (board.read) |
| Create board post | User OAuth (board) |
Contacts | ||
| List contacts | User OAuth (contact.read) |
| Get contact detail | User OAuth (contact.read) |
| Create contact | User OAuth (contact) |
| Update contact | User OAuth (contact) |
| Delete contact | User OAuth (contact) |
| List contact tags | User OAuth (contact.read) |
AI Agent Usage Example
User: Schedule a meeting tomorrow at 2pm and notify the team channel
Claude → nworks_calendar_create
{ "summary": "Meeting", "start": "2026-03-15T14:00:00", "end": "2026-03-15T15:00:00" }
→ Event created
Claude → nworks_message_send
{ "channel": "C001", "text": "Meeting scheduled tomorrow at 14:00" }
→ Message sent
User: Check my unread emails and summarize them
Claude → nworks_mail_list (unread)
→ 3 unread emails
Claude → nworks_mail_read (each)
→ "3 unread: 1) Deploy approval from CTO, 2) Meeting invite for Friday, 3) Weekly report reminder"CLI Usage
All commands support
--jsonfor pipe/script/agent parsing.message send,mail send, anddrive uploadsupport--dry-runfor testing without sending.
Messages (Bot API)
# Send text to user
nworks message send --to <userId> --text "Hello"
# Send text to channel
nworks message send --channel <channelId> --text "Announcement"
# Button message
nworks message send --to <userId> --type button --text "PR review request" \
--actions '[{"type":"message","label":"Approve","postback":"approve"}]'
# List message
nworks message send --to <userId> --type list --text "Today's tasks" \
--elements '[{"title":"Code review","subtitle":"PR #382"}]'
# List channel members
nworks message members --channel <channelId>Directory
nworks directory members # List organization membersCalendar (User OAuth)
# List today's events
nworks calendar list
# Specify date range
nworks calendar list --from "2026-03-14T00:00:00+09:00" --until "2026-03-14T23:59:59+09:00"
# Create event
nworks calendar create --title "Meeting" --start "2026-03-14T14:00+09:00" --end "2026-03-14T15:00+09:00"
# With location/description
nworks calendar create --title "Lunch" --start "2026-03-14T12:00+09:00" --end "2026-03-14T13:00+09:00" \
--location "Conference Room" --description "Quarterly review"
# With attendees + notification
nworks calendar create --title "Team meeting" --start "2026-03-14T10:00+09:00" --end "2026-03-14T11:00+09:00" \
--attendees "user1@example.com,user2@example.com" --notify
# Update event
nworks calendar update --id <eventId> --title "Updated title"
# Delete event
nworks calendar delete --id <eventId>Drive (User OAuth)
# List files/folders
nworks drive list
# Upload file
nworks drive upload --file ./report.pdf
# Upload to specific folder
nworks drive upload --file ./report.pdf --folder <folderId>
# Download file
nworks drive download --file-id <fileId>
# Specify output path/name
nworks drive download --file-id <fileId> --out ./downloads --name report.pdf
# List shared drives
nworks drive sharedrive-list
# List files in a shared drive (root)
nworks drive sharedrive-files --sharedrive <sharedriveId>
# List files in a shared drive folder
nworks drive sharedrive-files --sharedrive <sharedriveId> --folder <fileId>
# Download a shared drive file
nworks drive sharedrive-download --sharedrive <sharedriveId> --file-id <fileId>Mail (User OAuth)
# Send mail
nworks mail send --to "user@example.com" --subject "Subject" --body "Body"
# With CC/BCC
nworks mail send --to "user@example.com" --cc "cc@example.com" --subject "Subject" --body "Body"
# List inbox
nworks mail list
# Unread only
nworks mail list --unread
# Read mail detail
nworks mail read --id <mailId>
# Download a mail attachment
nworks mail download-attachment --id <mailId> --attachment-id <attachmentId>
# Specify output path/name
nworks mail download-attachment --id <mailId> --attachment-id <attachmentId> --out ./downloads --name invoice.pdfTasks (User OAuth)
# List tasks
nworks task list
# Incomplete only
nworks task list --status TODO
# Create task
nworks task create --title "Code review" --body "Review PR #382"
# With due date
nworks task create --title "Deploy" --due 2026-03-20
# Mark as done
nworks task update --id <taskId> --status done
# Delete task
nworks task delete --id <taskId>Boards (User OAuth)
# List boards
nworks board list
# List posts
nworks board posts --board <boardId>
# Read post detail
nworks board read --board <boardId> --post <postId>
# Create post
nworks board create --board <boardId> --title "Announcement" --body "Content"
# With notification + disable comments
nworks board create --board <boardId> --title "Notice" --body "Content" --notify --no-commentContacts (User OAuth)
# List contacts
nworks contact list
# Filter by tag
nworks contact list --tag <contactTagId>
# Get contact detail
nworks contact get --id <contactId>
# Create contact
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"}]}}'
# Update contact
nworks contact update --id <contactId> --payload '{"telephones":[{"type":"CELLPHONE","telephone":"010-1234-5678","primary":true}]}'
# Delete contact
nworks contact delete --id <contactId>
# List contact tags
nworks contact list-tags
contact createrequirescontactNameandpermission;permission.accessibleMembersmust list at least one member (usually yourself). Get your own user ID fromnworks whoami.
CI/CD Deploy Notification
# Notify team channel after deployment in GitHub Actions
nworks message send --channel $CHANNEL_ID --text "v${VERSION} deployed"Team Automation Script
# Send daily standup reminder to all members
for userId in $(nworks directory members --json | jq -r '.users[].userId'); do
nworks message send --to "$userId" --text "Standup at 10:00 today"
doneOAuth Scopes
Add the required scopes in the LINE WORKS Developer Console.
Scope | Purpose | Auth | Required For |
| Bot messaging | Service Account |
|
| Bot channel/member read | Service Account |
|
| Calendar write | User OAuth |
|
| Calendar read | User OAuth |
|
| Drive read/write | User OAuth |
|
| Drive read-only | User OAuth |
|
| Mail read/write | User OAuth |
|
| Mail read-only | User OAuth |
|
| Tasks read/write | User OAuth |
|
| Tasks read-only | User OAuth |
|
| User info read | Service Account / User OAuth |
|
| Boards read/write | User OAuth |
|
| Boards read-only | User OAuth |
|
| Contacts read/write | User OAuth |
|
| Contacts read-only | User OAuth |
|
Presets are simpler than listing scopes:
nworks login --user --preset all # default: full functionality in one login nworks login --user --preset readonly # read-only scopes
defaultis an alias ofall. Message sending uses the Service Account (bot), so it works regardless of preset. 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".
Environment Variables
Set environment variables to use nworks without nworks login (useful for CI/agents).
# Required
NWORKS_CLIENT_ID=
NWORKS_CLIENT_SECRET=
# Bot messaging only (not needed for User OAuth)
NWORKS_SERVICE_ACCOUNT=
NWORKS_PRIVATE_KEY_PATH=
NWORKS_BOT_ID=
# Optional
NWORKS_DOMAIN_ID=
NWORKS_SCOPE= # default: bot bot.read user.read
NWORKS_VERBOSE=1 # debug loggingMCP Server with Environment Variables
Sensitive values (Client Secret, Private Key path) must be set via MCP config env field. Non-sensitive values like Client ID can be configured by the AI agent through the nworks_setup tool.
{
"mcpServers": {
"nworks": {
"command": "npx",
"args": ["-y", "nworks", "mcp"],
"env": {
"NWORKS_CLIENT_SECRET": "<Client Secret>",
"NWORKS_PRIVATE_KEY_PATH": "<Private Key file absolute path (for Service Account)>"
}
}
}
}License
Apache-2.0
Available Tools
36 toolsnworks_board_createA
게시판에 글을 작성합니다. '게시판에 글 올려줘', '공지 작성해줘' 등의 요청에 사용. boardId는 nworks_board_list로 조회 가능. User OAuth 인증 필요 (board scope)
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | 글 본문 | |
| title | Yes | 글 제목 | |
| boardId | Yes | 게시판 ID (nworks_board_list로 조회 가능) | |
| enableComment | No | 댓글 허용 (기본: true) | |
| sendNotifications | No | 알림 발송 (기본: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the mutation profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), lowering the bar. The description adds a practically important disclosure — 'User OAuth 인증 필요 (board scope)' — which is real operational context given the login/logout/setup sibling tools. It does not describe the response shape, but the annotation coverage plus the auth note justify a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact clauses with zero waste: the action, the triggering intents, and the prerequisite/auth requirements. The core purpose is front-loaded before auxiliary details, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter create tool with no output schema, the description covers the essential operational needs: core purpose, example intents, how to resolve boardId, and the auth requirement, while annotations cover the safety profile. The only meaningful gap is the unspecified return value (e.g., whether the created post's ID is returned), which matters precisely because no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies: all five parameters (body, title, boardId, enableComment, sendNotifications) are already documented with descriptions and defaults in the schema. The description's only parameter-related note — the boardId lookup route — duplicates the schema's own boardId description, so it adds no net semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — '게시판에 글을 작성합니다' ('writes a post on the board') — which unmistakably identifies a create operation and sets it apart from the board-read siblings (nworks_board_list, nworks_board_posts, nworks_board_read). The example user intents ('게시판에 글 올려줘', '공지 작성해줘') further pin down call intent for an agent matching natural-language requests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context via example trigger phrases and an explicit prerequisite route: 'boardId는 nworks_board_list로 조회 가능' directs the agent to nworks_board_list when an ID is missing. It stops short of a 5 because it never explicitly says when not to use this tool versus the board read/list siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_board_listARead-onlyIdempotent
NAVER WORKS 게시판 목록을 조회합니다. '게시판 뭐 있어?', '공지사항 게시판 찾아줘' 등의 요청에 사용. User OAuth 인증 필요 (board.read scope)
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | 페이지당 항목 수 (기본: 20) | |
| cursor | No | 페이지네이션 커서 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint. The description adds a critical behavioral detail: User OAuth authentication with board.read scope, which is beyond the annotations. It also clarifies it's a retrieve operation with example use cases. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: purpose, example usage, auth requirement. No filler, front-loaded with the main verb. Excellent information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, it covers purpose, usage context, and authentication. The input schema details parameters (count, cursor). Missing return format details, but given the simplicity and lack of output schema defined, this is acceptable. Could mention pagination explicitly, but schema hints at it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters (count: '페이지당 항목 수', cursor: '페이지네이션 커서'). The description does not add any additional semantics about parameters, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'NAVER WORKS 게시판을 조회합니다' (retrieve NAVER WORKS boards). It provides concrete example queries ('게시판 뭐 있어?', '공지사항 게시판 찾아줘') that indicate when to use it. Though it doesn't explicitly contrast with sibling tools like board_posts, the intent is unambiguous given the name and examples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes example user queries that trigger this tool, plus an authentication scope note (board.read). It does not explicitly say when NOT to use it or compare to alternatives, but the examples give good guidance on when it applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_board_postsARead-onlyIdempotent
게시판의 글 목록을 조회합니다. '게시판 글 보여줘', '공지사항 확인' 등의 요청에 사용. boardId는 nworks_board_list로 조회 가능. User OAuth 인증 필요 (board.read scope)
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | 페이지당 항목 수 (기본: 20, 최대: 40) | |
| cursor | No | 페이지네이션 커서 | |
| boardId | Yes | 게시판 ID (nworks_board_list로 조회 가능) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the description's mention of OAuth and board.read scope adds value regarding auth requirements. However, it does not elaborate on pagination specifics like cursor format, which is beyond annotations but important for behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core action and example queries. It efficiently states auth requirements and boardId resolution in one sentence. Could be slightly more structured, but it is mostly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with full schema coverage and no output schema, the description covers purpose, usage, and auth. It lacks explicit note on cursor pagination, but the schema covers it. Overall sufficient for successful invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for all parameters (100% coverage). The description adds minimal extra value, just reiterating boardId is from nworks_board_list. Since schema coverage is full, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists board posts, with specific example queries and a mention of the related boardId lookup. It is distinguished from siblings like nworks_board_read by focusing on list retrieval, and the boardId reference to nworks_board_list adds clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies when to use it (e.g., '게시판 글 보여줘', '공지사항 확인') and notes boardId can be obtained via nworks_board_list. It lacks explicit 'when not to use' guidance, but the usage context is clear enough for an agent to select it among many list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_board_readARead-onlyIdempotent
게시판 글의 상세 내용을 조회합니다. postId는 nworks_board_posts로 조회 가능. User OAuth 인증 필요 (board.read scope)
| Name | Required | Description | Default |
|---|---|---|---|
| postId | Yes | 글 ID (nworks_board_posts로 조회 가능) | |
| boardId | Yes | 게시판 ID (nworks_board_list로 조회 가능) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description doesn't need to repeat that it's a read-only operation. The description adds value by noting the OAuth requirement and the board.read scope, which is additional context beyond annotations. It also mentions a subtle dependencies (posts and boards exist via specific tools). The only gap is not describing the return format or error behavior, but the annotations cover the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste. The purpose is front-loaded, the parameter source is stated, and the auth requirement is mentioned. Every sentence adds value; there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, parameters, and auth requirements. Though there is no output schema, for a simple read operation with a clear purpose, the description is sufficiently complete. The only minor gap is lack of explicit mention of what happens if the post doesn't exist, but that's an error-handling detail not essential for tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description does repeat the postId dependency on nworks_board_posts, which adds a slight contextual hint beyond the schema. All parameters are already clear from the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('조회'), resource ('게시판 글의 상세 내용'), and identifies relation to related tools (postId via nworks_board_posts). The description unambiguously differentiates it from siblings like nworks_board_list (list of boards) and nworks_board_posts (list of posts).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states the required parameters (postId, boardId) and references the sibling tools that provide these IDs, which gives the agent context on how to obtain inputs. It doesn't explicitly contrast with alternatives, but the relation to reference-gathering tools is a form of usage guidance. It could be improved by noting when to use this vs. other board tools, though the reference to nworks_board_posts is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_calendar_createA
캘린더 일정을 새로 만듭니다. '회의 잡아줘', '일정 등록해줘' 등의 요청에 사용. User OAuth 인증 필요 (calendar + calendar.read scope)
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | 종료 일시 (YYYY-MM-DDThh:mm:ss) | |
| start | Yes | 시작 일시 (YYYY-MM-DDThh:mm:ss) | |
| userId | No | 대상 사용자 ID (미지정 시 me) | |
| summary | Yes | 일정 제목 | |
| location | No | 장소 | |
| timeZone | No | 타임존 (기본: Asia/Seoul) | |
| attendees | No | 참석자 목록 | |
| description | No | 일정 설명 | |
| sendNotification | No | 참석자에게 알림 발송 (기본: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states that User OAuth authentication is required and specifies the scopes (calendar + calendar.read), which is critical behavioral context beyond the annotations. Annotations indicate readOnlyHint=false (mutation) and destructiveHint=false, and the description's 'create' aligns with readOnlyHint=false. It also mentions '새로' (new) suggesting idempotency is not implied, matching idempotentHint=false. However, it does not detail what happens on success or failure, or whether attendees are notified by default, which is covered partially by the parameter default.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences: the first states the core function with trigger examples, and the second states the authentication requirement. It is front-loaded with the primary purpose and includes only essential usage context, no filler. Every word contributes to agent decision-making.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters including attendees, location, timezone) and the absence of an output schema, the description provides the essential trigger and auth context. The schema already covers all parameter descriptions, so the description does not need to elaborate on parameters. It could benefit from noting that userId defaults to 'me' or that sendNotification may cause side effects, but these are already in the schema. Overall, it is sufficient for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so each parameter is already described in the schema. The tool description adds no new parameter information beyond what the schema provides, such as format or defaults. Thus, baseline of 3 is appropriate because the schema carries the semantic load, and the description does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('만듭니다') and resource ('캘린더 일정'), and gives example user requests that trigger it. It is distinct from siblings like nworks_calendar_update and nworks_calendar_delete, which are clearly for different actions, and from nworks_task_create which creates a different resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear trigger phrases ('회의 잡아줘', '일정 등록해줘') and the required authentication scope, giving the agent a strong sense of when to use it. It does not explicitly state when not to use it or mention alternatives (like nworks_calendar_update for modifications), but the context is sufficient for typical routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_calendar_deleteADestructiveIdempotent
캘린더 일정을 삭제합니다. '일정 취소해줘' 등의 요청에 사용. User OAuth 인증 필요 (calendar + calendar.read scope). eventId는 nworks_calendar_list로 조회 가능
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | 대상 사용자 ID (미지정 시 me) | |
| eventId | Yes | 삭제할 일정 ID (nworks_calendar_list로 조회 가능) | |
| sendNotification | No | 참석자에게 알림 발송 (기본: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the destructive nature is covered. The description adds useful behavioral context beyond annotations by specifying the required OAuth scopes (calendar + calendar.read) and the retrieval method for eventId. This complements the structured data without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, with each sentence serving a clear purpose: stating the action, providing a usage trigger, and detailing OAuth and eventId lookup. It is front-loaded with the core purpose and has no unnecessary words, making it highly efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with three parameters (one required) and no output schema, the description covers the essential context: purpose, usage trigger, authentication, and eventId acquisition. It does not describe the effect of sendNotification or error behavior, but given the simplicity and annotation coverage, the description is adequately complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (userId, eventId, sendNotification) are already documented in the input schema. The description only reinforces the eventId lookup tip, which also appears in the schema, so it adds minimal semantic value beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deletes calendar events ('캘린더 일정을 삭제합니다') and provides a concrete usage example ('일정 취소해줘'). This makes the purpose unambiguous and distinguishes it from sibling tools like nworks_calendar_create or nworks_calendar_update, which have different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear when-to-use guidance by citing the trigger phrase '일정 취소해줘' and explicitly mentions that eventId can be obtained via nworks_calendar_list, which helps the agent call it correctly. It does not explicitly state when not to use it (e.g., for rescheduling use update), but the context is sufficient for a simple delete operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_calendar_listARead-onlyIdempotent
사용자의 캘린더 일정/스케줄을 조회합니다. '오늘 일정 알려줘', '이번 주 스케줄 확인' 등의 요청에 사용. User OAuth 인증 필요 (calendar.read scope). 미로그인 시 nworks_login_user로 로그인 필요
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | 대상 사용자 ID (미지정 시 me) | |
| fromDateTime | Yes | 시작 일시 (YYYY-MM-DDThh:mm:ss+09:00) | |
| untilDateTime | Yes | 종료 일시 (YYYY-MM-DDThh:mm:ss+09:00) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint), the description adds important behavioral details: it requires user OAuth authentication with a specific scope and instructs to use nworks_login_user if not logged in. This informs the agent of prerequisites and potential side effects (none expected, but auth needed).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two sentences that immediately state the purpose, provide usage examples, and mention authentication. It is well-structured with the core function first, followed by context. No redundant information or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is straightforward and parameters are well-documented, the description does not mention the expected return value or structure (e.g., a list of events, fields included). Since there is no output schema provided, this gap mildly reduces completeness. The authentication guidance is present, but response format is unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides full descriptions for all three parameters (userId, fromDateTime, untilDateTime) with formats and examples, covering 100% of parameters. The description does not add any extra semantic meaning beyond what the schema already offers, so a baseline score of 3 applies per the rubric.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool retrieves the user's calendar schedule/events, and provides concrete example requests ('오늘 일정 알려줘', '이번 주 스케줄 확인'). This makes the tool's purpose unmistakable and distinct from calendar creation, update, or deletion siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit example use cases for listing schedules and notes the authentication requirement (OAuth, calendar.read scope) with a pointer to the login tool if not authenticated. However, it does not explicitly contrast with create/update/delete tools, though the verb '조회' (retrieve) implies a read-only operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_calendar_updateADestructiveIdempotent
기존 캘린더 일정을 수정합니다. '일정 시간 변경해줘', '회의 제목 바꿔줘' 등의 요청에 사용. User OAuth 인증 필요 (calendar + calendar.read scope). eventId는 nworks_calendar_list로 조회 가능
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | 새 종료 일시 (YYYY-MM-DDThh:mm:ss) | |
| start | No | 새 시작 일시 (YYYY-MM-DDThh:mm:ss) | |
| userId | No | 대상 사용자 ID (미지정 시 me) | |
| eventId | Yes | 일정 ID (nworks_calendar_list로 조회 가능) | |
| summary | No | 새 제목 | |
| location | No | 새 장소 | |
| timeZone | No | 타임존 (기본: Asia/Seoul) | |
| description | No | 새 설명 | |
| sendNotification | No | 참석자에게 알림 발송 (기본: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
CDESCRIPTION has readOnlyHint=false and destructiveHint=true, and the description adds the OAuth scope requirement and eventId lookup path. However, it doesn't disclose what exactly gets overwritten (e.g., partial vs. full update semantics), which matters for an update tool flagged as destructive. With annotations covering the safety profile, the description could have elaborated on overwrite behavior, but doesn't — it's adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
세 문장으로 목적, 예시, 인증 요구사항을 각각 요점만 전달한다. 문장마다 가치가 있으며 불필요한 내용이 없다. 예시가 실제 사용자 의도와 정확히 대응되어 의미를 더한다.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
9개의 파라미터와 destructive한 업데이트 특성을 가진 도구임에도, 부분 업데이트(patch)인지 전체 교체(replace)인지, sendNotification 기본값(false)이 의미하는 바가 무엇인지 등 핵심 행동이 명시되지 않았다. 출력 스키마가 없다는 점을 감안하면, 업데이트 의미론에 대한 설명이 조금 더 있으면 좋았을 것이다.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter already has a Korean description in the schema. The description doesn't add meaning beyond what's in the schema, which is acceptable given high coverage, but it also doesn't clarify interaction between parameters (e.g., start/end relationships, timezone inheritance). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
한 문장으로 명확한 동사(수정)와 대상을 제시하며, '일정 시간 변경해줘' 식의 예시로 의도를 구체화한다. 형제 도구(create/delete/list)와 이름상으로 명확히 구분되며, eventId 조회를 위해 nworks_calendar_list로 연결시킨다.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
도구를 호출할 사용자 발화 예시를 제시해 LLM이 트리거 조건을 명확히 인식할 수 있다. 다만 create/delete와의 명시적 대안 비교나 '~한 경우에는 사용하지 말 것'과 같은 제외 조건은 빠져 있으나, OAuth scope 안내와 eventId 조회 가이드가 실용적 도움을 준다.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_contact_createA
새 연락처를 만듭니다. '연락처 추가해줘' 등의 요청에 사용. payload는 NAVER WORKS 연락처 API 스펙에 맞는 JSON 객체를 그대로 전달합니다. contactName과 permission은 필수이며, permission.accessibleMembers에는 최소 1명이 있어야 합니다(보통 본인). 예: {"contactName":{"lastName":"김","firstName":"철수"},"emails":[{"email":"a@b.com","primary":true}],"permission":{"accessibleRange":"MEMBER","isCoEditing":false,"accessibleMembers":[{"id":"","type":"USER"}]}}. User OAuth 인증 필요 (contact scope)
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | 연락처 필드. 필수: contactName, permission(accessibleRange·isCoEditing·accessibleMembers 최소 1명). 선택: emails[], telephones[], organizations[], memo |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, correctly indicating a non-read write operation. The description adds critical behavioral details: the payload must conform to the NAVER WORKS API spec, that permission.accessibleMembers requires at least one member (usually oneself), and that User OAuth with contact scope is required. This supplements the annotations well, though it doesn't explain side effects or whether the tool is idempotent (though the annotation already covers idempotency).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the purpose and example, all in two sentences plus an example JSON. It is dense but not bloated; every piece adds value. The only slight inefficiency is the repeated mention of the mandatory fields in both prose and example, but this is acceptable for emphasis.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has a nested object schema, no output schema, and explicit annotations, the description covers the essential usage: purpose, required auth scope, payload structure, and constraints. It is complete enough for an agent to construct a valid request, though it does not mention possible error cases or how the created contact is returned (since no output schema is provided, the description could have stated that it returns the contact object, but this is a minor gap).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the description goes far beyond the schema: it provides a full example payload with nested objects (contactName, emails, permission) and explicit required fields. Since the schema only describes 'payload' as an object, the description compensates by detailing the internal structure, which is highly valuable for constructing a valid payload. The only minor gap is not spelling out optional field semantics, but the example covers the essentials.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource ('Create contact') in a Korean sentence for requests like 'add contact'. It lists the mandatory fields (contactName, permission) and gives a full JSON example, which unambiguously differentiates it from sibling contact tools like nworks_contact_update/delete/list. The example clarifies the exact structure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete use case ('연락처 추가해줘' requests) and mentions the requirement for User OAuth authentication with contact scope. While it does not explicitly compare against alternatives (e.g., nworks_contact_update for editing), the context is clear enough that an agent can infer when to use this tool, but it lacks an explicit 'when not to use' statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_contact_deleteADestructiveIdempotent
연락처를 삭제합니다. contactId는 nworks_contact_list로 조회 가능. User OAuth 인증 필요 (contact scope)
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | 삭제할 연락처 ID (nworks_contact_list로 조회 가능) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true. The description adds value by disclosing the OAuth scope ('contact') needed for invocation. This complements the annotations, but the description itself doesn't clarify idempotency behavior or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, efficient sentences clearly prioritized—stating the action first and important lookup context and auth requirement after. No fluff, yet includes essential information in a scannable format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive operation with strong annotations, this tool is nearly complete: the annotation set and the description together cover actions, source data, and security. The only minor gap is the lack of clarity on idempotent behavior (e.g., what happens if the contact is already deleted), which some agents might need to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear parameter description in the input schema. The tool description adds the OAuth scope context, and the parameter description restates the source of contactId as nworks_contact_list. There's no added detail on ID format, example values, or behavior in edge cases beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb+resource ('Deletes a contact') and explains how to obtain contactId via nworks_contact_list. The auth scope adds helpful context. It doesn't explicitly name sibling alternatives (e.g., nworks_contact_get or nworks_contact_update) to distinguish when to choose this over them, but the intent is entirely unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives useful context on where to source the contactId and notes the OAuth scope requirement, which is a usage prerequisite. However, it doesn't specify exclusions (e.g., when the user should use a different tool instead) or what happens for non-existent IDs, though the parameter comment reinforces the source.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_contact_getARead-onlyIdempotent
특정 연락처의 상세 정보를 조회합니다. contactId는 nworks_contact_list로 조회 가능. User OAuth 인증 필요 (contact.read scope)
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | 연락처 ID (nworks_contact_list로 조회 가능) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, confirming safe read-only behavior. The description adds the requirement for User OAuth authentication and contact.read scope, which is useful behavioral context not present in the annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose, then adds the ID source and authentication requirement. No redundancy or filler; every sentence contributes meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter get operation with annotations covering safety traits and no output schema, the description provides enough contextual information: purpose, ID retrieval, and auth requirement. It lacks explicit return value description, but the get semantics imply returning contact details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description for contactId already covers the parameter entirely (100% coverage), stating it's the contact ID obtainable from nworks_contact_list. The description repeats this exact information without adding new format, constraints, or examples, so it adds no value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (조회/query) and resource (특정 연락처/specific contact), and explicitly ties the contactId to the nworks_contact_list lookup, distinguishing it from list or create/update/delete siblings. The verb and object are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides the source of the contactId (nworks_contact_list) but does not explicitly state when to use this tool versus alternatives like nworks_contact_list for bulk retrieval. Guidance is implied rather than explicit, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_contact_listARead-onlyIdempotent
NAVER WORKS 개인 연락처 목록을 조회합니다. '연락처 목록 보여줘', '내 명함첩 확인' 등의 요청에 사용. User OAuth 인증 필요 (contact.read scope)
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | 페이지당 항목 수 (기본: 20, 최대: 500) | |
| No | 이메일로 필터링 | ||
| cursor | No | 페이지네이션 커서 | |
| userId | No | 대상 사용자 ID (미지정 시 me) | |
| telephone | No | 전화번호로 필터링 | |
| contactTagId | No | 연락처 태그 ID로 필터링 (nworks_contact_list_tags로 조회 가능) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the authentication requirement and scope (contact.read), adding detail beyond the readOnlyHint annotation. It does not describe return format or pagination behavior, but the parameters hint at pagination. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: a single sentence that states the purpose, gives example requests, and notes authentication. It is well-structured and avoids unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description does not need to explain return values. However, it does not mention pagination or filtering capabilities, though parameters like count and cursor imply them. Overall, it is adequate for basic usage, but could explicitly mention pagination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides thorough descriptions for all parameters (count, email, cursor, etc.), covering 100% of them. The tool description does not add extra meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a list of NAVER WORKS personal contacts, provides example natural-language requests, and distinguishes itself from other contact tools by focusing on the list operation. The verb '조회합니다' (retrieves) and resource '개인 연락처 목록' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives example user requests ('show contact list', 'check my contacts') and mentions the required OAuth scope, which helps with usage context. However, it does not explicitly contrast with nworks_contact_get or other alternative tools, though the list vs. single distinction is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_contact_list_tagsARead-onlyIdempotent
연락처 태그(그룹) 목록을 조회합니다. '연락처 태그 목록 보여줘' 등의 요청에 사용. User OAuth 인증 필요 (contact.read scope)
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | 페이지당 항목 수 (기본: 20, 최대: 500) | |
| cursor | No | 페이지네이션 커서 | |
| userId | No | 대상 사용자 ID (미지정 시 me) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since annotations already carry readOnlyHint=true and idempotentHint=true, the remaining behavioral risk is auth — and the description addresses precisely this with 'User OAuth 인증 필요 (contact.read scope)', which is exactly the kind of auth-context the rubric credits beyond annotations. It doesn't contradict any annotation. Minor deductions for not noting rate limits or response-shape details, though those are low-stakes for a read-only list endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight fragments — operation, trigger example, auth requirement — with zero redundancy, and the most critical information (what the tool retrieves) comes first. Every sentence earns its place; most importantly, the description doesn't hoover up schema-visible facts (docs quote param details for example), which is exactly what good tool definitions should do.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 0 required params, a small 3-param optional surface, no output schema, and full schema coverage, the combination of description + annotations covers all the essential calling context an agent needs: what it does, when to use it, what auth it needs, and how to paginate. The only nit is that the per-user vs. system-wide scope of tags is implied rather than stated — the schema's 'me' default implies it, but an explicit statement would make it bulletproof.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — each param (count with default/max, cursor, userId with the 'me' default) is already well-documented in the schema with concise Korean descriptions. The description adds zero parameter-specific semantics beyond the schema, which lands exactly at the baseline of 3 for high schema coverage; there is no deficit and no bonus.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (조회합니다/retrieves) and resource (연락처 태그(그룹) 목록 — contact tag list) and adds a concrete NLU trigger example ('연락처 태그 목록 보여줘'). What holds it back from a 5 is the lack of any explicit disambiguation from the sibling nworks_contact_list / nworks_contact_get tools, relying on the agent to infer 'tags' vs 'contacts' — the names are similar enough that a clarifying clause would help.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides one clear intent-based trigger ('requests like contact tag list') which gives an agent a pattern to match against user queries. However, it never addresses exclusions or names an alternative tool — notably high-value here because nworks_contact_list and nworks_contact_get are semantically adjacent siblings that an agent could easily fire instead. This is 'implied usage' categorized under the rubric, not the explicit when-to/when-not-to guidance that would earn a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_contact_updateADestructiveIdempotent
기존 연락처를 수정합니다. contactId는 nworks_contact_list로 조회 가능. payload는 수정할 필드만 담은 JSON 객체입니다. User OAuth 인증 필요 (contact scope)
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | 수정할 필드 (name, email, tel, company 등) | |
| replace | No | 전체 교체(PUT) 여부 (기본: false, 부분 수정 PATCH) | |
| contactId | Yes | 연락처 ID (nworks_contact_list로 조회 가능) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true. The description adds practical context by stating the OAuth requirement and clarifying that payload contains only fields to modify (partial update). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, focused sentences. The first states the primary function, the second explains the payload and authentication. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation tool with no output schema, the description covers the essential operational details: purpose, ID resolution, payload semantics, and auth. It omits explicit handling of the replace parameter or error cases, but those are partially covered by the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds meaningful value by explaining that the payload should contain only the fields to modify and that contactId can be resolved via contact_list. It does not detail the replace parameter, but the schema covers it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with '기존 연락처를 수정합니다' (modifies an existing contact), which clearly states a specific verb and resource. It also references nworks_contact_list for ID lookup, distinguishing it from contact_create and contact_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (for existing contacts) and explicitly mentions how to obtain the contactId via nworks_contact_list. It does not explicitly name alternatives or exclusion conditions, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_directory_membersARead-onlyIdempotent
NAVER WORKS 조직 구성원(직원) 목록을 조회합니다. '구성원 목록 보여줘', '팀원 찾아줘', '누구한테 메시지 보낼지 userId 찾기' 등에 사용. Service Account 인증 사용 (nworks_setup 필요). 메시지 전송 시 수신자 userId를 여기서 조회 가능. 구성원이 많으면 nextCursor로 다음 페이지를 이어서 조회
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | 페이지당 항목 수 (기본: 100) | |
| cursor | No | 페이지네이션 커서 (이전 응답의 nextCursor 값) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already declare readOnlyHint, openWorldHint, and idempotentHint, the description adds valuable behavioral context: it specifies Service Account authentication and the nworks_setup requirement, and it explains pagination via nextCursor. No contradictions with annotations found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph with multiple sentences, each adding value: purpose, use cases, auth requirement, and pagination. It is front-loaded with the primary function and remains concise, without fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with simple parameters and no output schema, the description covers the essential aspects: purpose, use cases, auth prerequisite, and pagination behavior. It implies that the response contains userId, which is critical for downstream message sending. While it doesn't enumerate all response fields, the provided context is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage of both parameters (count and cursor), including descriptions. The description only reiterates that cursor is used for pagination, which is already in the schema. It adds no new meaning beyond what the schema documents, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: it retrieves the list of NAVER WORKS organization members. It provides concrete example use cases like 'show me the member list', 'find a teammate', and 'find the userId to send a message to', which makes its purpose unmistakable and differentiates it from sibling tools such as nworks_message_send or nworks_contact_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives specific scenarios when the tool is used, such as looking up userId for messaging, and notes the prerequisite of nworks_setup. It does not explicitly list when not to use it or mention alternative tools, but the examples and context provide sufficient guidance for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_doctorARead-onlyIdempotent
NAVER WORKS 연결 상태를 진단합니다. 인증 정보, 토큰, Private Key, API 연결을 점검합니다.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true. The description adds details about what is checked (authentication info, token, private key, API connection) which provides useful context beyond annotations. For a zero-parameter diagnostic tool, this is good disclosure. No contradictions. Score 4 because it adds meaningful context about the checks performed while the annotations already cover safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the primary purpose and then lists the specific checks, making it easy to scan. No fluff, perfectly sized for a diagnostic tool with no parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter diagnostic tool with readOnly and idempotent annotations, the description covers the essential scope. However, it doesn't describe what the output will be (e.g., whether it returns a detailed report or just a status). Without an output schema, this is a slight gap, but given the simplicity and the annotations, the description is largely adequate. Score 4.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the schema coverage is effectively 100%, but the description takes on the burden of explaining what the tool does with no inputs. The description clearly states the scope of checks (auth, token, private key, API connection). Since there are no parameters, the baseline for trivial parameter semantics is 4, and the description compensates well by explaining the tool's purpose. Score 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose: diagnosing NAVER WORKS connection status by checking authentication info, tokens, Private Key, and API connection. It uses a specific verb ('진단합니다' - diagnose) and lists the specific resources checked. It doesn't explicitly distinguish from siblings, but given the siblings are all functional operations (send, list, create), the diagnostic role is evident. Score 4 rather than 5 because it doesn't explicitly contrast with siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: run diagnostics when connection issues are suspected. However, it does not explicitly state when to use this tool vs alternatives, nor any prerequisites (e.g., must be logged in first). The openWorldHint and idempotentHint annotations suggest it's safe to call anytime, but the description doesn't provide explicit guidance. Score 3 for implied usage without explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_drive_downloadAIdempotent
드라이브 파일을 다운로드합니다. User OAuth 인증 필요 (file.read scope). outputDir을 지정하면 로컬에 파일로 저장하고, 미지정 시 파일 내용을 직접 반환합니다 (텍스트는 text, 바이너리는 base64). 5MB 초과 파일은 반드시 outputDir를 지정해야 합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | Yes | 다운로드할 파일 ID (nworks_drive_list로 조회 가능) | |
| userId | No | 대상 사용자 ID (미지정 시 me) | |
| outputDir | No | 저장 디렉토리 (지정 시 파일로 저장, 미지정 시 내용을 직접 반환) | |
| outputName | No | 저장 파일명 (미지정 시 원본 파일명) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the annotations: it discloses the required OAuth scope (file.read), the conditional output behavior (save to outputDir vs. return content), the text/base64 distinction, and the 5MB size limit. This is rich, actionable behavioral information. No contradiction with annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured. The opening sentence states the core purpose, followed by auth requirements, output behavior, and a critical size constraint. Every sentence earns its place with no unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a download tool with no output schema, the description adequately covers authentication, return behavior, and file-size restrictions. Minor gaps remain, such as the exact result when saving to outputDir and behavior on errors, but the essential invocation context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining the outputDir-dependent behavior, the text/base64 return format, and the 5MB constraint. This adds real semantic value for invoking the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: '드라이브 파일을 다운로드합니다' (downloads drive file). It is specific and understandable, but it does not explicitly differentiate from the sibling nworks_sharedrive_download, so the agent must rely on tool naming to distinguish them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool and how its behavior changes based on outputDir. However, it does not mention when NOT to use it or name sibling alternatives, so the guidance is clear but not fully comparative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_drive_listARead-onlyIdempotent
NAVER WORKS 드라이브의 파일/폴더 목록을 조회합니다. '드라이브 파일 보여줘', '내 파일 목록' 등의 요청에 사용. User OAuth 인증 필요 (file.read scope)
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | 페이지당 항목 수 (기본: 20, 최대: 200) | |
| cursor | No | 페이지네이션 커서 | |
| userId | No | 대상 사용자 ID (미지정 시 me) | |
| folderId | No | 폴더 ID (미지정 시 루트) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. Beyond that, the description discloses a critical prerequisite: 'User OAuth 인증 필요 (file.read scope)'. This adds value by informing the agent about authentication requirements, which is not captured in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences: the first states the core function, the second provides usage triggers and auth requirements. No filler, front-loaded purpose, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with four optional parameters fully described in the schema, the description covers the essential behavioral and usage context. The lack of an output schema is not a major gap for a list-fetching tool, and the auth note completes the picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all four parameters (count, cursor, userId, folderId) documented in the schema itself. The tool description adds no parameter-specific meaning, so it correctly rests at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('목록을 조회합니다' - retrieves list) and the resource ('NAVER WORKS 드라이브의 파일/폴더'). It provides example user requests that clarify intent. However, it does not explicitly distinguish from sibling tools like nworks_sharedrive_list or nworks_sharedrive_files, though '내 파일 목록' implies the personal drive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete natural-language triggers ('드라이브 파일 보여줘', '내 파일 목록') that tell an agent when to invoke this tool. It lacks explicit exclusions or mention of alternative sibling tools, but the usage context is clear and direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_drive_uploadA
파일을 드라이브에 업로드합니다 (User OAuth file scope 필요). content(base64)와 fileName으로 전달하거나, filePath로 로컬 파일 경로를 지정합니다. MCP 클라이언트에서는 content+fileName 방식을 권장합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | 대상 사용자 ID (미지정 시 me) | |
| content | No | 업로드할 파일 내용 (base64 인코딩). filePath 대신 사용 | |
| fileName | No | 파일명 (content 사용 시 필수) | |
| filePath | No | 업로드할 로컬 파일 경로 (content 대신 사용, 로컬 환경에서만 동작) | |
| folderId | No | 업로드할 폴더 ID (미지정 시 루트) | |
| overwrite | No | 동일 파일명 덮어쓰기 (기본: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond annotations: it specifies the required User OAuth file scope and the local-only constraint for filePath. It also implies the tool is a write operation (consistent with readOnlyHint=false) but does not disclose side effects like size limits or conflict handling beyond the overwrite parameter (already in schema). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences with no redundant wording. It front-loads the core purpose and OAuth requirement, then explains the two input methods, and concludes with a practical recommendation. Every sentence earns its place, and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description covers the essential invocation details: authentication scope, content delivery options, and parameter composition. It does not explain the return value or error behavior, but for an upload operation that is typically not critical. The schema covers folderId and overwrite defaults, so the description is sufficiently complete for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description enhances parameter semantics by emphasizing the recommended combination (content+fileName) over filePath, and clarifies that filePath is local-only. This adds value beyond the schema's descriptions, which are already detailed but do not convey usage preference or environment constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Uploads file to drive' with a clear verb and resource. It distinguishes from siblings like nworks_drive_list and nworks_drive_download by focusing on the upload action and specifying two content delivery methods. The OAuth scope requirement adds operational context, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage guidance for the two input methods: it recommends content+fileName for MCP clients and notes that filePath works only in local environments. This helps the agent decide which parameters to use. However, it does not explicitly compare this tool to other drive operations (e.g., when to upload vs. list), though the name makes that obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_login_userA
User OAuth 로그인을 시작합니다. 반환된 URL을 브라우저에서 열어 NAVER WORKS에 로그인하세요. 로그인 완료 후 자동으로 토큰이 저장됩니다. 중요: preset을 지정하지 마세요. 기본값(default=all)이 모든 API(캘린더, 메일, 할일, 드라이브, 게시판)를 포함하므로 한 번 로그인으로 전체 기능을 사용할 수 있습니다. 읽기 전용으로 제한하려면 preset='readonly'를 지정하세요(이 경우 생성/수정/삭제 도구는 재로그인 필요).
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | 고급: 공백 구분 raw scope 직접 지정(preset 대신). 특수한 경우에만 사용 | |
| preset | No | scope 프리셋. 기본 default(=all, 전체 기능). readonly는 읽기 전용. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the minimal annotations (readOnlyHint=false, openWorldHint=true), the description discloses the full side-effect profile: it returns a URL to open externally, tokens are saved automatically, and the choice of preset affects which future tools can be used without re-login. It also warns that a read-only preset will require re-login for mutation tools. This is comprehensive transparency that the annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief, front-loaded with the primary action, then gives step-by-step behavior and an important parameter warning. No redundancy or filler, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple OAuth login tool, the description covers the return value (URL to open), the automatic token storage, and the implications of preset selection. Since there is no output schema, the description fully explains what the agent needs to know to correctly invoke and handle the result. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema already documents both parameters (100% coverage), the description enriches them with practical meaning: it explains that the default preset (=all) covers all API categories, warns against specifying a preset unnecessarily, and clarifies the scope parameter as a raw override for advanced use. This goes well beyond the schema's enum descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool initiates a user OAuth login for NAVER WORKS, instructs the agent to open the returned URL in a browser, and notes that tokens are automatically saved upon completion. This distinguishes it from siblings like nworks_logout and nworks_setup, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: it tells the agent to avoid specifying a preset to get all API scopes, and explains the read-only preset for limited access. It also implies that login is a prerequisite for other tools, though it does not explicitly contrast with alternatives like logout or setup. The guidance on preset selection is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_logoutADestructiveIdempotent
저장된 NAVER WORKS 인증 정보와 토큰을 모두 삭제합니다
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=true. The description adds crucial context by specifying exactly what is destroyed: stored authentication info and tokens. This goes beyond the annotations' generic 'destructive' flag. The idempotent nature is implied (logout can be called repeatedly), and the description aligns with annotations. No contradiction. A 4 is warranted because it adds behavioral detail without redundancy.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One succinct sentence that states the action and its consequences with no filler. It is front-loaded with the verb and resource. Perfectly concise for a simple logout operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with annotations covering safety (destructive, idempotent, readOnly) and no output schema, the description is complete. An agent needs only to know what this does and that it deletes stored credentials, both of which are provided. There's no missing information that would impede a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides no parameter semantics. The description appropriately refrains from adding parameter info, as there are none. The baseline for zero parameters is 4, and no deduction is needed. The description's focus on the action and its effect on stored state is sufficient for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool logs out by deleting stored NAVER WORKS authentication info and tokens. The verb 'delete' (삭제) and resource (auth info/tokens) are specific and unambiguous. This distinguishes it from all siblings, especially nworks_login_user and nworks_whoami, which are about authentication state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this should be used when the agent needs to log out of NAVER WORKS, clearing stored credentials. It doesn't explicitly state when not to use it or mention alternatives, but given the tool's unique function (no sibling does logout), the context is clear enough. A 4 is appropriate because there is no ambiguity about its purpose, though explicit conditions could improve it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_mail_download_attachmentAIdempotent
메일 첨부파일을 다운로드합니다. mailId와 attachmentId는 nworks_mail_read로 조회 가능. User OAuth 인증 필요 (mail.read scope). outputDir을 지정하면 로컬에 파일로 저장하고, 미지정 시 파일 내용을 직접 반환합니다 (텍스트는 text, 바이너리는 base64). 5MB 초과 파일은 반드시 outputDir를 지정해야 합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| mailId | Yes | 메일 ID (nworks_mail_list로 조회 가능) | |
| userId | No | 대상 사용자 ID (미지정 시 me) | |
| outputDir | No | 저장 디렉토리 (지정 시 파일로 저장, 미지정 시 내용을 직접 반환) | |
| outputName | No | 저장 파일명 (미지정 시 원본 파일명) | |
| attachmentId | Yes | 첨부파일 ID (nworks_mail_read로 조회 가능) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description exceeds annotations by specifying OAuth requirements, output modes (file vs. direct content), and the 5MB limitation. Annotations indicate non-destructive and idempotent, but description adds meaningful behavioral context not covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is succinct, front-loaded with the core purpose and key conditions (outputDir, file size limit). Every sentence adds critical information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, description provides enough detail on return modes and constraints. The complexity is moderate and fully addressed with parameter semantics and usage guidance. Missing details like empty states or error handling are minor given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters with descriptions, and the tool description further clarifies the roles of mailId, attachmentId, outputDir, and outputName. Even though coverage is 100%, the description adds value by explaining when to use outputDir for large files and specifying content type handling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool downloads mail attachments, identifies required parameters (mailId, attachmentId), and explains the output behavior (file save or direct return). It distinguishes itself from siblings by focusing on attachment download specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It mentions that mailId and attachmentId can be obtained via nworks_mail_read, and that OAuth scope mail.read is needed舋clearly setting the context. It doesn't explicitly state when NOT to use this tool versus alternatives, but the focused purpose and sibling names (e.g., mail_send, mail_read) make the intent clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_mail_listARead-onlyIdempotent
받은 메일 목록을 조회합니다. '메일 확인해줘', '받은편지함 보여줘', '안 읽은 메일 있어?' 등의 요청에 사용. User OAuth 인증 필요 (mail.read scope)
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | 페이지당 항목 수 (기본: 30, 최대: 200) | |
| cursor | No | 페이지네이션 커서 | |
| userId | No | 대상 사용자 ID (미지정 시 me) | |
| folderId | No | 메일 폴더 ID (기본: 0 = 받은편지함) | |
| isUnread | No | 읽지 않은 메일만 조회 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description only needs to add context. It usefully discloses the User OAuth authentication requirement and mail.read scope, which goes beyond the annotations. It does not describe return shape or sorting/pagination behavior, but the safety profile is already covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundant content: the main purpose is front-loaded, followed by concrete usage examples and an authentication note. Every clause contributes something an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation, the description covers purpose, typical user intents, and auth requirements, while the schema covers all parameters. There is no output schema, so a note on return format or pagination behavior would make it more complete, but nothing critical is missing for invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters clearly. The description adds a small amount of intent mapping via the example '안 읽은 메일 있어?' for isUnread, but otherwise does not materially enhance the parameter explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a list of received mail ('받은 메일 목록을 조회합니다') and gives concrete example user requests. It does not explicitly name sibling tools like nworks_mail_read or nworks_mail_send, so it lacks explicit sibling differentiation, but the resource and action are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear trigger phrases ('메일 확인해줘', '받은편지함 보여줘', '안 읽은 메일 있어?') and mentions required OAuth scope. It does not state when to use alternatives such as nworks_mail_read for individual message content, so there are no exclusions or alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_mail_readBRead-onlyIdempotent
특정 메일의 상세 내용(본문, 첨부파일 등)을 조회합니다. '이 메일 내용 보여줘' 등의 요청에 사용. mailId는 nworks_mail_list로 조회 가능. User OAuth 인증 필요 (mail.read scope)
| Name | Required | Description | Default |
|---|---|---|---|
| mailId | Yes | 메일 ID (nworks_mail_list로 조회 가능) | |
| userId | No | 대상 사용자 ID (미지정 시 me) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint and idempotentHint, so the safety profile is covered. The description adds the OAuth requirement (mail.read scope) and the dependency on nworks_mail_list for the ID, which is useful. Beyond that, it says '본문, 첨부파일 등' but doesn't clarify whether attachments are returned as content or just metadata – a meaningful behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. The purpose is front-loaded with the verb and object, and the ID sourcing hint is useful. Slight redundancy with the auth note that could have been more compact, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, ID source, and authentication, but omits a few practical details: whether attachments are included as metadata or content, any size/pagination limits, and the explicit boundary with nworks_mail_download_attachment. For a read-only tool, this is acceptable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for both parametersjší. The description adds the cross-reference that mailId comes from nworks_mail_list, which is helpful but not deeply explanatory. It doesn't add format details, so it stays at the baseline for a fully-documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action '조회' (query) on a specific mail resource and lists the contents (body, attachments). It distinguishes from list and attachment-download siblings by focusing on detailed content. However, it doesn't explicitly name the sibling alternatives, so slightly less crisp than a direct contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a usage scenario ('이 메일 내용 보여줘') and says mailId comes from nworks_mail_list, which helps. But it doesn't warn that attachment content itself is handled by nworks_mail_download_attachment – this could mislead an agent into expecting binary data here. That omission weakens the guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_mail_sendA
NAVER WORKS 메일을 전송합니다. '메일 보내줘', '이메일 작성해줘' 등의 요청에 사용. 비동기 전송(성공 시 202). User OAuth 인증 필요 (mail scope)
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | 참조 이메일 (여러 명은 ; 로 구분) | |
| to | Yes | 수신자 이메일 (여러 명은 ; 로 구분) | |
| bcc | No | 숨은참조 이메일 (여러 명은 ; 로 구분) | |
| body | No | 메일 본문 | |
| userId | No | 발신자 ID (미지정 시 me) | |
| subject | Yes | 메일 제목 | |
| contentType | No | 본문 형식 (기본: html) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals critical runtime behavior: asynchronous transmission with an HTTP 202 on success, and the need for User OAuth authentication with a mail scope. These facts go far beyond the annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false), which say nothing about async behavior or auth rules. This is exactly the kind of extra context that prevents mis-invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: a direct purpose statement, example trigger phrases, async behavior/auth scope. Each sentence introduces a distinct, useful fact without redundancy. It is efficiently structured for quick agent scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 100% documented schema and no output schema, the description covers purpose, use triggers, async semantics, and authentication. It omits detail about possible failure responses or output variables, but those are part of schema or dynamic runtime rather than static description needs. The coverage is strong for an invocation decision.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented (semicolon-separated recipients, body, userId defaulting to me, contentType enum). The description adds no parameter-specific meaning on top of the schema. A baseline score of 3 is appropriate because structured data carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'NAVER WORKS 메일을 전송합니다' — a specific verb (send) and resource (mail). Trigger phrases like '메일 보내줘' make it easy for an agent to match user intent. It does not explicitly contrast with siblings like nworks_message_send, but the Korean term '메일' unambiguously differentiates it from messaging tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage guidance with example requests ('메일 보내줘', '이메일 작성해줘'), helping the agent know when to select this tool. It does not state when not to use it or mention an alternative, but the email-sending context is clear enough for routing. The auth requirement also informs feasibility of use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_message_membersARead-onlyIdempotent
특정 채널의 구성원 목록을 조회합니다. '이 채널에 누가 있어?' 등의 요청에 사용. Service Account 인증 사용 (nworks_setup 필요)
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | 채널 channelId |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true. The description adds that it uses Service Account authentication and requires prior setup (nworks_setup), which is behavioral context beyond the annotations. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, two sentences, and front-loads the core purpose. The usage example and auth note are both valuable and non-redundant. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has only one parameter, annotations cover safety (read-only, idempotent), and there is no output schema, the description is adequate. It does not mention the return format or padding details, but for a simple list operation, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter 'channel' is already described as '채널 channelId'. The description does not add further detail about the parameter format or expected values, so baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists members of a specific channel, with a concrete example query. The verb '조회' (query) and resource '채널의 구성원' are specific, and the tool name directly matches the purpose. It is distinguishable from sibling tools like nworks_directory_members, which likely lists directory members, and nworks_message_send, which sends messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides a usage example ('이 채널에 누가 있어?' 라는 요청에 사용) and specifies the authentication prerequisite (Service Account 인증 사용, nworks_setup 필요). This tells the agent when to use it and what setup is required, although it does not explicitly mention alternatives, the sibling context makes it clear that nworks_directory_members is the alternative for directory members.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_message_sendA
NAVER WORKS 메시지를 전송합니다 (봇이 사용자 또는 채널에 발송). Service Account 인증 사용 (nworks_setup에서 serviceAccount, botId 설정 + 환경변수 NWORKS_PRIVATE_KEY_PATH 필요. User OAuth 불필요)
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | 수신자 userId (channel과 택 1). nworks_directory_members로 userId 조회 가능 | |
| text | Yes | 메시지 본문 | |
| type | No | 메시지 타입 (기본: text) | |
| actions | No | 버튼 액션 JSON (type=button일 때) | |
| channel | No | 채널 channelId (to와 택 1). nworks_message_members로 채널 구성원 확인 가능 | |
| elements | No | 리스트 항목 JSON (type=list일 때) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutation (readOnlyHint=false) and non-idempotency. The description adds meaningful context beyond annotations by specifying the authentication mechanism, required environmental setup, and that the bot sends to users or channels. It does not describe failure modes or rate limits, but the added auth details are valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loading the primary action and then adding prerequisite details. It avoids fluff and includes necessary context (auth requirements) without being overly verbose. Slightly more could be trimmed, but it is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers key contextual aspects: prerequisite setup, environment variable requirement, and target types. With full schema coverage for inputs and no output schema, the description does not need to explain return values. It might benefit from noting error behavior, but it is sufficiently complete for a sending tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already well-documented in the schema. The description does not add any parameter-specific details beyond what the schema provides; it only gives authentication context. With high schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sends NAVER WORKS messages via bot, specifying recipients as users or channels. The verb '전송' (send) and resource '메시지' are concrete, and it is implicitly distinct from sibling tools like nworks_message_members, but it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides important context about prerequisites (Service Account, nworks_setup, environment variables) and notes that User OAuth is unnecessary. However, it does not explicitly state when to use this tool versus alternatives or include exclusion conditions, so guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_setupAIdempotent
NAVER WORKS API 인증 정보를 설정합니다.
■ 사전 준비 (사용자가 직접 해야 함):
https://dev.worksmobile.com 에서 앱 생성 후 Client ID와 Client Secret을 발급받습니다.
MCP 설정 파일(예: claude_desktop_config.json)의 nworks 서버에 env 필드를 추가합니다: { "env": { "NWORKS_CLIENT_SECRET": "<발급받은 Client Secret>" } }
MCP 클라이언트(예: Claude Desktop)를 재시작합니다.
■ 이 tool의 역할:
clientId(필수)와 serviceAccount, botId, domainId(선택)를 파라미터로 받아 저장합니다.
Client Secret은 보안을 위해 파라미터로 받지 않으며, 환경변수 NWORKS_CLIENT_SECRET에서 자동으로 읽습니다.
Service Account 사용 시 환경변수 NWORKS_PRIVATE_KEY_PATH도 필요합니다.
■ 설정 후 다음 단계:
캘린더/메일/드라이브/할일/게시판 → nworks_login_user tool로 브라우저 로그인 필요
메시지/구성원조회 → Service Account 인증 (serviceAccount + botId + NWORKS_PRIVATE_KEY_PATH)
■ 환경변수 NWORKS_CLIENT_SECRET이 없으면 이 tool은 실패합니다. 실패 시 사용자에게 위 사전 준비 단계를 안내하세요.
OAuth Redirect URI: http://localhost:9876/callback
| Name | Required | Description | Default |
|---|---|---|---|
| botId | No | Bot ID (메시지 전송 시 필요) | |
| clientId | Yes | Client ID (Developer Console에서 발급) | |
| domainId | No | Domain ID | |
| serviceAccount | No | Service Account ID (예: xxxxx.serviceaccount@domain) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond what annotations offer (idempotent, non-destructive mutation), it discloses a hard failure mode — the tool fails without NWORKS_CLIENT_SECRET — plus the NWORKS_PRIVATE_KEY_PATH dependency for Service Account flows and the OAuth redirect URI. It warns that an agent should walk users through prerequisites on failure, turning a simple config call into a predictable, recoverable operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every section earns its place — prerequisites, tool role, workflow routing, and failure handling are scannable via headers, block bullets, and numbered lists. The one blemish is the OAuth redirect URI appearing as an orphaned final line after the error-handling note, which slightly undercuts the otherwise clean structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool (4 flat params, 1 required, no output schema, no enums, no nested objects), the description is over-complete: it covers prerequisites, environment dependencies, post-conditions, and failure recovery. Nothing an agent needs to invoke it correctly is missing, and the absence of return-value docs is immaterial for a credential-storage tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already has 100% coverage with Korean descriptions, setting a baseline of 3, and the prose adds value on top: it reveals clientId is the required anchor, explains Client Secret is deliberately absent as a param for security, and surfaces pairwise semantics like serviceAccount+botId for message features. That relational context isn't in the schema's individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Immediately states its purpose: 'NAVER WORKS API 인증 정보를 설정합니다' (configures NAVER WORKS API authentication), then the '이 tool의 역할' section explicitly clarifies it stores clientId plus optional serviceAccount, botId, domainId. This setup-verb-plus-resource purpose distinguishes it cleanly from the 35+ operation-oriented siblings (send, list, create, etc.) without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '설정 후 다음 단계' section explicitly routes the agent conditionally: calendar/mail/drive/task/board features require calling nworks_login_user next, while message/member features require Service Account auth. It lacks an explicit 'do NOT use this when' exclusion, but the workflow context and the failure-remediation note ('실패 시 사용자에게...안내하세요') provide strong, practical invocation guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_task_createA
할 일(TODO)을 새로 만듭니다. '할 일 추가해줘', 'TODO 등록해줘' 등의 요청에 사용. 기본적으로 자기 자신에게 할당. User OAuth 인증 필요 (task + user.read scope)
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | 할 일 제목 | |
| userId | No | 생성자 user ID (미지정 시 me) | |
| content | No | 할 일 내용 | |
| dueDate | No | 마감일 (YYYY-MM-DD) | |
| categoryId | No | 카테고리 ID | |
| assigneeIds | No | 담당자 user ID 목록 (미지정 시 자기 자신) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=false and destructiveHint=false, and the description does not contradict them. It adds valuable context beyond annotations: OAuth scope requirement (task + user.read) and default self-assignment. It does not detail response format or side effects, but for a create operation with no output schema, this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each earning its place: the first states the action and example requests, the second covers default assignment and auth. Action is front-loaded, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with no output schema, the description covers trigger phrases, default behavior, and auth requirements. It does not explicitly state the return value (e.g., created task object or ID), but that is a minor gap for a creation operation where the agent often only needs to confirm success.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all 6 parameters with descriptions, including inline defaults for userId and assigneeIds. The description restates the self-assignment default but does not add new parameter-level semantics beyond what the schema already provides. Baseline 3 is appropriate given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a new TODO and gives concrete natural-language trigger phrases ('할 일 추가해줘', 'TODO 등록해줘'). It also clarifies the default self-assignment, distinguishing it from sibling update/delete operations by explicitly naming the 'create' action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage triggers and the default assignment context. However, it does not mention alternatives like nworks_task_update for modifying existing tasks, leaving the agent to infer when not to use this tool. A brief 'use task_update to modify' would elevate it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_task_deleteADestructiveIdempotent
할 일을 삭제합니다. taskId는 nworks_task_list로 조회 가능. User OAuth 인증 필요 (task + user.read scope)
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | 삭제할 할 일 ID (nworks_task_list로 조회 가능) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it requires OAuth with task and user.read scope, which is useful behavioral information. It does not mention side effects like permanent deletion or irreversibility, but the destructiveHint annotation already covers that. The idempotentHint is also in annotations. The description adds authentication context, earning a 4 rather than a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of two short sentences. It conveys the essential information without redundancy. Every word adds value, and it is well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description does not specify return values, which is acceptable. It covers the action, parameter usage, and authentication. However, it does not mention possible errors or exceptions, which is a minor gap. Overall, it provides sufficient context for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter taskId is described as '삭제할 할 일 ID' (todo ID to delete) and explicitly states it can be retrieved via nworks_task_list. This fully explains the parameter's purpose and how to obtain it, making the schema self-sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States clearly that it deletes a todo. The description directly says '할 일을 삭제합니다' (deletes a todo), which is unambiguous. It also specifies how to obtain the taskId, making the purpose fully clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the task ID can be retrieved via nworks_task_list, implying a workflow. While it doesn't explicitly contrast with create or update, the action (delete) is self-evident. It also mentions required authentication scopes, which aids usage. Slight gap: no explicit 'use this when' statement, but the intent is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_task_listARead-onlyIdempotent
할 일(TODO) 목록을 조회합니다. '할 일 확인해줘', 'TODO 목록 보여줘', '남은 업무 뭐 있어?' 등의 요청에 사용. User OAuth 인증 필요 (task.read scope)
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | 페이지당 항목 수 (기본: 50, 최대: 100) | |
| cursor | No | 페이지네이션 커서 | |
| status | No | 필터: TODO 또는 ALL (기본: ALL) | |
| userId | No | 대상 사용자 ID (미지정 시 me) | |
| categoryId | No | 카테고리 ID (기본: default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safe read-only nature is covered. The description adds the OAuth task.read requirement, which is useful context, but it doesn't disclose pagination behavior or what the returned task list looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences: purpose, trigger examples, and auth requirement. There is no filler, no repetition, and the core verb and resource are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with fully documented optional parameters and safety annotations, the description supplies the auth precondition and realistic usage scenarios. It doesn't describe the response shape, but nothing critical for selecting and invoking the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All five parameters are fully described in the schema, including defaults and enum values, so schema coverage is 100%. The description adds no parameter-specific detail, which is acceptable at baseline but not more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (조회/query) and resource (할 일/TODO 목록), and includes example user requests that map directly to the tool. It doesn't explicitly contrast with nworks_task_create/update/delete, but the verb and resource boundary are evident from the context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists concrete natural-language triggers such as '할 일 확인해줘' and 'TODO 목록 보여줘', making when-to-use fairly explicit. It also states the required OAuth scope. It doesn't mention when not to use it or when to prefer a sibling, but the intended usage is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_task_updateADestructiveIdempotent
할 일을 수정하거나 완료 처리합니다. '할 일 완료 처리해줘', '마감일 변경해줘' 등의 요청에 사용. taskId는 nworks_task_list로 조회 가능. User OAuth 인증 필요 (task + user.read scope)
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | 새 제목 | |
| status | No | 상태 변경: done(완료) 또는 todo(미완료) | |
| taskId | Yes | 할 일 ID (nworks_task_list로 조회 가능) | |
| content | No | 새 내용 | |
| dueDate | No | 새 마감일 (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as a non-read-only, destructive operation. The description additionally discloses an OAuth requirement with the exact scope ('task + user.read'), which is valuable behavioral context not present in the annotations or schema. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: it states the operation, gives usage examples, notes the ID source, and lists the auth requirement. Every clause contributes necessary information, and the primary purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the full schema coverage, annotations, and usage examples, the agent has enough to invoke the tool correctly: what it does, when to use it, how to get taskId, and what auth is required. The only notable omission is return-value behavior after an update, but no output schema exists and the core calling requirements are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds semantic mapping between user intents and parameters, such as '완료 처리' implying status=done and '마감일 변경' implying dueDate. It also reinforces that taskId comes from nworks_task_list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation: '할 일을 수정하거나 완료 처리합니다' (modify or complete a task), with concrete example requests. It does not explicitly contrast with sibling tools like nworks_task_create or nworks_task_delete, but the 'update' verb and examples make the intended scope clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context by mapping natural-language requests ('할 일 완료 처리해줘', '마감일 변경해줘') to this tool and tells the agent where to find taskId (nworks_task_list). It lacks explicit exclusions or alternative routing, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nworks_whoamiARead-onlyIdempotent
현재 인증된 NAVER WORKS 계정 정보와 토큰 유효 상태를 확인합니다. 인증 문제 진단 시 먼저 호출
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and open-world behavior. The description adds only a minor behavioral detail: it checks token validity. It does not describe unauthenticated behavior or what exactly is returned, but for a safe read-only status check this is not critical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no redundant content: the first states the purpose, the second states the recommended invocation context. The core functional information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only diagnostic tool, the description is complete. It tells the agent what account and token state it verifies and when to call it first. No output schema exists, but the stated output concept is sufficient for a whoami-style operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no input ambiguity. The schema already fully addresses parameter semantics because there are none to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (checks) and a clear resource: the currently authenticated NAVER WORKS account and token validity. This distinguishes it from sibling auth-related tools like logout and setup of actual credentials.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to call this first when diagnosing authentication issues, which is clear situational guidance. It does not explicitly list when not to use it, but the intent and placement among auth-related siblings make the intended use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
18 tool updates
v1.1.4- Changed
nworks_board_list3 fields changed- added
Input schema / properties / count / maximumAdded value: +9007199254740991 - added
Input schema / properties / count / minimumAdded value: +1 - changed
Input schema / properties / count / typePrevious value: -"number"New value: +"integer"
- Changed
nworks_board_posts3 fields changed- added
Input schema / properties / count / maximumAdded value: +40 - added
Input schema / properties / count / minimumAdded value: +1 - changed
Input schema / properties / count / typePrevious value: -"number"New value: +"integer"
- Added
nworks_contact_create - Added
nworks_contact_delete - Added
nworks_contact_get - Added
nworks_contact_list - Added
nworks_contact_list_tags - Added
nworks_contact_update - Changed
nworks_directory_members2 fields changed- added
Input schema / properties / countAdded value: +{ + "description": "페이지당 항목 수 (기본: 100)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / cursorAdded value: +{ + "description": "페이지네이션 커서 (이전 응답의 nextCursor 값)", + "type": "string" +}
- Changed
nworks_drive_list3 fields changed- added
Input schema / properties / count / maximumAdded value: +200 - added
Input schema / properties / count / minimumAdded value: +1 - changed
Input schema / properties / count / typePrevious value: -"number"New value: +"integer"
- Changed
nworks_login_user2 fields changed- added
Input schema / properties / presetAdded value: +{ + "description": "scope 프리셋. 기본 default(=all, 전체 기능). readonly는 읽기 전용.", + "enum": [ + "readonly", + "default", + "all" + ], + "type": "string" +} - changed
Input schema / properties / scope / descriptionPrevious value: -"지정하지 마세요 (기본값이 전체 scope 포함). 특수한 경우에만 사용"New value: +"고급: 공백 구분 raw scope 직접 지정(preset 대신). 특수한 경우에만 사용"
- Added
nworks_mail_download_attachment - Changed
nworks_mail_list6 fields changed- added
Input schema / properties / count / maximumAdded value: +200 - added
Input schema / properties / count / minimumAdded value: +1 - changed
Input schema / properties / count / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / folderId / maximumAdded value: +9007199254740991 - added
Input schema / properties / folderId / minimumAdded value: +0 - changed
Input schema / properties / folderId / typePrevious value: -"number"New value: +"integer"
- Changed
nworks_mail_read3 fields changed- added
Input schema / properties / mailId / maximumAdded value: +9007199254740991 - added
Input schema / properties / mailId / minimumAdded value: +0 - changed
Input schema / properties / mailId / typePrevious value: -"number"New value: +"integer"
- Added
nworks_sharedrive_download - Added
nworks_sharedrive_files - Added
nworks_sharedrive_list - Changed
nworks_task_list3 fields changed- added
Input schema / properties / count / maximumAdded value: +100 - added
Input schema / properties / count / minimumAdded value: +1 - changed
Input schema / properties / count / typePrevious value: -"number"New value: +"integer"
1 tool update
v1.1.1- Changed
nworks_setup2 fields changed- removed
Input schema / properties / clientSecretRemoved value: -{ - "description": "Client Secret (Developer Console에서 발급). 환경변수 NWORKS_CLIENT_SECRET이 설정되어 있으면 생략 가능", - "type": "string" -} - removed
Input schema / properties / privateKeyPathRemoved value: -{ - "description": "Private Key 파일의 로컬 절대 경로 (서비스 계정 인증 시 필요). 사용자에게 파일이 저장된 경로를 직접 물어보세요 (예: C:\\Users\\me\\Downloads\\private.key). 파일 업로드가 아닌 경로 문자열입니다.", - "type": "string" -}
26 tool updates
v1.1.0- First observed
nworks_board_create - First observed
nworks_board_list - First observed
nworks_board_posts - First observed
nworks_board_read - First observed
nworks_calendar_create - First observed
nworks_calendar_delete - First observed
nworks_calendar_list - First observed
nworks_calendar_update - First observed
nworks_directory_members - First observed
nworks_doctor - First observed
nworks_drive_download - First observed
nworks_drive_list - First observed
nworks_drive_upload - First observed
nworks_login_user - First observed
nworks_logout - First observed
nworks_mail_list - First observed
nworks_mail_read - First observed
nworks_mail_send - First observed
nworks_message_members - First observed
nworks_message_send - First observed
nworks_setup - First observed
nworks_task_create - First observed
nworks_task_delete - First observed
nworks_task_list - First observed
nworks_task_update - First observed
nworks_whoami
TDQS
Scored across 36 tools
Each tool targets a distinct resource+action pair (e.g., calendar_list vs calendar_create, mail_send vs mail_list). No two tools have overlapping purposes; even similar-sounding drive vs sharedrive tools are clearly separated by domain and description.
All tools follow the pattern nworks_<domain>_<action> (e.g., nworks_calendar_list, nworks_mail_read, nworks_task_update). This is perfectly consistent across all 36 tools, with no mixed conventions or vague verbs.
36 tools is high, but the server integrates a wide range of NAVER WORKS domains (calendar, mail, drive, task, board, contact, message, directory, auth). Each tool serves a clear purpose within its domain, so the count feels justified rather than bloated, though it borders on heavy.
CRUD coverage is solid for most domains: calendar, tasks, contacts all have list/create/update/delete; mail has send/list/read/download; drive has list/upload/download; boards have list/posts/read/create. Minor gaps exist (e.g., no mail delete, board update/delete, drive delete), but these are non-core and agents can work around them.
Maintenance
Related MCP Connectors
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
AI agent platform: manage leads, conversations, bots, calendar and CRM via MCP.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
LinkedIn outreach MCP server — 19 tools for AI agents to prospect, sequence, and manage contacts.
Related MCP Servers
- AlicenseAqualityDmaintenanceAI-powered MCP server for managing LINE Official Accounts. Send broadcasts, push messages, check analytics, manage rich menus — all through natural language via Claude, ChatGPT, or Cursor. 10 tools included: * Account info, friend count, message quota * Broadcast, push message, multicast * Delivery stats, user profiles, follower list * Rich menu management Supports 95M+ LINE users across Jap10MIT
- AlicenseAqualityDmaintenanceSelf-hosted MCP server that exposes Synology Drive, Spreadsheet, MailPlus, and Calendar as structured tools for AI agents, enabling file, spreadsheet, email, and calendar management via natural language.398 npm10MIT

LINE Bot MCP Serverofficial
AlicenseAqualityAmaintenanceMCP server that integrates the LINE Messaging API to enable AI agents to send messages and manage LINE Official Accounts.12691 npm781Apache 2.0- FlicenseCqualityDmaintenanceMCP server that enables AI agents to control all DingTalk features (messaging, calendar, tasks, approvals, etc.) via natural language using the DingTalk Workspace CLI.831-