npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

dcxv-cli

v0.6.0

Published

Command-line client for the DCXV GraphQL API (servers, orders, payments, live deploy progress).

Readme

dcxv-cli

Manage your DCXV servers, orders and payments from the terminal. The command is dcxv.

Linux · macOS · Windows Single binary Node ≥ 18 MIT license

List and inspect servers, order cloud servers and Kubernetes clusters, run power actions, reinstall an OS, manage snapshots, backups and ISO images, pay invoices, switch between sub-accounts — and watch deployments stream live. Ships as a single self-contained binary with no runtime to install.

$ dcxv orders
ID    HOSTNAME  IP             TYPE   OS            CPU                   RAM  PRICE  STATUS
2481  web1      185.255.96.42  cloud  Ubuntu 24.04  Platinum 2.4-3.9 GHz  8    38     active
2482  gpu1      185.255.96.51  cloud  Ubuntu 24.04  Platinum 2.4-3.9 GHz  32   102    inactive

$ dcxv watch 2482
#2482 [##################------]  74% cloudinit

Contents

What you can order

DCXV runs Tier III data centres in Prague (CZ) and Covilhã (PT) on its own network, AS204057.

Straight from the CLI:

| Product | Command | |---|---| | Cloud servers | dcxv order --cluster … --vcpu 4 --ram 8 --disk 80 --ip 1 --yes | | Kubernetes clusters | dcxv order --type k8s --cluster … --yes — k3s, k0s, MicroK8s or RKE2, installed for you | | Storage | dcxv order --set type=storage --set vol=5 --yes (TB) |

Priced on the website, where the calculator lets you build the machine part by part:

  • Dedicated servers — pick the chassis, CPUs, RAM, drives and RAID, and see the monthly price update as you go
  • AI / GPU servers — NVIDIA GPU builds for training and inference
  • IPv4 addresses — buy, sell or lease blocks; DCXV is an approved broker for RIPE NCC, APNIC and ARIN

Configure one there, order it, then manage it from the CLI like anything else — dcxv orders, dcxv get <id>, power actions, reinstalls and live progress all work the same regardless of how the server was bought.

Install

curl -fsSL https://dcxv.com/cli/install.sh | sh

Installs to ~/.local/bin/dcxv. The script picks the right build for your machine, verifies it against the published SHA256SUMS, and refuses to install on a mismatch.

Prefer to do it by hand? Download a binary from https://dcxv.com/cli, chmod +x, and put it on your PATH:

| Platform | Asset | |---|---| | Linux x64 | dcxv-linux-x64 | | Linux ARM64 | dcxv-linux-arm64 | | macOS (Apple Silicon) | dcxv-macos-arm64 | | macOS (Intel) | dcxv-macos-x64 | | Windows x64 | dcxv-windows-x64.exe |

Already have Node ≥ 18? Run it without installing anything:

npx dcxv-cli --help
npm i -g dcxv-cli        # or install it globally, then just `dcxv`

The package is dcxv-cli; the command it installs is dcxv. Same JavaScript client — the standalone binaries above simply bundle a runtime so you don't need one.

Requires Bun or Node ≥ 18.

git clone https://github.com/dcxv-com/dcxv-cli.git && cd dcxv-cli
bun install && bun link      # puts `dcxv` on your PATH

Quick start

$ dcxv login                    # opens your browser to authorize this device
First, visit: https://dcxv.com/my/cli/A3F9-2B7C
Your code: A3F9-2B7C
Logged in. Saved to /home/you/.config/dcxv/config.json

$ dcxv orders                   # your servers
$ dcxv get 2481                 # one server in full
$ dcxv balance                  # balance + payment methods

Authentication

dcxv login

Opens your browser so you can approve the device in a tab where you are already signed in, then saves the token for you — nothing to paste. No polling: approval is pushed to the waiting CLI.

For CI or an SSH-only box, create a personal API token at https://dcxv.com/my/api and use it directly:

dcxv login <token>          # saved to ~/.config/dcxv/config.json (chmod 600)
export DCXV_TOKEN=<token>   # or per-shell, nothing written to disk

Profiles

Keep several accounts side by side:

dcxv login <token> --profile work
dcxv profile ls             # * marks the active one
dcxv profile use work       # or --profile / DCXV_PROFILE per command
dcxv profile rm work

Commands

dcxv login [<token>]                 Authorize this device (or save a token directly)
dcxv whoami                          Authenticated account
dcxv account                         Full profile (org/address/language/currency/SSH key)
dcxv account set <field> <value>     Update a profile field
dcxv account export [outfile]        Download your account data as JSON
dcxv balance                         Balance + accepted payment methods

