TushP's picture
Upload folder using huggingface_hub
bb9baa9 verified
"""
Generate Chart MCP Server
Provides both:
- MCP tools (for MCP server)
- Direct Python functions (for agent import)
"""
from fastmcp import FastMCP
from typing import Dict, Any, List
import os
# Initialize FastMCP server
mcp = FastMCP("Restaurant Chart Generator")
# ============ DIRECT PYTHON FUNCTIONS (for agent import) ============
def generate_sentiment_chart_direct(
items: List[Dict[str, Any]],
output_path: str = "outputs/sentiment_chart.png",
chart_type: str = "bar"
) -> str:
"""
Direct function: Generate sentiment visualization chart.
Args:
items: List of items with name and sentiment
output_path: Where to save the chart
chart_type: Type of chart
Returns:
Path to saved chart
"""
try:
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
names = [item['name'][:20] for item in items[:10]]
sentiments = [item['sentiment'] for item in items[:10]]
colors = []
for s in sentiments:
if s >= 0.7:
colors.append('#4CAF50')
elif s >= 0.3:
colors.append('#FFC107')
elif s >= 0:
colors.append('#FF9800')
else:
colors.append('#F44336')
fig, ax = plt.subplots(figsize=(12, 8))
bars = ax.barh(names, [abs(s) for s in sentiments], color=colors)
ax.set_xlabel('Sentiment Score', fontsize=12)
ax.set_title('Item Sentiment Analysis', fontsize=14, fontweight='bold')
for i, (bar, sentiment) in enumerate(zip(bars, sentiments)):
width = bar.get_width()
ax.text(width + 0.02, bar.get_y() + bar.get_height()/2,
f'{sentiment:+.2f}',
ha='left', va='center', fontsize=10)
green = mpatches.Patch(color='#4CAF50', label='Positive (≥0.7)')
yellow = mpatches.Patch(color='#FFC107', label='Mixed (0.3-0.7)')
orange = mpatches.Patch(color='#FF9800', label='Neutral (0-0.3)')
red = mpatches.Patch(color='#F44336', label='Negative (<0)')
ax.legend(handles=[green, yellow, orange, red])
os.makedirs(os.path.dirname(output_path), exist_ok=True)
plt.tight_layout()
plt.savefig(output_path, dpi=300, bbox_inches='tight')
plt.close()
return output_path
except Exception as e:
return f"Error generating chart: {str(e)}"
def generate_comparison_chart_direct(
data: Dict[str, float],
output_path: str = "outputs/comparison_chart.png",
title: str = "Comparison"
) -> str:
"""
Direct function: Generate comparison chart.
Args:
data: Dict of {name: value} pairs
output_path: Where to save
title: Chart title
Returns:
Path to saved chart
"""
try:
import matplotlib.pyplot as plt
names = list(data.keys())[:10]
values = [data[n] for n in names]
fig, ax = plt.subplots(figsize=(10, 6))
ax.bar(names, values, color='#2196F3')
ax.set_ylabel('Value')
ax.set_title(title, fontweight='bold')
plt.xticks(rotation=45, ha='right')
os.makedirs(os.path.dirname(output_path), exist_ok=True)
plt.tight_layout()
plt.savefig(output_path, dpi=300, bbox_inches='tight')
plt.close()
return output_path
except Exception as e:
return f"Error generating chart: {str(e)}"
# ============ MCP TOOLS (for MCP server) ============
@mcp.tool()
def generate_sentiment_chart(
items: List[Dict[str, Any]],
output_path: str = "outputs/sentiment_chart.png",
chart_type: str = "bar"
) -> str:
"""MCP Tool: Generate sentiment chart."""
return generate_sentiment_chart_direct(items, output_path, chart_type)
@mcp.tool()
def generate_comparison_chart(
data: Dict[str, float],
output_path: str = "outputs/comparison_chart.png",
title: str = "Comparison"
) -> str:
"""MCP Tool: Generate comparison chart."""
return generate_comparison_chart_direct(data, output_path, title)
# Run the MCP server
if __name__ == "__main__":
mcp.run()