Ekso.Cli
2.2.0
dotnet tool install --global Ekso.Cli --version 2.2.0
dotnet new tool-manifest
dotnet tool install --local Ekso.Cli --version 2.2.0
#tool dotnet:?package=Ekso.Cli&version=2.2.0
nuke :add-package Ekso.Cli --version 2.2.0
Ekso.Cli — ekso
Official command-line interface for the Ekso API. Wraps
Ekso.Sdk so every command is a thin shell
over the same SDK call you'd write yourself.
The CLI has two surfaces:
- Curated commands under top-level branches (
ekso auth,ekso item,ekso board,ekso mcp) — friendly flags, opinionated UX - Raw API under
ekso api …— auto-generated wrapper for every endpoint in the SDK surface (200+ commands across 30 sub-branches).--data @body.jsonfor the body, exit codes mapped from HTTP status.
Install
dotnet tool install -g Ekso.Cli
Quick start
# Sign in once
ekso auth login --tenant acme
# → Open https://acme.ekso.app/auth/device and enter code: ABCD-1234
# → Waiting for approval...
# → ✓ Authenticated to tenant acme
# Use it
ekso item list --tenant acme
ekso board list --tenant acme --format table
# The magic moment: connect Ekso as an MCP server in Claude Code
ekso mcp connect --for claude-code --tenant acme
# → claude mcp add ekso --transport http https://acme.ekso.app/mcp/ \
# → --header "Authorization: Bearer ekso_at_..."
Auth
Two modes:
Device flow (interactive — recommended for local use):
ekso auth login --tenant acme
ekso auth whoami --tenant acme
ekso auth logout --tenant acme
Tokens persist to ~/.config/ekso/credentials.json (Linux/macOS) or
%APPDATA%\Ekso\credentials.json (Windows). Refresh tokens rotate transparently on
expiry — no need to re-login until the refresh token itself expires (~30 days).
API key (non-interactive — for CI, agents, scripts):
EKSO_API_KEY=ek_live_... EKSO_TENANT=acme ekso item list
API keys are issued from the admin surface. Pass via --api-key or EKSO_API_KEY.
Output formats
Default is JSON (agent-friendly). Override with --format:
ekso board list --format json # default — pretty JSON
ekso board list --format jsonl # one JSON object per line, pipe-friendly
ekso board list --format yaml # YAML
ekso board list --format table # human-readable table
--quiet suppresses non-essential output. On create commands it prints just the new id:
NEW_ID=$(ekso item create --container-id container_x --quiet)
echo "Created $NEW_ID"
Global options
Available on every command:
| Flag | Env var | Purpose |
|---|---|---|
--tenant <SUBDOMAIN> |
EKSO_TENANT |
Which tenant. Required. |
--api-key <KEY> |
EKSO_API_KEY |
Non-interactive auth. |
--format <FORMAT> |
EKSO_FORMAT |
json (default), jsonl, yaml, table. |
-q, --quiet |
Suppress non-essential output. | |
-v, --verbose |
EKSO_VERBOSE=1 |
Verbose logging. |
--no-color |
NO_COLOR |
Disable ANSI colors. |
--timeout <S> |
EKSO_TIMEOUT |
HTTP timeout. Default 30. |
Curated commands
Hand-polished for the most common flows. Friendly flags, opinionated defaults.
| Command | What it does |
|---|---|
ekso auth login |
OAuth device flow — prints URL + code, polls until approved. |
ekso auth logout |
Clear stored credentials. |
ekso auth whoami |
Show signed-in user + token expiry. |
ekso item create |
Create an item. --container-id + --data @body.json. |
ekso item get <id> |
Fetch an item by id. |
ekso item list |
List items. Optional filter via --data. |
ekso item update <id> |
Update an item via --data @body.json. |
ekso item delete <id> |
Delete an item. |
ekso board list |
List boards. |
ekso mcp connect --for <agent> |
Print the agent setup snippet. --for claude-code (default), cursor, windsurf, claude-desktop, or raw. |
Raw API surface — ekso api …
The full Ekso REST surface is reachable via auto-generated commands under ekso api.
Each [EksoSdk]-tagged operation in the openapi spec gets one command:
ekso api --help # ~30 sub-branches
ekso api annotation --help # operations on /api/annotation/*
ekso api annotation list-supported --tenant acme
ekso api clock list --tenant acme
ekso api rule create --tenant acme --data @rule.json
Path parameters become positional args; query parameters become flags. Request bodies pass
via --data <json> or --data @file.json. Response is rendered through the same
--format flag the curated commands use.
Generated commands run on every dotnet build Ekso.Cli from
tools/Ekso.CliGenerator — they stay in sync with the
backend openapi spec automatically.
Exit codes
Per the standard CLI convention:
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Generic error |
| 2 | Usage error (bad flags) |
| 3 | Authentication failure |
| 4 | Authorization failure |
| 5 | Not found |
| 6 | Validation error |
| 7 | Rate limited |
| 8 | Network/timeout |
| 9 | Server error (5xx) |
License
MIT.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.