股票数据分析服务器

一个基于MCP协议的股票数据分析服务器,提供股票历史数据获取、价格图表生成和股票比较功能,适用于金融分析和AI模型集成。

  • by anishiisc
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 anishiisc/mcp_stock_price_analysis

使用说明

📈 MCP股票服务器-完整指南

通过股价服务器示例理解模型上下文协议(MCP)

由普拉克沙大学Anish Roychowdhury博士创建

🎯 你将学到什么

本综合教程将教您如何通过创建股票价格分析服务器来构建MCP服务器。你会明白:

  • MCP服务器如何桥接AI模型和外部数据源
  • 工具、资源和业务逻辑之间的关系
  • 错误处理、缓存和安全最佳实践
  • 测试和调试MCP服务器
  • 现实部署考虑因素

📋 先决条件

  • Python 3.8或更高版本
  • Python中async/await的基本理解
  • 熟悉API和JSON

🚀 快速开始

1.设置和安装

# Clone or download all the files
# Run the automated setup
python setup_and_test.py

# This will:
# ✅ Install all required packages
# ✅ Verify your Python environment  
# ✅ Test Yahoo Finance connectivity
# ✅ Create configuration files

2.启动MCP服务器

# Start the server (runs on stdin/stdout by default)
python stock_server.py

3.使用示例客户端进行测试

# Run automated demo
python example_client.py

# Run interactive mode
python example_client.py interactive

📁 项目结构

mcp_stock_project/
├── 📄 stock_server.py              # Main MCP server implementation
├── 📄 example_client.py            # Test client with examples
├── 📄 setup_and_test.py           # Automated setup and verification
├── 📄 debug_and_troubleshoot.py   # Debugging utilities
├── 📄 requirements.txt            # Python dependencies
├── 📄 test_config.json           # Test configuration (auto-generated)
├── 📄 USAGE.md                   # Usage examples (auto-generated)
├── 📄 README.md                  # This file
└── 📄 mcp_guide.tex              # Comprehensive LaTeX guide

🔧 可用工具

1. get_stock_data

获取历史库存数据并计算关键统计数据。

参数:

  • ticker:股票代码(例如“AAPL”、“GOOGL”)
  • name:用于分析的描述性名称
  • start_date:开始日期格式为mmddyyyy
  • end_date:结束日期,格式为mmddyyyy

例子:

{
  "ticker": "AAPL",
  "name": "Apple Analysis", 
  "start_date": "01012024",
  "end_date": "12312024"
}

2. plot_stock_price

生成包含交易量数据的股价图表。

退货: Base64编码的PNG图像

3. compare_stocks

比较两只股票在一段时间内的表现。

例子:

{
  "ticker1": "AAPL",
  "ticker2": "GOOGL",
  "start_date": "01012024", 
  "end_date": "12312024"
}

📊 了解MCP架构

工具链流程

AI Client Request → MCP Server Tool → Yahoo Finance API → Data Processing → Response

关键部件说明

  1. MCP工具 (@mcp.tool() 装饰师)

    • 充当人工智能和外部系统之间的接口
    • 处理输入验证和错误管理
    • 返回结构化JSON响应
  2. 业务逻辑 (数据处理功能)

    • 解析和验证输入(日期、股票代码)
    • 从雅虎财经获取数据
    • 计算统计数据并生成见解
  3. 资源 (@mcp.resource() 装饰师)

    • 提供对数据的只读访问
    • 例子: stock://data/AAPL 获取公司信息

🛠️ 调试和故障排除

运行综合测试

# Test all components
python debug_and_troubleshoot.py

# This checks:
# ✅ All package imports
# ✅ Yahoo Finance connectivity
# ✅ Date parsing functions
# ✅ Matplotlib chart generation
# ✅ MCP server startup
# ✅ JSON-RPC communication

常见问题及解决方法

问题 原因 解决方案
ImportError: fastmcp 软件包未安装 pip install fastmcp
No data returned 无效的股票代码或日期范围 检查股票代码和日期
Rate limiting errors API调用过多 添加调用之间的延迟
Plot generation fails Matplotlib后端问题 使用 matplotlib.use('Agg')

