A curl-like CLI for Model Context Protocol (MCP) servers. Query tools, resources, and prompts using simple REST-like URLs.
LLM-friendly: compact JSON output, NDJSON streaming, structured errors to stderr, semantic exit codes. Built for agents to call from shell.
brew install turlockmike/murl/murlpip install mcp-curlcurl -sSL https://raw.githubusercontent.com/turlockmike/murl/master/install.sh | bashTo upgrade: brew upgrade turlockmike/murl/murl or murl --upgrade
# List tools on a server (NDJSON output — one JSON object per line)
murl https://mcp.deepwiki.com/mcp/tools | jq -r '.name'
# Call a tool and extract the result
murl https://remote.mcpservers.org/fetch/mcp/tools/fetch -d url=https://example.com | jq -r '.text'
# Query a repo's wiki structure
murl https://mcp.deepwiki.com/mcp/tools/read_wiki_structure -d repoName=anthropics/claude-code | jq -r '.text'Public demo servers:
https://mcp.deepwiki.com/mcp— GitHub repository docshttps://remote.mcpservers.org/fetch/mcp— fetch web content
murl <url> [options]| URL Path | MCP Method |
|---|---|
/tools |
tools/list |
/tools/<name> |
tools/call |
/resources |
resources/list |
/resources/<path> |
resources/read |
/prompts |
prompts/list |
/prompts/<name> |
prompts/get |
# List tools
murl http://localhost:3000/tools
# Call a tool
murl http://localhost:3000/tools/echo -d message=hello
# Multiple arguments (auto type-coerced)
murl http://localhost:3000/tools/weather -d city=Paris -d metric=true
# JSON data
murl http://localhost:3000/tools/config -d '{"settings": {"theme": "dark"}}'
# Custom headers
murl http://localhost:3000/tools -H "Authorization: Bearer token123"
# Verbose mode (pretty-prints output, shows request debug info)
murl http://localhost:3000/tools -v
# Pipe NDJSON to jq
murl http://localhost:3000/tools | jq -r '.name'| Flag | Description |
|---|---|
-d, --data |
Add key=value or JSON data (repeatable) |
-H, --header |
Add HTTP header (repeatable) |
-v, --verbose |
Pretty-print output, show request debug info |
--login |
Force OAuth re-authentication |
--no-auth |
Skip all authentication |
--version |
Show version info |
--upgrade |
Upgrade to latest version |
murl supports OAuth 2.0 with Dynamic Client Registration (RFC 7591) and PKCE. Tokens are cached automatically.
# First call triggers browser-based OAuth flow
murl https://example.com/mcp/tools
# Skip auth for public servers
murl https://example.com/mcp/tools --no-auth
# Force re-authentication
murl https://example.com/mcp/tools --login- Output & Exit Codes — NDJSON format, structured errors, exit codes
- MCP Server Setup — mcp-proxy, Streamable HTTP, local servers
- Contributing — development setup, testing, releasing
- Python 3.10+
MIT
