Skip to content

mcpmake CLI reference

Complete reference for every mcpmake command, generated from and verified against the source. For task-oriented guides see the README and Website MCP servers.

mcpmake <command> [subcommand] [arguments] [options]

Conventions

  • Required arguments are marked; everything else is optional.
  • Defaults are shown as (default: …). A flag with no default is simply unset.
  • Boolean negation: a boolean flag whose default is true is disabled with its --no- form (citty convention). The default-true flags are: --no-dedup (from har), --no-heal / --no-headless (rescan).
  • LLM API key — any AI-assisted flag needs one: ANTHROPIC_API_KEY (default), or OPENAI_API_KEY with --provider openai. Applies to --improve-names (openapi/har/url/postman/website), --goal (website), from describe, and rescan selector healing. The AI-assisted commands also accept shared --api-key <key>, --provider <anthropic|openai>, and --model <model> (default: auto-resolved per provider) options.
  • Generated servers read their own env vars at runtime (always BASE_URL, plus auth-derived BEARER_TOKEN / BASIC_USERNAME+BASIC_PASSWORD / API_KEY). These are written into the project's .env.example, not passed on the CLI.
  • --config <path>: from openapi, from postman, from website, from describe, and deploy honor a .mcpmake.yaml file (auto-discovered from the working directory, or set explicitly with --config <path> / the MCPMAKE_CONFIG env var). Precedence: explicit CLI flag → config file → built-in default. See the README → Project config.

Command index

Command Purpose
from openapi Generate from an OpenAPI/Swagger spec or provider shortcut
from har Generate from a HAR (browser DevTools) recording
from url Generate by recording a live browser session
from postman Generate from a Postman Collection (v2.1)
from website Generate a Playwright server from a site's DOM
from describe Generate from a natural-language description (AI)
from stainless Migrate from a Stainless config (stainless.yml)
merge Merge two OpenAPI specs into one
diff Compare tools generated from two specs
lint Lint an OpenAPI spec for MCP issues
verify Check a generated project still matches its spec
update Re-generate a project from a changed spec
rescan Re-crawl a website project, heal selectors, regenerate
bundle Bundle a generated project into an .mcpb file
publish Generate registry manifests / publish to the MCP Registry
deploy Deploy a spec to the hosting backend
ci init Generate a GitHub Actions drift-check workflow
login / logout / whoami Authenticate against the hosting backend (browser device flow)
pricing Print current pricing (served by the backend)

mcpmake from openapi

Generate an MCP server from an OpenAPI specification.

mcpmake from openapi <spec> -o <dir> [options]
  • <spec> (required) — path/URL to an OpenAPI spec, or a built-in provider shortcut (stripe, github, slack; run with --help for the current list).
Option Default Description
-o, --output <dir> (required) Output directory
-n, --name <name> spec title Server name
-b, --base-url <url> first server in spec Base URL override
-t, --transport <mode> stdio stdio or http
-i, --include <patterns> Include operations (comma-separated tags/paths/operationIds)
-e, --exclude <patterns> Exclude operations (comma-separated)
-c, --client <mode> Client compatibility mode: cursor, claude, openai
--format <lang> typescript typescript or python
--target <platform> node node or cloudflare (Workers)
--overlay <file> OpenAPI Overlay file to patch the spec before processing
--no-resources off Skip generating MCP resources
--no-prompts off Skip generating MCP prompts
--dynamic-discovery off Emit 4 meta-tools instead of N tools (large APIs)
--static-tools <n> With --dynamic-discovery: also register the first N tools statically
--improve-names off AI-generated tool names (needs an LLM API key)
--resource-names <names> Override generated resource names (comma-separated)
--mcp-ui off Emit MCP Apps (iframe HTML UI) support
--a2a off Also emit an A2A wrapper
--mcpb off Also generate an .mcpb bundle for one-click Claude Desktop install
-w, --watch off Watch the spec file and regenerate on change
-f, --force off Overwrite the output directory
--dry-run off Preview files without writing

Notes: --target cloudflare forces --transport http and is incompatible with --format python. --mcpb is ignored (with a warning) for python/cloudflare targets. --watch is a no-op when a provider shortcut is used.

mcpmake from har

Generate an MCP server from a HAR (HTTP Archive) file.

mcpmake from har <file> -o <dir> [options]
  • <file> (required) — path to a HAR file exported from browser DevTools.
Option Default Description
-o, --output <dir> (required) Output directory
-n, --name <name> Server name
-d, --domain <host> Only include requests to this domain (comma-separated)
-t, --transport <mode> stdio stdio or http
--target <platform> node node or cloudflare (Workers)
-i, --include <patterns> Include operations (comma-separated)
-e, --exclude <patterns> Exclude operations (comma-separated)
--include-errors off Include requests that returned HTTP errors
--no-dedup dedup on Disable deduplication of pagination/retry requests
--interactive off Review and confirm detected tools before generation
--improve-names off AI-generated tool names (needs an LLM API key)
--resource-names <names> Override generated resource names (comma-separated)
--format <lang> typescript typescript or python
-f, --force off Overwrite the output directory
--dry-run off Preview files without writing

