--- title: FastMCP CLI sidebarTitle: CLI description: Learn how to use the FastMCP command-line interface icon: terminal --- import { VersionBadge } from "/snippets/version-badge.mdx" FastMCP provides a command-line interface (CLI) that makes it easy to run, develop, and install your MCP servers. The CLI is automatically installed when you install FastMCP. ```bash fastmcp --help ``` ## Commands Overview | Command | Purpose | Dependency Management | | ------- | ------- | --------------------- | | `run` | Run a FastMCP server directly | Default: Uses your local environment directly. With `--python`, `--with`, `--project`, or `--with-requirements`: Runs via `uv run` subprocess | | `dev` | Run a server with the MCP Inspector for testing | Always runs via `uv run` subprocess (never uses your local environment); dependencies must be specified or available in a uv-managed project | | `install` | Install a server in MCP client applications | Creates an isolated environment; dependencies must be explicitly specified with `--with` and/or `--with-editable` | | `inspect` | Generate a JSON report about a FastMCP server | Uses your current environment; you are responsible for ensuring all dependencies are available | | `version` | Display version information | N/A | ## Command Details ### `run` Run a FastMCP server directly or proxy a remote server. ```bash fastmcp run server.py ``` By default, this command runs the server directly in your current Python environment. You are responsible for ensuring all dependencies are available. When using `--python`, `--with`, `--project`, or `--with-requirements` options, it runs the server via `uv run` subprocess instead. #### Options | Option | Flag | Description | | ------ | ---- | ----------- | | Transport | `--transport`, `-t` | Transport protocol to use (`stdio`, `http`, or `sse`) | | Host | `--host` | Host to bind to when using http transport (default: 127.0.0.1) | | Port | `--port`, `-p` | Port to bind to when using http transport (default: 8000) | | Path | `--path` | Path to bind to when using http transport (default: `/mcp/` or `/sse/` for SSE) | | Log Level | `--log-level`, `-l` | Log level (DEBUG, INFO, WARNING, ERROR, CRITICAL) | | No Banner | `--no-banner` | Disable the startup banner display | | Python Version | `--python` | Python version to use (e.g., 3.10, 3.11) | | Additional Packages | `--with` | Additional packages to install (can be used multiple times) | | Project Directory | `--project` | Run the command within the given project directory | | Requirements File | `--with-requirements` | Requirements file to install dependencies from | #### Server Specification The server can be specified in four ways: 1. `server.py` - imports the module and looks for a FastMCP object named `mcp`, `server`, or `app`. Errors if no such object is found. 2. `server.py:custom_name` - imports and uses the specified server object 3. `http://server-url/path` or `https://server-url/path` - connects to a remote server and creates a proxy 4. `mcp.json` - runs servers defined in a standard MCP configuration file When using `fastmcp run` with a local file, it **ignores** the `if __name__ == "__main__"` block entirely. Instead, it finds your server object and calls its `run()` method directly with the transport options you specify. This means you can use `fastmcp run` to override the transport specified in your code. For example, if your code contains: ```python # server.py from fastmcp import FastMCP mcp = FastMCP("MyServer") @mcp.tool def hello(name: str) -> str: return f"Hello, {name}!" if __name__ == "__main__": # This is ignored when using `fastmcp run`! mcp.run(transport="stdio") ``` You can run it with Streamable HTTP transport regardless of what's in the `__main__` block: ```bash fastmcp run server.py --transport http --port 8000 ``` **Examples** ```bash # Run a local server with Streamable HTTP transport on a custom port fastmcp run server.py --transport http --port 8000 # Connect to a remote server and proxy as a stdio server fastmcp run https://example.com/mcp-server # Connect to a remote server with specified log level fastmcp run https://example.com/mcp-server --log-level DEBUG # Run with a specific Python version fastmcp run server.py --python 3.11 # Run with additional packages fastmcp run server.py --with pandas --with numpy # Run within a specific project directory fastmcp run server.py --project /path/to/project # Run with dependencies from a requirements file fastmcp run server.py --with-requirements requirements.txt ``` #### Running MCP Configuration Files FastMCP can run servers defined in standard MCP configuration files (typically named `mcp.json`). When you run an mcp.json file, FastMCP creates a proxy server that runs all the servers referenced in the configuration. **Example mcp.json:** ```json { "mcpServers": { "fetch": { "command": "uvx", "args": [ "mcp-server-fetch" ] }, "filesystem": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-filesystem", "/Users/username/Documents" ] } } } ``` **Run the configuration:** ```bash # Run with default stdio transport fastmcp run mcp.json # Run with HTTP transport on custom port fastmcp run mcp.json --transport http --port 8080 # Run with SSE transport fastmcp run mcp.json --transport sse ``` ### `dev` Run a MCP server with the [MCP Inspector](https://github.com/modelcontextprotocol/inspector) for testing. ```bash fastmcp dev server.py ``` This command always runs your server via `uv run` subprocess (never your local environment) to work with the MCP Inspector. All dependencies must be explicitly specified using the `--with` and/or `--with-editable` options, or be available in a uv-managed project. The `dev` command is a shortcut for testing a server over STDIO only. When the Inspector launches, you may need to: 1. Select "STDIO" from the transport dropdown 2. Connect manually This command does not support HTTP testing. To test a server over Streamable HTTP or SSE: 1. Start your server manually with the appropriate transport using either the command line: ```bash fastmcp run server.py --transport http ``` or by setting the transport in your code: ```bash python server.py # Assuming your __main__ block sets Streamable HTTP transport ``` 2. Open the MCP Inspector separately and connect to your running server #### Options | Option | Flag | Description | | ------ | ---- | ----------- | | Editable Package | `--with-editable`, `-e` | Directory containing pyproject.toml to install in editable mode | | Additional Packages | `--with` | Additional packages to install (can be used multiple times) | | Inspector Version | `--inspector-version` | Version of the MCP Inspector to use | | UI Port | `--ui-port` | Port for the MCP Inspector UI | | Server Port | `--server-port` | Port for the MCP Inspector Proxy server | | Python Version | `--python` | Python version to use (e.g., 3.10, 3.11) | | Project Directory | `--project` | Run the command within the given project directory | | Requirements File | `--with-requirements` | Requirements file to install dependencies from | **Examples** ```bash # Run dev server with editable mode and additional packages fastmcp dev server.py -e . --with pandas --with matplotlib # Run dev server with specific Python version fastmcp dev server.py --python 3.11 # Run dev server with requirements file fastmcp dev server.py --with-requirements requirements.txt # Run dev server within a specific project directory fastmcp dev server.py --project /path/to/project ``` ### `install` Install a MCP server in MCP client applications. FastMCP currently supports the following clients: - **Claude Code** - Installs via Claude Code's built-in MCP management system - **Claude Desktop** - Installs via direct configuration file modification - **Cursor** - Installs via deeplink that opens Cursor for user confirmation - **MCP JSON** - Generates standard MCP JSON configuration for manual use ```bash fastmcp install claude-code server.py fastmcp install claude-desktop server.py fastmcp install cursor server.py fastmcp install mcp-json server.py ``` Note that for security reasons, MCP clients usually run every server in a completely isolated environment. Therefore, all dependencies must be explicitly specified using the `--with` and/or `--with-editable` options (following `uv` conventions) or by attaching them to your server in code via the `dependencies` parameter. You should not assume that the MCP server will have access to your local environment. **`uv` must be installed and available in your system PATH**. Both Claude Desktop and Cursor run in isolated environments and need `uv` to manage dependencies. On macOS, install `uv` globally with Homebrew for Claude Desktop compatibility: `brew install uv`. **Python Version Considerations**: The install commands now support the `--python` option to specify a Python version directly. You can also use `--project` to run within a specific project directory or `--with-requirements` to install dependencies from a requirements file. **FastMCP `install` commands focus on local server files with STDIO transport.** For remote servers running with HTTP or SSE transport, use your client's native configuration - FastMCP's value is simplifying the complex local setup with dependencies and `uv` commands. #### Server Specification The `install` command supports the same `file.py:object` notation as the `run` command: 1. `server.py` - imports the module and looks for a FastMCP object named `mcp`, `server`, or `app`. Errors if no such object is found. 2. `server.py:custom_name` - imports and uses the specified server object #### Options | Option | Flag | Description | | ------ | ---- | ----------- | | Server Name | `--name`, `-n` | Custom name for the server (defaults to server's name attribute or file name) | | Editable Package | `--with-editable`, `-e` | Directory containing pyproject.toml to install in editable mode | | Additional Packages | `--with` | Additional packages to install (can be used multiple times) | | Environment Variables | `--env` | Environment variables in KEY=VALUE format (can be used multiple times) | | Environment File | `--env-file`, `-f` | Load environment variables from a .env file | | Python Version | `--python` | Python version to use (e.g., 3.10, 3.11) | | Project Directory | `--project` | Run the command within the given project directory | | Requirements File | `--with-requirements` | Requirements file to install dependencies from | **Examples** ```bash # Auto-detects server object (looks for 'mcp', 'server', or 'app') fastmcp install claude-desktop server.py # Uses specific server object fastmcp install claude-desktop server.py:my_server # With custom name and dependencies fastmcp install claude-desktop server.py:my_server --name "My Analysis Server" --with pandas # Install in Claude Code with environment variables fastmcp install claude-code server.py --env API_KEY=secret --env DEBUG=true # Install in Cursor with environment variables fastmcp install cursor server.py --env API_KEY=secret --env DEBUG=true # Install with environment file fastmcp install cursor server.py --env-file .env # Install with specific Python version fastmcp install claude-desktop server.py --python 3.11 # Install with requirements file fastmcp install claude-code server.py --with-requirements requirements.txt # Install within a project directory fastmcp install cursor server.py --project /path/to/project # Generate MCP JSON configuration fastmcp install mcp-json server.py --name "My Server" --with pandas # Copy JSON configuration to clipboard fastmcp install mcp-json server.py --copy ``` #### MCP JSON Generation The `mcp-json` subcommand generates standard MCP JSON configuration that can be used with any MCP-compatible client. This is useful when: - Working with MCP clients not directly supported by FastMCP - Creating configuration for CI/CD environments - Sharing server configurations with others - Integration with custom tooling The generated JSON follows the standard MCP server configuration format used by Claude Desktop, VS Code, Cursor, and other MCP clients, with the server name as the root key: ```json { "server-name": { "command": "uv", "args": [ "run", "--with", "fastmcp", "fastmcp", "run", "/path/to/server.py" ], "env": { "API_KEY": "value" } } } ``` To use this configuration with your MCP client, you'll typically need to add it to the client's `mcpServers` object. Consult your client's documentation for any specific configuration requirements or formatting needs. **Options specific to mcp-json:** | Option | Flag | Description | | ------ | ---- | ----------- | | Copy to Clipboard | `--copy` | Copy configuration to clipboard instead of printing to stdout | ### `inspect` Generate a detailed JSON report about a FastMCP server, including information about its tools, prompts, resources, and capabilities. ```bash fastmcp inspect server.py ``` The command supports the same server specification format as `run` and `install`: ```bash # Auto-detect server object fastmcp inspect server.py # Specify server object fastmcp inspect server.py:my_server # Custom output location fastmcp inspect server.py --output analysis.json ``` ### `version` Display version information about FastMCP and related components. ```bash fastmcp version ``` #### Options | Option | Flag | Description | | ------ | ---- | ----------- | | Copy to Clipboard | `--copy` | Copy version information to clipboard |