Install
openclaw skills install uno-cliUno CLI — Agent Tool Gateway via command line. 2000+ real-world tools accessible with two commands: search → call. Features Device Code OAuth (via ClawdChat SSO), hybrid search (keyword/semantic), tool calling with auto-auth, rating, and multi-account management. Use when: user needs to call external tools/APIs; or needs real-time info from services like weather, search, maps, finance, etc.
openclaw skills install uno-cliAccess 2000+ real-world tools via command line. Zero install (Python 3.8+ stdlib only).
bin/uno.py — no extra install neededCLI path (relative to this file): bin/uno.py
Login once before first use. Credentials are stored in ~/.uno/credentials.json.
# Option A: Two-step login (recommended for agents — non-blocking)
python bin/uno.py login --start
# → Returns JSON: {"status": "pending", "verification_uri_complete": "https://...", "device_code": "xxx", ...}
# Show the URL to the user. After they authorize in a browser:
python bin/uno.py login --poll <device_code>
# → {"success": true, "name": "...", "email": "..."}
# Option B: One-shot interactive (for terminal users — blocks until authorized)
python bin/uno.py login
# Option C: Direct API Key
python bin/uno.py login --key uno_xxxxx
# Switch accounts (multi-account)
python bin/uno.py use # list all accounts
python bin/uno.py use <name_or_email> # switch to specified account
# Logout
python bin/uno.py logout
python bin/uno.py logout --all # remove all accounts
Env var UNO_API_KEY takes priority over file config (useful for CI).
Uno uses Device Code Flow with ClawdChat SSO:
login --start requests a device code from Uno serververification_uri_complete URL opens a page where the user logs in via ClawdChatlogin --poll retrieves an API keyAll commands output pretty-printed JSON by default. Add --compact for single-line JSON (easier for programmatic parsing).
python bin/uno.py whoami # current user info (credits, plan, keys)
python bin/uno.py health # server health check
python bin/uno.py search "weather" [--limit 10] [--mode hybrid|keyword|semantic] [--category dev] [--server weather-free]
Returns tools with input_schema (JSON Schema) — use it to construct correct arguments.
python bin/uno.py tool get <tool_slug>
# e.g. python bin/uno.py tool get amap-maps.maps_weather
python bin/uno.py call <tool_slug> --args '{"city":"Beijing"}'
Response:
{"success": true, "data": {...}, "meta": {"latency_ms": 234, "credits_used": 1.0}}
python bin/uno.py rate <tool_slug> <0-5> [--comment "great tool"]
python bin/uno.py servers [--query "weather"] [--category search] [--limit 50]
python bin/uno.py disconnect <server_slug>
# e.g. python bin/uno.py disconnect github
Revokes the stored OAuth token or API key for a server. After disconnect, the next call will return auth_required again.
python bin/uno.py keys list # list active API keys
python bin/uno.py keys create # create a new API key
python bin/uno.py keys delete <key_id> # delete an API key
input_schema from search results to construct correct arguments--compact to reduce output size (fewer tokens)desc is truncated (ends with …), run tool get <slug> for full descriptionwhoami before heavy usage — free plan has 100 daily creditsauth_required with auth_type: "api_key" → tell user to provide an API Key (show get_key_url and fields from response)auth_required with auth_url → show auth_url to user to open in browser for OAuth authorization; after they complete, retry the same calltool_not_found → search again with different keywordsinsufficient_credits → inform user, show recharge_urlgithub vs github-api), prefer the one with higher calls_7d or rating in stats{"success": true, "data": {...}, "meta": {"latency_ms": N, "credits_used": N}}{"success": true, "data": {...}}{"error": "description", "hint": "...", ...}, non-zero exit codepython bin/uno.py --help
python bin/uno.py search --help
python bin/uno.py call --help
Default: https://clawdtools.uno. Override with --base-url or env var UNO_API_URL.