dcxv orders                          List servers/products      (alias: ls, list, products)
dcxv get <id>                        Full details: specs, live status, usage, IPs, access
dcxv get <id> ips                    IP / MAC / PTR table
dcxv get <id> stats                  Resource usage charts (CPU/RAM/Net/Disk)
dcxv get <id> snapshots|backups|iso  List snapshots / backups / ISOs
dcxv get <id> kubeconfig [file]      Download kubeconfig (Kubernetes clusters)

dcxv os [filter...]                  Available OS images
dcxv clusters [filter...]            Available clusters / price tiers
dcxv order --cluster … --vcpu …      Order a server (dry-run unless --yes)

dcxv set <id> power <cmd>            start | stop | shutdown | reset | pass
dcxv set <id> reinstall <os|id>      Reinstall the OS                   (--yes, --watch)
dcxv set <id> rename <hostname>      Rename the server
dcxv set <id> password [<pass>]      Set a password (generates one if omitted)
dcxv set <id> renew                  Renew now (charges balance)
dcxv set <id> autoprolong <on|off>   Toggle auto-renew
dcxv set <id> lock | unlock          Lock / unlock the server
dcxv set <id> notify-emails <e>      Expiration-notice recipients
dcxv set <id> mac <ip> <mac>         Set MAC for an IP
dcxv set <id> ptr <ip> <ptr>         Set PTR (rDNS) for an IP
dcxv set <id> upgrade <item> <val>   Change a resource / add-on
dcxv set <id> snap-add [name]        Create a snapshot
dcxv set <id> snap-restore <name>    Restore a snapshot                 (--yes)
dcxv set <id> snap-rem <name>        Delete a snapshot                  (--yes)
dcxv set <id> backup-add             Create a backup now
dcxv set <id> backup-restore <bid>   Restore a backup                   (--yes)
dcxv set <id> backup-rem <bid>       Delete a backup                    (--yes)
dcxv set <id> iso-mount <url> [file] Attach an ISO
dcxv set <id> iso-rm                 Detach the ISO                     (--yes)
dcxv rm <id>                         Delete the product                 (--yes)

dcxv tx [<id>]                       Transactions, or one in detail  (alias: txns, history)
dcxv tx <id> invoice [outfile]       PDF invoice (prints the URL, saves it if given a file)
dcxv pay [<method> <amount>]         Show methods, or create a payment
dcxv sub [ls|add|login|exit]         Manage / switch into sub-accounts
dcxv watch [<id>]                    Stream live deploy/task progress
dcxv console <id>                    Attach to the serial console (Ctrl-] to detach);
                                      --vnc opens the graphical console in a browser
dcxv completion <bash|zsh|fish>      Print a shell completion script
dcxv version                         Print the CLI version

dcxv mcp [--allow-write]             Run a local MCP server over stdio for an MCP-aware
         [--allow-billing]           agent (see "Using DCXV with an MCP client" below)

Two global flags matter everywhere:

  • --json on any read command gives machine-readable output.
  • --yes (-y) confirms anything that bills your account or destroys data. Without it, those commands refuse to run — and dcxv order prints a dry run instead of ordering.

Names accept a word-by-word match, so extra words narrow the result:

dcxv os windows 2022 en std        # -> Windows Server 2022 EN (Standard)
dcxv os windows 2022               # -> lists the candidates, refuses to guess

Anything ambiguous is an error listing the matches, never a guess. Numeric ids work everywhere a name does.

Ordering a server

dcxv clusters                      # pick a location / price tier
dcxv os ubuntu                     # pick an image

# dry run: prints exactly what would be ordered, charges nothing
dcxv order --cluster portugal --vcpu 4 --ram 8 --disk 80 --ip 1 --os ubuntu

# just the price
dcxv order --cluster portugal --vcpu 4 --ram 8 --disk 80 --ip 1 --os ubuntu --price

# order it, and stream provisioning until it is ready
dcxv order --cluster portugal --vcpu 4 --ram 8 --disk 80 --ip 1 --os ubuntu --yes --watch

When provisioning finishes, the access details and a ready-to-paste ssh command are printed (xfreerdp for Windows images).

| Flag | Meaning | |---|---| | --cluster <name\|id> | Location / price tier — see dcxv clusters | | --vcpu <n> | vCPU count | | --ram <n> | RAM in GB | | --disk <n> | Disk in GB | | --ip <n> | Number of IPv4 addresses | | --os <name\|id> | Image — see dcxv os. Omit for the newest supported Ubuntu | | --backup <0-7> | 06 = copies per week, 7 = daily. Defaults to 0 | | --hostname <h> | Optional — generated for you if omitted | | --price | Print the price only, order nothing | | --watch | With --yes, stream progress right after ordering |

The price is fetched from the API before submitting, so you never compute or pass it yourself.

dcxv order --type k8s --cluster portugal --vcpu 4 --ram 8 --disk 60 --ip 1 --yes
dcxv order --k8s rke2 --cluster portugal --vcpu 4 --ram 8 --disk 60 --ip 1 --yes

