--- 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 | Uses your current environment; you are responsible for ensuring all dependencies are available | | `dev` | Run a server with the MCP Inspector for testing | Creates an isolated environment; dependencies must be explicitly specified with `--with` and/or `--with-editable` | | `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 ``` This command runs the server directly in your current Python environment. You are responsible for ensuring all dependencies are available. #### 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 | #### Server Specification The server can be specified in three 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 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 ``` ### `dev` Run a MCP server with the [MCP Inspector](https://github.com/modelcontextprotocol/inspector) for testing. ```bash fastmcp dev server.py ``` This command runs your server in an isolated environment. All dependencies must be explicitly specified using the `--with` and/or `--with-editable` options. 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 | **Example** ```bash # Run dev server with editable mode and additional packages fastmcp dev server.py -e . --with pandas --with matplotlib ``` ### `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`. **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-var`, `-v` | Environment variables in KEY=VALUE format (can be used multiple times) | | Environment File | `--env-file`, `-f` | Load environment variables from a .env file | **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 -n "My Analysis Server" --with pandas # Install in Claude Code with environment variables fastmcp install claude-code server.py --env-var API_KEY=secret --env-var DEBUG=true # Install in Cursor with environment variables fastmcp install cursor server.py --env-var API_KEY=secret --env-var DEBUG=true # Install with environment file fastmcp install cursor server.py --env-file .env # 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 `mcpServers` format used by Claude Desktop, VS Code, Cursor, and other MCP clients: ```json { "mcpServers": { "server-name": { "command": "uv", "args": [ "run", "--with", "fastmcp", "fastmcp", "run", "/path/to/server.py" ], "env": { "API_KEY": "value" } } } } ``` **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 |