股票查询系统

一个基于模型上下文协议(MCP)的智能股票数据检索系统,结合AI驱动的查询理解和可靠的金融数据访问,提供股票市场信息查询和比较功能。

  • by vslsoni
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 vslsoni/MCP-Stock

使用说明

MCP库存查询系统

基于模型上下文协议(MCP)构建的智能股票数据检索系统,将人工智能支持的查询理解与可靠的财务数据访问相结合。该系统使用谷歌的Gemini AI来解释自然语言查询,并自动选择适当的工具来获取股市信息。

特性

  • AI驱动的查询理解:使用Google Gemini解释自然语言股票查询

  • 双重数据源:主要Yahoo Finance 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或更高版本

  • 谷歌人工智能API密钥(Gemini)

  • 雅虎财经数据的互联网连接

设置步骤

  1. 克隆或下载项目文件
  2. 安装依赖项:
pip install -r requirements.txt
  1. 配置环境变量(.env):
GEMINI_API_KEY=your_gemini_api_key_here
  1. 更新工作目录:
cwd="C:/your/project/path"  # Update this path
  1. 确保 stocks_data.csv 存在于您的工作目录中。当Yahoo Finance API因网络问题或服务中断而不可用时,此CSV文件用作后备数据源。本地数据集包含精心挑选的表现最佳的股票的价格信息,以提供对基本市场数据的可靠离线访问。

用法

启动系统

  1. 运行客户端:
python mcp_client.py
  1. 输入自然语言查询:
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:无效库(零)。

原因:当您的环境存在网络限制、防火墙策略或SSL/TLS配置问题,导致无法安全连接到雅虎财经服务器时,会发生此错误。

常见场景:

  • 具有严格SSL/TLS政策的企业网络
  • 过时的OpenSSL库或证书
  • 阻止金融API的VPN或代理配置
  • 受限的网络环境(机构、教育)

解决方案:系统自动回退到本地数据(stocks_data.csv)当雅虎财经无法访问时。验证CSV文件中是否存在查询符号,以便成功检索数据。

手动分辨率:

  • 更新系统的OpenSSL库
  • 如果位于公司防火墙之后,请配置代理设置
  • 请与网络管理员联系以获取API访问权限
  • 确保 stocks_data.csv 包含所需的股票代码作为备份

“连接错误”:

  • 验证mcp_server.py是否在正确的目录中
  • 检查mcp_client.py中的cwd参数
  • 确保Python在您的系统PATH中

“无法检索价格”:

  • 验证股票代码是否正确
  • 检查雅虎财经的互联网连接
  • 确保stocks_data.csv存在并且格式正确

“API密钥错误”:

  • 验证在.env中是否设置了GEMINI_API_KEY
  • 检查API密钥有效性和配额
  • 确保.env文件位于项目根目录中

调试模式

有关详细的调试,请检查控制台输出,其中显示:

  • 连接状态
  • 工具识别过程
  • 数据源选择
  • 错误详细信息

依赖项

  • mcp[cli]==1.8.1-模型上下文协议框架
  • yfnance==0.2.61-雅虎财经API包装器
  • 谷歌genai==1.15.0-谷歌双子座人工智能客户端
  • python dotenv==1.1.0-环境变量管理