--k8s selects the distro: K3S (default), K0S, K8S (MicroK8s) or RKE2. The OS is chosen for you, and --vcpu/--ram/--disk are raised to the enforced minimums (4 vCPU / 8 GB / 60 GB) with a note if you ask for less. Fetch the kubeconfig once the cluster is up:

dcxv get <id> kubeconfig cluster.yaml
export KUBECONFIG=cluster.yaml && kubectl get nodes

Set any raw order field, or pass a whole JSON payload. Friendly flags win on conflict.

dcxv order --set cpu=8 --set ram=32 --yes
dcxv order --spec @order.json --yes

Using DCXV with an MCP client

dcxv mcp runs a local Model Context Protocol server over stdio, so an MCP-aware agent (Claude Code, Claude Desktop, etc.) can use this same already-authenticated session — there is no hosted DCXV MCP endpoint and no separate login; whatever dcxv login already saved is what the server uses.

Add it to your client's MCP config (Claude Code: .mcp.json; Claude Desktop: claude_desktop_config.json):

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

Tool tiers, gated by flag:

| Tier | Flag | Tools | |---|---|---| | Public | (none) | search_products, get_product, list_locations — no login required | | Read-only | (none, once logged in) | whoami, get_account, balance, list_orders, get_order, list_os, list_clusters, list_transactions | | Write | --allow-write | set_power, rename_order, lock_order, unlock_order — reversible, never charges the account | | Billing | --allow-write --allow-billing + DCXV_MCP_ALLOW_BILLING=1 | create_order (price-check only unless confirm: true), renew_order |

rm, pay, account set/export, sub login and watch are never exposed as MCP tools, at any flag combination — the same destructive/irreversible/streaming set this CLI already treats carefully everywhere else. The billing tier needs both a flag and an environment variable on purpose: a tool result can echo back free text you or a colleague wrote (a server's hostname, notes, notice-to-client), which is a route for a malicious instruction to reach an agent — a single flag isn't enough friction for anything that charges your account.

Server discovery. This package is registered under the MCP name com.dcxv/dcxv-cli (package.json's mcpName, matching server.json at the repo root — the manifest the MCP registry publisher CLI reads). https://dcxv.com/.well-known/mcp/server-card.json serves the same description live: an npm-distributed, stdio-only server with no hosted endpoint — there is deliberately no remotes entry anywhere in that description, because none exists.

{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}
{"jsonrpc":"2.0","id":2,"method":"tools/list"}
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"whoami","arguments":{}}}

Examples

Check your balance

$ dcxv balance
Balance: €500.00 EUR
  Payment methods: stripe, usdt

Reinstall an OS (erases the disk, so --yes is required)

dcxv set 2481 reinstall 'Ubuntu 24.04' --yes --watch

Watch every deployment on the account

dcxv watch

Script against it with --json

dcxv orders --json | jq -r '.[] | select(.active) | "\(.hostname)\t\(.ip)"'
dcxv get 2481 --json | jq .k8sStatus

Pay an invoice

dcxv pay stripe 100        # creates the payment and prints the pay link
dcxv tx                    # recent transactions
dcxv tx 900 invoice inv.pdf

Manage sub-accounts (resellers)

dcxv sub ls
dcxv sub add [email protected] "Client Name"
dcxv sub login 7           # work as that sub-account
dcxv sub exit              # back to your own

Configuration

| Variable | Purpose | |---|---| | DCXV_TOKEN | API token, instead of logging in | | DCXV_PROFILE | Select a saved profile | | DCXV_INSTALL_DIR | Install location for install.sh (default ~/.local/bin) | | DCXV_WATCH_IDLE_SEC | Seconds before watch reports that nothing is running | | DCXV_WATCH_SILENT_SEC | Seconds before watch warns that no progress arrived |

Config lives in ~/.config/dcxv/config.json (chmod 600), or $XDG_CONFIG_HOME/dcxv/. The token has no flag: use DCXV_TOKEN, or dcxv login to save one.

The API host is fixed at https://dcxv.com and cannot be changed. The --url flag and the DCXV_URL variable were removed — passing either is now an error rather than a silent no-op, so a script that relied on one fails loudly instead of quietly talking to a different host than it thinks. A url left in an existing config file is ignored.

Shell completions

source <(dcxv completion bash)          # bash
source <(dcxv completion zsh)           # zsh
dcxv completion fish > ~/.config/fish/completions/dcxv.fish

Notes

  • The serial console is exposed as dcxv console <id>; the graphical (VNC) console still needs a browser window, so dcxv console <id> --vnc opens it there instead of rendering it here.
  • Sensitive account changes (password, PIN, 2FA, account closure) are left to the web app.

Contributing

Bug reports and patches are welcome. See CONTRIBUTING.md for the development setup, test suites and release process.

Support

License

MIT © DCXV INTERNATIONAL LTD