orrisroot bcf99dd6d7 fix(auth): keep the refresh token the provider hands back
The reply to a refresh carries a new refresh token and the provider
stops honouring the one that was sent. Only the access half was read,
so the cache kept re-sending a token the server had already retired.

- deserialize the refresh half and write it back to the cache, as an
  Option so a provider that does not rotate leaves the stored one be
- bound the refresh request on its own: the caller holds a lock that
  spans processes while it runs, so a provider that goes quiet would
  stall every other request on the machine
- give config create/update one rule for what a remote URL is, and
  store it without the trailing slash, matching the Python client so
  the two can share config.ini; this drops the validators crate and
  77 transitive dependencies with it
- join the base URL and the API's relative download path with the
  separator neither of them carries, as download.rs already does
2026-08-14 16:36:43 +09:00
2026-04-17 20:15:19 +09:00
2026-04-17 16:52:04 +09:00

mdrs

mdrs is a command-line client for uploading and downloading files to and from an MDRS-based repository.

Installing

Build from source

cargo build --release

The compiled binary will be available at target/release/mdrs.

To build a fully static binary for Linux:

cargo build --release --target x86_64-unknown-linux-musl

Configuration

Environment variables

The following environment variables can be set, either in the shell or via a .env file placed in the working directory:

Variable Default Description
MDRS_CLIENT_CONFIG_DIRNAME ~/.mdrs-client Directory where config and login cache files are stored
MDRS_CLIENT_CONCURRENT 10 Number of concurrent file transfers for upload/download

Example Usage

config create

Register a remote host.

mdrs config create neurodata https://neurodata.riken.jp/api

config update

Update the URL of a registered remote host.

mdrs config update neurodata https://neurodata.riken.jp/api

config list

List registered remote hosts.

mdrs config list
mdrs config ls

config delete

Remove a registered remote host.

mdrs config delete neurodata
mdrs config rm neurodata

login

Log in to a remote host and cache credentials.

mdrs login neurodata:
Username: (enter your login name)
Password: (enter your password)

mdrs login -u USERNAME -p PASSWORD neurodata:

logout

Log out from a remote host and remove cached credentials.

mdrs logout neurodata:

whoami

Print the currently logged-in user name.

mdrs whoami neurodata:

labs

List all laboratories accessible to the current user.

mdrs labs neurodata:

ls

List the contents of a remote folder. You can also specify a DOI path in the form remote:10.xxxx/yyy.ID[/optional/subpath].

mdrs ls neurodata:/NIU/Repository/
mdrs ls -p SHARING_PASSWORD neurodata:/NIU/Repository/PW_Open/
mdrs ls -r neurodata:/NIU/Repository/Dataset1/
mdrs ls -J -r neurodata:/NIU/Repository/Dataset1/
mdrs ls -q neurodata:/NIU/Repository/

# DOI access examples:
mdrs ls neurodata:10.60178/cbs.20260429-001
mdrs ls "neurodata:10.60178/cbs.20260429-001/Figure 1"

mkdir

Create a new remote folder.

mdrs mkdir neurodata:/NIU/Repository/TEST

upload

Upload a file or directory to a remote folder.

mdrs upload ./sample.dat neurodata:/NIU/Repository/TEST/
mdrs upload -r ./dataset neurodata:/NIU/Repository/TEST/
mdrs upload -r --skip-if-exists ./dataset neurodata:/NIU/Repository/TEST/

download

Download a file or folder from a remote path. You can also specify a DOI path.

mdrs download neurodata:/NIU/Repository/TEST/sample.dat ./
mdrs download -r neurodata:/NIU/Repository/TEST/dataset/ ./
mdrs download -p SHARING_PASSWORD neurodata:/NIU/Repository/PW_Open/Readme.dat ./
mdrs download -r --exclude /NIU/Repository/TEST/dataset/skip neurodata:/NIU/Repository/TEST/dataset/ ./
mdrs download -r --skip-if-exists neurodata:/NIU/Repository/TEST/dataset/ ./

# DOI access examples:
mdrs download -r neurodata:10.60178/cbs.20260429-001 ./

mv

Move or rename a file or folder on the remote.

mdrs mv neurodata:/NIU/Repository/TEST/sample.dat neurodata:/NIU/Repository/TEST2/sample2.dat
mdrs mv neurodata:/NIU/Repository/TEST/dataset neurodata:/NIU/Repository/TEST2/

cp

Copy a file or folder on the remote.

mdrs cp neurodata:/NIU/Repository/TEST/sample.dat neurodata:/NIU/Repository/TEST2/sample2.dat
mdrs cp -r neurodata:/NIU/Repository/TEST/dataset neurodata:/NIU/Repository/TEST2/

rm

Remove a file or folder from the remote.

mdrs rm neurodata:/NIU/Repository/TEST/sample.dat
mdrs rm -r neurodata:/NIU/Repository/TEST/dataset

chacl

Change the access level of a remote folder.

mdrs chacl private neurodata:/NIU/Repository/Private
mdrs chacl cbs_open -r neurodata:/NIU/Repository/CBS_Open
mdrs chacl pw_open -r -p SHARING_PASSWORD neurodata:/NIU/Repository/PW_Open

Available access levels: private, public, pw_open, cbs_open, 5kikan_open, cbs_pw_open, 5kikan_pw_open

metadata

Show metadata for a remote folder. You can also specify a DOI path.

mdrs metadata neurodata:/NIU/Repository/Private/
mdrs metadata -p SHARING_PASSWORD neurodata:/NIU/Repository/PW_Open/

# DOI access examples:
mdrs metadata neurodata:10.60178/cbs.20260429-001

file-metadata

Show metadata for a remote file. You can also specify a DOI path.

mdrs file-metadata neurodata:/NIU/Repository/TEST/dataset/sample.dat
mdrs file-metadata -p SHARING_PASSWORD neurodata:/NIU/Repository/PW_Open/Readme.txt

# DOI access examples:
mdrs file-metadata "neurodata:10.60178/cbs.20260429-001/Figure 1/Figure1v3.pdf"

version

Show the tool name and version number.

mdrs version

selfupdate

Update the current mdrs binary to the latest published release for the same build target.

mdrs selfupdate
mdrs selfupdate -y

help

Show help for a command.

mdrs --help
mdrs upload --help

License

MIT © 2026- Neuroinformatics Unit, RIKEN CBS

S
Description
A command line client for MDRS (Multiomics Data Repository System)
Readme MIT
202 KiB
v2.0.1
Latest
2026-06-12 10:19:10 +09:00
Languages
Rust 93.7%
Shell 4%
PowerShell 2.3%