Notes: deduplication is on by default; pass --no-dedup to keep every request. --target cloudflare is incompatible with --format python.

mcpmake from url

Generate an MCP server by recording a live browser session (Playwright). Opens a browser; you interact, then close it (or use --headless). Requires npx playwright install chromium on first use. See Website MCP servers for the full workflow.

mcpmake from url <url> -o <dir> [options]
  • <url> (required) — URL to open in the browser.
Option Default Description
-o, --output <dir> (required) Output directory
-n, --name <name> hostname Server name
--timeout <seconds> 300 Idle timeout before auto-closing
--headless off Headless / CI capture (no window to drive)
--navigate <urls> Same-origin URLs/paths to auto-visit in --headless mode (comma-separated)
-t, --transport <mode> stdio stdio or http
--target <platform> node node or cloudflare (Workers)
-i, --include <patterns> Include operations (comma-separated)
-e, --exclude <patterns> Exclude operations (comma-separated)
--improve-names off AI-generated tool names (needs an LLM API key)
--resource-names <names> Override generated resource names (comma-separated)
--interactive off Review and confirm detected tools before generation
-f, --force off Overwrite the output directory
--dry-run off Preview files without writing

mcpmake from postman

Generate an MCP server from a Postman Collection.

mcpmake from postman <collection> -o <dir> [options]
  • <collection> (required) — path to a Postman Collection JSON file (v2.1).
Option Default Description
-o, --output <dir> (required) Output directory
-n, --name <name> collection name Server name
-t, --transport <mode> stdio stdio or http
--target <platform> node node or cloudflare (Workers)
-i, --include <patterns> Include operations (comma-separated)
-e, --exclude <patterns> Exclude operations (comma-separated)
--improve-names off AI-generated tool names (needs an LLM API key)
--resource-names <names> Override generated resource names (comma-separated)
-f, --force off Overwrite the output directory
--dry-run off Preview files without writing

mcpmake from website

Generate a Playwright-based MCP server by analyzing a website's DOM (forms, buttons, links → site-specific tools). Requires npx playwright install chromium. See Website MCP servers.

mcpmake from website <url> -o <dir> [options]
  • <url> (required) — URL of the website to analyze.
Option Default Description
-o, --output <dir> (required) Output directory
-n, --name <name> hostname Server name
--depth <n> 2 Crawl depth
--max-pages <n> 20 Maximum pages to crawl
--timeout <seconds> 300 Idle timeout during analysis
--max-sessions <n> 10 Max concurrent browser sessions in the generated server
-t, --transport <mode> stdio stdio or http
--headless off Run the analysis browser headless
--hybrid off HTTP fetch for API-backed forms, Playwright for HTML-only forms
--goal <text> LLM-driven navigation toward a goal instead of BFS (needs an LLM API key)
--improve-names off LLM-inferred semantic names (needs an LLM API key)
-f, --force off Overwrite the output directory
--dry-run off Preview files without writing

