使用说明
MCP工具调用Web搜索和天气演示
该项目展示了 模型上下文协议(MCP) 工具调用功能。它展示了如何构建和连接可以通过语言模型智能链接在一起的MCP工具。
这表明了什么
这是MCP工具调用的一个实际示例:
- MCP服务器 有两个工具(网络搜索+天气)
- MCP客户端 将工具连接到GPT-5
- 工具链 -其中一个工具的输出成为另一个的输入
- 自动刀具选择 -模型决定使用哪些工具
有趣的部分是观察模型如何自动将工具链接在一起以解决复杂的查询。
工具调用示例
单一工具调用
You: What's the weather in Tokyo?
Assistant: Weather in Tokyo: clear sky, 15°C (feels like 13°C), humidity 45%.
工具链演示
You: What is the weather in the city where Zohran Mamdani was elected as mayor in 2025?
Assistant: Weather in New York City: clear sky, 7.2°C (feels like 4.3°C), humidity 52%.
以下是工具调用顺序:
- 工具调用1:
tavily_search查询“2025年Zohran Mamdani当选市长” - 工具响应: 发现他当选为纽约市市长
- 工具调用2:
get_weather与城市“纽约市” - 最终回复: 两次工具调用的组合结果
这表明 自动工具编排 -该模型分析了查询,并确定它需要两个连续的工具调用。
更多工具链示例
You: What's the weather in Paris and find recent news about France
You: Check weather in London and search for best restaurants there
You: Find where the Taj Mahal is located and tell me the weather there
MCP工具调用的工作原理
这表明 模型上下文协议(MCP) -将语言模型连接到工具的标准。架构如下:
MCP服务器 (mcp_server.py):
- 使用FastMCP实现MCP协议
- 提供工具定义和执行
- 处理stdio传输
MCP客户端 (mcp_client.py):
- 连接到MCP服务器
- 将MCP工具转换为OpenAI函数调用格式
- 使用GPT-5处理工具编排
刀具选择逻辑: GPT-5分析每个查询并决定:
- 需要哪些工具
- 通过哪些论点
- 叫他们什么顺序
- 如何在另一个工具中使用一个工具的结果
这一切都是通过调用API的OpenAI函数自动发生的。
快速设置
1.获取API密钥
您需要两个免费的API密钥:
- 塔维利首选 tavily.com 并注册
- 开放天气地图:注册地址: openweathermap.org
2.安装东西
pip install fastmcp requests python-dotenv openai
3.添加密钥
创建一个 .env 文件:
OPENAI_API_KEY=your_openai_key_here
OPENWEATHER_API_KEY=your_weather_key_here
TAVILY_API_KEY=your_tavily_key_here
4.运行它
python mcp_client.py
就是这样!开始提问。
工具
网络搜索(塔维利)
- 搜索整个互联网
- 获取人工智能驱动的答案
- 在特定问题上比谷歌聪明得多
- 非常适合时事、研究、寻找地点
天气工具
- 任何城市的实时天气
- 温度、湿度、条件
- 作品遍布全球
- 处理不同的城市名称格式
您获取的文件
├── mcp_server.py # The tools (web search + weather)
├── mcp_client.py # Chat interface with GPT-5
├── requirements.txt # What to install
└── README.md # This file
为什么MCP工具调用很重要
没有MCP: 语言模型是孤立的——它们无法访问实时数据或执行操作。
使用MCP: 语言模型成为任何API或服务的接口——网络搜索、天气、数据库、文件系统等。
力量: 需要多个数据源的复杂查询可以通过自动工具编排在一次对话中处理。
测试工具调用
要查看MCP工具调用的实际操作:
- 单工具查询: “伦敦的天气怎么样?”(仅使用天气工具)
- 链式工具查询: “[人]住的地方天气怎么样?”(搜索→ 天气)
- 复杂查询: “关于[位置]的天气和新闻”(独立使用这两种工具)
观察控制台输出,查看正在进行的实际工具调用。
扩展MCP服务器
添加新工具很简单:
- 定义工具 随着
@mcp.tool()装饰器 - 添加功能 实现工具逻辑
- 重新启动服务器 -客户端将自动发现新工具
工具结构示例:
@mcp.tool()
def my_new_tool(param: str) -> str:
"""Tool description for the language model"""
# Your tool logic here
return result
语言模型将根据新工具的描述和参数自动学习使用新工具。
这展示了MCP在构建自定义工具生态系统方面的可扩展性。
