top | item 47095935

Show HN: Murl – Curl for MCP Servers

5 points| turlockmike | 10 days ago |github.com

I built murl because interacting with MCP (Model Context Protocol) servers from the command line was way more painful than it needed to be. MCP uses JSON-RPC 2.0 over HTTP, so every request means hand-crafting payloads with method names, params objects, and id fields. I wanted something that felt like curl.

Given an MCP server at https://mcp.deepwiki.com/mcp, murl lets you append virtual paths like /tools or /tools/read_wiki_structure that map to MCP methods. These aren't real HTTP endpoints — murl translates them into the right JSON-RPC calls behind the scenes:

  # List all tools on a server (NDJSON — 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'
The -d flags work like curl — key=value pairs get auto-coerced into typed JSON arguments. You can also pass raw JSON directly.

A few things beyond convenience:

MCP from plain Bash. Any agent with shell access can call MCP tools — no SDK, no client library, no MCP session management. Vercel recently wrote about replacing 80% of their agent's tools with bash and getting better results (https://vercel.com/blog/we-removed-80-percent-of-our-agents-...). murl makes MCP servers accessible in that same pattern.

OAuth built in. MCP servers behind OAuth (like Glean, or anything using RFC 7591 dynamic client registration) just work. First call opens the browser, tokens get cached and auto-refresh. --no-auth for public servers.

LLM-friendly by default. Compact NDJSON to stdout, structured JSON errors to stderr, semantic exit codes. -v for human-readable output.

Handles transport quirks. Streamable HTTP, session-based SSE (mcp-proxy), regular JSON responses — murl detects and handles them all.

You can try it right now against public servers:

  brew install turlockmike/murl/murl
  murl https://mcp.deepwiki.com/mcp/tools | jq -r '.name'
https://github.com/turlockmike/murl

2 comments

order

FluxAndFlux|10 days ago

“Curl for MCP” is a great mental model. Reducing JSON-RPC ceremony and making tool invocation composable with jq, pipes, and exit codes feels like the right abstraction layer.

zozbot234|10 days ago

This is great, but it needs a nice SKILL.md to teach AI agents how to use it.