fastmcp/examples/fastmcp_config_demo/server.py

70 lines
1.8 KiB
Python

"""
Example server demonstrating fastmcp.json configuration.
This server previously would have used the deprecated dependencies parameter:
mcp = FastMCP("Demo Server", dependencies=["pyautogui", "Pillow"])
Now dependencies are declared in fastmcp.json alongside this file.
"""
import io
from fastmcp import FastMCP
from fastmcp.utilities.types import Image
# Create server - dependencies are now in fastmcp.json
mcp = FastMCP("Screenshot Demo")
@mcp.tool
def take_screenshot() -> Image:
"""
Take a screenshot of the user's screen and return it as an image.
Use this tool anytime the user wants you to look at something on their screen.
"""
import pyautogui
buffer = io.BytesIO()
# Capture and compress the screenshot to stay under size limits
screenshot = pyautogui.screenshot()
screenshot.convert("RGB").save(buffer, format="JPEG", quality=60, optimize=True)
return Image(data=buffer.getvalue(), format="jpeg")
@mcp.tool
def analyze_colors() -> dict:
"""
Analyze the dominant colors in the current screen.
Returns a dictionary with color statistics from the screen.
"""
import pyautogui
from PIL import Image as PILImage
screenshot = pyautogui.screenshot()
# Convert to smaller size for faster analysis
small = screenshot.resize((100, 100), PILImage.Resampling.LANCZOS)
# Get colors
colors = small.getcolors(maxcolors=10000)
if not colors:
return {"error": "Too many colors to analyze"}
# Sort by frequency
sorted_colors = sorted(colors, key=lambda x: x[0], reverse=True)[:10]
return {
"top_colors": [
{"count": count, "rgb": color} for count, color in sorted_colors
],
"total_pixels": sum(c[0] for c in colors),
}
if __name__ == "__main__":
import asyncio
asyncio.run(mcp.run_async())