That is the trick worth knowing: piping the spec through jq to keep one path means the assistant sees one tool instead of dozens, without a config format to learn. It is the fastest route to an MCP server for a service that does not have one — especially a service you are building yourself and already have a spec for.
A command-line tool that reads an OpenAPI specification and serves it as an MCP server, so any documented web API becomes tools an assistant can call.
- Tools generated from a spec's operations, with their input schemas, straight from a URL or a local file
- Authentication handled for you: --bearer-auth, --basic-auth and --raw-auth, each becoming the right Authorization header
- 1Password secret references in place of literal credentials, using op://vault/item/field with the op CLI signed in
- Rate and reliability controls — --rps to cap requests per second, --retries defaulting to 3, and --timeout defaulting to 1m0s
- Spec transformation through ordinary Unix tools: filter operations with jq before handing the spec over, so only the tools you want exist
- HTTP QUERY support per RFC 10008, including the x-query compatibility extension on older OpenAPI 3.x specs, registered as read-only and idempotent
- Stdio transport over JSON-RPC 2.0
The binary — brew install mattt/tap/emcee, the installer script, a Docker image, or built from source with go 1.24 or later. Then one line of client config: the emcee command plus the spec URL. Note that credentials are not used when downloading a spec from a URL, so a spec behind auth has to be fetched yourself and passed as a local file. Only tools are provided — no resources, prompts or sampling.
One command — brew install mattt/tap/emcee
