Metadata-Version: 2.4
Name: iflow-mcp_barvhaim-yfinance-mcp-server
Version: 0.1.0
Summary: Add your description here
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: black>=25.1.0
Requires-Dist: fastmcp>=2.10.2
Requires-Dist: pandas>=2.3.0
Requires-Dist: python-dotenv>=1.1.1
Requires-Dist: yfinance>=0.2.64

# YFinance MCP Server

A comprehensive Model Context Protocol (MCP) server that provides financial data through Yahoo Finance API integration. This server enables AI agents to access real-time stock market data, historical prices, financial statements, and market analysis.

![image](https://github.com/user-attachments/assets/a3cabdbb-9eb9-4743-83d9-25c2904aa234)

## Features

- **10 Comprehensive Financial Tools** for complete market data access
- **Real-time Stock Information** including prices, market cap, and key metrics
- **Historical Data Analysis** with flexible time periods and intervals
- **Financial Statements** (income statement, balance sheet, cash flow)
- **Earnings Data** (annual and quarterly)
- **Dividend and Split History**
- **News and Analyst Recommendations**
- **Stock Search and Multi-quote Support**
- **Robust Error Handling** with structured JSON responses
- **FastMCP Framework** with async support for high performance

## Quick Start

### Prerequisites

- Python 3.11+
- uv (Python package manager)

### Installation

```bash
# Clone the repository
git clone https://github.com/barvhaim/yfinance-mcp-server.git
cd yfinance-mcp-server

# Install dependencies
uv sync
```

### Running the Server

```bash
# Start the MCP server
uv run main.py

# The server will start and be ready to accept MCP client connections
```

## Available Tools

### 1. get_stock_info
Get comprehensive stock information including current price, market cap, and financial metrics.

**Parameters:**
- `symbol` (str): Stock ticker symbol (e.g., 'AAPL', 'GOOGL')

**Returns:** Stock information including price, market cap, P/E ratio, dividend yield, 52-week range, volume, beta, and company details.

### 2. get_historical_data
Retrieve historical stock price data with flexible time periods and intervals.

**Parameters:**
- `symbol` (str): Stock ticker symbol
- `period` (str): Time period (1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max)
- `interval` (str): Data interval (1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo)

**Returns:** Historical OHLCV data with dates and volume information.

### 3. get_dividends
Get dividend payment history for a stock.

**Parameters:**
- `symbol` (str): Stock ticker symbol

**Returns:** List of dividend payments with dates and amounts.

### 4. get_splits
Retrieve stock split history.

**Parameters:**
- `symbol` (str): Stock ticker symbol

**Returns:** List of stock splits with dates and split ratios.

### 5. get_financials
Get comprehensive financial statements.

**Parameters:**
- `symbol` (str): Stock ticker symbol
- `quarterly` (bool): Get quarterly data if True, annual if False

**Returns:** Income statement, balance sheet, and cash flow statement data.

### 6. get_earnings
Retrieve earnings data for analysis.

**Parameters:**
- `symbol` (str): Stock ticker symbol

**Returns:** Annual and quarterly earnings data.

### 7. get_news
Get recent news articles related to a stock.

**Parameters:**
- `symbol` (str): Stock ticker symbol
- `count` (int): Number of articles to return (default: 10)

**Returns:** List of news articles with titles, links, publishers, and timestamps.

### 8. get_recommendations
Get analyst recommendations and ratings.

**Parameters:**
- `symbol` (str): Stock ticker symbol

**Returns:** List of analyst recommendations with firms, ratings, and actions.

### 9. search_stocks
Search for stocks by company name or ticker symbol.

**Parameters:**
- `query` (str): Search query (company name or ticker)
- `limit` (int): Maximum results to return (default: 10)

**Returns:** List of matching stocks with symbols, names, and exchange information.

### 10. get_multiple_quotes
Get current quotes for multiple stocks simultaneously.

**Parameters:**
- `symbols` (List[str]): List of stock ticker symbols

**Returns:** Dictionary of stock quotes with current prices, changes, and basic metrics.

## Usage Examples

### Basic Stock Information
```python
# Get Apple stock information
result = await get_stock_info("AAPL")
print(f"Current Price: ${result['current_price']}")
print(f"Market Cap: ${result['market_cap']:,}")
```

### Historical Data Analysis
```python
# Get 1-year daily data for Google
result = await get_historical_data("GOOGL", period="1y", interval="1d")
print(f"Retrieved {result['count']} data points")
```

### Multiple Stock Quotes
```python
# Get quotes for tech stocks
result = await get_multiple_quotes(["AAPL", "GOOGL", "MSFT", "AMZN"])
for symbol, quote in result['quotes'].items():
    print(f"{symbol}: ${quote['current_price']}")
```

## MCP Client Integration

### Claude Desktop Integration

To connect this server with Claude Desktop:

1. **Start the server** in one terminal:
   ```bash
   uv run main.py
   ```

2. **Configure Claude Desktop** by editing your MCP settings file:
   
   **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
   
   **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

3. **Add the server configuration**:
   ```json
   {
      "yfinance": {
        "command": "uv",
        "args": [
          "--directory",
          "/path/to/yfinance-mcp-server",
          "run",
          "main.py"
        ]
      }
    }
   ```

4. **Update the cwd path** to your actual project directory

5. **Restart Claude Desktop** to load the new server

6. **Verify connection** by asking Claude: "What financial data tools do you have available?"

### Alternative: Direct Connection

For other MCP clients:

1. **Start the server**: `uv run main.py`
2. **Configure your MCP client** to connect to the server endpoint
3. **Tools will be automatically discovered** by your AI agent
4. **Use standard stock symbols** (AAPL, GOOGL, MSFT, etc.) with the tools

## Development

### Code Formatting
```bash
# Format code with black
uv run black .

# Check formatting
uv run black --check .

# Show formatting differences
uv run black --diff .
```

### Adding New Tools
1. Create a new async function in `main.py`
2. Decorate with `@mcp.tool()`
3. Add proper type hints and docstrings
4. Include error handling
5. Test the implementation

### Environment Variables
Copy `.env.sample` to `.env` for any configuration needed:
```bash
cp .env.sample .env
```

## Error Handling

All tools include comprehensive error handling:
- **Invalid symbols** return structured error messages
- **Network issues** are caught and reported
- **Data unavailability** is handled gracefully
- **Rate limiting** is respected automatically by yfinance

## Performance Considerations

- **Async operations** for optimal performance
- **Efficient data serialization** with structured JSON
- **Minimal data processing** to reduce latency
- **Built-in caching** by yfinance for frequently accessed data

## Dependencies

- **fastmcp** - FastMCP framework for MCP server implementation
- **yfinance** - Yahoo Finance API for financial data
- **python-dotenv** - Environment variable management
- **black** - Code formatting
- **pydantic** - Data validation and serialization

## License

This project is available under the MIT License.

## Contributing

1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Format code with black
6. Submit a pull request

## Support

For issues and questions:
- Check the [Issues](../../issues) section
- Review the `CLAUDE.md` file for development guidance
- Ensure all dependencies are properly installed with `uv sync`

## Changelog

### v0.1.0
- Initial implementation with 10 financial data tools
- FastMCP server framework integration
- Comprehensive error handling
- Full yfinance API coverage
- MCP client integration support
