| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import asyncio
- from hello_agents.protocols import MCPClient
- async def connect_to_server():
- # 方式1:连接到社区提供的文件系统服务器
- # npx会自动下载并运行@modelcontextprotocol/server-filesystem包
- client = MCPClient([
- "npx", "-y",
- "@modelcontextprotocol/server-filesystem",
- "." # 指定根目录
- ])
- # 使用async with确保连接正确关闭
- async with client:
- # 在这里使用client
- tools = await client.list_tools()
- print(f"可用工具: {[t['name'] for t in tools]}")
- # 方式2:连接到自定义的Python MCP服务器
- client = MCPClient(["python", "my_mcp_server.py"])
- async with client:
- # 使用client...
- pass
- # 运行异步函数
- asyncio.run(connect_to_server())
- async def discover_tools():
- client = MCPClient(["npx", "-y", "@modelcontextprotocol/server-filesystem", "."])
- async with client:
- # 获取所有可用工具
- tools = await client.list_tools()
- print(f"服务器提供了 {len(tools)} 个工具:")
- for tool in tools:
- print(f"\n工具名称: {tool['name']}")
- print(f"描述: {tool.get('description', '无描述')}")
- # 打印参数信息
- if 'inputSchema' in tool:
- schema = tool['inputSchema']
- if 'properties' in schema:
- print("参数:")
- for param_name, param_info in schema['properties'].items():
- param_type = param_info.get('type', 'any')
- param_desc = param_info.get('description', '')
- print(f" - {param_name} ({param_type}): {param_desc}")
- asyncio.run(discover_tools())
- # 输出示例:
- # 服务器提供了 5 个工具:
- #
- # 工具名称: read_file
- # 描述: 读取文件内容
- # 参数:
- # - path (string): 文件路径
- #
- # 工具名称: write_file
- # 描述: 写入文件内容
- # 参数:
- # - path (string): 文件路径
- # - content (string): 文件内容
- async def use_tools():
- client = MCPClient(["npx", "-y", "@modelcontextprotocol/server-filesystem", "."])
- async with client:
- # 读取文件
- result = await client.call_tool("read_file", {"path": "my_README.md"})
- print(f"文件内容:\n{result}")
- # 列出目录
- result = await client.call_tool("list_directory", {"path": "."})
- print(f"当前目录文件:{result}")
- # 写入文件
- result = await client.call_tool("write_file", {
- "path": "output.txt",
- "content": "Hello from MCP!"
- })
- print(f"写入结果:{result}")
- asyncio.run(use_tools())
- async def safe_tool_call():
- client = MCPClient(["npx", "-y", "@modelcontextprotocol/server-filesystem", "."])
- async with client:
- try:
- # 尝试读取可能不存在的文件
- result = await client.call_tool("read_file", {"path": "nonexistent.txt"})
- print(result)
- except Exception as e:
- print(f"工具调用失败: {e}")
- # 可以选择重试、使用默认值或向用户报告错误
- asyncio.run(safe_tool_call())
|