mirror of
https://github.com/PrefectHQ/fastmcp.git
synced 2026-08-20 20:44:17 +02:00
* Add FastMCPApp — a Provider for composable MCP applications * Wire Prefab callable resolver via to_json(tool_resolver=) parameter * Remove inspect.signature compat check, use try/except until prefab 0.10.0 * Address review: fix add_tool registry gaps, normalize auth errors, bump prefab to 0.10.0 * Register global key after _add_component succeeds * Simplify: extract decorator dispatch, use get_fastmcp_meta, expose get_global_tool * Remove prek from Marvin workflows These workflows run Claude to respond to /marvin mentions — linting the repo is unnecessary and fails without renderer deps installed. * Return ResolvedTool from callable resolver, add contacts example The callable resolver now returns ResolvedTool (from prefab_ui) instead of a plain string, carrying metadata like unwrap_result that the renderer needs to correctly handle structuredContent envelopes. The unwrap_result flag is derived from the tool's x-fastmcp-wrap-result output schema marker. * Bump prefab-ui requirement to >=0.11.0 * Remove stale ty ignore comments now that prefab-ui 0.11 is published * Add fastmcp dev apps command with browser UI preview * Improve fastmcp dev apps: dropdown picker, reload flag, process cleanup - Replace Tabs with Pages+Select for tool picker (Rx-based reactive state) - Add --reload/--no-reload flag (default: True) to fastmcp dev apps - Kill entire process group on shutdown so port 8000 is freed properly - Suppress uvicorn websockets deprecation warning (websockets-sansio) - Bump prefab-ui to >=0.11.1 (fixes get_renderer_head bug in 0.11.0) - Add farewell tool to greet_server example for multi-tool testing * Add docs for fastmcp dev apps command * Fix orphaned server on startup failure, guard Unix-only signal handling * Show tool title in picker, remove editable prefab source * Bump prefab-ui to >=0.11.2 * Fail fast when prefab-ui is not installed * Add apps/development docs, link from prefab and sidebar * Fix optional field defaults, fail with non-zero on startup timeout
54 lines
2.2 KiB
Text
54 lines
2.2 KiB
Text
---
|
|
title: Development
|
|
sidebarTitle: Development
|
|
description: Preview and test your app tools locally without a full MCP host.
|
|
icon: flask
|
|
---
|
|
|
|
import { VersionBadge } from '/snippets/version-badge.mdx'
|
|
|
|
<VersionBadge version="3.2.0" />
|
|
|
|
`fastmcp dev apps` launches a browser-based preview for your app tools. It starts your MCP server and a local dev UI side by side — you pick a tool, fill in its arguments, and see the rendered result in a new tab. No MCP host client needed.
|
|
|
|
This works with both [Prefab apps](/apps/prefab) and [custom HTML apps](/apps/low-level).
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
pip install "fastmcp[apps]"
|
|
fastmcp dev apps server.py
|
|
```
|
|
|
|
The dev UI opens at `http://localhost:8080`. Your MCP server runs on port 8000 with auto-reload enabled by default — save a file and the server restarts automatically.
|
|
|
|
## How It Works
|
|
|
|
The dev server does three things:
|
|
|
|
The **picker page** connects to your MCP server, finds all tools with UI metadata, and renders a form for each one. The forms are auto-generated from the tool's input schema — text fields, dropdowns, checkboxes, all wired up.
|
|
|
|
When you submit a form, the dev server **calls your tool** via the MCP protocol and opens the result in a new tab. The result page loads the tool's UI resource (the Prefab renderer or your custom HTML) inside an AppBridge — the same protocol that real MCP hosts use.
|
|
|
|
A **reverse proxy** on `/mcp` forwards requests from the browser to your MCP server, avoiding CORS issues that would otherwise block the iframe-based renderer from talking to a different port.
|
|
|
|
## Options
|
|
|
|
```bash
|
|
fastmcp dev apps server.py:mcp --mcp-port 9000 --dev-port 9090 --no-reload
|
|
```
|
|
|
|
| Option | Flag | Default | Description |
|
|
| ------ | ---- | ------- | ----------- |
|
|
| MCP Port | `--mcp-port` | `8000` | Port for your MCP server |
|
|
| Dev Port | `--dev-port` | `8080` | Port for the dev UI |
|
|
| Auto-Reload | `--reload` / `--no-reload` | On | Watch files and restart the server on changes |
|
|
|
|
## Multiple Tools
|
|
|
|
If your server has multiple app tools, the picker shows a dropdown. Each tool gets its own form and launch button. The tool's `title` is displayed when available, falling back to the tool name.
|
|
|
|
```bash
|
|
# Server with multiple app tools
|
|
fastmcp dev apps examples/apps/contacts/contacts_server.py
|
|
```
|