o
���g�
� @ s d dl mZ d dlmZ d dlmZ d dlZd dlZd dlZd dl Z d dl
mZmZ d dl
Z
d dlmZmZ eddgd �Zed
eded fdd
��Zeded�Ze�� ddedeeeeeef dee defdd��Ze�� ddedededededefdd��ZdS )� )�asynccontextmanager)�
AsyncIterator)� dataclassN)�Optional�Tuple)�Context�FastMCPzMy App� pyautogui)�dependencies�server�returnc C s �zdV W dS w )zManage application lifecycleN� )r r
r
�9/Users/hanfeng/Desktop/mcp/localplay-mcp-server/server.py�app_lifespan s �r )�lifespan�ctx�region� save_pathc
C s� z4|r
t j|d�}nt �� }|r|�|� d|� �W S t�� }|j|dd� t�|�� ��� }d|� �W S t yM } z
dt
|�� �W Y d}~S d}~ww )ur
截取屏幕截图并返回图像数据
参数:
- region: 可选,指定截图区域的元组 (left, top, width, height)
- save_path: 可选,保存图像的路径,如果不提供则返回base64编码的图像数据
返回:
- 如果提供了save_path,返回保存图像的路径
- 否则返回base64编码的图像数据
)r u 截图已保存至: ZPNG)�formatzdata:image/png;base64,u 截图失败: N)r �
screenshot�save�io�BytesIO�base64� b64encode�getvalue�decode� Exception�str)r r r r �bufferedZimg_str�er
r
r �take_screenshot s
��r! � �?F�x�y�duration�clickc
C s| z$t j|||d� |rt �||� d|� d|� d�W S d|� d|� d�W S ty= } z
dt|�� �W Y d}~S d}~ww )u
移动鼠标到指定位置
参数:
- x: 目标X坐标
- y: 目标Y坐标
- duration: 移动持续时间(秒),默认0.5秒
- click: 是否在目标位置点击鼠标,默认False
返回:
- 操作结果的描述
)r% u 鼠标已移动到位置 (z, u ) 并点击�)u 鼠标移动失败: N)r ZmoveTor&