Skip to main content
Glama
geddamsatish

FinanceExpert

by geddamsatish

mcp-stock-server (FinanceExpert)

FastMCP로 구축된 소규모 Model Context Protocol 서버입니다. yfinance를 통해 Yahoo Finance 시장 데이터를 제공하므로, 어시스턴트가 시세, CSV 형식의 과거 데이터, 일반 텍스트 유니코드 가격 차트를 가져올 수 있습니다.

요구 사항

  • Python 3.11+

  • uv (권장) 또는 pyproject.toml에서 종속성을 설치하는 다른 방법

Related MCP server: Yahoo Finance MCP Server

설정

cd mcp-stock-server
uv sync

실행 (stdio)

이 서버는 stdio를 통해 MCP와 통신합니다(mcp.run()의 기본값):

uv run python server.py

MCP 서버로 추가 (Cursor)

  1. Cursor 설정 → MCP를 엽니다(또는 MCP JSON 설정을 편집하세요 — macOS/Linux에서는 보통 ~/.cursor/mcp.json).

  2. 작업 디렉토리가 이 저장소이고 명령어가 server.py로 시작하는 stdio 서버를 등록합니다.

옵션 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에 종속성 설치).

  1. 설정을 저장하고 Cursor를 재시작(또는 MCP를 새로고침)합니다. MCP 패널에서 get_stock_analysis, get_historical_prices, get_stock_price_chart 도구가 포함된 FinanceExpert를 확인할 수 있습니다.

다른 MCP 클라이언트(예: Claude Code, MCP를 지원하는 편집기)도 동일한 개념을 사용합니다: stdio 서버를 위한 command + args + cwd.

도구

도구

설명

get_stock_analysis

스냅샷 텍스트: 현재 가격, 50일 이동 평균, 애널리스트 추천 키(Ticker.info에서 가져옴).

get_historical_prices

days 달력 일수만큼의 기간에 대한 일일 종가(close) 열을 CSV로 제공(period=f"{days}d"). 기본값 days=30.

get_stock_price_chart

박스 형태의 ASCII/유니코드 차트: 영역 채우기, 가격 축, 시간 축의 시작/종료 날짜, 8단계 스파크라인.

get_stock_price_chart 매개변수

  • ticker — 심볼, 예: INTU, AAPL.

  • days**period**가 생략되었을 때 사용: Yahoo 범위 Nd(달력 일수). 기본값 30.

  • period — 선택적 Yahoo 기간 문자열; 설정 시 **days**보다 우선합니다. 예: 10y, 5y, 1y, 6mo, ytd, max.

예시:

  • 지난 한 달간의 세션(달력 일수 기준): days=30

  • 지난 10년(Yahoo 윈도우): period="10y"

시장 데이터는 yfinance를 통해 Yahoo에서 가져오며, 의미론은 yfinance history(period=...)와 일치합니다.

면책 조항

시세 및 과거 데이터는 정보 제공용일 뿐이며 투자 조언이 아닙니다. Yahoo 데이터는 지연되거나 오류가 포함될 수 있으므로, 의사 결정 시 독립적으로 확인하십시오.

Available Tools

3 tools
get_historical_pricesC

Fetches historical closing prices for chart generation.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYes
daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYes
daysNo
periodNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

  1. 3 tool updatesv0.1.0
    • First observedget_historical_prices
    • First observedget_stock_analysis
    • First observedget_stock_price_chart

TDQS

A3.5/5.0

Scored across 3 tools

Disambiguation4/5

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.

Naming Consistency5/5

All tools use a consistent get_verb_noun pattern (get_historical_prices, get_stock_analysis, get_stock_price_chart). Naming is clear and predictable.

Tool Count5/5

With 3 tools covering historical data, real-time analysis, and charting, the set is appropriately scoped for a finance assistant. No tool feels unnecessary.

Completeness3/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables querying Yahoo Finance data including stock prices, historical data, financial statements, dividends, news, analyst recommendations, and company information through the yfinance library.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
  • A
    license
    A
    quality
    D
    maintenance
    Enables retrieval of comprehensive financial data from Yahoo Finance, including stock prices, company info, financial statements, options, and news, for stock analysis and market research.
    9
    355
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Provides access to Yahoo Finance data including real-time stock quotes, historical prices, financial statements, company info, symbol search, and news.
    6
    44 npm
    1
    MIT