mirror of
https://github.com/PrefectHQ/fastmcp.git
synced 2026-08-21 13:04:18 +02:00
Screenshot demo working
This commit is contained in:
parent
be6e0c12a9
commit
627cf8a84e
3 changed files with 26 additions and 16 deletions
|
|
@ -1,33 +1,31 @@
|
|||
# /// script
|
||||
# dependencies = ["pyautogui"]
|
||||
# dependencies = ["fastmcp", "pyautogui", "Pillow"]
|
||||
# ///
|
||||
|
||||
"""
|
||||
FastMCP Screenshot Example
|
||||
|
||||
A simple example that provides a tool to capture screenshots.
|
||||
Give Claude a tool to capture and view screenshots.
|
||||
"""
|
||||
|
||||
import base64
|
||||
import io
|
||||
import pyautogui
|
||||
|
||||
from fastmcp.server import FastMCP
|
||||
from fastmcp import FastMCP, Image
|
||||
|
||||
# Create server
|
||||
mcp = FastMCP("Screenshot Demo")
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
def take_screenshot() -> str:
|
||||
"""Take a screenshot and return it as a base64 encoded string"""
|
||||
# Capture the screen
|
||||
screenshot = pyautogui.screenshot()
|
||||
def take_screenshot() -> Image:
|
||||
"""Take a screenshot of the user's screen and return it as an image"""
|
||||
import pyautogui
|
||||
|
||||
# Convert to base64
|
||||
screenshot = pyautogui.screenshot()
|
||||
buffer = io.BytesIO()
|
||||
screenshot.save(buffer, format="PNG")
|
||||
return base64.b64encode(buffer.getvalue()).decode()
|
||||
# if the file exceeds ~1MB, it will be rejected by Claude
|
||||
screenshot.convert("RGB").save(buffer, format="JPEG", quality=60, optimize=True)
|
||||
return Image(data=buffer.getvalue(), format="jpeg")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
|||
|
|
@ -275,7 +275,7 @@ def install(
|
|||
typer.Option(
|
||||
"--name",
|
||||
"-n",
|
||||
help="Custom name for the server (defaults to file name)",
|
||||
help="Custom name for the server (defaults to server's name attribute or file name)",
|
||||
),
|
||||
] = None,
|
||||
with_editable: Annotated[
|
||||
|
|
@ -324,17 +324,28 @@ def install(
|
|||
logger.error("Claude app not found")
|
||||
sys.exit(1)
|
||||
|
||||
# Try to import server to get its name, but fall back to file name if dependencies missing
|
||||
name = server_name
|
||||
if not name:
|
||||
try:
|
||||
server = _import_server(file, server_object)
|
||||
name = server.name
|
||||
except (ImportError, ModuleNotFoundError) as e:
|
||||
logger.debug(
|
||||
"Could not import server (likely missing dependencies), using file name",
|
||||
extra={"error": str(e)},
|
||||
)
|
||||
name = file.stem
|
||||
|
||||
if claude.update_claude_config(
|
||||
file,
|
||||
server_name,
|
||||
name,
|
||||
with_editable=with_editable,
|
||||
with_packages=with_packages,
|
||||
force=force,
|
||||
):
|
||||
name = server_name or file.stem
|
||||
print(f"Successfully installed {name} in Claude app")
|
||||
else:
|
||||
name = server_name or file.stem
|
||||
print(f"Failed to install {name} in Claude app")
|
||||
sys.exit(1)
|
||||
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ class Image:
|
|||
data = base64.b64encode(f.read()).decode()
|
||||
else:
|
||||
data = base64.b64encode(self.data).decode()
|
||||
|
||||
return ImageContent(type="image", data=data, mimeType=self._mime_type)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue