
Emcee
Generate an MCP server for any OpenAPI documented endpoint.
README
emcee
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.
Quickstart
If you're on macOS and have Homebrew installed, you can get up-and-running quickly.
# Install emcee
brew install loopwork-ai/tap/emcee
Make sure you have Claude Desktop installed.
To configure Claude Desktop for use with emcee:
- Open Claude Desktop Settings (<kbd>⌘</kbd><kbd>,</kbd>)
- 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 <kbd>🔨57</kbd> 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.
<img src="https://github.com/user-attachments/assets/394ac476-17c2-4a29-aaff-9537d42b289b" alt="Allow tool from weather MCP dialog" width="460">
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
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 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 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://get.emcee.sh | psub)
# bash, zsh
sh <(curl -fsSL https://get.emcee.sh)
Homebrew
Install emcee using Homebrew from Loopwork's tap.
brew install loopwork-ai/tap/emcee
Docker
Prebuilt Docker images with emcee are available.
docker run -it ghcr.io/loopwork-ai/emcee
Build From Source
Requires go 1.24 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
.
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:
Authentication Type | Example Usage | Resulting Header |
---|---|---|
Bearer Token | --bearer-auth="abc123" |
Authorization: Bearer abc123 |
Basic Auth | --basic-auth="user:pass" |
Authorization: Basic dXNlcjpwYXNz |
Raw Value | --raw-auth="Custom xyz789" |
Authorization: Custom xyz789 |
These authentication values can be provided directly or as 1Password secret references.
When using 1Password references:
- Use the format
op://vault/item/field
(e.g.--bearer-auth="op://Shared/X/credential"
) - Ensure the 1Password CLI (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"
]
}
}
}
<img src="https://github.com/user-attachments/assets/d639fd7c-f3bf-477c-9eb7-229285b36f7d" alt="1Password Access Requested" width="512">
[!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 or yq
- Modifying descriptions or parameters with OpenAPI Overlays
- Combining multiple specifications with Redocly
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
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
<details open>
<summary>Request</summary>
{"jsonrpc": "2.0", "method": "tools/list", "params": {}, "id": 1}
</details>
<details open>
<summary>Response</summary>
{
"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
}
</details>
Call Tool
<details open>
<summary>Request</summary>
{"jsonrpc": "2.0", "method": "tools/call", "params": { "name": "taf", "arguments": { "stationId": "KPDX" }}, "id": 1}
</details>
<details open>
<summary>Response</summary>
{
"jsonrpc":"2.0",
"content": [
{
"type": "text",
"text": /* Weather forecast in GeoJSON format */,
"annotations": {
"audience": ["assistant"]
}
}
]
"id": 1
}
</details>
Debugging
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
License
emcee is licensed under the Apache License, Version 2.0.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.