Note: the website pipeline is --target node only (a Worker can't run a browser). Keep the generated project fresh with rescan.

mcpmake from describe

Generate an MCP server from a natural-language description (an LLM synthesizes an OpenAPI spec, then runs the normal pipeline). Requires an LLM API key (ANTHROPIC_API_KEY, or OPENAI_API_KEY with --provider openai).

mcpmake from describe "<description>" -o <dir> [options]
  • <description> (required) — e.g. "manage GitHub issues and pull requests".
Option Default Description
-o, --output <dir> (required) Output directory
-n, --name <name> Server name
-b, --base-url <url> Base URL for the API (falls back to https://api.example.com if unset)
-m, --model <model> auto-resolved per provider LLM model to use
--save-spec <path> Save the generated OpenAPI spec to this path
-t, --transport <mode> stdio stdio or http
--target <platform> node node or cloudflare (Workers)
-i, --include <patterns> Include operations (comma-separated)
-e, --exclude <patterns> Exclude operations (comma-separated)
-f, --force off Overwrite the output directory
--dry-run off Preview files without writing

mcpmake from stainless

Migrate from Stainless: reads a stainless.yml config, translates its knobs into x-mcp-* overlays over the underlying OpenAPI spec, runs the normal generation pipeline, and prints a migration report. See Migrate from Stainless.

mcpmake from stainless <stainless.yml> -o <dir> [options]
  • <stainless.yml> (required) — the Stainless config; pass --spec <file> if the config doesn't reference the OpenAPI document. Shares the standard generation options (-o, -n, -t, include/exclude, --force, --dry-run — run with --help for the full list).

mcpmake merge

Merge two OpenAPI specs into one.

mcpmake merge <spec1> <spec2> [-o <file>]
  • <spec1> (required) — base spec (its info/servers are kept).
  • <spec2> (required) — spec to merge in.
Option Default Description
-o, --output <file> stdout Output file path

mcpmake diff

Compare the MCP tools generated from two OpenAPI specs (added/removed/changed).

mcpmake diff <oldSpec> <newSpec> [--format <fmt>]
  • <oldSpec>, <newSpec> (required) — paths/URLs to the old and new specs.
Option Default Description
--format <fmt> text text or json

mcpmake lint

Lint an OpenAPI spec for MCP-compatibility issues (tool-name length, descriptions, parameter counts, duplicates, etc.). Exits non-zero on error-level findings.

mcpmake lint <spec> [options]
  • <spec> (required) — path/URL to an OpenAPI spec.
Option Default Description
--format <fmt> text text or json
--level <level> info Minimum level to show: info, warn, or error

mcpmake verify

Check that a generated project still matches its source spec (CI-friendly).

mcpmake verify <spec> -p <dir>
  • <spec> (required) — path to the OpenAPI spec.
Option Default Description
-p, --project <dir> (required) Generated project directory

mcpmake update

Re-generate a project from an updated spec, showing what changed.

mcpmake update <spec> -p <dir>
  • <spec> (required) — path to the updated OpenAPI spec.
Option Default Description
-p, --project <dir> (required) Existing generated project

mcpmake rescan

The website counterpart to update: re-crawl a from website project's target, diff against the embedded snapshot, heal broken selectors, and optionally regenerate. See Website MCP servers.

mcpmake rescan <project> [options]
  • <project> (required) — a generated from website project (must contain src/site-descriptor.json; reads mcpmake.site.json for regeneration settings).
Option Default Description
--url <url> from snapshot Override the base URL to rescan
--depth <n> from snapshot Crawl depth
--max-pages <n> snapshot pages + headroom Maximum pages to crawl
--no-heal heal on Disable LLM selector healing (healing needs ANTHROPIC_API_KEY)
--no-headless headless on Run the crawl/heal browser with a visible window
--write off Regenerate the project in place from the new snapshot
--format <fmt> text text or json

mcpmake bundle

Bundle a generated MCP server project into an .mcpb file (one-click Claude Desktop install). Runs npm install --omit=dev + npm run build first unless --skip-build is set.

mcpmake bundle <directory> [options]
  • <directory> (required) — a generated MCP server project (must have a package.json).
Option Default Description
-o, --output <file> Output path for the .mcpb file
--skip-build off Skip npm install / build (use if already built)

mcpmake publish

Generate registry manifests, or publish to the official MCP Registry.

mcpmake publish <directory> [options]
  • <directory> (required) — a generated MCP server project.
Option Default Description
-r, --registry <name> smithery + glama Target registry: official, smithery, or glama
-n, --name <name> derived from git remote official: registry name (e.g. io.github.you/my-server)
--remote-url <url> official: hosted endpoint to advertise as a remote (streamable-http)
--push off official: run mcp-publisher publish after generating server.json
-y, --yes off Skip confirmation prompts
--preview off Preview the manifests without writing

Notes: with no --registry, both smithery.yaml and glama.json are written. The official flow writes a schema-conformant server.json, sets mcpName in package.json, and prints the exact npm publish + mcp-publisher login/publish steps. --push requires the external mcp-publisher CLI on PATH, a prior mcp-publisher login github, and an npm publish first.

mcpmake deploy

Deploy a spec to the hosting backend and get a running MCP server URL.

mcpmake deploy <spec> [options]
  • <spec> (required) — OpenAPI spec or HAR file (≤ 5 MB; .yaml/.yml/.json/.har).
Option Default Description
-n, --name <name> derived from spec Server name
-s, --server <url> logged-in backend (else http://localhost:3001) Cloud backend URL
-t, --token <token> $MCPMAKE_DEPLOY_TOKEN Per-user deploy token (mfd_…) — usually unnecessary after mcpmake login
--insecure off Allow plain-HTTP backends
--show-token off Print the server bearer token after deploy

The deploy token is the per-user mfd_… token minted by mcpmake login (not an admin token); it falls back to the MCPMAKE_DEPLOY_TOKEN environment variable when --token is omitted, and is sent as an Authorization: Bearer header.

mcpmake ci init

Generate a GitHub Actions workflow (.github/workflows/mcpmake.yaml) that regenerates and verifies the server when the spec changes, failing CI on drift.

mcpmake ci init <spec> [options]
  • <spec> (required) — path to the API spec, relative to the repo root.
Option Default Description
-o, --output <dir> ./mcp-server Generated server directory
-s, --source <adapter> openapi Source adapter: openapi, har, or postman
-n, --name <name> Server name passed to generation
-t, --transport <mode> stdio stdio or http
--mcpmake-version <ver> latest mcpmake version/tag to pin in CI (e.g. latest, 0.1.0)
--pr off Also open an idempotent PR on drift (create-pull-request step)
--pr-branch <name> Branch name for the drift PR
-f, --force off Overwrite an existing workflow file

mcpmake login / logout / whoami

Authenticate the CLI against a hosting backend via a browser device flow. login opens the browser, stores the per-user deploy token (mfd_…) locally; logout clears it; whoami prints the logged-in identity + backend URL.

mcpmake pricing

Print the current Family A price card (FAMILY_A_PRICING in @mcpmake/core; hosted backends re-serve the same data at GET /api/pricing so an outdated installed binary never prints stale prices).