Metadata-Version: 2.4
Name: mcpify-cli
Version: 0.1.0
Summary: Turn any OpenAPI/REST API into an MCP server in one command.
Project-URL: Homepage, https://github.com/Amanbig/mcpify
Project-URL: Issues, https://github.com/Amanbig/mcpify/issues
Author: Amanpreet Singh
License: MIT
License-File: LICENSE
Keywords: ai-agents,claude,mcp,model-context-protocol,openapi,rest
Requires-Python: >=3.10
Requires-Dist: httpx>=0.27
Requires-Dist: mcp>=1.2.0
Requires-Dist: pyyaml>=6.0
Description-Content-Type: text/markdown

# 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
