mcpie 🥧 MCP Client for Humans
Command-line tool and REPL for MCP (Model Context Protocol) servers.
Like httpie for HTTP, but for MCP servers! 🥧
Features
- Interactive REPL with tab completion and command history
- Multiple output formats: JSON, pretty JSON, table, YAML, raw
- Pipe-friendly: Clean stdout/stderr separation, stdin input, file output
- Script-ready: Proper exit codes, quiet mode, output redirection
- Short aliases:
ls,r list,t call add 5 3,p get name - Rich tables and syntax-highlighted JSON output
- Multiple transport support: STDIO, Streamable HTTP, and SSE (deprecated)
- Smart argument parsing (JSON, key=value, or interactive prompting)
Installation
Install uv then:
uv sync
uv tool install .
From pypi:
uv tool install mcpie-cli
uvx mcpie-cli
Quick Start
Interactive Mode
# Start interactive client
mcpie "python server.py" # STDIO transport
mcpie "http://localhost:8000" # Streamable HTTP transport (with SSE fallback)
# Inside the REPL
mcp> discover # See everything available
mcp> ls # List resources
mcp> t call add 5 3 # Call tool with smart parsing
mcp> r read config://app # Read resource
mcp> help # Show all commands
Script-Friendly Usage
# Different output formats
mcpie "python server.py" t call add 5 3 --output json # {"content": [{"type": "text", "text": "8"}]}
mcpie "python server.py" t call add 5 3 --output raw # 8
mcpie "python server.py" t call add 5 3 --output pretty # Indented JSON
mcpie "python server.py" t call add 5 3 --output table # Tabular format
mcpie "python server.py" t call add 5 3 --output yaml # YAML format
# Save output to file
mcpie "python server.py" t call add 5 3 -o result.json --output json
# Pipe-friendly (quiet mode)
mcpie "python server.py" t call add 5 3 --output raw --quiet | wc -l
# Read from stdin
echo '{"a": 5, "b": 3}' | mcpie "python server.py" t call add --stdin
echo "5 3" | mcpie "python server.py" t call add --stdin
CLI Options
Output Control
--output FORMAT,-f FORMAT- Output format:json,pretty,table,yaml,raw--output-file FILE,-o FILE- Save output to file instead of stdout--quiet,-q- Suppress non-essential output (stderr messages)
Input Control
--stdin- Read command arguments from stdin (JSON or space-separated)
Transport Options
-H "Key:Value"- Add HTTP headers (for HTTP transport)-e "KEY:value"- Set environment variables--force-sse- Force SSE transport (if server doesn't support Streamable HTTP)
Output Formats
JSON (--output json)
Compact JSON output suitable for parsing:
{"content": [{"type": "text", "text": "8"}], "structuredContent": {"result": 8}}
Pretty JSON (--output pretty)
Indented JSON for human reading:
{
"content": [
{
"type": "text",
"text": "8"
}
],
"structuredContent": {
"result": 8
}
}
Table (--output table)
Tabular format for lists and structured data:
┌─────────┬───────────┐
│ Field │ Value │
├─────────┼───────────┤
│ result │ 8 │
└─────────┴───────────┘
YAML (--output yaml)
YAML format for configuration-like output:
content:
- type: text
text: '8'
structuredContent:
result: 8
Raw (--output raw)
Extract just the essential result value:
8
Exit Codes
mcpie uses proper exit codes for scripting:
0- Success1- CLI error (invalid arguments, missing files, etc.)2- Server error (connection failed, server returned error)3- Invalid input (malformed JSON, invalid parameters)
Commands
Discovery:
discover- Show all capabilitiesls- List resources (alias forr list)
Resources: r list, r read <uri>, r templates
Tools: t list, t call <name> [args], t inspect <name>
Prompts: p list, p get <name> [args], p inspect <name>
Server: s info, s ping, s capabilities
Examples
Interactive Usage
# Different argument formats
t call add 5 3 # Auto-mapped to parameters
t call add '{"a": 5, "b": 3}' # JSON format
t call add # Interactive prompting
# With headers/env vars for HTTP transport
mcpie -H "Authorization:token" http://localhost:8000
mcpie -e "API_KEY:secret" "python server.py"
# Force SSE transport (if server doesn't support Streamable HTTP)
mcpie --force-sse http://localhost:8000
Scripting Examples
# Get raw result for use in scripts
RESULT=$(mcpie "python server.py" t call add 5 3 --output raw --quiet)
echo "The sum is: $RESULT"
# Save structured data to file
mcpie "python server.py" r read config://app --output yaml -o config.yaml
# Process multiple inputs
echo '{"a": 1, "b": 2}' | mcpie "python server.py" t call add --stdin --output raw
echo '{"a": 3, "b": 4}' | mcpie "python server.py" t call add --stdin --output raw
# Chain operations
mcpie "python server.py" t call add 5 3 --output raw | \
xargs -I {} mcpie "python server.py" t call add {} 2 --output raw
# Error handling in scripts
if ! mcpie "python server.py" t call add 5 3 --quiet; then
echo "Command failed with exit code: $?"
fi
Pipe-Friendly Features
# Clean output suitable for piping
mcpie "python server.py" t call process_text "hello world" --output raw --quiet
# Read from stdin, output to file
echo '{"text": "hello", "operation": "uppercase"}' | \
mcpie "python server.py" t call process_text --stdin --output json -o result.json
# Combine with other tools
mcpie "python server.py" r list --output json --quiet | jq '.[] | .name'
That's it! Type help in the REPL for more details.
Metadata
Release files for mcpie-cli 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mcpie_cli-0.2.0.tar.gz | 17.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcpie_cli-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 36.6 kB
Release files / mcpie_cli-0.2.0.tar.gz
| Download URL | mcpie_cli-0.2.0.tar.gz |
|---|---|
| Size | 17.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9d4cc487a3fc6251aa29fc36f9425af543373f5e13ee3af871c2351d4879b0f9
|
|
BLAKE2b-256 checksum How to use checksums |
5586f3c4be196b4567de2faf4caa2df08ebd69d018fa2ad649d762be1b640f6c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 17, 2025.
Transparency logRelease files / mcpie_cli-0.2.0-py3-none-any.whl
| Download URL | mcpie_cli-0.2.0-py3-none-any.whl |
|---|---|
| Size | 18.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a45a0c1e46e0695c0c669779dd1b0d64f7337ced99baf5f8b8405f15a5810574
|
|
BLAKE2b-256 checksum How to use checksums |
d70e38d9c003ed595353c7a08b355a9a2ad538afef5f3a71e4b00f5d52d1fe09
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 17, 2025.
Transparency log