Spaces:
Paused
Paused
| import asyncio | |
| import pdb | |
| import sys | |
| import time | |
| sys.path.append(".") | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| async def test_mcp_client(): | |
| from src.utils.mcp_client import setup_mcp_client_and_tools, create_tool_param_model | |
| test_server_config = { | |
| "mcpServers": { | |
| # "markitdown": { | |
| # "command": "docker", | |
| # "args": [ | |
| # "run", | |
| # "--rm", | |
| # "-i", | |
| # "markitdown-mcp:latest" | |
| # ] | |
| # }, | |
| "desktop-commander": { | |
| "command": "npx", | |
| "args": [ | |
| "-y", | |
| "@wonderwhy-er/desktop-commander" | |
| ] | |
| }, | |
| # "filesystem": { | |
| # "command": "npx", | |
| # "args": [ | |
| # "-y", | |
| # "@modelcontextprotocol/server-filesystem", | |
| # "/Users/xxx/ai_workspace", | |
| # ] | |
| # }, | |
| } | |
| } | |
| mcp_tools, mcp_client = await setup_mcp_client_and_tools(test_server_config) | |
| for tool in mcp_tools: | |
| tool_param_model = create_tool_param_model(tool) | |
| print(tool.name) | |
| print(tool.description) | |
| print(tool_param_model.model_json_schema()) | |
| pdb.set_trace() | |
| async def test_controller_with_mcp(): | |
| import os | |
| from src.controller.custom_controller import CustomController | |
| from browser_use.controller.registry.views import ActionModel | |
| mcp_server_config = { | |
| "mcpServers": { | |
| # "markitdown": { | |
| # "command": "docker", | |
| # "args": [ | |
| # "run", | |
| # "--rm", | |
| # "-i", | |
| # "markitdown-mcp:latest" | |
| # ] | |
| # }, | |
| "desktop-commander": { | |
| "command": "npx", | |
| "args": [ | |
| "-y", | |
| "@wonderwhy-er/desktop-commander" | |
| ] | |
| }, | |
| # "filesystem": { | |
| # "command": "npx", | |
| # "args": [ | |
| # "-y", | |
| # "@modelcontextprotocol/server-filesystem", | |
| # "/Users/xxx/ai_workspace", | |
| # ] | |
| # }, | |
| } | |
| } | |
| controller = CustomController() | |
| await controller.setup_mcp_client(mcp_server_config) | |
| action_name = "mcp.desktop-commander.execute_command" | |
| action_info = controller.registry.registry.actions[action_name] | |
| param_model = action_info.param_model | |
| print(param_model.model_json_schema()) | |
| params = {"command": f"python ./tmp/test.py" | |
| } | |
| validated_params = param_model(**params) | |
| ActionModel_ = controller.registry.create_action_model() | |
| # Create ActionModel instance with the validated parameters | |
| action_model = ActionModel_(**{action_name: validated_params}) | |
| result = await controller.act(action_model) | |
| result = result.extracted_content | |
| print(result) | |
| if result and "Command is still running. Use read_output to get more output." in result and "PID" in \ | |
| result.split("\n")[0]: | |
| pid = int(result.split("\n")[0].split("PID")[-1].strip()) | |
| action_name = "mcp.desktop-commander.read_output" | |
| action_info = controller.registry.registry.actions[action_name] | |
| param_model = action_info.param_model | |
| print(param_model.model_json_schema()) | |
| params = {"pid": pid} | |
| validated_params = param_model(**params) | |
| action_model = ActionModel_(**{action_name: validated_params}) | |
| output_result = "" | |
| while True: | |
| time.sleep(1) | |
| result = await controller.act(action_model) | |
| result = result.extracted_content | |
| if result: | |
| pdb.set_trace() | |
| output_result = result | |
| break | |
| print(output_result) | |
| pdb.set_trace() | |
| await controller.close_mcp_client() | |
| pdb.set_trace() | |
| if __name__ == '__main__': | |
| # asyncio.run(test_mcp_client()) | |
| asyncio.run(test_controller_with_mcp()) | |