Unofficial NAVER WORKS (LINE WORKS) Drive admin CLI + MCP server — service-account delegation, shared-drive permission management
Server has 21 tools with explicit registrations and descriptions. Naming is verb-first and clear (works_drives_list, works_perm_grant, etc.). Descriptions are present and substantive (avg ~120 chars), explaining WHAT each tool does and key constraints (e.g., 'Requires confirm=true'). However, input schemas lack formal type constraints: parameters are typed in Python signatures but JSON Schema enums/patterns are not visible in the code. Output schemas are undocumented, LLMs cannot predict response structure. Error handling is minimal: confirm-gated tools return a generic error dict on missing confirmation, but no guidance on retryability or recovery. Destructive operations (perm_revoke, folder_enable/disable) are well-gated with confirm=true, following the confirmation-request pattern. Parameter descriptions are adequate but lack format/range constraints (e.g., 'email' params don't specify format; 'perm_type' doesn't enumerate READ|WRITE). Composition is sound: tools are single-responsibility and chain-friendly (e.g., works_drives_list → works_perms_list → works_perm_grant). Security: no secrets in params (good), but no audit logging visible in the code snippet.
Raw WORKS API call (escape hatch for unlisted endpoints). Requires confirm=true for non-GET methods.
Audit account hygiene (on-leave-but-active, no org unit, stale pending, admins). Also returns `dormant_rules` and `coverage`: if the tenant leaves a source field empty, that check CANNOT fire — an empty finding list is not a clean bill of health.
Reconcile WORKS accounts against an external roster CSV/TSV (email column auto-detected). only_works = accounts with no roster entry; only_roster = people with no account, on our own domains. **Pass `corroborating_rosters` ({label: path}) whenever you have other rosters.** Absence from one roster is not evidence of departure — rosters omit whole categories of people, and acting on a single source has already cost one current employee their account. Corroborated rows come back with `seen_in` populated.
Get one shared drive's settings (accessibleRange TENANT/DOMAIN/MEMBER, permissionType).
List shared drives (id, name, accessibleRange, permissionType, masters).
Output schemas are not documented. LLMs cannot predict response structure (fields, types, nested objects). This forces agents to guess at downstream field names and risks chaining failures.
Input schemas lack formal constraints (enums, patterns, min/max). Parameters like 'perm_type' accept READ|WRITE but no enum is declared; 'email' params lack format validation. LLMs may pass invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Download a file to a local path (follows the storage redirect with auth).
Upload a local file into a My Drive folder (2-step metadata+PUT flow).
List files/folders. With sharedrive_id: that shared drive; else the delegated user's My Drive.
Create a folder in the delegated user's My Drive (root if no parent).
Disable folder-level permissions. WARNING: drops folder grants, restores inheritance. Requires confirm=true.
Enable folder-level permissions. WARNING: breaks inheritance (masters-only until granted). Requires confirm=true.
Everything the API can tell you about one member's reach — the offboarding/transfer query. Covers account state, external roster cross-checks, shared-drive access (drive MASTER roles included — masters never appear in the permissions list), their own My Drive folders shared outward, and folders shared to them. Run this BEFORE suspending an account: once suspended, delegation fails and most of this becomes unavailable.
Grant READ/WRITE to a member (drive-level, or folder-level with folder_id). Requires confirm=true.
Delete ONE permission by perm_id or target_email. Bulk delete is unsupported by design. Requires confirm=true.
List drive-level (or, with folder_id, folder-level) permissions.
Search drive files (drive_type_filters e.g. 'SHARE_DRIVE').
Share a My Drive folder so it appears in the recipient's 'shared with me'. My Drive only (not shared drives). Requires confirm=true.
Remove sharing from a My Drive folder. Requires confirm=true.
List a member's 'shared with me' folders (requires that member as delegated user).
Find members by any substring (name, email, dept, employee number).
List tenant members (flattened: email, name, dept(s), position, status flags).
Error handling is minimal. Confirm-gated tools return a generic error dict but do not classify errors as retryable/user-fixable/fatal. No guidance on recovery (e.g., 'Try search_users() first').
Parameter descriptions lack format/range constraints. E.g., 'delegated member email (optional)' does not specify email format; 'folder ID' does not explain ID structure or how to obtain it.
No pagination support visible. Tools like works_users_list and works_search may return large result sets without limit/offset/cursor parameters, risking context window exhaustion.