# MCP CLI

> Use when interacting with external tools, APIs, or data sources through MCP servers. Covers discovery, schema inspection, and tool invocation.

- Skill: `majiayu000/mcp-cli-2` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/mcp-cli-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/mcp-cli-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Product & Planning
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/mcp-cli-2

---


# MCP-CLI

Access MCP servers through the command line. MCP enables interaction with external systems like GitHub, filesystems, databases, and APIs.

## Commands

| Command | Output |
|---------|--------|
| `mcp-cli` | List all servers and tools |
| `mcp-cli info <server>` | Show server tools and parameters |
| `mcp-cli info <server> <tool>` | Get tool JSON schema |
| `mcp-cli grep "<pattern>"` | Search tools by name |
| `mcp-cli call <server> <tool>` | Call tool (reads JSON from stdin if no args) |
| `mcp-cli call <server> <tool> '<json>'` | Call tool with arguments |

Both formats work: `<server> <tool>` or `<server>/<tool>`.

## Workflow

1. Discover: `mcp-cli` to see available servers.
2. Explore: `mcp-cli info <server>` to see tools with parameters.
3. Inspect: `mcp-cli info <server> <tool>` to get full JSON schema.
4. Execute: `mcp-cli call <server> <tool> '<json>'` to run with arguments.

## Examples

```bash
# List all servers
mcp-cli

# With descriptions
mcp-cli -d

# See server tools
mcp-cli info filesystem

# Get tool schema (both formats work)
mcp-cli info filesystem read_file
mcp-cli info filesystem/read_file

# Call tool
mcp-cli call filesystem read_file '{"path": "./README.md"}'

# Pipe from stdin (no '-' needed)
cat args.json | mcp-cli call filesystem read_file

# Search for tools
mcp-cli grep "*file*"

# Output is raw text (pipe-friendly)
mcp-cli call filesystem read_file '{"path": "./file"}' | head -10
```

## Advanced Chaining

```bash
# Chain: search files -> read first match
mcp-cli call filesystem search_files '{"path": ".", "pattern": "*.md"}' \
  | head -1 \
  | xargs -I {} mcp-cli call filesystem read_file '{"path": "{}"}'

# Loop: process multiple files
mcp-cli call filesystem list_directory '{"path": "./src"}' \
  | while read f; do mcp-cli call filesystem read_file "{\"path\": \"$f\"}"; done

# Conditional: check before reading
mcp-cli call filesystem list_directory '{"path": "."}' \
  | grep -q "README" \
  && mcp-cli call filesystem read_file '{"path": "./README.md"}'

# Multi-server aggregation
{
  mcp-cli call github search_repositories '{"query": "mcp", "per_page": 3}'
  mcp-cli call filesystem list_directory '{"path": "."}'
}

# Save to file
mcp-cli call github get_file_contents '{"owner": "x", "repo": "y", "path": "z"}' > output.txt
```

Note: `call` outputs raw text content directly (often no `jq` needed for text extraction).

## Options

| Flag | Purpose |
|------|---------|
| `-d` | Include descriptions |
| `-c <path>` | Specify config file |

## Common Errors

| Wrong Command | Error | Fix |
|---------------|-------|-----|
| `mcp-cli server tool` | `AMBIGUOUS_COMMAND` | Use `call server tool` or `info server tool` |
| `mcp-cli run server tool` | `UNKNOWN_SUBCOMMAND` | Use `call` instead of `run` |
| `mcp-cli list` | `UNKNOWN_SUBCOMMAND` | Use `info` instead of `list` |
| `mcp-cli call server` | `MISSING_ARGUMENT` | Add tool name |
| `mcp-cli call server tool {bad}` | `INVALID_JSON` | Use valid JSON with quotes |

## Exit Codes

- `0`: Success
- `1`: Client error (bad args, missing config)
- `2`: Server error (tool failed)
- `3`: Network error

