Once connected (with or without auth), the tools, resources, and prompts command groups let you explore and exercise what the server exposes.
mcpjam tools list --url https://your-server.com/mcp --access-token $TOKEN
Returns every tool the server exposes, including names, descriptions, and input schemas.
mcpjam tools call --url https://your-server.com/mcp --access-token $TOKEN \
--tool-name search_docs \
--tool-args @params.json --quiet --format json
Tool arguments can be inline JSON, @path, - for stdin, or --tool-args-stdin as a shorthand for stdin. The result includes the tool’s response content.
tools call supports --debug-out <path> to capture the full request/response
trace for debugging. For stdio targets, the artifact records only the
explicit env keys passed through -e/--env; inherited shell variables are
not enumerated.
If tools list shows _meta.ui.resourceUri, deprecated _meta["ui/resourceUri"], or openai/outputTemplate in toolsMetadata, the tool has interactive UI. Add --ui to execute it once and render the completed result in Inspector’s Playground:
mcpjam tools call --url https://your-server.com/mcp --access-token $TOKEN \
--tool-name create_view \
--tool-args @params.json \
--ui \
--quiet --format json
Without --ui, tools call returns the raw tool result. With --ui, it opens Inspector by default in a TTY and returns an envelope containing the raw result, inspectorBrowserUrl, and compact inspectorRender evidence. inspectorRender.status is the UI signal: rendered means Inspector accepted the render, skipped means the tool succeeded but the active browser client, a render precondition, or the render wait was missing, and error means a non-recoverable Inspector render command failed. inspectorRender.remediation is always present and is one of open_browser, retry, reconnect_server, or none. Skipped renders emit a stable root warning plus inspectorRender.warning with code, message, remediation, and optional browserUrl, hasActiveClient, and inspectorStarted fields. Stable skipped-render codes are no_active_client, timeout, disconnected_server, and unsupported_in_mode. Pass --require-render when a skipped render should become a hard error instead of a warning. Browser automation can open inspectorBrowserUrl itself and pass --no-open; --inspector-url is the local Inspector backend/API base URL. If you already know the Inspector browser/client URL, pass --frontend-url <url> to use it directly and skip health-advertised frontend checks and local dev port discovery.
For agent/browser automation, either let --ui open Inspector automatically in a TTY, or open http://127.0.0.1:6274/#playground in the automation browser first and run tools call --ui --no-open --quiet --format json. Add --attach-only when startup, browser opening, and discovery should be disallowed. Agents should confirm inspectorRender.status === "rendered" before assuming the UI is visible, and use inspectorRender.remediation to recover from skipped renders. Default non-TTY --ui runs do not open a browser unless --open is passed. TTY stderr runs print the Playground URL and initial wait message unless --quiet is set; the elapsed-seconds heartbeat only appears when stderr is a TTY. The normal JSON output is compact; pass --debug-out <path> for the full render envelope.
For a local stdio server:
mcpjam tools list \
--command npx \
--args -y @modelcontextprotocol/server-everything \
--cwd $PWD \
-e DEBUG=1
Resources
List resources
mcpjam resources list --url https://your-server.com/mcp --access-token $TOKEN
Read a resource
mcpjam resources read --url https://your-server.com/mcp --access-token $TOKEN \
--resource-uri "file:///docs/readme.md"
Use resources read --resource-uri ui://... when you need to inspect raw widget HTML or other UI resources directly.
List resource templates
mcpjam resources templates --url https://your-server.com/mcp --access-token $TOKEN
Prompts
List prompts
mcpjam prompts list --url https://your-server.com/mcp --access-token $TOKEN
Get a prompt
mcpjam prompts get --url https://your-server.com/mcp --access-token $TOKEN \
--prompt-name summarize \
--prompt-args '{"text": "Hello world"}'
Common patterns
Enumerate the full server surface
# One-shot: doctor already sweeps everything
mcpjam server doctor --url https://your-server.com/mcp --access-token $TOKEN
# Or individually for focused output
mcpjam tools list --url $URL --access-token $TOKEN --format json | jq '.tools[].name'
mcpjam resources list --url $URL --access-token $TOKEN --format json | jq '.resources[].uri'
mcpjam prompts list --url $URL --access-token $TOKEN --format json | jq '.prompts[].name'
# List to find the tool
mcpjam tools list --url $URL --access-token $TOKEN --format json \
| jq '.tools[] | select(.name == "search_docs")'
# Call it
mcpjam tools call --url $URL --access-token $TOKEN \
--tool-name search_docs \
--tool-args @params.json \
--quiet \
--format json
For generated payloads, pipe JSON through stdin:
echo '{"query":"setup guide"}' | mcpjam tools call --url $URL --access-token $TOKEN \
--tool-name search_docs --tool-args - --quiet --format json
--tool-args-stdin is equivalent to --tool-args - and cannot be combined with --tool-args or --params in the same command:
generate-params | mcpjam tools call --url $URL --access-token $TOKEN \
--tool-name search_docs --tool-args-stdin --quiet --format json
Using a credentials file
Instead of passing --access-token to every command, save credentials once and reuse the file:
# Login and save
mcpjam oauth login --url https://your-server.com/mcp --credentials-out creds.json
# Reuse everywhere
mcpjam tools list --url https://your-server.com/mcp --credentials-file creds.json
mcpjam resources list --url https://your-server.com/mcp --credentials-file creds.json
mcpjam tools call --url https://your-server.com/mcp --credentials-file creds.json \
--tool-name search_docs --tool-args @params.json --quiet --format json
No-auth servers
For servers that don’t require authentication (like mcp.excalidraw.com/mcp), simply omit the auth flags:
mcpjam tools list --url https://mcp.excalidraw.com/mcp
mcpjam tools call --url https://mcp.excalidraw.com/mcp \
--tool-name read_me
Stdio child processes inherit the parent shell environment by default. Use
-e/--env to add values or override inherited ones for local subprocesses.