Finnhub MCP Server

from fastmcp import FastMCP from dotenv import load_dotenv from finnhub import Client import logging import os MCP_SERVER_NAME = "mcp-finnhub" logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" ) logger = logging.getLogger(MCP_SERVER_NAME) load_dotenv() deps = ["finnhub-python", "python-dotenv"] finnhub_client = Client(api_key=os.getenv("FINNHUB_API_KEY")) mcp = FastMCP(MCP_SERVER_NAME, dependencies=deps) @mcp.tool(name="list_news", description="List all latest market news") def list_news(category: str = "general", count: int = 10): logger.info(f"Fetching {category} news") news = finnhub_client.general_news(category) return news[:count] @mcp.tool(name="get_market_data", description="Get market data for a given stock") def get_market_data(stock: str): logger.info(f"Fetching market data for {stock}") return finnhub_client.quote(stock) @mcp.tool( name="get_basic_financials", description="Get basic financials for a given stock" ) def get_basic_financials(stock: str, metric: str = "all"): logger.info(f"Fetching basic financials for {stock}") return finnhub_client.company_basic_financials(stock, metric) @mcp.tool( name="get_recommendation_trends", description="Get recommendation trends for a given stock", ) def get_recommendation_trends(stock: str): logger.info(f"Fetching recommendation trends for {stock}") return finnhub_client.recommendation_trends(stock)