Skip to content

Migrate off Stainless to an MCP server you own

Stainless was acquired by Anthropic (~May 2026) and its hosted MCP generator is winding down. If you have an MCP server generated/hosted by Stainless, this guide moves you to an mcpmake server you fully own: editable code you can run anywhere, kept in sync with your spec by CI, with self-hosting and your existing inputs preserved.

What you keep and gain

Stainless (hosted generator) mcpmake
Generated code Managed for you Yours — exported, editable, committed to your repo
Hosting Their platform Self-host (Docker), your VPS, or mcpmake Cloud
Input OpenAPI spec OpenAPI + HAR / Postman / live website / plain-English describe
Spec sync Auto-regenerate on spec change mcpmake ci init — same workflow, in your CI
Lock-in Platform-managed None — plain TypeScript (or Python) you control

Migrate in five steps

1. Find your source of truth

Use the same OpenAPI spec Stainless generated from (often openapi.yaml / openapi.json in your API repo, or your provider's published spec). No spec? See No spec? below.

2. Generate a server you own

# HTTP server (for remote/hosted use); drop -t http for stdio/local
mcpmake from openapi ./openapi.yaml -o ./my-mcp-server -t http

The output is a complete, self-contained project: tools, auth wiring, schemas, tests, a Dockerfile, and a README. Commit it — it's yours to edit.

Large API (50+ operations)? Add --dynamic-discovery so the agent loads tool schemas on demand instead of paying upfront token cost for every tool.

3. Review and own it

Open my-mcp-server/. Each tool is a readable file under src/tools/; auth is in src/auth.ts; the HTTP/transport entry is src/index.ts. Edit anything — there's no hidden runtime.

cd my-mcp-server && npm install && npm run build && npm test

4. Keep it in sync with the spec (the Stainless habit)

mcpmake ci init ./openapi.yaml -o ./my-mcp-server

This writes .github/workflows/mcpmake.yaml, which on every spec change regenerates the server, runs mcpmake verify, and fails CI if the committed server has drifted from the spec — the auto-regenerate-on-spec-change guarantee, now in your own repo.

5. Run it

  • Self-host: the generated Dockerfile builds a hardened, non-root, read-only-filesystem container. Set the bearer token your client sends as MCP_AUTH_TOKEN and run it behind your reverse proxy.
  • mcpmake Cloud: mcpmake deploy ./openapi.yaml (or use the dashboard) to build + host it with auth, metering, and quotas.
  • Connect: point Claude/Cursor at https://<host>/mcp with Authorization: Bearer <token>.

No spec?

mcpmake doesn't require an OpenAPI spec — most APIs don't have one:

mcpmake from har ./session.har -o ./my-mcp-server        # a browser/devtools recording
mcpmake from postman ./collection.json -o ./my-mcp-server # a Postman collection
mcpmake from website https://app.example.com -o ./my-mcp-server   # a live site
mcpmake from describe "manage GitHub issues" -o ./my-mcp-server   # plain English

FAQ

Do I have to change my clients? No — it still speaks MCP over the same /mcp endpoint. Update the URL/token to point at your new server.

Is there a one-click importer? Yes:

mcpmake from stainless ./stainless.yml -o ./my-mcp-server

reads your Stainless config directly (the spec it references plus its knobs, translated into x-mcp-* overlays), generates the owned project, and prints a migration report. Pass --spec <file> if the config doesn't reference the OpenAPI document. Manual alternative: point mcpmake at the same spec, generate, commit, wire up ci init.

TypeScript or Python? Both — add --format python for a Python server.

Questions: support@mcpmake.dev