onedrive-cli

Cross-platform command line interface for OneDrive (Personal)

Development

A Nix flake provides the package and a dev shell with all dependencies. Run nix develop (or use Direnv's use flake) for the shell, and nix build / nix run to build or run the CLI. The legacy shell.nix still works with nix-shell.

Update the dependency hash

After changing package-lock.json, refresh npmDepsHash in flake.nix:

nix run nixpkgs#prefetch-npm-deps -- package-lock.json

Installation

From source:

$ git clone https://github.com/lionello/onedrive-cli.git
$ cd onedrive-cli
$ npm install
$ bin/onedrive login

Or use npm:

npm install @lionello/onedrive-cli

Or use nix-env:

nix-env -if https://github.com/lionello/onedrive-cli/archive/master.tar.gz -A package

Usage

usage: onedrive COMMAND [arguments]

This little utility supports the following commands:

Examples

List the contents of the Public folder

onedrive ls Public

Grep one file

onedrive cat Documents/passwords | grep boa

Let OneDrive upload a file server side

onedrive wget http://mega.com/somehugepublicfile Documents/somehugepublicfile

Upload files recursively

find * -type f -print0 | xargs -0 -n1 -I{} onedrive cp "./{}" "Shared Favorites/{}"

Move remote files to a new folder

onedrive find 'Pictures/Camera Roll' -regex 2015 -type f -print0 | xargs -0 onedrive mv -t :/Pictures/2015/

MCP server

onedrive mcp starts a read-only Model Context Protocol server over stdio, so an MCP client (Claude, etc.) can browse and read your OneDrive. It reuses the stored access token, so login first — ideally with login -r for a read-only token. The server only issues GET requests and cannot modify the drive. It exposes these tools:

Register it with your MCP client, e.g. in claude_desktop_config.json:

{
  "mcpServers": {
    "onedrive": {
      "command": "onedrive",
      "args": ["mcp"]
    }
  }
}

FAQ

Access token was not found; 'login' first.

The onedrive utility needs an access token in order to read/write to your OneDrive storage. Use theonedrive login command to get the address of the Microsoft login page. After login, this page will redirect to the file oauthcallbackhandler.html (https://github.com/lionello/onedrive-cli/blob/master/docs/oauthcallbackhandler.html) and extract the access_token from the URL parameters. Copy-paste this token into the command line. This will save the token in a file called ~/.onedrive-cli-token. These tokens have a validity of 1 hour.

"An item with the same name already exists under the parent"

Currently, a copy will fail if a file with the same it already exists. Change the name of the target, or use other means to delete/rename the existing file in your OneDrive.

Invalid source name

You cannot copy folders. Specify a source file instead, or use wildcards.

Invalid target name

The target file name cannot be determined from the source path. Specify a target file name.

Use ./ or :/ path prefix for local or remote paths.

The cp command supports both local->remote as well as remote->local copy. To make it clear which path is remote and which is local, either use ./ as a prefix for the local path, or use :/ as a prefix for the remote path. Either one will suffice.

chmod: Invalid file mode

The chmod command currently only supports -w or -rw. The former tried to downgrade write shares to read-only, whereas the latter removes all shares for the given item(s). Octal modes are accepted (for example 644, 0700) as well as og-rw or g-w.

TODO

DONE