mirror of
https://github.com/PrefectHQ/fastmcp.git
synced 2026-08-28 02:10:38 +02:00
Implement typed source system for FastMCP configuration (#1607)
This commit is contained in:
parent
007af5d9b3
commit
1f3f82d245
36 changed files with 1656 additions and 1602 deletions
|
|
@ -46,6 +46,7 @@ By default, this command runs the server directly in your current Python environ
|
|||
| 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 |
|
||||
| No Environment | `--skip-env` | Skip environment setup with uv (use when already in a uv environment) |
|
||||
| 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 |
|
||||
|
|
@ -57,8 +58,8 @@ By default, this command runs the server directly in your current Python environ
|
|||
|
||||
The `fastmcp run` command supports the following entrypoints:
|
||||
|
||||
1. **[Inferred server instance](#inferred-server-instance)**: `server.py` - imports the module and looks for a FastMCP object named `mcp`, `server`, or `app`. Errors if no such object is found.
|
||||
2. **[Explicit server object](#explicit-server-object)**: `server.py:custom_name` - imports and uses the specified server object
|
||||
1. **[Inferred server instance](#inferred-server-instance)**: `server.py` - imports the module and looks for a FastMCP server instance named `mcp`, `server`, or `app`. Errors if no such object is found.
|
||||
2. **[Explicit server entrypoint](#explicit-server-entrypoint)**: `server.py:custom_name` - imports and uses the specified server entrypoint
|
||||
3. **[Factory function](#factory-function)**: `server.py:create_server` - calls the specified function (sync or async) to create a server instance
|
||||
4. **[Remote server proxy](#remote-server-proxy)**: `https://example.com/mcp-server` - connects to a remote server and creates a **local proxy server**
|
||||
5. **[FastMCP configuration file](#fastmcp-configuration)**: `fastmcp.json` - runs servers using FastMCP's declarative configuration format (auto-detects files in current directory)
|
||||
|
|
@ -68,7 +69,7 @@ The `fastmcp run` command supports the following entrypoints:
|
|||
Note: When using `fastmcp run` with a local file, it **completely ignores** the `if __name__ == "__main__"` block. This means:
|
||||
- Any setup code in `__main__` will NOT run
|
||||
- Server configuration in `__main__` is bypassed
|
||||
- `fastmcp run` finds your server object/factory and runs it with its own transport settings
|
||||
- `fastmcp run` finds your server entrypoint/factory and runs it with its own transport settings
|
||||
|
||||
If you need setup code to run, use the **factory pattern** instead.
|
||||
</Warning>
|
||||
|
|
@ -91,9 +92,9 @@ You can run it with:
|
|||
fastmcp run server.py
|
||||
```
|
||||
|
||||
#### Explicit Server Object
|
||||
#### Explicit Server Entrypoint
|
||||
|
||||
If your server is stored as a variable with a custom name, or you want to be explicit about which server to run, you can use the following syntax to load a specific server object:
|
||||
If your server is stored as a variable with a custom name, or you want to be explicit about which server to run, you can use the following syntax to load a specific server entrypoint:
|
||||
|
||||
```bash
|
||||
fastmcp run server.py:custom_name
|
||||
|
|
@ -122,7 +123,7 @@ fastmcp run server.py:custom_name
|
|||
|
||||
Since `fastmcp run` ignores the `if __name__ == "__main__"` block, you can use a factory function to run setup code before your server starts. Factory functions are called without any arguments and must return a FastMCP server instance. Both sync and async factory functions are supported.
|
||||
|
||||
The syntax for using a factory function is the same as for an explicit server object: `fastmcp run server.py:factory_fn`. FastMCP will automatically detect that you have identified a function rather than a server Instance
|
||||
The syntax for using a factory function is the same as for an explicit server entrypoint: `fastmcp run server.py:factory_fn`. FastMCP will automatically detect that you have identified a function rather than a server Instance
|
||||
|
||||
For example, if you have a file called `server.py` with the following content:
|
||||
|
||||
|
|
@ -177,8 +178,19 @@ The configuration file handles dependencies, environment variables, and transpor
|
|||
```bash
|
||||
# Override port from config file
|
||||
fastmcp run fastmcp.json --port 8080
|
||||
|
||||
# Skip environment setup when already in a uv environment
|
||||
fastmcp run fastmcp.json --skip-env
|
||||
```
|
||||
|
||||
<Note>
|
||||
The `--skip-env` flag is useful when:
|
||||
- You're already in an activated virtual environment
|
||||
- You're inside a Docker container with pre-installed dependencies
|
||||
- You're in a uv-managed environment (prevents infinite recursion)
|
||||
- You want to test the server without environment setup
|
||||
</Note>
|
||||
|
||||
See [Server Configuration](/deployment/server-configuration) for detailed documentation on fastmcp.json.
|
||||
|
||||
#### MCP Configuration
|
||||
|
|
@ -244,8 +256,8 @@ This command does not support HTTP testing. To test a server over Streamable HTT
|
|||
|
||||
The `dev` command supports local FastMCP server files and configuration:
|
||||
|
||||
1. **Inferred server instance**: `server.py` - imports the module and looks for a FastMCP object named `mcp`, `server`, or `app`. Errors if no such object is found.
|
||||
2. **Explicit server object**: `server.py:custom_name` - imports and uses the specified server object
|
||||
1. **Inferred server instance**: `server.py` - imports the module and looks for a FastMCP server instance named `mcp`, `server`, or `app`. Errors if no such object is found.
|
||||
2. **Explicit server entrypoint**: `server.py:custom_name` - imports and uses the specified server entrypoint
|
||||
3. **Factory function**: `server.py:create_server` - calls the specified function (sync or async) to create a server instance
|
||||
4. **FastMCP configuration**: `fastmcp.json` - uses FastMCP's declarative configuration (auto-detects in current directory)
|
||||
|
||||
|
|
@ -323,8 +335,8 @@ Note that for security reasons, MCP clients usually run every server in a comple
|
|||
|
||||
The `install` command supports local FastMCP server files and configuration:
|
||||
|
||||
1. **Inferred server instance**: `server.py` - imports the module and looks for a FastMCP object named `mcp`, `server`, or `app`. Errors if no such object is found.
|
||||
2. **Explicit server object**: `server.py:custom_name` - imports and uses the specified server object
|
||||
1. **Inferred server instance**: `server.py` - imports the module and looks for a FastMCP server instance named `mcp`, `server`, or `app`. Errors if no such object is found.
|
||||
2. **Explicit server entrypoint**: `server.py:custom_name` - imports and uses the specified server entrypoint
|
||||
3. **Factory function**: `server.py:create_server` - calls the specified function (sync or async) to create a server instance
|
||||
4. **FastMCP configuration**: `fastmcp.json` - uses FastMCP's declarative configuration with dependencies and settings
|
||||
|
||||
|
|
@ -339,7 +351,7 @@ The `install` command **only supports local files and fastmcp.json** - no URLs,
|
|||
**Examples**
|
||||
|
||||
```bash
|
||||
# Auto-detects server object (looks for 'mcp', 'server', or 'app')
|
||||
# Auto-detects server entrypoint (looks for 'mcp', 'server', or 'app')
|
||||
fastmcp install claude-desktop server.py
|
||||
|
||||
# Install with fastmcp.json configuration (auto-detects)
|
||||
|
|
@ -348,7 +360,7 @@ fastmcp install claude-desktop
|
|||
# Install with explicit fastmcp.json file
|
||||
fastmcp install claude-desktop my-config.fastmcp.json
|
||||
|
||||
# Uses specific server object
|
||||
# Uses specific server entrypoint
|
||||
fastmcp install claude-desktop server.py:my_server
|
||||
|
||||
# With custom name and dependencies
|
||||
|
|
@ -439,8 +451,8 @@ fastmcp inspect server.py
|
|||
|
||||
The `inspect` command supports local FastMCP server files and configuration:
|
||||
|
||||
1. **Inferred server instance**: `server.py` - imports the module and looks for a FastMCP object named `mcp`, `server`, or `app`. Errors if no such object is found.
|
||||
2. **Explicit server object**: `server.py:custom_name` - imports and uses the specified server object
|
||||
1. **Inferred server instance**: `server.py` - imports the module and looks for a FastMCP server instance named `mcp`, `server`, or `app`. Errors if no such object is found.
|
||||
2. **Explicit server entrypoint**: `server.py:custom_name` - imports and uses the specified server entrypoint
|
||||
3. **Factory function**: `server.py:create_server` - calls the specified function (sync or async) to create a server instance
|
||||
4. **FastMCP configuration**: `fastmcp.json` - inspects servers defined with FastMCP's declarative configuration
|
||||
|
||||
|
|
@ -451,10 +463,10 @@ The `inspect` command **only supports local files and fastmcp.json** - no URLs,
|
|||
**Examples**
|
||||
|
||||
```bash
|
||||
# Auto-detect server object
|
||||
# Auto-detect server entrypoint
|
||||
fastmcp inspect server.py
|
||||
|
||||
# Specify server object
|
||||
# Specify server entrypoint
|
||||
fastmcp inspect server.py:my_server
|
||||
|
||||
# Custom output location
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue