Uno CLI
Access 2000+ real-world tools via command line. Zero install (Python 3.8+ stdlib only).
Prerequisites
- Python 3.8+ (pre-installed on most systems)
- CLI script included:
bin/uno.py— no extra install needed
CLI path (relative to this file): bin/uno.py
Authentication
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).
Auth Flow Details
Uno uses Device Code Flow with ClawdChat SSO:
login --startrequests a device code from Uno server- The returned
verification_uri_completeURL opens a page where the user logs in via ClawdChat - After authorization,
login --pollretrieves an API key - Works perfectly for mobile scenarios (e.g., user on phone with OpenClaw)
Command Reference
All commands output pretty-printed JSON by default. Add --compact for single-line JSON (easier for programmatic parsing).
Status
python bin/uno.py whoami # current user info (credits, plan, keys)
python bin/uno.py health # server health check
Search Tools
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.
Tool Details
python bin/uno.py tool get <tool_slug>
# e.g. python bin/uno.py tool get amap-maps.maps_weather
Call a Tool
python bin/uno.py call <tool_slug> --args '{"city":"Beijing"}'
Response:
{"success": true, "data": {...}, "meta": {"latency_ms": 234, "credits_used": 1.0}}
Rate a Tool
python bin/uno.py rate <tool_slug> <0-5> [--comment "great tool"]
Browse Servers
python bin/uno.py servers [--query "weather"] [--category search] [--limit 50]
Disconnect Third-party Authorization
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.
API Key Management
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
Agent Workflow
- Search first — never guess tool slugs or parameters
- Read
input_schemafrom search results to construct correct arguments - Search by capability ("weather", "search", "translate"), not user intent
- Use
--compactto reduce output size (fewer tokens) - If
descis truncated (ends with…), runtool get <slug>for full description - Check credits with
whoamibefore heavy usage — free plan has 100 daily credits - Handle errors:
auth_requiredwithauth_type: "api_key"→ tell user to provide an API Key (showget_key_urlandfieldsfrom response)auth_requiredwithauth_url→ showauth_urlto 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, showrecharge_url- Connection errors (timeout, cancelled) → retry once, then inform user
- Rate tools after successful calls to improve search quality
- When multiple servers offer the same capability (e.g.,
githubvsgithub-api), prefer the one with highercalls_7dorratingin stats
Output Format
- Call success:
{"success": true, "data": {...}, "meta": {"latency_ms": N, "credits_used": N}} - Other success:
{"success": true, "data": {...}} - Error:
{"error": "description", "hint": "...", ...}, non-zero exit code
Detailed Help
python bin/uno.py --help
python bin/uno.py search --help
python bin/uno.py call --help
API Base URL
Default: https://clawdtools.uno. Override with --base-url or env var UNO_API_URL.