apimcp

Convert an OpenAPI document into an MCP server.
What it does
apimcp adapts an OpenAPI-described HTTP API into an MCP server. MCP clients
can discover the API operations as tools and call the existing service without
requiring a second hand-written MCP implementation.
Status
This is an MVP. It supports OpenAPI JSON/YAML, common HTTP methods, path and
query parameters, JSON request bodies, Bearer tokens, stdio transport, and
allow/deny tool filters.
Run
go run ./cmd/apimcp --spec openapi.yaml --base-url https://api.example.com
The project uses the official Go MCP SDK and adapts OpenAPI operations into MCP
tools. It does not expose every operation automatically when --allow is set:
go run ./cmd/apimcp --spec openapi.yaml --allow getUser,listUsers --stdio
The --stdio flag is accepted for compatibility with MCP client
configurations; stdio is the default transport.
Library usage
spec, err := apimcp.LoadFile("openapi.yaml")
if err != nil {
return err
}
return apimcp.RunStdio(ctx, spec, apimcp.Options{
BaseURL: "https://api.example.com",
BearerToken: token,
})
Development
go test ./...
go test -race ./...
go vet ./...
Roadmap
- OpenAPI references and reusable schemas
- API key and OAuth authentication
- HTTP transport
- file upload/download handling
- generated tool documentation
Contributing
See CONTRIBUTING.md for the development workflow and commit
conventions.