From aed403d929405fd5c03bd2ad9b3e6aec4523df7e Mon Sep 17 00:00:00 2001
From: Jeremiah Lowin <153965+jlowin@users.noreply.github.com>
Date: Sat, 30 Nov 2024 19:30:36 -0500
Subject: [PATCH] Update readmeUpdate README
---
README.md | 415 +++++++++++++++++++++---------
docs/assets/demo-inspector.png | Bin 0 -> 812895 bytes
examples/readme-quickstart.py | 19 ++
src/fastmcp/resources/base.py | 10 +-
tests/resources/test_resources.py | 2 +-
5 files changed, 317 insertions(+), 129 deletions(-)
create mode 100644 docs/assets/demo-inspector.png
create mode 100644 examples/readme-quickstart.py
diff --git a/README.md b/README.md
index fa9f48e22..83d50a97c 100644
--- a/README.md
+++ b/README.md
@@ -1,187 +1,362 @@
-# FastMCP
+
+# FastMCP
-> **Note**: This is experimental software. The Model Context Protocol itself is only a few days old and the specification is still evolving.
+
-A fast, pythonic way to build Model Context Protocol (MCP) servers.
+[](https://pypi.org/project/fastmcp)
+[](https://github.com/jlowin/fastmcp/actions/workflows/run-tests.yml)
+[](https://github.com/jlowin/fastmcp/blob/main/LICENSE)
-Anthropic's new [Model Context Protocol](https://modelcontextprotocol.io) is a powerful way to give broadcast new functionality and context to LLMs. However, developing MCP servers can be cumbersome. FastMCP provides a simple, intuitive interface for creating MCP servers in Python.
+
+FastMCP is a high-level, intuitive framework for building [Model Context Protocol (MCP)](https://modelcontextprotocol.io) servers with Python. While MCP is a powerful protocol that enables LLMs to interact with local data and tools in a secure, standardized way, the specification can be cumbersome to implement directly. FastMCP lets you build fully compliant MCP servers in the most Pythonic way possible - in many cases, simply decorating a function is all that's required.
+
+🚧 *Note: FastMCP is under active development, as is the low-level MCP Python SDK* 🏗️
+
+Key features:
+* **Intuitive**: Designed to feel familiar to Python developers, with powerful type hints and editor support
+* **Simple**: Build compliant MCP servers with minimal boilerplate
+* **Fast**: High-performance async implementation
+* **Full-featured**: Complete implementation of the MCP specification
+
+
## Table of Contents
-- [FastMCP](#fastmcp)
- - [Table of Contents](#table-of-contents)
- - [Installation](#installation)
- - [Quick Start](#quick-start)
- - [Core Concepts](#core-concepts)
- - [Resources](#resources)
- - [Tools](#tools)
+- [Installation](#installation)
+- [Quickstart](#quickstart)
+- [What is MCP?](#what-is-mcp)
+- [Core Concepts](#core-concepts)
+ - [Server](#server)
+ - [Resources](#resources)
+ - [Tools](#tools)
+ - [Prompts](#prompts)
+ - [Images](#images)
+ - [Context](#context)
+- [Deployment](#deployment)
- [Development](#development)
- - [Running the Dev Inspector](#running-the-dev-inspector)
- - [Installing in Claude](#installing-in-claude)
- - [License](#license)
+ - [Claude Desktop](#claude-desktop)
+- [Examples](#examples)
+ - [Echo Server](#echo-server)
+ - [SQLite Explorer](#sqlite-explorer)
## Installation
-MCP servers require you to use [uv](https://github.com/astral-sh/uv) as your dependency manager.
-
-Install uv with brew:
-```bash
-brew install uv
-```
-*(Editor's note: I was unable to get MCP servers working unless uv was installed with brew.)*
-
-Install FastMCP:
```bash
+# We strongly recommend installing with uv
+brew install uv # on macOS
uv pip install fastmcp
```
-## Quick Start
+Or with pip:
+```bash
+pip install fastmcp
+```
-Here's a simple example that exposes your desktop directory as a resource and provides a basic addition tool:
+## Quickstart
+
+Let's create a simple MCP server that exposes a calculator tool and some data:
```python
-from pathlib import Path
from fastmcp import FastMCP
-# Create server
+
+# Create an MCP server
mcp = FastMCP("Demo")
-@mcp.resource("dir://desktop")
-def desktop() -> list[str]:
- """List the files in the user's desktop"""
- desktop = Path.home() / "Desktop"
- return [str(f) for f in desktop.iterdir()]
+# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b
-if __name__ == "__main__":
- mcp.run()
+
+# Add a dynamic greeting resource
+@mcp.resource("greeting://{name}")
+def get_greeting(name: str) -> str:
+ """Get a personalized greeting"""
+ return f"Hello, {name}!"
```
+To use this server, you have two options:
+
+1. Install it in Claude Desktop:
+```bash
+fastmcp install server.py
+```
+
+2. Test it with the MCP Inspector:
+```bash
+fastmcp dev server.py
+```
+
+
+
+## What is MCP?
+
+The [Model Context Protocol (MCP)](https://modelcontextprotocol.io) lets you build servers that expose data and functionality to LLM applications in a secure, standardized way. Think of it like a web API, but specifically designed for LLM interactions. MCP servers can:
+
+- Expose data through **Resources** (like GET endpoints)
+- Provide functionality through **Tools** (like POST endpoints)
+- Define interaction patterns through **Prompts** (reusable templates for LLM interactions)
+
## Core Concepts
-FastMCP makes it easy to expose two types of functionality to LLMs: Resources and Tools.
+*Note: All code examples below assume you've created a FastMCP server instance called `mcp`.*
+
+### Server
+
+The FastMCP server is your core interface to the MCP protocol. It handles connection management, protocol compliance, and message routing:
+
+```python
+from fastmcp import FastMCP
+
+# Create a named server
+mcp = FastMCP("My App")
+
+# Configure host/port for HTTP transport (optional)
+mcp = FastMCP("My App", host="localhost", port=8000)
+```
### Resources
-Resources are data sources that can be accessed by the LLM. They're perfect for providing context like files, API responses, or database queries.
+Resources are how you expose data to LLMs. They're similar to GET endpoints in a REST API - they provide data but shouldn't perform significant computation or have side effects. Some examples:
-FastMCP provides a simple `@resource` decorator that handles both static and dynamic resources. While the MCP spec distinguishes between resources and templates, FastMCP automatically handles this distinction based on your function signature:
+- File contents
+- Database schemas
+- API responses
+- System information
+Resources can be static:
```python
-# Static resource
-@mcp.resource("resource://static")
-def get_static() -> str:
- """Return static content"""
- return "Static content"
-
-# Dynamic resource
-@mcp.resource("resource://{city}/weather")
-def get_weather(city: str) -> str:
- """Get weather for a city"""
- return f"Weather for {city}"
-
-# Multiple parameters are supported
-@mcp.resource("db://users/{user_id}/posts/{post_id}")
-def get_user_post(user_id: int, post_id: int) -> dict:
- """Get a specific post by a user"""
- return {
- "user_id": user_id,
- "post_id": post_id,
- "content": "Post content..."
- }
-
-# File resources
-@mcp.resource("file://config.json")
+@mcp.resource("config://app")
def get_config() -> str:
- """Read the config file"""
- return Path("config.json").read_text()
+ """Static configuration data"""
+ return "App configuration here"
```
-Resources can return:
-- Strings for text content
-- Bytes for binary content
-- Other types will be converted to JSON
-
-When your resource URI includes parameters in curly braces (like `{city}`) and your function accepts matching arguments, FastMCP automatically sets up a template resource behind the scenes. This means you don't need to worry about the distinction between resources and templates in the MCP spec - just write your function, and FastMCP handles the rest.
-
-> **Note**: If you're familiar with the MCP spec, you might notice that dynamic resources are implemented as templates under the hood. FastMCP simplifies this by providing a unified interface through the `@resource` decorator. This is similar to how web frameworks often unify GET and POST handlers under a single route decorator.
-
+Or dynamic with parameters (FastMCP automatically handles these as MCP templates):
+```python
+@mcp.resource("users://{user_id}/profile")
+def get_user_profile(user_id: str) -> str:
+ """Dynamic user data"""
+ return f"Profile data for user {user_id}"
+```
### Tools
-Tools are functions that can be called by the LLM to perform actions. They're great for calculations, API calls, or any interactive functionality. Tools are defined using the `@tool` decorator:
+Tools let LLMs take actions through your server. Unlike resources, tools are expected to perform computation and have side effects. They're similar to POST endpoints in a REST API.
+Simple calculation example:
```python
@mcp.tool()
-def search_docs(query: str, max_results: int = 5) -> list[dict]:
- """Search documentation for relevant entries"""
- results = perform_search(query, limit=max_results)
- return [{"title": r.title, "excerpt": r.excerpt} for r in results]
+def calculate_bmi(weight_kg: float, height_m: float) -> float:
+ """Calculate BMI given weight in kg and height in meters"""
+ return weight_kg / (height_m ** 2)
+```
+
+HTTP request example:
+```python
+import httpx
@mcp.tool()
-def analyze_image(image_path: str) -> dict:
- """Analyze an image and return metadata"""
- from PIL import Image
- img = Image.open(image_path)
- return {
- "size": img.size,
- "mode": img.mode,
- "format": img.format
- }
+async def fetch_weather(city: str) -> str:
+ """Fetch current weather for a city"""
+ async with httpx.AsyncClient() as client:
+ response = await client.get(
+ f"https://api.weather.com/{city}"
+ )
+ return response.text
```
-Tools support:
-- Type hints for parameters
-- Default values
-- Async functions
-- Return value conversion to JSON
+### Prompts
-## Development
+Prompts are reusable templates that help LLMs interact with your server effectively. They're like "best practices" encoded into your server. A prompt can be as simple as a string:
-FastMCP includes developer tools to make testing and debugging easier.
+```python
+@mcp.prompt()
+def review_code(code: str) -> str:
+ return f"Please review this code:\n\n{code}"
+```
-### Running the Dev Inspector
+Or a more structured sequence of messages:
+```python
+from fastmcp.prompts.base import UserMessage, AssistantMessage
-The MCP Inspector helps you test your server during development:
+@mcp.prompt()
+def debug_error(error: str) -> list[Message]:
+ return [
+ UserMessage("I'm seeing this error:"),
+ UserMessage(error),
+ AssistantMessage("I'll help debug that. What have you tried so far?")
+ ]
+```
+
+
+### Images
+
+FastMCP provides an `Image` class that automatically handles image data in your server:
+
+```python
+from fastmcp import FastMCP, Image
+from PIL import Image as PILImage
+
+@mcp.tool()
+def create_thumbnail(image_path: str) -> Image:
+ """Create a thumbnail from an image"""
+ img = PILImage.open(image_path)
+ img.thumbnail((100, 100))
+
+ # FastMCP automatically handles conversion and MIME types
+ return Image(data=img.tobytes(), format="png")
+
+@mcp.tool()
+def load_image(path: str) -> Image:
+ """Load an image from disk"""
+ # FastMCP handles reading and format detection
+ return Image(path=path)
+```
+
+Images can be used as the result of both tools and resources.
+
+### Context
+
+The Context object gives your tools and resources access to MCP capabilities. To use it, add a parameter annotated with `fastmcp.Context`:
+
+```python
+from fastmcp import FastMCP, Context
+
+@mcp.tool()
+async def long_task(files: list[str], ctx: Context) -> str:
+ """Process multiple files with progress tracking"""
+ for i, file in enumerate(files):
+ ctx.info(f"Processing {file}")
+ await ctx.report_progress(i, len(files))
+
+ # Read another resource if needed
+ data = await ctx.read_resource(f"file://{file}")
+
+ return "Processing complete"
+```
+
+The Context object provides:
+- Progress reporting through `report_progress()`
+- Logging via `debug()`, `info()`, `warning()`, and `error()`
+- Resource access through `read_resource()`
+- Request metadata via `request_id` and `client_id`
+
+## Deployment
+
+The FastMCP CLI helps you develop and deploy MCP servers.
+
+Note that for all deployment commands, you are expected to provide the fully qualified path to your server object. For example, if you have a file `server.py` that contains a FastMCP server named `my_server`, you would provide `path/to/server.py:my_server`.
+
+If your server variable has one of the standard names (`mcp`, `server`, or `app`), you can omit the server name from the path and just provide the file: `path/to/server.py`.
+
+### Development
+
+Test and debug your server with the MCP Inspector:
+```bash
+# Provide the fully qualified path to your server
+fastmcp dev server.py:my_mcp_server
+
+# Or just the file if your server is named 'mcp', 'server', or 'app'
+fastmcp dev server.py
+```
+
+Your server is run in an isolated environment, so you'll need to indicate any dependencies with the `--with` flag. FastMCP is automatically included. If you are working on a uv project, you can use the `--with-editable` flag to mount your current directory:
```bash
-# Basic usage
-fastmcp dev your_server.py
+# With additional packages
+fastmcp dev server.py --with pandas --with numpy
-# Install package in editable mode from current directory
-fastmcp dev your_server.py --with-editable .
-
-# Install additional packages
-fastmcp dev your_server.py --with pandas --with numpy
-
-# Combine both
-fastmcp dev your_server.py --with-editable . --with pandas --with numpy
+# Using your project's dependencies and up-to-date code
+fastmcp dev server.py --with-editable .
```
-The `--with` flag automatically includes `fastmcp` and any additional packages you specify. The `--with-editable` flag installs the package from the specified directory in editable mode, which is useful during development.
-
-### Installing in Claude
-
-To use your server with Claude Desktop:
+### Claude Desktop
+Install your server in Claude Desktop:
```bash
-# Basic usage
-fastmcp install your_server.py --name "My Server"
+# Basic usage (name is taken from your FastMCP instance)
+fastmcp install server.py
-# Install package in editable mode
-fastmcp install your_server.py --with-editable .
+# With a custom name
+fastmcp install server.py --name "My Server"
-# Install additional packages
-fastmcp install your_server.py --with pandas --with numpy
+# With dependencies
+fastmcp install server.py --with pandas --with numpy
-# Combine options
-fastmcp install your_server.py --with-editable . --with pandas --with numpy
+# Replace an existing server
+fastmcp install server.py --force
```
-## License
+The server name in Claude will be:
+1. The `--name` parameter if provided
+2. The `name` from your FastMCP instance
+3. The filename if the server can't be imported
-Apache 2.0
\ No newline at end of file
+## Examples
+
+### Echo Server
+A simple server demonstrating resources, tools, and prompts:
+
+```python
+from fastmcp import FastMCP
+
+mcp = FastMCP("Echo")
+
+@mcp.resource("echo://{message}")
+def echo_resource(message: str) -> str:
+ """Echo a message as a resource"""
+ return f"Resource echo: {message}"
+
+@mcp.tool()
+def echo_tool(message: str) -> str:
+ """Echo a message as a tool"""
+ return f"Tool echo: {message}"
+
+@mcp.prompt()
+def echo_prompt(message: str) -> str:
+ """Create an echo prompt"""
+ return f"Please process this message: {message}"
+```
+
+### SQLite Explorer
+A more complex example showing database integration:
+
+```python
+from fastmcp import FastMCP
+import sqlite3
+
+mcp = FastMCP("SQLite Explorer")
+
+@mcp.resource("schema://main")
+def get_schema() -> str:
+ """Provide the database schema as a resource"""
+ conn = sqlite3.connect("database.db")
+ schema = conn.execute(
+ "SELECT sql FROM sqlite_master WHERE type='table'"
+ ).fetchall()
+ return "\n".join(sql[0] for sql in schema if sql[0])
+
+@mcp.tool()
+def query_data(sql: str) -> str:
+ """Execute SQL queries safely"""
+ conn = sqlite3.connect("database.db")
+ try:
+ result = conn.execute(sql).fetchall()
+ return "\n".join(str(row) for row in result)
+ except Exception as e:
+ return f"Error: {str(e)}"
+
+@mcp.prompt()
+def analyze_table(table: str) -> str:
+ """Create a prompt template for analyzing tables"""
+ return f"""Please analyze this database table:
+Table: {table}
+Schema:
+{get_schema()}
+
+What insights can you provide about the structure and relationships?"""
+```
\ No newline at end of file
diff --git a/docs/assets/demo-inspector.png b/docs/assets/demo-inspector.png
new file mode 100644
index 0000000000000000000000000000000000000000..5d77153875b2f500e3d77b778b9d96f77828a855
GIT binary patch
literal 812895
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