Emcee
mattt/emcee · 321 stars · Go · MIT
MCP server MCP generator for OpenAPIs 🫳🎤💥
Install
docker run -it ghcr.io/mattt/emceeThese repos do not share one command. When an entry shows a command, it was copied as published. Check the repo's README before you run it.
Files
emcee
emcee is a tool that provides a [Model Context Protocol (MCP)][mcp] server for any web application with an [OpenAPI][openapi] specification. You can use emcee to connect [Claude Desktop][claude] and [other apps][mcp-clients] to external tools and data services, similar to [ChatGPT plugins][chatgpt-plugins].
Quickstart
If you're on macOS and have [Homebrew][homebrew] installed, you can get up-and-running quickly.
# Install emcee
brew install mattt/tap/emcee
Make sure you have Claude Desktop installed.
To configure Claude Desktop for use with emcee:
- Open Claude Desktop Settings (⌘,)
- Select the "Developer" section in the sidebar
- Click "Edit Config" to open the configuration file
The configuration file should be located in the Application Support directory. You can also open it directly in VSCode using:
code ~/Library/Application\ Support/Claude/claude_desktop_config.json
Add the following configuration to add the weather.gov MCP server:
{
"mcpServers": {
"weather": {
"command": "emcee",
"args": ["https://api.weather.gov/openapi.json"]
}
}
}
After saving the file, quit and re-open Claude. You should now see 🔨57 in the bottom right corner of your chat box. Click on that to see a list of all the tools made available to Claude through MCP.
Start a new chat and ask it about the weather where you are.
What's the weather in Portland, OR?
Claude will consult the tools made available to it through MCP and request to use one if deemed to be suitable for answering your question. You can review this request and either approve or deny it.
If you allow, Claude will communicate with the MCP and use the result to inform its response.
Why use emcee?
MCP provides a standardized way to connect AI models to tools and data sources. It's still early days, but there are already a variety of [available servers][mcp-servers] for connecting to browsers, developer tools, and other systems.
We think emcee is a convenient way to connect to services that don't have an existing MCP server implementation — _especially for services you're building yourself_. Got a web app with an OpenAPI spec? You might be surprised how far you can get without a dashboard or client library.
Installation
Installer Script
Use the [installer script][installer] to download and install a [pre-built release][releases] of emcee for your platform (Linux x86-64/i386/arm64 and macOS Intel/Apple Silicon).
# fish
sh (curl -fsSL https://get.emcee.sh | psub)
# bash, zsh
sh <(curl -fsSL https://get.emcee.sh)
Homebrew
Install emcee using [Homebrew][homebrew].
brew install mattt/tap/emcee
Docker
Prebuilt [Docker images][docker-images] with emcee are available.
docker run -it ghcr.io/mattt/emcee
Build From Source
Requires [go 1.24][golang] or later.
git clone https://github.com/mattt/emcee.git
cd emcee
go build -o emcee cmd/emcee/main.go
Once built, you can run in place (./emcee) or move it somewhere in your PATH, like /usr/local/bin.
Usage
Usage:
emcee [spec-path-or-url] [flags]
Flags:
--basic-auth string Basic auth value (either user:pass or base64 encoded, will be prefixed with 'Basic ')
--bearer-auth string Bearer token value (will be prefixed with 'Bearer ')
-h, --help help for emcee
--raw-auth string Raw value for Authorization header
--retries int Maximum number of retries for failed requests (default 3)
-r, --rps int Maximum requests per second (0 for no limit)
-s, --silent Disable all logging
--timeout duration HTTP request timeout (default 1m0s)
-v, --verbose Enable debug level logging to stderr
--version version for emcee
emcee implements Standard Input/Output (stdio) transport for MCP, which uses JSON-RPC 2.0 as its wire format.
When you run emcee from the command-line, it starts a program that listens on stdin, outputs to stdout, and logs to stderr.
Authentication
For APIs that require authentication, emcee supports several authentication methods:
These authentication values can be provided directly or as [1Password secret references][secret-reference-syntax].
When using 1Password references:
- Use the format
op://vault/item/field
(e.g. --bearer-auth="op://Shared/X/credential")
- Ensure the 1Password CLI ([op][op]) is installed and available in your
PATH - Sign in to 1Password before running emcee or launching Claude Desktop
# Install op
brew install 1password-cli
# Sign in 1Password CLI
op signin
{
"mcpServers": {
"twitter": {
"command": "emcee",
"args": [
"--bearer-auth=op://shared/x/credential",
"https://api.twitter.com/2/openapi.json"
]
}
}
}
[!IMPORTANT] emcee doesn't use auth credentials when downloading OpenAPI specifications from URLs provided as command arguments. If your OpenAPI specification requires authentication to access, first download it to a local file using your preferred HTTP client, then provide the local file path to emcee.
Transforming OpenAPI Specifications
You can transform OpenAPI specifications before passing them to emcee using standard Unix utilities. This is useful for:
- Selecting specific endpoints to expose as tools
with [jq][jq] or [yq][yq]
- Modifying descriptions or parameters
with [OpenAPI Overlays][openapi-overlays]
- Combining multiple specifications
with [Redocly][redocly-cli]
For example, you can use jq to include only the point tool from weather.gov.
cat path/to/openapi.json | \
jq 'if .paths then .paths |= with_entries(select(.key == "/points/{point}")) else . end' | \
emcee
HTTP QUERY
emcee supports the HTTP QUERY method defined by [RFC 10008][rfc-query]. OpenAPI 3.2 specifications can use the native query Path Item operation; older OpenAPI 3.x specifications can use x-query as a compatibility extension. The value is parsed as a standard OpenAPI Operation Object, registered as an MCP tool, and annotated as read-only and idempotent.
paths:
/search:
query:
operationId: search
summary: Search records
requestBody:
content:
application/json:
schema:
type: object
properties:
q:
type: string
responses:
"200":
description: OK
JSON-RPC
You can interact directly with the provided MCP server by sending JSON-RPC requests.
[!NOTE] emcee provides only MCP tool capabilities. Other features like resources, prompts, and sampling aren't yet supported.
#### List Tools
{ "jsonrpc": "2.0", "method": "tools/list", "params": {}, "id": 1 }
{
"jsonrpc": "2.0",
"result": {
"tools": [
// ...
{
"name": "tafs",
"description": "Returns Terminal Aerodrome Forecasts for the specified airport station.",
"inputSchema": {
"type": "object",
"properties": {
"stationId": {
"description": "Observation station ID",
"type": "string"
}
},
"required": ["stationId"]
}
}
// ...
]
},
"id": 1
}
#### Call Tool
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": { "name": "taf", "arguments": { "stationId": "KPDX" } },
"id": 1
}
{
"jsonrpc": "2.0",
"result": {
"content": [
{
"type": "text",
"text": "/* Weather forecast in GeoJSON format */"
}
]
},
"id": 1
}
Debugging
The [MCP Inspector][mcp-inspector] is a tool for testing and debugging MCP servers. If Claude and/or emcee aren't working as expected, the inspector can help you understand what's happening.
npx @modelcontextprotocol/inspector emcee https://api.weather.gov/openapi.jsonFacts
- Kind
- MCP server
- Repo
- mattt/emcee
- Group
- Uncategorized
- Stars
- 321
- License
- MIT
- Language
- Go
- Last push
- 2026-07-04
- Forks
- 27
- Homepage
- emcee.sh
- Topics
- agents, modelcontextprotocol, openapi
- 1Everythingmodelcontextprotocol/serversThis MCP server attempts to exercise all the features of the MCP protocol. It is not intended to be a useful server, but rather a test server for builders of MCP clients. It implements prompts, tools, resources, sampling, and more to showcase MCP capabilities.85.8k
- 2Fetchmodelcontextprotocol/serversA Model Context Protocol server that provides web content fetching capabilities. This server enables LLMs to retrieve and process content from web pages, converting HTML to markdown for easier consumption.85.8k
- 3Gitmodelcontextprotocol/serversA Model Context Protocol server for Git repository interaction and automation. This server provides tools to read, search, and manipulate Git repositories via Large Language Models.85.8k
- 4Memorymodelcontextprotocol/serversA basic implementation of persistent memory using a local knowledge graph. This lets Claude remember information about the user across chats.85.8k
- 5Sequential Thinkingmodelcontextprotocol/serversAn MCP server implementation that provides a tool for dynamic and reflective problem-solving through a structured thinking process.85.8k
- 6Timemodelcontextprotocol/serversA Model Context Protocol server that provides time and timezone conversion capabilities. This server enables LLMs to get current time information and perform timezone conversions using IANA timezone names, with automatic system timezone detection.85.8k