Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
OneDrive CLI and MCP server for agents
This repo provides a command line interface for OneDrive Personal and a read-only MCP server. You can sign in once, then use commands like `ls`, `cp`, `find`, `grep`, `rm`, and `album` to work with your drive like a filesystem. The `mcp` mode exposes OneDrive browsing and reading tools to MCP clients such as Claude.
Builders who want their agent or terminal to browse, read, and manage OneDrive.
You can work with OneDrive files from your agent instead of switching to the web app.
What it does
OneDrive login and token storage
Opens the Microsoft login page, receives the OAuth token, and saves it in `~/.onedrive-cli-token` or `$XDG_STATE_HOME`.
Filesystem-style drive commands
Supports `ls`, `cp`, `mv`, `rm`, `mkdir`, `find`, `grep`, `stat`, `cat`, and `df` for drive access and metadata.
Photo album commands
Lets you list, create, add to, and remove from OneDrive photo albums with `onedrive album` and `onedrive albums`.
Read-only MCP server
Runs `onedrive mcp` over stdio and exposes tools for listing folders, searching content, reading files, and checking storage.
Share and permission commands
Includes `chmod`, `ln`, and `sendmail` for links, sharing, and invitation workflows.
How to get it
- 1With npm
npm install -g @lionello/onedrive-cli
- 2Or with nix-env
nix-env -if https://github.com/lionello/onedrive-cli/archive/master.tar.gz -A package
- 3Or from source
git clone https://github.com/lionello/onedrive-cli.git cd onedrive-cli npm install bin/onedrive login
- 4Sign in once, then use the drive like a filesystem
onedrive login # opens the Microsoft login page onedrive df # check the connection and storage usage onedrive ls # list your drive root
README
onedrive-cli
Cross-platform command line interface for OneDrive (Personal)
Installation
With npm:
npm install -g @lionello/onedrive-cli
That installs the command as onedrive, with onedrive-cli as an alias for it.
Or with nix-env:
nix-env -if https://github.com/lionello/onedrive-cli/archive/master.tar.gz -A package
Or from source:
git clone https://github.com/lionello/onedrive-cli.git
cd onedrive-cli
npm install
bin/onedrive login
Getting started
Sign in once, then use the drive like a filesystem:
onedrive login # opens the Microsoft login page
onedrive df # check the connection and storage usage
onedrive ls # list your drive root
login opens your browser, then stores the access token it gets back in
~/.onedrive-cli-token (or $XDG_STATE_HOME if that is set). Tokens are valid
for one hour, so run login again when a command reports that the token
expired. Add -r for a read-only token.
Usage
usage: onedrive COMMAND [arguments]
Run onedrive help (or -h/--help) for this list at any time, and
onedrive --version for the installed version. The commands are:
album- list, create, or edit photo albums (ls/create/add/rm)cat- dumps the contents of a file to stdoutchmod- change sharing permissionscp- copies local file(s) to OneDrive or vice-versadf- shows OneDrive storage usage statsfind- find file(s) or folder(s) by name, optionally separated byNULgrep- full-text search across the drive, listing matching pathshelp- shows list of supported commandsln- create a link to the remote itemlogin- request/store an OAuth access tokenls- list the contents of a foldermcp- run a read-only MCP server over stdiomkdir- create a remote foldermv- move a local file to OneDrive or vice-versarm- delete a file or folder from OneDrivesendmail- send an invitation email for editing to recipientsstat- dump all information for particular file(s)wget- copy a remote URL to OneDrive (server side)
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/
Create an album and add photos to it
onedrive album create 'Summer 2026'
onedrive album add 'Summer 2026' 'Pictures/Camera Roll/IMG_1234.jpg'
onedrive albums # list all albums
onedrive albums 'Summer 2026' # list the photos in one album
Albums are OneDrive bundles:
they live outside the folder hierarchy and only reference the files, so
album rm removes a photo from the album without deleting the file.
Deleting an album itself is not supported by the API — use the OneDrive
web UI for that.
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:
list_onedrive_folder- list the direct children of a foldersearch_onedrive_content- full-text search across the whole drivefind_onedrive_files- recursively find items by name globlist_onedrive_albums- list the photo albums, or the items in one albumread_onedrive_file- read a file's contents as textstat_onedrive_item- return full metadata for an itemonedrive_storage- report storage quota for the available drives
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.
Run onedrive login: it opens the Microsoft login page, and after you sign in the
callback page
hands the token straight back to the waiting command, which saves it to
~/.onedrive-cli-token. If the browser runs on another machine (or the handover
fails), the page shows the token so you can paste it at the prompt instead.
Tokens are valid for 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
Tracked on the issue tracker, so this stays a pointer rather than a second source of truth:
- #33 — uploads larger than 100 MiB (
createUploadSession) - #36 — skip the transfer when the SHA1 already matches
- #34 —
chmod: granting write access (+w) - #37 — confirm the API honours gzip/deflate on downloads
- #4, #8 — OneDrive for Business, via Microsoft Graph
DONE
- Read-only MCP server (
onedrive mcp) - Photo albums via bundles (
onedrive album) - Full-text search across the drive (
onedrive grep) - Capture the OAuth token over a loopback listener instead of copy-paste
- Delete files and folders (
onedrive rm) - Get the sharing link for a file (
onedrive ln) - Register with NPM (@lionello/onedrive-cli)
- Fixed OAuth redirect on Safari (https://bugs.webkit.org/show_bug.cgi?id=24175)
- Use XDG path spec for token file (https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)
- Using
async/await
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
Regenerate the website
docs/index.html is generated from this README:
npm run readme
Files in the repo
- .github
- .vscode
- bin
- docs
- .editorconfig
- .gitignore
- eslint.config.js
- flake.lock
- flake.nix
- LICENSE
- package-lock.json
- package.json
- README.md
- shell.nix
Discussion (0)
Ask about usage, or say what you built with itSign in to join the discussion.
No comments yet. Be the first to say what this is good for.
More connectors
20 MB lightweight cross-platform database client for 90+ databases, including MySQL, PostgreSQL, SQLite, Redis, MongoDB, DuckDB, SQL Server, and Dameng. Built-in AI, MCP Server, CLI, desktop and Docker. | 轻量级跨平台数据库管理工具,支持 MySQL、PostgreSQL、SQLite、Redis、MongoDB、达梦等 90+ 数据库,提供桌面端、Docker、CLI、内置 AI 助手和 MCP Server。
The fastest browser for AI agents to run browser automation, built for sharing your logged-in browser state with your AI agents, like Codex or Claude Code, without disturbing you. Zero cost, zero config.
BankMCP™: your AI can now read your bank. Self-hosted, read-only MCP server for your own bank accounts via open banking (Enable Banking). Standard MCP; tested with Claude and Ollama.
Open source alternative to Semrush and Ahrefs
Open-source auth gateway connecting 1400+ SaaS providers to AI agents through SDK, CLI, MCP, HTTP, and OpenAPI.