FinanceExpert
mcp-stock-server (FinanceExpert)
一个使用 FastMCP 构建的小型 Model Context Protocol 服务器。它通过 yfinance 公开 Yahoo Finance 市场数据,以便助手能够获取报价、CSV 格式的历史记录以及纯文本 Unicode 价格走势图。
要求
Python 3.11+
uv(推荐)或其他从
pyproject.toml安装依赖的方法
Related MCP server: Yahoo Finance MCP Server
设置
cd mcp-stock-server
uv sync运行 (stdio)
该服务器通过 stdio(mcp.run() 的默认方式)进行 MCP 通信:
uv run python server.py添加为 MCP 服务器 (Cursor)
打开 Cursor 设置 → MCP(或编辑您的 MCP JSON 配置 —— 在 macOS/Linux 上通常为
~/.cursor/mcp.json)。注册一个 stdio 服务器,其工作目录为该仓库,且命令以
server.py开头。
选项 A — uv run(推荐)
将 /absolute/path/to/mcp-stock-server 替换为您克隆该仓库的实际路径。
{
"mcpServers": {
"FinanceExpert": {
"command": "uv",
"args": ["run", "python", "server.py"],
"cwd": "/absolute/path/to/mcp-stock-server"
}
}
}执行 uv sync 后,这将使用 uv.lock 中的锁定依赖项。
选项 B — 项目虚拟环境 Python
如果您不想从 MCP 客户端调用 uv,请使用此选项:
{
"mcpServers": {
"FinanceExpert": {
"command": "/absolute/path/to/mcp-stock-server/.venv/bin/python",
"args": ["server.py"],
"cwd": "/absolute/path/to/mcp-stock-server"
}
}
}首先创建虚拟环境(在仓库根目录下):uv sync(将依赖项安装到 .venv 中)。
保存配置并重启 Cursor(或重新加载 MCP)。在 MCP 面板中,您应该能看到 FinanceExpert 以及工具
get_stock_analysis、get_historical_prices和get_stock_price_chart。
其他 MCP 客户端(例如 Claude Code、支持 MCP 的编辑器)使用相同的思路:通过 command + args + cwd 来配置 stdio 服务器。
工具
工具 | 描述 |
| 快照文本:当前价格、50 日均线、分析师建议关键指标(来自 |
| 以 CSV 格式获取每日 收盘价 列,回溯 |
| 框线绘制的 ASCII/Unicode 图表:包含区域填充、价格轴、时间轴上的开始/结束日期以及 8 步迷你走势图。 |
get_stock_price_chart 参数
ticker— 股票代码,例如INTU、AAPL。days— 当省略period时使用:Yahoo 范围Nd(日历天)。默认 30。period— 可选的 Yahoo 周期字符串;设置后将覆盖days。示例:10y、5y、1y、6mo、ytd、max。
示例:
最近一个月的交易时段(按日历天):
days=30最近十个日历年(Yahoo 窗口):
period="10y"
市场数据来自 Yahoo 的 yfinance;语义与 yfinance history(period=...) 一致。
免责声明
报价和历史记录仅供参考,不构成投资建议。Yahoo 数据可能会有延迟或包含错误;请在决策前独立核实。
Available Tools
3 toolsget_historical_pricesC
Fetches historical closing prices for chart generation.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | ||
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so description must disclose behavioral traits. It does not mention whether data is cached, any limits on 'days' parameter, or output format beyond 'closing prices'. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is one concise sentence, front-loaded with purpose. No fluff, but could be longer for completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, return values are covered. However, no guidance on parameter ranges or timezone for days, and no usage context for how this relates to chart generation. Incomplete for a tool with zero annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description should compensate. It adds no detail about 'ticker' or 'days' beyond their names. Baseline is 3 due to absence of param info in description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches historical closing prices for chart generation, specifying the action (fetch), resource (historical prices), and purpose (chart generation). However, it does not differentiate from sibling tools like get_stock_price_chart or get_stock_analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus siblings. It does not mention prerequisites, alternatives, or contexts where this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_analysisA
Fetches real-time stock price, 50-day average, and analyst recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It indicates the tool fetches data (non-destructive), but does not disclose any potential latency, rate limits, or data freshness. The output schema exists but is not referenced; description could hint at what fields are returned beyond what's in schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at one sentence, front-loading the key output fields. Every phrase adds value, with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one simple parameter and an output schema, the description could be more complete by adding a note about the ticker format or data source. It is adequate but lacks some contextual details like time zone or data provider.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (no description for the parameter), so the description must compensate. It does not explain what the ticker parameter expects (e.g., format, examples). However, the parameter has no enums and is simple, so the gap is small. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches real-time stock price, 50-day average, and analyst recommendations. The verb 'fetches' and the specific resources are well-defined, but it does not distinguish itself from sibling tools like get_historical_prices or get_stock_price_chart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for obtaining current price, average, and recommendations, but provides no explicit guidance on when to use this tool versus alternatives. For instance, it does not mention that get_historical_prices might be for historical data or get_stock_price_chart for chart data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_price_chartA
Plain-text Unicode chart. Pass period (e.g. 10y, 5y, 1y) for calendar ranges, or use days alone.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | ||
| days | No | ||
| period | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the output format (plain-text Unicode chart) and the two ways to specify time range, but does not mention rate limits, data latency, or whether it requires authentication. The behavior is partially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, no waste. It front-loads the key purpose and follows with parameter guidance. Efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, the description does not need to detail return structure. It covers the main purpose, parameter usage, and output format. For a simple chart tool with 3 parameters, this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains 'period' and 'days' parameters by specifying their relationship (period for calendar ranges, days alone). However, it does not describe the 'ticker' parameter or the exact format of 'period'. This adds some meaning but not comprehensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a verb-resource-action: it creates a plain-text Unicode chart for a stock. It is distinct from 'get_historical_prices' and 'get_stock_analysis' as it focuses on chart output, though it does not explicitly differentiate from those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear guidance on how to specify the time range: use period for calendar ranges or days alone. However, it does not explain when to prefer this tool over its siblings (e.g., when you need a visual chart vs. raw prices or analysis).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.0- First observed
get_historical_prices - First observed
get_stock_analysis - First observed
get_stock_price_chart
TDQS
Scored across 3 tools
Tools are mostly distinct: get_historical_prices provides raw data for charts, get_stock_analysis gives real-time price and fundamentals, and get_stock_price_chart returns a visual chart. However, get_historical_prices and get_stock_price_chart both relate to historical data, causing slight overlap.
All tools use a consistent get_verb_noun pattern (get_historical_prices, get_stock_analysis, get_stock_price_chart). Naming is clear and predictable.
With 3 tools covering historical data, real-time analysis, and charting, the set is appropriately scoped for a finance assistant. No tool feels unnecessary.
The tools cover basic stock data retrieval and charting but lack fundamental operations like search, comparison, or portfolio management. Gaps exist for a fully comprehensive finance tool.
Maintenance
Related MCP Connectors
Scrape stock quotes, historical prices, and financial statements from Yahoo Finance.
Fetch current stock prices and key data for symbols across global markets. Look up companies like…
Real-time stock quotes and technical signals: RSI, MACD, SMA crossovers via Yahoo Finance.
Portfolio-aware finance tools: drift, risk, earnings, benchmarks, news, tax harvesting
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables querying Yahoo Finance data including stock prices, historical data, financial statements, dividends, news, analyst recommendations, and company information through the yfinance library.-
- AlicenseNot gradedqualityDmaintenanceEnables LLMs to retrieve stock market data and financial information from Yahoo Finance using the yfinance Python library. Supports querying stock prices, historical data, and other financial metrics through natural language.MIT
- AlicenseAqualityDmaintenanceEnables retrieval of comprehensive financial data from Yahoo Finance, including stock prices, company info, financial statements, options, and news, for stock analysis and market research.9355MIT
- AlicenseAqualityCmaintenanceProvides access to Yahoo Finance data including real-time stock quotes, historical prices, financial statements, company info, symbol search, and news.644 npm1MIT