Skip to main content

Overview

The leanmcp create command scaffolds a new MCP server project with production-ready templates and optional interactive setup.
leanmcp create <projectName> [options]

Basic Usage

1

Create a project

leanmcp create my-mcp-server
This creates a new directory my-mcp-server with all necessary files.
2

Interactive prompts

You’ll be asked:
  • Would you like to install dependencies now? (yes/no)
  • Would you like to start the development server? (yes/no)
3

Start using your server

cd my-mcp-server
npm run dev

Options

--allow-all

Skip all interactive confirmations and assume “Yes”:
leanmcp create my-server --allow-all
This will:
  • Create the project
  • Install dependencies automatically
  • Start the development server

--no-dashboard

Disable the dashboard UI at / and /mcp GET endpoints:
leanmcp create my-server --no-dashboard
The generated main.ts will include:
await createHTTPServer({
  name: "my-server",
  version: "1.0.0",
  port: 3001,
  cors: true,
  logging: true,
  dashboard: false  // Dashboard disabled
});

-i, --install

Install dependencies automatically without starting the dev server:
leanmcp create my-server --install
Non-interactive mode - installs dependencies, then exits.

--no-install

Skip dependency installation entirely:
leanmcp create my-server --no-install
You’ll need to run npm install manually later.

--python

Create a Python MCP project instead of TypeScript:
leanmcp create my-server --python
Python projects require manual virtual environment setup:
cd my-server
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
pip install -r requirements.txt
python main.py

Generated Project Structure

TypeScript Project

my-mcp-server/
├── main.ts              # Entry point with HTTP server
├── package.json         # Dependencies and scripts
├── tsconfig.json        # TypeScript configuration
├── .gitignore           # Git ignore rules
├── .env                 # Environment variables
├── README.md            # Project documentation
└── mcp/                 # Services directory
    └── example/
        └── index.ts     # Example service

Python Project

my-mcp-server/
├── main.py              # Entry point with HTTP server
├── requirements.txt     # Python dependencies
├── .gitignore           # Git ignore rules
├── .env                 # Environment variables
└── README.md            # Project documentation

Example: Generated Files

main.ts (TypeScript)

import { config } from 'dotenv';
import { createHTTPServer } from '@leanmcp/core';

config();

await createHTTPServer({
  name: "my-mcp-server",
  version: "1.0.0",
  port: parseInt(process.env.PORT || '3001'),
  cors: true,
  logging: true,
});

mcp/example/index.ts

import { Tool, Prompt, Resource, SchemaConstraint, Optional } from '@leanmcp/core';

class GreetInput {
  @SchemaConstraint({
    description: 'Name to greet',
    minLength: 1
  })
  name!: string;

  @Optional()
  @SchemaConstraint({
    description: 'Language for greeting',
    enum: ['en', 'es', 'fr'],
    default: 'en'
  })
  language?: string;
}

export class Example {
  @Tool({ 
    description: 'Greet someone',
    inputClass: GreetInput
  })
  async greet(args: GreetInput) {
    const greetings = {
      en: 'Hello',
      es: 'Hola',
      fr: 'Bonjour'
    };
    
    const greeting = greetings[args.language || 'en'];
    return { message: `${greeting}, ${args.name}!` };
  }

  @Prompt({ description: 'Generate a welcome prompt' })
  welcomePrompt(args: { name?: string }) {
    return {
      messages: [{
        role: 'user',
        content: {
          type: 'text',
          text: `Say a warm welcome to ${args.name || 'our user'}!`
        }
      }]
    };
  }

  @Resource({ description: 'Get service status' })
  getStatus() {
    return {
      status: 'active',
      uptime: process.uptime(),
      timestamp: new Date().toISOString()
    };
  }
}

package.json

{
  "name": "my-mcp-server",
  "version": "1.0.0",
  "description": "MCP Server with Streamable HTTP Transport",
  "type": "module",
  "scripts": {
    "dev": "leanmcp dev",
    "build": "leanmcp build",
    "start": "leanmcp start",
    "start:node": "node dist/main.js",
    "clean": "rm -rf dist"
  },
  "dependencies": {
    "@leanmcp/core": "latest",
    "@leanmcp/ui": "latest",
    "@leanmcp/auth": "latest",
    "dotenv": "^16.5.0"
  },
  "devDependencies": {
    "@leanmcp/cli": "latest",
    "@types/node": "^20.0.0",
    "tsx": "^4.20.3",
    "typescript": "^5.6.3"
  }
}

Common Workflows

Create and Start Immediately

leanmcp create my-server --allow-all
This automatically:
  1. Creates the project
  2. Installs dependencies
  3. Starts the dev server

Create Without Dependencies

leanmcp create my-server --no-install
cd my-server
npm install
npm run dev

Create Python Project

leanmcp create my-server --python
cd my-server
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python main.py

Terminal Output

$ leanmcp create my-mcp-server

 Project my-mcp-server created!

Success! Your MCP server is ready.

To deploy to LeanMCP cloud:
  cd my-mcp-server
  leanmcp deploy .

Need help? Join our Discord:
  https://discord.com/invite/DsRcA3GwPy

? Would you like to install dependencies now? (Y/n)
 Dependencies installed successfully!

? Would you like to start the development server? (Y/n)

Starting development server...

[HTTP][INFO] Server running on http://localhost:3001

Error Handling

Project Already Exists

$ leanmcp create my-server
 Folder my-server already exists.
Solution: Choose a different name or remove the existing directory.

Invalid Project Name

Project names should follow npm naming conventions:
  • Lowercase letters, numbers, hyphens, underscores
  • No spaces or special characters
leanmcp create my-mcp-server  # ✓ Valid
leanmcp create "My Server"    # ✗ Invalid

Next Steps

Add Service

Add new services to your project

Dev Commands

Start developing with hot-reload

Deploy

Deploy to LeanMCP Cloud

Core Package

Learn about @leanmcp/core decorators

Build docs developers (and LLMs) love