Let's settle the MCP server vs. CLI debate.
Here's a list of their pros and cons👇
MCP servers: pros
> Typed discovery: schemas tell the model exactly what exists and how to call it (Tool Search makes this cheap in most harnesses).
> Structured args, no shell quoting, which sidesteps the #
1# shell-agent failure mode (nested quotes).
> Credential isolation: auth lives in the server/bindings, never in session text.
> Works for services with no CLI (SaaS APIs, browser pages, WebMCP).
> Per-call, inspectable dispatch that fits approval-per-action models.
> Uniform transport/auth across clients; harness-agnostic.
MCP servers: cons
> Needs a running server plus protocol layer; another moving part.
> Code mode over MCP needs a sandbox and coarsens permissions.
> Not reachable from the agent's shell; no bridge into Bash/pipes.
CLIs: pros
> Bash already is code mode: pipe, loop, filter, return only the answer, no new protocol or sandbox.
> Composable with the whole Unix toolbox (jq, grep, xargs).
> Already OS-sandboxed (Seatbelt in MacOS / bubblewrap in Linux ).
> Zero extra infra if the tool ships a binary; fast to adopt.
> Great fit for exploratory/debugging work where the model needs to see intermediates.
CLIs: cons
> Discovery is --help prose, not a schema; success depends on doc quality.
> Quoting/escaping errors, prompts, pagers, TTY.
> Credentials sit in env/config the shell can read, a leak surface.
> Untrusted output steering shell commands is injection.