List, inspect, and call tools on connected MCP servers from the CLI.
List Tools
See all tools available on a connected server:
1belt mcp tools linear2belt mcp tools linear --json # array of {name, description, inputSchema}34# Same output — `mcp run` with a bare slug lists tools instead of erroring5belt mcp run linear1linear — 24 tools23tool description4list_issues List issues with filtering and pagination5create_issue Create a new issue6update_issue Update an existing issue7get_issue Get issue details by ID8list_projects List all projects in the workspace9...Inspect a Tool
View a tool's input schema before calling it:
1belt mcp tools linear:list_issues2belt mcp tools linear:list_issues --json # single tool object with inputSchema1linear:list_issues23List issues with filtering and pagination45 input schema:6 {7 "type": "object",8 "properties": {9 "project": {10 "type": "string",11 "description": "Project key to filter by"12 },13 "status": {14 "type": "string",15 "description": "Filter by status (backlog, todo, in_progress, done)"16 },17 "limit": {18 "type": "integer",19 "description": "Max results to return"20 }21 }22 }2324 run: belt mcp run linear:list_issues --input '{}'Call a Tool
Run a tool and get the result:
1# Inline JSON input (--input flag)2belt mcp run linear:list_issues --input '{"project": "INF", "limit": 5}'34# Positional JSON (same priority as --input when flag is omitted)5belt mcp run linear:list_issues '{"project": "INF", "limit": 5}'67# Input from file (@filename or path)8belt mcp run linear:create_issue --input @issue.json910# Piped stdin11echo '{"project": "INF"}' | belt mcp run linear:list_issues1213# No input required14belt mcp run slack:list_channels1516# Filter output with built-in jq (no external jq binary)17belt mcp run linear:list_issues --jq '.issues[] | .id'18belt mcp run linear:list_issues --jq '.issues[] | {id, title}'Input resolves from --input, a positional argument, or piped stdin (in that order). See CLI setup — JSON input.
Use --jq to print only the fields you need. String values are unquoted (like jq -r); other values are compact JSON.
Results are printed as formatted JSON (or filtered lines when --jq is set):
1{2 "issues": [3 {4 "id": "INF-123",5 "title": "Fix auth middleware",6 "status": "in_progress",7 "assignee": "okaris"8 }9 ]10}Interactive elicitation (MRTR)
Some MCP tools cannot finish in a single round trip. The server returns an interim result with input_required: true and one or more input_requests (Multi Round-Trip Request / MRTR). Each request uses method elicitation/create with either:
| Mode | CLI behavior (interactive) |
|---|---|
| form | Renders a terminal form from requestedSchema (string, number, boolean, enum fields) |
| url | Shows the authorization URL, optionally opens your browser, then asks you to confirm when done |
belt mcp run handles this automatically in interactive terminals: it collects your answers or browser confirmation, retries the tool call with inputResponses and requestState, and repeats if the server asks for more input.
Non-interactive shells (CI set, no TTY, or BELT_NON_INTERACTIVE=1) cannot prompt. The CLI prints the MRTR envelope as JSON on stdout and exits with code 2:
1{2 "input_required": true,3 "input_requests": { "...": { "method": "elicitation/create", "params": { ... } } },4 "request_state": "..."5}Parse input_requests, complete each elicitation step out of band (open URLs, collect form values), then retry via POST /mcps/{slug}/tools/{tool} with the original arguments, inputResponses, and requestState. See Integrations API — MCP tool proxy.
Tool Reference Format
Tools are referenced as slug:tool_name:
1belt mcp tools <slug> # list all tools2belt mcp run <slug> # same as mcp tools <slug>3belt mcp tools <slug>:<tool> # inspect one tool4belt mcp run <slug>:<tool> # call a toolNext
- Agent Tools — give your agents access to connector tools
- MCP Server — access these tools from Claude Code or Cursor