call; the others help you discover what’s available.
list
list works without an API key.
describe <tool>
- The tool’s title (one line)
- Its full description (the same text MCP clients see)
- Every input flag (
--name, optional flag suffix, and the description attached to each argument)
list, it makes no backend call.
If the tool name is unknown, prints Unknown tool: <name> to stderr and exits with code 2.
call <tool> [flags]
{"error": "…"}) so success and failure parse identically.
Argument forms
You can pass inputs three ways. They behave identically once parsed.- Inline flags
- Inline JSON
- JSON file
--key value pairs. Values are JSON-parsed when possible, so the right type lands in the schema:--n 25→ number25--dry_run true→ booleantrue--options '["A","B"]'→ array--text "Which tagline wins?"→ string (JSON parse fails, falls back to string)
--verbose) are treated as boolean true.Input validation
Inputs are validated against the tool’s Zod schema before any backend call. Missing required fields, wrong types, and enum mismatches all fail fast:Exit codes
Output and pipes
Tool responses go to stdout. Diagnostic logs (handler errors, stack traces) go to stderr. This separation means you can safely pipe intojq without log noise:
help
Environment
OAuth / Clerk variables are not used in CLI mode — they only apply to the streamable-HTTP MCP transport.

