Gemini Function Calling + Model Context Protocol(MCP) Flight Search
使用 Gemini 2.5 Pro 的模型上下文协议 (MCP)。使用 Gemini 的函数调用功能和 MCP 的航班搜索工具将对话式查询转换为航班搜索。
arjunprabhulal
README
Gemini 函数调用 + 模型上下文协议 (MCP) 航班搜索
本项目演示了如何使用 Google 的 Gemini 2.5 Pro 的函数调用功能,通过模型上下文协议 (MCP) 与 mcp-flight-search
工具进行交互。此客户端实现展示了如何:
- 使用 stdio 通信连接到本地 MCP 服务器进程 (
mcp-flight-search
) - 使用自然语言提示与 Gemini 2.5 Pro 搜索航班(例如,“查找 2025-05-05 从亚特兰大到拉斯维加斯的航班”)
- 让 Gemini 自动从自然语言输入中确定正确的函数参数
- 使用 MCP 工具执行航班搜索
- 显示格式化的搜索结果
特性
- 使用 Gemini 2.5 Pro 进行自然语言航班搜索
- 通过函数调用自动提取参数
- 通过 stdio 与
mcp-flight-search
工具集成 - 航班结果的格式化 JSON 输出
- 基于环境变量的 API 密钥配置
前提条件
在运行此客户端之前,您需要:
- Python 3.7+
- 用于 Gemini 的 Google AI Studio API 密钥
- SerpAPI 密钥(由航班搜索工具使用)
- 已安装
mcp-flight-search
包
依赖项
本项目依赖于几个 Python 包:
-
google-generativeai: Google 官方 Python 库,用于访问 Gemini 2.5 Pro 和其他 Google AI 模型。
- 提供 Gemini 2.5 Pro 的客户端接口
- 处理函数调用功能
- 管理 API 身份验证和请求
-
mcp-sdk-python: 用于 Python 的模型上下文协议 (MCP) SDK。
- 提供用于管理 MCP 通信的
ClientSession
- 包含用于配置服务器进程的
StdioServerParameters
- 处理工具注册和调用
- 提供用于管理 MCP 通信的
-
mcp-flight-search: 使用 MCP 构建的航班搜索服务。
- 使用 SerpAPI 实现航班搜索功能
- 提供符合 MCP 的航班搜索工具
- 处理 stdio 和 HTTP 通信模式
-
asyncio: Python 的内置库,用于编写异步代码。
- 管理异步操作和协程
- 处理并发 I/O 操作
- MCP 客户端-服务器通信所需
-
json: Python 的内置 JSON 编码器和解码器。
- 解析航班搜索结果
- 格式化输出以供显示
- 处理数据序列化/反序列化
设置
-
克隆存储库:
git clone https://github.com/arjunprabhulal/mcp-gemini-search.git cd mcp-gemini-search
-
安装依赖项:
# 安装所需的 Python 库 pip install -r requirements.txt # 安装 MCP 航班搜索工具 pip install mcp-flight-search
-
设置环境变量:
export GEMINI_API_KEY="YOUR_GEMINI_API_KEY" export SERP_API_KEY="YOUR_SERPAPI_API_KEY"
将占位符值替换为您的实际 API 密钥:
- 从 Google AI Studio 获取您的 Gemini API 密钥
- 从 SerpApi 获取您的 SerpAPI 密钥
架构
本项目集成了多个组件以实现自然语言航班搜索。以下是系统的工作方式:
组件交互
-
用户到客户端
- 用户提供自然语言查询(例如,“查找明天从亚特兰大到拉斯维加斯的航班”)
- 客户端脚本 (
client.py
) 处理输入
-
客户端到 MCP 服务器
- 客户端启动 MCP 服务器进程 (
mcp-flight-search
) - 建立 stdio 通信通道
- 检索可用的工具及其描述
- 客户端启动 MCP 服务器进程 (
-
客户端到 Gemini 2.5 Pro
- 发送用户的查询
- 提供工具描述以进行函数调用
- 接收带有提取参数的结构化函数调用
-
客户端到 MCP 工具
- 从 Gemini 获取函数调用参数
- 使用参数调用适当的 MCP 工具
- 处理响应处理
-
MCP 服务器到 SerpAPI
- MCP 服务器向 SerpAPI 发出请求
- 查询 Google Flights 数据
- 处理和格式化航班信息
数据流
-
输入处理
用户查询 → 自然语言文本 → Gemini 2.5 Pro → 结构化参数
-
航班搜索
参数 → MCP 工具 → SerpAPI → 航班数据 → JSON 响应
-
结果处理
JSON 响应 → 解析 → 格式化 → 显示给用户
通信协议
-
客户端 ↔ MCP 服务器
- 使用 stdio 通信
- 遵循 MCP 协议进行工具注册和调用
- 处理异步操作
-
MCP 服务器 ↔ SerpAPI
- HTTPS 请求
- JSON 数据交换
- API 密钥身份验证
-
客户端 ↔ Gemini 2.5 Pro
- HTTPS 请求
- 函数调用协议
- API 密钥身份验证
错误处理
该集成包括多个级别的错误处理:
- 输入验证
- API 通信错误
- 工具执行失败
- 响应解析问题
- 数据格式问题
用法
运行客户端:
python client.py
该脚本将:
- 启动 MCP 航班搜索服务器进程
- 将您的航班搜索查询发送到 2.5 Pro
- 使用 Gemini 的函数调用来提取搜索参数
- 通过 MCP 工具执行搜索
- 显示格式化的结果
相关项目
此客户端使用 mcp-flight-search
工具,该工具可在以下位置获得:
- GitHub: arjunprabhulal/mcp-flight-search
- PyPI: mcp-flight-search
作者
有关 AI/ML 和生成式 AI 的更多文章,请在 Medium 上关注我:@arjun-prabhulal
许可证
本项目根据 MIT 许可证获得许可。
推荐服务器
Crypto Price & Market Analysis MCP Server
一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。
MCP PubMed Search
用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。
mixpanel
连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。

Sequential Thinking MCP Server
这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

Nefino MCP Server
为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。
Vectorize
将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。
Mathematica Documentation MCP server
一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。
kb-mcp-server
一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。
Research MCP Server
这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

Cryo MCP Server
一个API服务器,实现了模型补全协议(MCP),用于Cryo区块链数据提取,允许用户通过任何兼容MCP的客户端查询以太坊区块链数据。