63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
from mcp.server.fastmcp import FastMCP
|
|
from finance_crew import run_financial_analysis
|
|
|
|
# create FastMCP instance
|
|
mcp = FastMCP("financial-analyst")
|
|
|
|
@mcp.tool()
|
|
def analyze_stock(query: str) -> str:
|
|
"""
|
|
Analyzes stock market data based on the query and generates executable Python code for analysis and visualization.
|
|
Returns a formatted Python script ready for execution.
|
|
|
|
The query is a string that must contain the stock symbol (e.g., TSLA, AAPL, NVDA, etc.),
|
|
timeframe (e.g., 1d, 1mo, 1y), and action to perform (e.g., plot, analyze, compare).
|
|
|
|
Example queries:
|
|
- "Show me Tesla's stock performance over the last 3 months"
|
|
- "Compare Apple and Microsoft stocks for the past year"
|
|
- "Analyze the trading volume of Amazon stock for the last month"
|
|
|
|
Args:
|
|
query (str): The query to analyze the stock market data.
|
|
|
|
Returns:
|
|
str: A nicely formatted python code as a string.
|
|
"""
|
|
try:
|
|
result = run_financial_analysis(query)
|
|
return result
|
|
except Exception as e:
|
|
return f"Error: {e}"
|
|
|
|
|
|
@mcp.tool()
|
|
def save_code(code: str) -> str:
|
|
"""
|
|
Expects a nicely formatted, working and executable python code as input in form of a string.
|
|
Save the given code to a file stock_analysis.py, make sure the code is a valid python file, nicely formatted and ready to execute.
|
|
|
|
Args:
|
|
code (str): The nicely formatted, working and executable python code as string.
|
|
|
|
Returns:
|
|
str: A message indicating the code was saved successfully.
|
|
"""
|
|
try:
|
|
with open('stock_analysis.py', 'w') as f:
|
|
f.write(code)
|
|
return "Code saved to stock_analysis.py"
|
|
except Exception as e:
|
|
return f"Error: {e}"
|
|
|
|
@mcp.tool()
|
|
def run_code_and_show_plot() -> str:
|
|
"""
|
|
Run the code in stock_analysis.py and generate the plot
|
|
"""
|
|
with open('stock_analysis.py', 'r') as f:
|
|
exec(f.read())
|
|
|
|
# Run the server locally
|
|
if __name__ == "__main__":
|
|
mcp.run(transport='stdio') |