# mcpify **Turn any REST API into an MCP server in one command.** Point `mcpify` at an OpenAPI spec and every endpoint becomes a tool your AI agent (Claude, Cursor, Windsurf, …) can call — no glue code, no per-endpoint wrappers. ```bash mcpify https://api.example.com/openapi.json ``` That's it. Every operation in the spec is now a live MCP tool. --- ## Why [MCP](https://modelcontextprotocol.io) is how AI agents call real tools. But wiring an existing API into MCP means hand-writing a tool wrapper for every endpoint — tedious and stale the moment the API changes. Almost every API already publishes an **OpenAPI spec**. `mcpify` reads that spec and generates the whole MCP server at runtime, so: - **Zero per-endpoint code** — N endpoints → N tools, automatically. - **Always in sync** — regenerate from the spec; no wrappers to maintain. - **Auth-aware** — pass an API key / bearer token once, applied to every call. ## Install ```bash pipx install mcpify-cli # or: uvx mcpify-cli ... ``` ## Use Preview the tools a spec produces (no server): ```bash mcpify --list examples/petstore-mini.yaml ``` Run it as an MCP server (stdio): ```bash mcpify https://petstore3.swagger.io/api/v3/openapi.json mcpify ./openapi.yaml --base-url https://staging.internal.api mcpify ./openapi.yaml --auth "Authorization: Bearer $TOKEN" # or set MCPIFY_AUTH ``` ### Plug it into Claude Add to your MCP client config (Claude Desktop / Claude Code `mcp.json`): ```json { "mcpServers": { "petstore": { "command": "mcpify", "args": ["https://petstore3.swagger.io/api/v3/openapi.json"] } } } ``` Restart the client and ask: *"list the available pets"* — Claude calls the API directly. ## How it works 1. Load the OpenAPI 3.x document (URL or file, JSON or YAML). 2. Walk every path/method into an `Operation` with a generated JSON input schema. 3. Serve them over MCP; each tool call is mapped to a live HTTP request (path, query, header params and JSON bodies all handled) and the response is returned to the agent. ## Supported - OpenAPI 3.x, JSON or YAML, from a URL or local file - `GET` / `POST` / `PUT` / `PATCH` / `DELETE` - Path, query, and header parameters; JSON request bodies - A single global auth header (API key or bearer token) ## Roadmap - Per-operation filtering (`--only`, `--tag`) to expose a subset of a large API - `$ref` resolution for fully-expanded body schemas - Swagger 2.0 specs - SSE / HTTP transport in addition to stdio PRs welcome. ## License MIT