📈 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 files2.启动MCP服务器
# Start the server (runs on stdin/stdout by default)
python stock_server.py3.使用示例客户端进行测试
# 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:开始日期格式为mmddyyyyend_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关键部件说明
- MCP工具 (
@mcp.tool()装饰师)
- 充当人工智能和外部系统之间的接口 - 处理输入验证和错误管理 - 返回结构化JSON响应
- 业务逻辑 (数据处理功能)
- 解析和验证输入(日期、股票代码) - 从雅虎财经获取数据 - 计算统计数据并生成见解
- 资源 (
@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 作品
- 输入验证
# Convert mmddyyyy to yyyy-mm-dd
start_formatted = parse_date(start_date)- 数据获取
stock = yf.Ticker(ticker)
data = stock.history(start=start_formatted, end=end_formatted)- 统计分析
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操作 |
| 复杂性 | 中等(数据处理) | 高(业务逻辑) |
🎓 学习路径
初级水平
- 运行安装和测试脚本
- 了解基本工具定义
- 使用示例客户端进行测试
- 阅读生成的LaTeX指南
中级
- 修改现有工具以添加新统计信息
- 添加输入验证和错误处理
- 实现简单的缓存机制
- 为不同的财务数据创建新工具
高级水平
- 添加身份验证和速率限制
- 实施全面日志记录
- 构建具有数据库持久性的有状态服务器
- 部署到生产环境并进行监控
📚 额外资源
生成的文档
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🚀 后续步骤
- 扩展服务器
- 添加更多财务指标(RSI、MACD等) - 实施投资组合分析工具 - 添加加密货币支持
- 改进架构
- 添加数据库缓存层 - 实施用户身份验证 - 添加请求/响应日志记录
- 生产部署
- 使用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服务器实现的基本概念。*
