Lybic Docs

MCP 客户端

使用 Lybic Python SDK 的 MCP 客户端指南。

MCP 是 Lybic 的模型上下文协议(MCP)及其关联 RESTful API 的客户端。

MCP 客户端使用

您可以使用 MCP 通过 lybic.Mcp 执行操作。

class MCP:
    async def call_tool_async(self,
                              mcp_server_id: str,
                              tool_name: str = "computer-use",
                              tool_args: dict = None):
        """
        在 mcp 服务器上调用工具

        :param mcp_server_id:
        :param tool_name:
        :param tool_args:
        :return tool_result:
        """

call_tool_async 方法

mcp_server_id

您可以从网站或 SDK 获取 mcp_server_id

  • 网站

    1. 打开 Lybic Web 应用程序的控制台。
    2. 在左侧找到 MCP 服务器
    3. 您将看到 MCP 服务器 ID。
  • SDK

    import asyncio
    from lybic import LybicClient
    async def main():
        async with LybicClient() as client:
            list_result = await client.mcp.list()
            for mcp_server in list_result.root:
                print(mcp_server.id)
    if __name__ == '__main__':
        asyncio.run(main())

tool_name

您要运行的 MCP 工具的名称。

tool_args

工具参数字典,例如:

args = {
   "action": "click",
   "coordinate": [{x}, {y}],
   "text": ",".join(hold_keys) if hold_keys else None
}

返回值

tool_result.content 包含工具执行的结果。

支持的操作和示例

MCP 支持各种操作。以下是每个操作的详细信息,包括参数和示例。

screenShot

截取屏幕截图。

  • 参数:无

  • 示例

    import asyncio
    import base64
    from io import BytesIO
    from PIL import Image
    from lybic import LybicClient
    
    async def main():
        async with LybicClient() as client:
            result = await client.mcp.call_tool_async(mcp_server_id='server_id',tool_args={"action": "screenShot"})
            img_b64 = result.content[0].data
            img_bytes = base64.b64decode(img_b64)
            i = Image.open(BytesIO(img_bytes))
            i.show()
            print(result)
    if __name__ == '__main__':
        asyncio.run(main())

type

在键盘上输入文本字符串。

  • 参数

    • text (str):要输入的文本字符串(支持绝大多数 Unicode 字符)。
  • 示例

    import asyncio
    from lybic import LybicClient
    
    async def main():
        async with LybicClient() as client:
            result = await client.mcp.call_tool_async(mcp_server_id='YOUR_MCP_SERVER_ID', tool_args={"action": "type", "text": "This is an English text, 这是一个中文文本, 이것은 한국어 문자열이다, and هذه سلسلة من السلسلة العربية."})
            print(result)
    if __name__ == '__main__':
        asyncio.run(main())

click

在指定坐标处单击鼠标左键。

  • 参数

    • coordinate (list[int, int]):要单击的 [x, y] 像素坐标。
  • 示例

    import asyncio
    from lybic import LybicClient
    
    async def main():
        async with LybicClient() as client:
            result = await client.mcp.call_tool_async(mcp_server_id='YOUR_MCP_SERVER_ID', tool_args={"action": "click", "coordinate": [100, 200]})
            print(result)
    if __name__ == '__main__':
        asyncio.run(main())

rightClick

在指定坐标处单击鼠标右键。

  • 参数

    • coordinate (list[int, int]):要单击的 [x, y] 像素坐标。
  • 示例

    import asyncio
    from lybic import LybicClient
    
    async def main():
        async with LybicClient() as client:
            result = await client.mcp.call_tool_async(mcp_server_id='YOUR_MCP_SERVER_ID', tool_args={"action": "rightClick", "coordinate": [100, 200]})
            print(result)
    if __name__ == '__main__':
        asyncio.run(main())

doubleClick

在指定坐标处双击鼠标左键。

  • 参数

    • coordinate (list[int, int]):要双击的 [x, y] 像素坐标。
  • 示例

    import asyncio
    from lybic import LybicClient
    
    async def main():
        async with LybicClient() as client:
            result = await client.mcp.call_tool_async(mcp_server_id='YOUR_MCP_SERVER_ID', tool_args={"action": "doubleClick", "coordinate": [100, 200]})
            print(result)
    if __name__ == '__main__':
        asyncio.run(main())

middleClick

在指定坐标处单击鼠标中键。

  • 参数

    • coordinate (list[int, int]):要单击的 [x, y] 像素坐标。
  • 示例

    import asyncio
    from lybic import LybicClient
    
    async def main():
        async with LybicClient() as client:
            result = await client.mcp.call_tool_async(mcp_server_id='YOUR_MCP_SERVER_ID', tool_args={"action": "middleClick", "coordinate": [100, 200]})
            print(result)
    if __name__ == '__main__':
        asyncio.run(main())

move

将光标移动到指定坐标。

  • 参数

    • coordinate (list[int, int]):要将光标移动到的 [x, y] 像素坐标。
  • 示例

    import asyncio
    from lybic import LybicClient
    
    async def main():
        async with LybicClient() as client:
            result = await client.mcp.call_tool_async(mcp_server_id='YOUR_MCP_SERVER_ID', tool_args={"action": "move", "coordinate": [100, 200]})
            print(result)
    if __name__ == '__main__':
        asyncio.run(main())

