| name | mcp-cli |
| description | Call any MCP server tool as a CLI command with shell composition. Use when tool args come from files, pipes, or shell commands. Trigger on "mcp-call", "call mcp from cli", or when MCP tool content is in a file. |
MCP CLI
Call any configured MCP server tool from the command line with --flag=value style args and full shell composition support.
If mcp-call is not found, install it first: uv tool install mcp-cli-skill
Always use mcp-call as the command, never uvx mcp-cli-skill.
Commands
mcp-call --servers
mcp-call <server> --tools
mcp-call <server> --discover
mcp-call <server> <tool> --schema
mcp-call <server> <tool> --key=value ...
mcp-call <server> <tool> --input-json '{"key":"val"}'
echo '{}' | mcp-call <server> <tool>
mcp-call --add <name> <cmd> [args] [--env K=V ...]
mcp-call --add-http <name> <url>
mcp-call --remove <name>
mcp-call --sync
mcp-call --completion <bash|zsh|fish>
mcp-call --refresh-completions
mcp-call --clear-cache [server]
Server Management
Config stored at ~/.mcp-cli/servers.json. On first run, seeds from ~/.claude/settings.json and ~/.claude.json. Supports both stdio and HTTP MCP servers.
mcp-call --add myredash uvx redash-mcp --env REDASH_URL=http://localhost --env REDASH_API_KEY=abc123
mcp-call --add github npx @modelcontextprotocol/server-github --env GITHUB_TOKEN=ghp_xxx
mcp-call --remove myredash
mcp-call --sync
Examples
mcp-call redash redash_query --action=adhoc --query="$(cat /tmp/query.sql)" --data_source_id=1
mcp-call redash redash_query --action=list --page_size=5 | jq '.results[].name'
mcp-call slack slack_chat --action=post --channel=C123 --text="$(cat /tmp/msg.txt)"
mcp-call redash redash_query --action=run --id=42 | jq '.query_result.data.rows' > /tmp/result.json
Multi-tool Workflow
When you need to chain multiple MCP tools together, generate a bash script and run it:
#!/bin/bash
mcp-call github list_issues \
--owner=acme --repo=backend --state=open --labels=bug \
| jq '.[] | {number, title}' > /tmp/bugs.json
for title in $(jq -r '.[].title' /tmp/bugs.json | head -5); do
mcp-call github search_code --query="$title repo:acme/backend" | jq '.items[:2]'
done > /tmp/code_matches.txt
mcp-call slack send_message \
--channel="#engineering" \
--text="$(jq -r '.[] | "• #\(.number): \(.title)"' /tmp/bugs.json)"
This is better than making separate MCP tool calls because you get file I/O, pipes, loops, and variable expansion for free.
When to Use
Prefer this over MCP tool calls when:
- Content comes from a file:
--arg="$(cat file)"
- Output needs piping:
| jq, > file, | grep
- Shell variable expansion needed:
--arg="$VAR"
- Chaining multiple calls in one command
Arg Types
Values auto-parse: --id=42 → int, --flag=true → bool, --name=hello → string.