MCP库存查询系统
一个基于模型上下文协议(MCP)构建的智能股票数据检索系统,该系统将AI驱动的查询理解与可靠的金融数据访问相结合。该系统利用谷歌的Gemini AI来解析自然语言查询,并自动选择合适的工具来获取股市信息。
特点/特性
- 🤖 基于人工智能的查询理解:利用Google Gemini解析自然语言股票查询
- 📊 双数据源:以雅虎财经API为主,辅以CSV作为后备以确保可靠性
- 🔄 自动工具选择:将用户查询智能映射到合适的内置工具
- 💬 交互式聊天界面:简洁的命令行界面,支持自然对话
- 🛡️ 强大的错误处理:全面的回退机制和错误恢复功能
- ⚡ 异步处理:高性能异步操作,提升响应速度
建筑学
该系统由两个主要组件构成:
MCP 客户端(mcp_client.py)
- 处理用户输入和自然语言处理
- 通过stdio通信连接到MCP服务器
- 使用Gemini AI来识别合适的工具和论据
- 管理交互式用户会话
MCP 服务器(mcp_server.py)
- 通过MCP协议提供股票数据工具
- 实现与Yahoo Finance API的集成,同时支持CSV作为备用方案
- 提供了两个主要工具:获取股票价格(get_stock_price)和比较股票(compare_stocks)
- 自动处理数据源故障转移
安装
先决条件
- Python 3.10或更高版本
- 谷歌AI API密钥(Gemini)
- 用于获取雅虎财经数据的互联网连接
设置步骤
- 克隆或下载项目文件
- 安装依赖项:
pip install -r requirements.txt- 配置环境变量(.env):
GEMINI_API_KEY=your_gemini_api_key_here- 更新工作目录:
cwd="C:/your/project/path" # Update this path- 确保
stocks_data.csv在您的工作目录中存在一个文件。当Yahoo Finance API因网络问题或服务中断而无法使用时,此CSV文件作为备用数据源。本地数据集包含精选的高表现股票的价格信息,以便提供可靠的关键市场数据离线访问。
使用方法
启动系统
- 运行客户端:
python mcp_client.py- 输入自然语言查询:
What is your query? → What's the current price of Apple?
What is your query? → compare stock price of Apple and Microsoft示例交互
单只股票查询:
Input: "What's the price of AAPL?"
Output: The current price of AAPL is $150.25 (from Yahoo Finance)股票对比:
Input: "Compare Apple and Microsoft stocks"
Output: AAPL ($150.25 YF) is lower than MSFT ($380.50 YF).备用数据:
Input: "Get Tesla stock price"
Output: The current price of TSLA is $250.87 (from local data)文件结构
├── mcp_client.py # Main client application
├── mcp_server.py # MCP server with stock tools
├── .env # Environment variables (API keys)
├── requirements.txt # Python dependencies
├── stocks_data.csv # Fallback stock data
└── README.md # This file可用工具
get_stock_price
- 目的:获取单一股票代码的当前股价
- 参数:
symbol (string): Stock ticker symbol (e.g., "AAPL", "MSFT")
- 示例用法:
"What's Apple's stock price?"
"Get TSLA price"
"Show me Microsoft stock value"compare_stocks
- 目的:比较两个股票代码的价格
- 参数:
symbol1 (string): First stock ticker symbol
symbol2 (string): Second stock ticker symbol- 示例用法:
"Compare Apple and Google stocks"
"Which is higher, MSFT or AAPL?"
"Show me Tesla vs Ford stock prices"配置
API密钥
在.env文件中设置您的Gemini API密钥:
GEMINI_API_KEY=your_actual_api_key_here工作目录
在 mcp_client.py 中更新 cwd 参数:
server_params = StdioServerParameters(
command="python",
args=["mcp_server.py"],
cwd="/path/to/your/project" # Update this
)CSV 数据格式
备用的CSV文件应遵循以下结构:
symbol,price,last_updated
AAPL,150.25,2024-01-15
MSFT,380.50,2024-01-15数据来源
主要来源:雅虎财经
- 通过yfinance库获取实时股票数据
- 全面的市场覆盖
- 自动重试机制
备用方案:本地CSV文件
- 当雅虎财经不可用时的离线数据访问
- 可定制的股票池
- 快速本地查找
故障排除
常见问题
访问雅虎财经时出现“TLS连接错误”或“OpenSSL库无效”
错误:无法获取股票代码“AAPL”的信息,原因:执行失败,curl: (35) TLS 连接失败 错误:错误:00000000:无效库 (0):OPENSSL_internal:无效库 (0)。
原因当您的环境存在网络限制、防火墙策略或SSL/TLS配置问题,导致无法安全连接到雅虎财经服务器时,会出现此错误。
常见场景:
- 具有严格SSL/TLS策略的企业网络
- 过时的OpenSSL库或证书
- VPN或代理配置阻止了金融API的访问
- 受限网络环境(机构、教育领域)
解决方案该系统自动回退到本地数据(stocks_data.csv)当无法访问雅虎财经时。请确认您的查询符号存在于CSV文件中,以便成功检索数据。
手动解决:
- 更新系统中的OpenSSL库
- 如果处于公司防火墙后,请配置代理设置
- 请联系您的网络管理员以获取API访问权限
- 确保
stocks_data.csv包含所需的股票代码作为备用
“连接错误”:
- 验证mcp_server.py是否在正确的目录中
- 检查 mcp_client.py 中的 cwd 参数
- 确保Python已添加到系统的PATH中
“无法获取价格”
- 验证股票代码是否正确
- 检查Yahoo Finance的网络连接
- 确保stocks_data.csv文件存在且格式正确
API密钥错误:
- 验证GEMINI_API_KEY是否已在.env文件中设置
- 检查API密钥的有效性和配额
- 确保 .env 文件位于项目根目录
调试模式
为了进行详细调试,请检查控制台输出,其中显示:
- 连接状态
- 工具识别过程
- 数据源选择
- 错误详情
依赖项
- mcp\[cli\]==1.8.1 - 模型上下文协议框架
- yfinance==0.2.61 - Yahoo Finance API包装器
- google-genai==1.15.0 - Google Gemini AI 客户端
- python-dotenv==1.1.0 - 环境变量管理