leftClickDrag

从起始坐标单击并拖动光标到结束坐标。

  • 参数

    • startCoordinate (list[int, int]):开始拖动的 [x, y] 坐标。
    • coordinate (list[int, int]):结束拖动的 [x, y] 坐标。
  • 示例

    import asyncio
    from lybic import LybicClient
    
    async def main():
        async with LybicClient() as client:
            result = await client.mcp.call_tool_async(mcp_server_id='YOUR_MCP_SERVER_ID', tool_args={"action": "leftClickDrag", "startCoordinate": [100, 200], "coordinate": [500, 600]})
            print(result)
    if __name__ == '__main__':
        asyncio.run(main())

scroll

在指定坐标处滚动屏幕。

  • 参数

    • scrollDirection (str):滚动方向。可以是 "up""down""left""right"
    • scrollAmount (int):滚动的"点击"次数。
    • coordinate (list[int, int], 可选):滚动操作应发生的 [x, y] 坐标。
  • 示例

    import asyncio
    from lybic import LybicClient
    
    async def main():
        async with LybicClient() as client:
            # 向下滚动 5 次点击
            result = await client.mcp.call_tool_async(mcp_server_id='YOUR_MCP_SERVER_ID', tool_args={"action": "scroll", "scrollDirection": "down", "scrollAmount": 5})
            print(result)
    if __name__ == '__main__':
        asyncio.run(main())

keyPress

按下一个键或组合键。支持 xdotool 键语法。

  • 参数

    • text (str):要按下的键或组合键(例如,"a""Return""alt+Tab""ctrl+s")。
  • 示例

    import asyncio
    from lybic import LybicClient
    
    async def main():
        async with LybicClient() as client:
            # 按 Ctrl+S 保存
            result = await client.mcp.call_tool_async(mcp_server_id='YOUR_MCP_SERVER_ID', tool_args={"action": "keyPress", "text": "ctrl+s"})
            print(result)
    if __name__ == '__main__':
        asyncio.run(main())

cursorPosition

获取光标的当前 [x, y] 坐标。

  • 参数:无

  • 示例

    import asyncio
    from lybic import LybicClient
    
    async def main():
        async with LybicClient() as client:
            result = await client.mcp.call_tool_async(mcp_server_id='YOUR_MCP_SERVER_ID', tool_args={"action": "cursorPosition"})
            print(f"光标位置: {result.content}")
    if __name__ == '__main__':
        asyncio.run(main())

wait

等待指定的持续时间。

  • 参数

    • duration (float):等待的持续时间(秒)。
  • 示例

    import asyncio
    from lybic import LybicClient
    
    async def main():
        async with LybicClient() as client:
            # 等待 2.5 秒
            result = await client.mcp.call_tool_async(mcp_server_id='YOUR_MCP_SERVER_ID', tool_args={"action": "wait", "duration": 2.5})
            print(f"光标位置: {result.content}")
    if __name__ == '__main__':
        asyncio.run(main())

MCP 服务器管理

列出所有 MCP 服务器

  • 方法list()
  • 返回dto.ListMcpServerResponse
import asyncio
from lybic import LybicClient

async def main():
     async with LybicClient() as client:
        list_result = await client.mcp.list()
        for mcp_server in list_result.root:
            print(mcp_server.id)
if __name__ == '__main__':
    asyncio.run(main())

创建 MCP 服务器

  • 方法create(data: dto.CreateMcpServerDto)
  • 参数
    • name (str):MCP 服务器的名称。
    • projectId (str, 可选):服务器所属的项目。
  • 返回dto.McpServerResponseDto
import asyncio
from lybic import LybicClient, dto

async def main():
     async with LybicClient() as client:
        new_server = await client.mcp.create(dto.CreateMcpServerDto(name="my-mcp-server"))
        # 或
        # new_server = = await mcp.create(name="my-mcp-server")
        print(new_server)
if __name__ == '__main__':
    asyncio.run(main())

获取默认 MCP 服务器

  • 方法get_default()
  • 返回dto.McpServerResponseDto
import asyncio
from lybic import LybicClient

async def main():
     async with LybicClient() as client:
        default_server = await client.mcp.get_default()
        print(default_server)
if __name__ == '__main__':
    asyncio.run(main())

删除 MCP 服务器

  • 方法delete(mcp_server_id: str)
  • 参数
    • mcp_server_id (str):要删除的 MCP 服务器 ID。
  • 返回None
import asyncio
from lybic import LybicClient

async def main():
     async with LybicClient() as client:
        await client.mcp.delete(mcp_server_id="MCP-xxxx")
if __name__ == '__main__':
    asyncio.run(main())

将 MCP 服务器设置为沙箱

  • 方法set_sandbox(mcp_server_id: str, sandbox_id: str)
  • 参数
    • mcp_server_id (str):MCP 服务器 ID。
    • sandbox_id (str):要连接 MCP 服务器的沙箱 ID。
  • 返回None
import asyncio
from lybic import LybicClient

async def main():
     async with LybicClient() as client:
        await client.mcp.set_sandbox(mcp_server_id="MCP-xxxx", sandbox_id="SBX-xxxx")
if __name__ == '__main__':
    asyncio.run(main())

本页内容