股票查询系统

基于模型上下文协议(MCP)的智能股票数据检索系统,结合AI驱动的查询理解和可靠的金融数据访问。

  • by kavitaj11
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 kavitaj11/MCP_Client_Server_Financial_Trading_Data_Provider_Application

使用说明

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)

  • 用于获取雅虎财经数据的互联网连接

设置步骤

  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:无效库 (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 - 环境变量管理