{
  "schema_version": "cmdhub.website.command_catalog.v1",
  "tool": "msdrive",
  "title": "Microsoft OneDrive CLI",
  "description": "OneDrive files, folders, metadata, trash, and sharing permissions through Microsoft Graph.",
  "auth_mode": "OAuth2",
  "auth_scopes": {
    "label": "Microsoft OAuth",
    "scopes": [
      "offline_access",
      "User.Read",
      "Files.ReadWrite"
    ],
    "note": "Used for OneDrive files, folders, and permissions."
  },
  "markdown_url": "/cli/msdrive/index.md",
  "commands": [
    {
      "id": "cmd-msdrive-auth",
      "path": "msdrive auth",
      "name": "auth",
      "short": "Manage Microsoft OneDrive authentication",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "",
      "flags": []
    },
    {
      "id": "cmd-msdrive-auth-login",
      "path": "msdrive auth login",
      "name": "login",
      "short": "Authenticate with Microsoft OneDrive",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive auth login\nmsdrive auth login --help\nmsdrive auth status",
      "flags": []
    },
    {
      "id": "cmd-msdrive-auth-logout",
      "path": "msdrive auth logout",
      "name": "logout",
      "short": "Remove stored credentials",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive auth login\nmsdrive auth logout\nmsdrive auth logout --help",
      "flags": []
    },
    {
      "id": "cmd-msdrive-auth-refresh",
      "path": "msdrive auth refresh",
      "name": "refresh",
      "short": "Refresh stored token",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive auth refresh\nmsdrive auth refresh --help",
      "flags": []
    },
    {
      "id": "cmd-msdrive-auth-status",
      "path": "msdrive auth status",
      "name": "status",
      "short": "Show auth status",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive auth status\nmsdrive auth status --help",
      "flags": []
    },
    {
      "id": "cmd-msdrive-auth-whoami",
      "path": "msdrive auth whoami",
      "name": "whoami",
      "short": "Show current OneDrive identity",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive auth whoami\nmsdrive auth whoami --help",
      "flags": []
    },
    {
      "id": "cmd-msdrive-capabilities",
      "path": "msdrive capabilities",
      "name": "capabilities",
      "short": "Describe capabilities",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive capabilities --help",
      "flags": []
    },
    {
      "id": "cmd-msdrive-config",
      "path": "msdrive config",
      "name": "config",
      "short": "Inspect local configuration",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "",
      "flags": []
    },
    {
      "id": "cmd-msdrive-config-explain",
      "path": "msdrive config explain",
      "name": "explain",
      "short": "Explain resolved configuration",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive config explain --help",
      "flags": []
    },
    {
      "id": "cmd-msdrive-doctor",
      "path": "msdrive doctor",
      "name": "doctor",
      "short": "Run msdrive diagnostics",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive doctor --help",
      "flags": []
    },
    {
      "id": "cmd-msdrive-file",
      "path": "msdrive file",
      "name": "file",
      "short": "Manage OneDrive files",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "",
      "flags": []
    },
    {
      "id": "cmd-msdrive-file-delete",
      "path": "msdrive file delete",
      "name": "delete",
      "short": "Permanently delete a file",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive file delete --all --yes f1 f2\nmsdrive file delete --help\nmsdrive file delete f1 --yes\nmsdrive file trash f1",
      "flags": [
        {
          "name": "all",
          "type": "bool",
          "usage": "Confirm batch permanent deletion"
        },
        {
          "name": "file",
          "type": "string",
          "usage": "File selector"
        },
        {
          "name": "yes",
          "type": "bool",
          "usage": "Confirm permanent deletion"
        }
      ]
    },
    {
      "id": "cmd-msdrive-file-download",
      "path": "msdrive file download",
      "name": "download",
      "short": "Download file bytes",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive file download\nmsdrive file download --file f1\nmsdrive file download f1 --out ./notes.txt",
      "flags": [
        {
          "name": "file",
          "type": "string",
          "usage": "File selector"
        },
        {
          "name": "out",
          "type": "string",
          "usage": "Output path. Omit to print content."
        }
      ]
    },
    {
      "id": "cmd-msdrive-file-export",
      "path": "msdrive file export",
      "name": "export",
      "short": "Export a Microsoft Office file",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive file export\nmsdrive file export f1 --mime-type pdf --out ./file.pdf\nmsdrive file export f1 --out ./file.pdf",
      "flags": [
        {
          "name": "file",
          "type": "string",
          "usage": "File selector"
        },
        {
          "name": "mime-type",
          "type": "string",
          "default": "pdf",
          "usage": "Export format or MIME type"
        },
        {
          "name": "out",
          "type": "string",
          "usage": "Output path. Omit to print content."
        }
      ]
    },
    {
      "id": "cmd-msdrive-file-get",
      "path": "msdrive file get",
      "name": "get",
      "short": "Get file metadata",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive file get\nmsdrive file get f1\nmsdrive file get f1 f2\nmsdrive file search --query notes --limit 1 --jsonl | msdrive file get",
      "flags": [
        {
          "name": "file",
          "type": "string",
          "usage": "File selector"
        }
      ]
    },
    {
      "id": "cmd-msdrive-file-list",
      "path": "msdrive file list",
      "name": "list",
      "short": "List files",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive file list\nmsdrive file list --folder d1\nmsdrive file list --folder d1 --query notes\nmsdrive file list --limit 10\nmsdrive folder list --limit 1 --jsonl | msdrive file list",
      "flags": [
        {
          "name": "folder",
          "type": "string",
          "usage": "Folder selector"
        },
        {
          "name": "query",
          "type": "string",
          "usage": "Name/full-text query"
        },
        {
          "name": "trashed",
          "type": "bool",
          "usage": "Include trashed files"
        }
      ]
    },
    {
      "id": "cmd-msdrive-file-search",
      "path": "msdrive file search",
      "name": "search",
      "short": "Search files by name or text",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive file search\nmsdrive file search --folder d1 --query notes\nmsdrive file search --query invoice\nmsdrive file search --query notes --trashed",
      "flags": [
        {
          "name": "folder",
          "type": "string",
          "usage": "Folder selector"
        },
        {
          "name": "query",
          "type": "string",
          "usage": "Name/full-text query"
        },
        {
          "name": "trashed",
          "type": "bool",
          "usage": "Include trashed files"
        }
      ]
    },
    {
      "id": "cmd-msdrive-file-trash",
      "path": "msdrive file trash",
      "name": "trash",
      "short": "Move a file to trash",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive file search --query notes --jsonl | msdrive file trash --all\nmsdrive file trash --all f1 f2\nmsdrive file trash --help\nmsdrive file trash f1",
      "flags": [
        {
          "name": "all",
          "type": "bool",
          "usage": "Confirm batch trash"
        },
        {
          "name": "file",
          "type": "string",
          "usage": "File selector"
        }
      ]
    },
    {
      "id": "cmd-msdrive-file-untrash",
      "path": "msdrive file untrash",
      "name": "untrash",
      "short": "Restore a file from trash",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive file search --query notes --trashed --jsonl | msdrive file untrash --all\nmsdrive file untrash --all f1 f2\nmsdrive file untrash --help\nmsdrive file untrash f1",
      "flags": [
        {
          "name": "all",
          "type": "bool",
          "usage": "Confirm batch untrash"
        },
        {
          "name": "file",
          "type": "string",
          "usage": "File selector"
        }
      ]
    },
    {
      "id": "cmd-msdrive-file-update",
      "path": "msdrive file update",
      "name": "update",
      "short": "Update file metadata or parents",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive file update --help\nmsdrive file update f1 --add-parent d2\nmsdrive file update f1 --add-parent d2 --remove-parent d1\nmsdrive file update f1 --description \"Project notes\"\nmsdrive file update f1 --name renamed.txt",
      "flags": [
        {
          "name": "add-parent",
          "type": "stringSlice",
          "default": "[]",
          "usage": "Folder selector to add as parent"
        },
        {
          "name": "description",
          "type": "string",
          "usage": "New description"
        },
        {
          "name": "file",
          "type": "string",
          "usage": "File selector"
        },
        {
          "name": "name",
          "type": "string",
          "usage": "New file name"
        },
        {
          "name": "remove-parent",
          "type": "stringSlice",
          "default": "[]",
          "usage": "Folder selector to remove as parent"
        },
        {
          "name": "starred",
          "type": "bool",
          "usage": "Set starred"
        }
      ]
    },
    {
      "id": "cmd-msdrive-file-upload",
      "path": "msdrive file upload",
      "name": "upload",
      "short": "Upload a local file",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive file upload --help\nmsdrive file upload --path ./notes.txt --folder d1 --name notes.txt\nmsdrive folder search --query \"Project docs\" --jsonl | msdrive file upload --path ./notes.txt",
      "flags": [
        {
          "name": "description",
          "type": "string",
          "usage": "File description"
        },
        {
          "name": "folder",
          "type": "string",
          "usage": "Parent folder selector"
        },
        {
          "name": "mime-type",
          "type": "string",
          "usage": "Content MIME type"
        },
        {
          "name": "name",
          "type": "string",
          "usage": "OneDrive file name"
        },
        {
          "name": "path",
          "type": "string",
          "usage": "Local file path"
        }
      ]
    },
    {
      "id": "cmd-msdrive-folder",
      "path": "msdrive folder",
      "name": "folder",
      "short": "Manage OneDrive folders",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "",
      "flags": []
    },
    {
      "id": "cmd-msdrive-folder-create",
      "path": "msdrive folder create",
      "name": "create",
      "short": "Create a folder",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive folder create --help\nmsdrive folder create --name \"Project docs\"\nmsdrive folder create --parent d1 --name \"Notes\"",
      "flags": [
        {
          "name": "description",
          "type": "string",
          "usage": "Folder description"
        },
        {
          "name": "name",
          "type": "string",
          "usage": "Folder name"
        },
        {
          "name": "parent",
          "type": "string",
          "usage": "Parent folder selector"
        }
      ]
    },
    {
      "id": "cmd-msdrive-folder-get",
      "path": "msdrive folder get",
      "name": "get",
      "short": "Get folder metadata",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive folder get\nmsdrive folder get d1\nmsdrive folder get d1 d2\nmsdrive folder list --limit 1 --jsonl | msdrive folder get",
      "flags": []
    },
    {
      "id": "cmd-msdrive-folder-list",
      "path": "msdrive folder list",
      "name": "list",
      "short": "List folders",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive folder list\nmsdrive folder list --limit 10\nmsdrive folder list --query \"Project docs\"",
      "flags": [
        {
          "name": "query",
          "type": "string",
          "usage": "Folder name query"
        },
        {
          "name": "trashed",
          "type": "bool",
          "usage": "Include trashed folders"
        }
      ]
    },
    {
      "id": "cmd-msdrive-folder-search",
      "path": "msdrive folder search",
      "name": "search",
      "short": "Search folders by name",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive folder search\nmsdrive folder search --query \"Project docs\"\nmsdrive folder search --query archive --trashed",
      "flags": [
        {
          "name": "query",
          "type": "string",
          "usage": "Folder name query"
        },
        {
          "name": "trashed",
          "type": "bool",
          "usage": "Include trashed folders"
        }
      ]
    },
    {
      "id": "cmd-msdrive-login",
      "path": "msdrive login",
      "name": "login",
      "short": "Authenticate with Microsoft OneDrive",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive auth status\nmsdrive login",
      "flags": []
    },
    {
      "id": "cmd-msdrive-logout",
      "path": "msdrive logout",
      "name": "logout",
      "short": "Remove stored credentials",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive auth login\nmsdrive logout",
      "flags": []
    },
    {
      "id": "cmd-msdrive-permission",
      "path": "msdrive permission",
      "name": "permission",
      "short": "Manage OneDrive permissions",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "",
      "flags": []
    },
    {
      "id": "cmd-msdrive-permission-add",
      "path": "msdrive permission add",
      "name": "add",
      "short": "Add a permission",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive permission add --file f1 --type anyone --role reader --yes\nmsdrive permission add --file f1 --type user --email person@example.com --role reader\nmsdrive permission add --help",
      "flags": [
        {
          "name": "allow-discovery",
          "type": "bool",
          "usage": "Allow public/domain discovery"
        },
        {
          "name": "domain",
          "type": "string",
          "usage": "Domain for domain permission"
        },
        {
          "name": "email",
          "type": "string",
          "usage": "Email address for user/group permission"
        },
        {
          "name": "file",
          "type": "string",
          "usage": "File selector"
        },
        {
          "name": "role",
          "type": "string",
          "default": "reader",
          "usage": "Permission role: reader|commenter|writer"
        },
        {
          "name": "type",
          "type": "string",
          "default": "anyone",
          "usage": "Permission type: user|group|domain|anyone"
        },
        {
          "name": "yes",
          "type": "bool",
          "usage": "Confirm broad anyone/domain sharing"
        }
      ]
    },
    {
      "id": "cmd-msdrive-permission-list",
      "path": "msdrive permission list",
      "name": "list",
      "short": "List file permissions",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive file search --query notes --limit 1 --jsonl | msdrive permission list\nmsdrive permission list\nmsdrive permission list --file f1",
      "flags": [
        {
          "name": "file",
          "type": "string",
          "usage": "File selector"
        }
      ]
    },
    {
      "id": "cmd-msdrive-permission-remove",
      "path": "msdrive permission remove",
      "name": "remove",
      "short": "Remove a permission",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive permission remove --file f1 --permission r1\nmsdrive permission remove --file f1 r1\nmsdrive permission remove --help",
      "flags": [
        {
          "name": "all",
          "type": "bool",
          "usage": "Confirm batch permission removal"
        },
        {
          "name": "file",
          "type": "string",
          "usage": "File selector"
        },
        {
          "name": "permission",
          "type": "string",
          "usage": "Permission selector"
        },
        {
          "name": "yes",
          "type": "bool",
          "usage": "Confirm permission removal"
        }
      ]
    },
    {
      "id": "cmd-msdrive-profile",
      "path": "msdrive profile",
      "name": "profile",
      "short": "Manage provider profiles",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "",
      "flags": []
    },
    {
      "id": "cmd-msdrive-profile-create",
      "path": "msdrive profile create",
      "name": "create",
      "short": "Create an unauthenticated provider profile",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive profile create --help",
      "flags": []
    },
    {
      "id": "cmd-msdrive-profile-delete",
      "path": "msdrive profile delete",
      "name": "delete",
      "short": "Delete a local provider profile",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive profile delete --help",
      "flags": []
    },
    {
      "id": "cmd-msdrive-profile-list",
      "path": "msdrive profile list",
      "name": "list",
      "short": "List provider profiles",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive profile list --help",
      "flags": []
    },
    {
      "id": "cmd-msdrive-profile-rename",
      "path": "msdrive profile rename",
      "name": "rename",
      "short": "Rename a local provider profile",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive profile rename --help",
      "flags": []
    },
    {
      "id": "cmd-msdrive-profile-use",
      "path": "msdrive profile use",
      "name": "use",
      "short": "Set the default provider profile",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "msdrive profile use --help",
      "flags": []
    },
    {
      "id": "cmd-msdrive-resolve",
      "path": "msdrive resolve",
      "name": "resolve",
      "short": "Resolve a marker or short id",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive resolve --help",
      "flags": []
    },
    {
      "id": "cmd-msdrive-schema",
      "path": "msdrive schema",
      "name": "schema",
      "short": "Emit msdrive schema hints",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive schema\nmsdrive schema --help\nmsdrive schema file upload --in --json\nmsdrive schema file.upload --input --json\nmsdrive schema file.upload --out --json",
      "flags": [
        {
          "name": "in",
          "type": "bool",
          "usage": "Show input schema"
        },
        {
          "name": "input",
          "type": "bool",
          "usage": "Show input schema"
        },
        {
          "name": "out",
          "type": "bool",
          "usage": "Show output schema"
        }
      ]
    },
    {
      "id": "cmd-msdrive-version",
      "path": "msdrive version",
      "name": "version",
      "short": "Show msdrive version information",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "msdrive version --help",
      "flags": []
    }
  ]
}
