Skip to main content
Run your FrontMCP server locally with hot-reload and verify it with the FrontMCP Inspector (zero setup).

Prerequisites

  • Node.js:
    • Minimum: Version 22 (LTS Maintenance)
    • Recommended: Version 24 (Active LTS)
    • FrontMCP is developed and tested on Node.js 24
  • npm ≥ 10 (pnpm/yarn also supported)

Quick start

Option A — New project

Creates a folder and scaffolds everything for you.
The create command is interactive by default. Use --yes for non-interactive mode with defaults (Docker target, Redis via Docker Compose, GitHub Actions enabled).

Option B — Existing project

Install and initialize in your current repo:
init adds the required scripts and updates tsconfig.json automatically.

Package scripts

After create or init, your package.json will include:
  • frontmcp dev — run in watch mode with type-checks
  • frontmcp build — compile to ./dist (override with --out-dir)
  • frontmcp inspector — launches @modelcontextprotocol/inspector with zero setup
  • frontmcp doctor — verifies Node/npm versions and project configuration

Docker scripts (Docker target only)

If you created your project with the Docker target (--target node), you’ll also have:

init writes this for you, but if you prefer to manage it manually:
tsconfig.json

Minimal app

You can import from @frontmcp/sdk directly; no extra install needed.
src/main.ts
src/hello.app.ts
src/tools/greet.tool.ts

Run the dev server

Your server will start (default http://localhost:3000). The console will print the MCP endpoint.

Port conflict handling

frontmcp dev performs a pre-flight TCP probe before spawning tsx --watch. If the port is already in use the command exits with a one-line message instead of a raw EADDRINUSE stack trace:
The PORT env var only takes effect when your @FrontMcp metadata reads it — the canonical http: { port: Number(process.env.PORT) || 3000 } pattern shown above. If you hard-code http.port: 4000 in metadata, your server will bind to 4000 regardless of --port or PORT, and the pre-flight probe is advisory only.

MCP endpoint path

By default the MCP endpoint is served at the root path (/). Set transport.http.path in frontmcp.config.ts to mount it elsewhere — frontmcp dev honors it, so the endpoint matches the URL emitted in your generated client config (clients.*.url) and an HTTP client pointed at that path no longer 404s:
Under the hood dev passes the configured path to the spawned server via the FRONTMCP_HTTP_ENTRY_PATH env var, which the SDK’s http.entryPath default reads — the same pattern as PORT.
As with PORT, an explicit @FrontMcp({ http: { entryPath } }) in your metadata wins over transport.http.path / the env var. Keep the two in sync, or omit entryPath from metadata and let transport.http.path drive the mount.

Inspect locally (zero setup)

Launch the FrontMCP Inspector to exercise tools and messages in a friendly UI:
  • This runs npx @modelcontextprotocol/inspector behind the scenes.
  • Point it at your local server URL printed by dev (e.g., http://localhost:3000).
  • Try calling greet and watch responses stream back in real time.

Troubleshooting

  • Check configuration
Ensures Node/npm versions, entry detection, and tsconfig.json are correct.
  • Entry detection The CLI looks for package.json.main; if missing, it falls back to src/main.ts. If no entry is found, it will tell you how to create one.
  • Type errors in dev The dev command performs async type-checks while watching your files, so you’ll see issues immediately without stopping the server.