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), orOPENAI_API_KEYwith--provider openai. Applies to--improve-names(openapi/har/url/postman/website),--goal(website),from describe, andrescanselector 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-derivedBEARER_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, anddeployhonor a.mcpmake.yamlfile (auto-discovered from the working directory, or set explicitly with--config <path>/ theMCPMAKE_CONFIGenv 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--helpfor 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--helpfor the full list).
mcpmake merge
Merge two OpenAPI specs into one.
mcpmake merge <spec1> <spec2> [-o <file>]
<spec1>(required) — base spec (itsinfo/serversare 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 generatedfrom websiteproject (must containsrc/site-descriptor.json; readsmcpmake.site.jsonfor 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 apackage.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).