I built cli-use, a small Python tool that turns any MCP server into a native CLI.
The idea is simple: HTTP has curl, Docker has docker, Kubernetes has kubectl — MCP should have a shell-native client too.
Why I made it:
MCP is useful, but using it through agents has overhead:
every session pays schema discovery cost every call carries JSON-RPC framing responses are often verbose JSON when the useful output is just a line or two
cli-use converts that into a terse CLI so tools can be called like normal shell commands.
Example:
pip install cli-use cli-use add fs /tmp cli-use fs list_directory --path /tmp
After that, the MCP server behaves like a regular CLI:
usable by agents usable by humans usable from scripts / subprocess.run composable with grep, head, xargs, etc.
Example:
cli-use fs search_files --path /tmp --pattern "*.md" | head cli-use fs read_text_file --path /tmp/notes.md | grep TODO
One thing I cared about a lot is agent ergonomics.
Every add also emits a SKILL.md plus an AGENTS.md pointer, so agents working in a repo can discover and use the CLI automatically.
A few details:
pure Python stdlib zero runtime deps persistent aliases works with npm, pip, pipx, and local MCP servers built-in registry for common MCP servers
I also benchmarked it against the real @modelcontextprotocol/server-filesystem server (14 tools). Depending on session size, token savings were around 60–80%, mostly by removing schema overhead and verbose request / response framing.
It’s still alpha, but already usable.