Emcee
About
An MCP server for any web application with an OpenAPI specification, connecting AI models to external tools and data services.
Details
- Author
- loopwork
- Categories
- Developer Tools, API
Jump to
Setup
Install Emcee in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/loopwork/emcee
Follow the installation instructions in the repository README, then restart your MCP client.
emceeis a tool that provides aModel Context Protocol (MCP)server for any web application with anOpenAPIspecification. You can use emcee to connectClaude Desktopandother appsto external tools and data services, similar toChatGPT plugins.
If you're on macOS and haveHomebrewinstalled, you can get up-and-running quickly.
# Install emcee brew install mattt/tap/emcee
Make sure you haveClaude Desktopinstalled.
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🔨57in 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.
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 ofavailable serversfor 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 theinstaller scriptto download and install apre-built releaseof 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)
PrebuiltDocker imageswith emcee are available.
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 yourPATH, like/usr/local/bin.
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 implementsStandard Input/Output (stdio)transport for MCP, which usesJSON-RPC 2.0as 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.
For APIs that require authentication, emcee supports several authentication methods:
These authentication values can be provided directly or as1Password secret references.
{ "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.
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 withjqoryq
- Modifying descriptions or parameters withOpenAPI Overlays
- Combining multiple specifications withRedocly
For example, you can usejqto include only thepointtool fromweather.gov.
cat path/to/openapi.json | \ jq 'if .paths then .paths |= with_entries(select(.key == "/points/{point}")) else . end' | \ emcee
emcee supports the HTTPQUERYmethod defined byRFC 10008. OpenAPI 3.2 specifications can use the nativequeryPath Item operation; older OpenAPI 3.x specifications can usex-queryas 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
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.
{ "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 }
{ "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 }
npx @modelcontextprotocol/inspector emcee https://api.weather.gov/openapi.json # 🔍 MCP Inspector is up and running at http://localhost:5173 🚀
This project is available under the MIT license. See the LICENSE file for more info.
This is a web browser that enables your coding agent, such as Claude Code, to visit websites on your behalf and assist you in identifying bugs or creating UI test cases.
A server that dynamically creates MCP endpoints from any OpenAPI specification URL.
Turn any OpenAPI 3.0 spec into an MCP server with zero code — deploy to Cloudflare Workers, Node.js, Docker, or run locally via npx, with a built-in OAuth 2.1 server for MCP clients that require custom connector authentication.
A zero-configuration tool to automatically expose FastAPI endpoints as MCP tools.
An MCP server that enables Large Language Models to make HTTP requests and interact with web APIs. It supports automatic tool generation from OpenAPI/Swagger specifications.
CLI tool that generates MCP servers from OpenAPI/Postman specs — pip install mcpgen-cli
A secure MCP-to-OpenAPI proxy server that converts MCP tools into OpenAPI compatible HTTP servers, with support for multiple server types and automatic API documentation.
Turn any OpenAPI/Swagger spec into Claude tools. Zero config, zero code.
Connect to any OpenAPI-based API with built-in OAuth2 authentication management.
Converts OpenAPI/Swagger specifications to Model Context Protocol (MCP) format, providing a modern Web UI and a backend service.
Converts OpenAPI specifications into MCP tools, enabling AI clients to interact with external APIs seamlessly.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.





