Python MCP股票工具(FastMCP服务器+CLI客户端)
使用模型上下文协议(MCP)连接AI的小而集中的示例 真正工具的助手。FastMCP服务器公开了股票工具和Python CLI客户端要求Gemini选择正确的工具和参数,然后调用它 停下来
主要特点
- 从纯英语查询中选择Gemini驱动的工具
- 雅虎财经主要数据,CSV回退,可靠性高
- 客户端和服务器之间的简单stdio连接(无需配置套接字)
- 最小的依赖关系、清晰的结构和确定性提示
______________________________________________________________________
快速入门
前提条件
- Python 3.11+(使用3.13开发)
- Gemini API关键
.env作为GEMINI_API_KEY=...
设置
python -m venv venv
source venv/bin/activate # Windows: .\\venv\\Scripts\\activate
pip install -U pip
pip install -r requirements.txt跑
- 服务器(直接):
python mcp_server.py - 客户端(通过stdio生成服务器):
python mcp_client.py
尝试查询
What is your query? → What's the current price of AAPL?
What is your query? → Compare MSFT and AAPL______________________________________________________________________
项目结构
├── mcp_server.py # FastMCP server exposing tools
├── mcp_client.py # CLI: lists tools, asks Gemini, calls tool
├── requirements.txt # Pinned runtime deps
├── .env # Local secrets (e.g., GEMINI_API_KEY)
├── stocks_data.csv # Optional CSV fallback data
└── README.md______________________________________________________________________
运作原理
流动
mcp_client.py列出了MCP stdio上的服务器工具。- 它用一个确定性的、仅支持JSON的指令提示Gemini选择一个
工具和论据。
- 客户端通过MCP调用所选工具并打印结果。
数据源
- 主要:雅虎财经
yfinance - 退路:
stocks_data.csv带模式symbol,price,last_updated
更新工作目录
- 客户端使用以下命令启动服务器
cwd开始mcp_client.py. - 如果您从其他地方运行,请确保它指向您的项目路径。
______________________________________________________________________
工具(服务器)
get_stock_price(symbol: str) -> str
- 使用雅虎财经返回当前价格,当
需要。
- 示例查询:“苹果的股价是多少?”,“获取TSLA价格”。
compare_stocks(symbol1: str, symbol2: str) -> str
- 比较两个较高的符号和报告(带有源代码提示)。
- 示例查询:“比较MSFT和AAPL”,“特斯拉与福特的价格”。
CSV格式
symbol,price,last_updated
AAPL,150.25,2024-01-15
MSFT,380.50,2024-01-15______________________________________________________________________
配置
.env
GEMINI_API_KEY=your_api_key_here确定性提示
fetch_tool_identifier_prompt()只需要JSON模型输出。- 客户端剥离代码围栏并解析JSON。如果
arguments作为a到达
字符串(例如“symbol,AAPL”),客户端将其强制转换为字典。
网络行为
- 避免紧张的投票。外部电话打给yfinance和Gemini;失败
尽可能回到CSV。
______________________________________________________________________
发展
棉绒/格式(可选)
pip install ruff black
ruff check .
black .编码风格
- Python 3.11+,4空格缩进,~88个字符行。
- 公共函数使用类型提示和短文档字符串。
- 名称:模块/函数
snake_case,类PascalCase,常数
UPPER_CASE.
- MCP工具使用
@mcp.tool(...)并返回简洁的文本。
______________________________________________________________________
测试
pip install pytest pytest-asyncio
pytest -q覆盖范围(可选)
pip install pytest-cov
pytest --cov=mcp_server --cov=mcp_client______________________________________________________________________
故障排除
Gemini/API密钥
- 确保
.env包含GEMINI_API_KEY并且密钥有效。
服务器启动路径
- 如果客户端无法连接,请验证
cwd在mcp_client.py匹配您的
项目目录。
雅虎财经/SSL或网络错误
- 在受限或不稳定的网络中,yfinance可能无法通过TLS/SSL。服务器将
回落到 stocks_data.csv。确保CSV中存在所需的符号。
未找到价格
- 确认股票代码以及是否可以获得融资或CSV
有一行用于符号。
______________________________________________________________________
贡献
- 使用常规承诺:
feat:,fix:,docs:,chore:,refactor:. - 保持公关小而专注。包括测试内容/原因、如何测试(命令和
预期输出)以及屏幕截图/终端片段(如果有用)。链接问题 喜欢 #12 在适用的情况下。
- 更新此README以了解行为变化;如果提示/API,则添加迁移注释
改变。
______________________________________________________________________
安全说明
- 不要泄露秘密。把它们放在里面
.env. - 尽量减少日志记录;永远不要打印秘密。
- 外部调用会攻击第三方API;清楚地处理错误,并在出现错误时退缩
弱点。
免责声明
- 仅用于教育/演示目的。不是财务建议。
