emcee is a tool that provides a Model Context Protocol (MCP) server for any web application with an OpenAPI specification. You can use emcee to connect Claude Desktop and other apps to external tools and data services, similar to ChatGPT plugins.
If you're on macOS 15 and have Homebrew installed, you can get up-and-running with a few commands:
# Install emcee
brew install loopwork-ai/tap/emcee
# Install claude and jq
brew install --cask claude
brew install jq # used to update Claude config in next step
# Add MCP server for weather.gov to Claude Desktop
CLAUDE_CONFIG="~/Library/Application Support/Claude/claude_desktop_config.json" && \
mkdir -p "$(dirname "$CLAUDE_CONFIG")" && \
touch "$CLAUDE_CONFIG" && \
cp "$CLAUDE_CONFIG" <(jq '. * {"mcpServers":{"weather.gov":{"command":"emcee","args":["https://api.weather.gov/openapi.json"]}}}' "$CLAUDE_CONFIG")
# Quit and Re-open Claude app
osascript -e 'tell application "Claude" to quit' && sleep 1 && open -a Claude
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.
Tip
Building agents? Want to deploy remote MCP servers?
Reach out to us at emcee@loopwork.com
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 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.
Use the installer script to download and install a pre-built release of emcee for your platform (Linux x86-64/i386/arm64 and macOS Intel/Apple Silicon).
# fish
sh (curl -fsSL https://raw.githubusercontent.com/loopwork-ai/emcee/refs/heads/main/tools/install.sh | psub)
# bash, zsh
sh <(curl -fsSL https://raw.githubusercontent.com/loopwork-ai/emcee/refs/heads/main/tools/install.sh)
Install emcee using Homebrew from Loopwork's tap.
brew install loopwork-ai/tap/emcee
Prebuilt Docker images with emcee are available.
docker run -it ghcr.io/loopwork-ai/emcee
Requires go 1.23 or later.
git clone https://github.com/loopwork-ai/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
.
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 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.
Usage:
emcee [spec-path-or-url] [flags]
Flags:
--auth string Authorization header value (e.g. 'Bearer token123' or 'Basic dXNlcjpwYXNz')
-h, --help help for emcee
--retries int Maximum number of retries for failed requests (default 3)
-r, --rps int Maximum requests per second (0 for no limit)
--timeout duration HTTP request timeout (default 1m0s)
-v, --verbose Enable verbose 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.
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.
Request
{"jsonrpc": "2.0", "method": "tools/list", "params": {}, "id": 1}
Response
{
"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
}
Request
{"jsonrpc": "2.0", "method": "tools/call", "params": { "name": "gridpoint_forecast", "arguments": { "stationId": "KPDX" }}, "id": 1}
Response
{
"jsonrpc":"2.0",
"content": [
{
"type": "text",
"text": /* Weather forecast in GeoJSON format */,
"annotations": {
"audience": ["assistant"]
}
}
]
"id": 1
}
The 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.json
# π MCP Inspector is up and running at http://localhost:5173 π
open http://localhost:5173
emcee is licensed under the Apache License, Version 2.0.