🔍 详细代码演练

如何 get_stock_data 作品

  1. 输入验证

    # Convert mmddyyyy to yyyy-mm-dd
    start_formatted = parse_date(start_date)
    
  2. 数据获取

    stock = yf.Ticker(ticker)
    data = stock.history(start=start_formatted, end=end_formatted)
    
  3. 统计分析

    stats = {
        "opening_price": round(data['Open'].iloc[0], 2),
        "closing_price": round(data['Close'].iloc[-1], 2),
        "percentage_change": round(((data['Close'].iloc[-1] / data['Open'].iloc[0]) - 1) * 100, 2)
    }
    

与帐户服务器示例的比较

特性 股票服务器 账户服务器
状态 无状态(无持久性) 有状态(数据库)
数据源 雅虎财经API 内部数据库
运营 只读查询 CRUD操作
复杂性 中等(数据处理) 高(业务逻辑)

🎓 学习路径

初级水平

  1. 运行安装和测试脚本
  2. 了解基本工具定义
  3. 使用示例客户端进行测试
  4. 阅读生成的LaTeX指南

中级

  1. 修改现有工具以添加新统计信息
  2. 添加输入验证和错误处理
  3. 实现简单的缓存机制
  4. 为不同的财务数据创建新工具

高级水平

  1. 添加身份验证和速率限制
  2. 实施全面日志记录
  3. 构建具有数据库持久性的有状态服务器
  4. 部署到生产环境并进行监控

📚 额外资源

生成的文档

  • mcp_guide.pdf -综合视觉指南(由LaTeX编译)
  • USAGE.md -命令示例和JSON-RPC示例
  • debug_report.json -详细的测试结果

掌握关键概念

  • JSON-RPC通信 -MCP如何使用此协议
  • 异步编程 -理解异步/等待模式
  • 错误处理 -优雅的失败和恢复
  • 数据验证 -输入净化和验证
  • API速率限制 -处理外部API约束

🔐 安全考虑

输入验证

# Always validate and sanitize inputs
def validate_ticker(ticker: str) -> bool:
    return bool(re.match(r'^[A-Z0-9]{1,5}$', ticker.upper()))

速率限制

# Implement delays between API calls
@rate_limit(0.5)  # Max 1 call per 2 seconds
def get_stock_data(ticker):
    # API call here

🚀 后续步骤

  1. 扩展服务器

    • 添加更多财务指标(RSI、MACD等)
    • 实施投资组合分析工具
    • 添加加密货币支持
  2. 改进架构

    • 添加数据库缓存层
    • 实施用户身份验证
    • 添加请求/响应日志记录
  3. 生产部署

    • 使用Docker进行容器化
    • 设置监控和警报
    • 实施适当的配置管理

❓ 常见问题解答

Q: 为什么使用MCP而不是常规的API? A: MCP为AI模型发现和使用工具提供了一种标准化的方法,内置了对类型安全、文档和错误处理的支持。

Q: 我可以修改日期格式吗? A: 是的!这 parse_date 可以修改函数以接受不同的格式。当前的mmddyyyy格式只是一个示例。

Q: 如何添加身份验证? A: 您可以在工具函数中添加API密钥验证,或者实现OAuth2流以进行更复杂的身份验证。

Q: 这可以与其他数据源一起使用吗? A: 当然!用任何其他财务数据API(AlphaVantage、IEXCloud等)代替雅虎金融呼叫。

🤝 贡献

这是一个教育项目。请随意:

  • 添加新的财务分析工具
  • 改进错误处理和验证
  • 创建其他测试用例
  • 加强文件编制

📄 许可证

本教材按原样提供,用于学习目的。雅虎财经数据受其服务条款的约束。


由普拉克沙大学Anish Roychowdhury博士创建

本教程通过实际操作示例演示MCP服务器开发。目标是了解适用于任何MCP服务器实现的基本概念。