nmts-cliCAUTION
NMTS (NeedMoreTruthStorage · nmts.me) — Command-line and MCP access to NMTS: open-source, end-to-end encrypted storage on the Walrus network. NMTS charges no fee; you pay the network from your own wallet. For people at a terminal and for the agents they run.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Command-line access to NMTS — NeedMoreTruthStorage, end-to-end encrypted cloud storage on the Walrus network, built by one developer (needmoretruth). For people at a terminal, and for the AI agents they run.
한국어 문서 · Talk about NMTS on Discord, in English or Korean. If you are an AI agent, read AGENTS.md instead. It has the tier table, the exit codes and the rules for a run nobody is watching. Status: early. The interface may still change before 1.0. A command added after this file was written is in nmts --help.🧭 What NMTS is
Storage where the encryption happens on your machine and the keys never leave it. The server receives sealed bytes it cannot open. File contents, names and folders all live inside a sealed list that only your NMTS key opens.
The bytes live on Walrus, a public storage network, paid for on the Sui chain.
- Storage is bought for a period, not forever. A file has a lease. It can be extended, and
NMTS warns before one runs out.
- There is no password reset. Your NMTS key is the account. It cannot be recovered or
changed while keeping the files, because nobody, NMTS included, holds a key to them.
- NMTS charges nothing. Storage is bought from the Walrus network, for a period, from your own
wallet; nothing is paid to NMTS. Uploads here spend credits, which are storage a donation pool has already paid the network for (the weekly free trial) — they are not sold. One command, nmts extend, pays from your own Sui wallet instead, and asks for a separate agreement first, because a signed purchase on a public chain cannot be reversed by anyone.
This tool, the encryption engine and the recovery program are open source under Apache-2.0; the server and the web app are not published.
📦 Install
Node 22.15.0 or newer. Nothing is compiled at install ti
508b6693d44fOBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.
claude mcp add nmts-cli -- npx -y @needmoretruth/[email protected] mcp
Exposed tools (46)
31 read · 12 write · 3 destructive. Blast radius: 3 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
angry | read | always fails |
confirm_it | read | asks |
echo | read | give back what it was given |
nmts_balance | read | How many credits this account has left, what that buys, and the ceilings on spending. |
nmts_credits_transfer | write | Move credits from this account to another account of the SAME FAMILY — the account a |
nmts_deposit | write | Read or set how many credits this account sets aside as a deposit on each credit-paid |
nmts_devices | read | What is signed in to this NMTS account: for each device, when it was first signed in, |
nmts_expiring | read | Files whose bought storage runs out soon, with how long each has left. Storage on NMTS |
nmts_get | write | Fetch one file from the NMTS account, decrypt it, and write it into ${ctx.outDir}. Takes |
nmts_label_rename | write | Rename a label on every file that carries it. Changes only the file list; costs nothing. |
nmts_list | read | List the files stored in the NMTS account, as JSON. Paths are what nmts_get takes. |
nmts_loss_recheck | read | Ask the chain right now about one storage object listed by nmts_losses. Costs nothing. |
nmts_losses | read | Storage objects paid with this account |
nmts_mark | write | Put a mark on files, or take one off. |
nmts_mkdir | read | Make a folder in the NMTS account, including any parent folders that are missing. |
nmts_move | write | Move one or more entries into a folder in the NMTS account. Nothing is re-uploaded and |
nmts_notice | read | One notice in full, as the dated text the board |
nmts_notices | read | The NMTS notice board as JSON, newest first: interruptions, incidents, and the notice |
nmts_padding | write | Read or set how file sizes are hidden on the storage network: standard (a few fixed |
nmts_privacy | destructive | The NMTS Privacy Policy in force, as text, with its version and effective date at the |
nmts_public_code | read | The account |
nmts_public_code_new | read | Make a new public code for this account — the next number from the same NMTS key — and |
nmts_public_code_revoke | destructive | Revoke one of this account |
nmts_pull | read | Fetch a whole folder — or the whole account, if no folder is named — and rebuild its |
nmts_push | write | Upload a whole directory from this machine, rebuilding its shape in the account. |
nmts_put | write | Encrypt one file from this machine and upload it to the NMTS account. ${SPENDS} A name |
nmts_receive | read | Fetch a file another account shared with this one, using an id from nmts_shares, and |
nmts_rename | write | Rename one entry in the NMTS account. The name lives inside the sealed list, so this |
nmts_restore | read | Take files back out of the NMTS account |
nmts_share | read | Give another NMTS account the key to one file in this account. ⛔ IT CANNOT BE TAKEN |
nmts_shares | read | Files this account has shared with somebody, and files somebody has shared with it. The |
nmts_shares_sent | read | Who one file in the account was shared with: recipient address, since when, and the |
nmts_support_list | read | The reports this account has filed from the command line, with their codes, what each |
nmts_support_reply | read | Answer in a report |
nmts_support_send | write | File a report with the developer of NMTS: a bug, a confusing message, an idea, a |
nmts_support_show | read | One report and everything said in it, oldest first, using a code from nmts_support_list. |
nmts_terms | destructive | The NMTS Terms of Service in force, as text, with its version and effective date at the |
nmts_trash | write | Put files in the NMTS account |
nmts_unlabel_all | read | Take one label off every file that carries it. Changes only the file list; costs nothing. |
nmts_unshare | read | Withdraw a share this account made, using an id from nmts_shares. It stops any further |
nmts_usage | read | How much this account holds: how many files and folders, how many bytes, how much is in |
nmts_wallet_activity | read | The recent transactions of the wallet this account derives (newest first, 20 at most), |
nmts_wallet_storage | read | The storage resources (size × time on the storage network) this wallet holds unbound — |
nmts_whoami | read | Which NMTS account this machine holds the NMTS key for. Derived here, offline: it says |
spender | read | would spend unless held back |
stuck | read | fails with something to do about it |
Trust audit
CAUTIONgrade D · trust 68/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (2 observation(s))
- Network
- declared (5 observation(s))
- Shell
- declared (4 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (24)
nmts_crypto_wasm_bg.wasm
const secret = "SOME-ACCOUNT-CODE-SHAPED-STRING-XYZ";
const TOKEN = "AbCdEfGhIjKlMnOpQrStUv";
redact("-----BEGIN PRIVATE KEY-----\nMIIBVgIBADAN\nAQEA\n-----END PRIVATE KEY-----"), // nmts-secret-scan: allow a twelve-byte fixture, not a keyassert.equal(redact("it printed -----BEGIN OPENSSH PRIVATE KEY-----"), "it printed [secret]"); // nmts-secret-scan: allow header only, no keynmts_privacy, nmts_public_code_revoke, nmts_terms
this.md5 = plan.contentMd5 === null ? null : createHash("md5");const digest = options.md5 ? createHash("md5") : null;this.md5 = plan.contentMd5 === null ? null : createHash("md5");const digest = options.md5 ? createHash("md5") : null;const md5 = createHash("md5").update(DATA).digest("base64");for (const climbing of ["../../etc/passwd", "/etc/passwd", "..", ".", "sub/../../../out", "..\\..\\win"]) {for (const bad of ["v0.2.0", "0.2", "1.0.0 ; rm -rf /", "../../etc", ""]) {() => safeJoin("/tmp/dest", "a/../../etc/passwd", platform),This account's drive is being served at http://127.0.0.1:9000, to this machine only.
endpoint http://127.0.0.1:9000
endpoint=http://127.0.0.1:9000 \
This account's drive is being served at http://127.0.0.1:9000, to this machine only.
endpoint http://127.0.0.1:9000
const binary = atob(standard.padEnd(standard.length + ((4 - (standard.length % 4)) % 4), "="));
const binary = atob(standard.padEnd(standard.length + ((4 - (standard.length % 4)) % 4), "="));
`<?xml version="1.0"?><!-- a note --><Delete a='1' b="2"><Object><Key><![CDATA[x<y>&z]]></Key>` +
@mysten/sui, @mysten/walrus, @noble/curves, @noble/hashes, uqr, @types/node, typescript
step, makes an API key (read, write, spend) and stores both in the credentials file. A pass works
Gates applied: no_behavioural_pass.
508b6693d44ffull audit observations/trust-audit/mcp-server/needmoretruth__nmts-cli.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | 508b6693d44f | CAUTION | D | 68 | first audit |
Questions
What is the nmts-cli MCP server?
NMTS (NeedMoreTruthStorage · nmts.me) — Command-line and MCP access to NMTS: open-source, end-to-end encrypted storage on the Walrus network. NMTS charges no fee; you pay the network from your own wallet. For people at a terminal and for the agents they run.
What tools does nmts-cli expose?
46 in total: 31 read-only, 12 that write, and 3 that can delete or overwrite (nmts_privacy, nmts_public_code_revoke, nmts_terms). Every one is listed on this page with its risk.
Is nmts-cli safe to connect to an agent?
With care. The audit graded it D (68/100) and found 24 things worth knowing before you trust this server, listed below with the exact line each was found on. Separately from the audit: 3 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does nmts-cli need?
No credential environment variables were found in its source, so it appears to need none.
How does nmts-cli run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as nmts-crypto-wasm at 0.1.0.
How current is this page?
The grade is for one exact copy of the source (508b6693d44f), read on 2026-10-11. The repository is watched and re-audited when it changes.