📁 File Structure
projects/sme-advisor-mcp/
├── main.py— FastAPI server + Google ADK agent (MCP client)
├── mcp_server.py— MCP data server (7 tools)
├── index.html— Chat interface with MCP status panel
├── dataset.csv— E-commerce dataset
├── requirements.txt— Python dependencies
└── Dockerfile— Container config for Cloud Run
🔑 Key Code: MCP Tool Registration
MCP tools are registered as wrappers that log every call before delegating to the MCP server. The _log_mcp_call pattern captures the tool name, parameters, and response for the status panel.
def _log_mcp_call(tool_name: str, params: dict, result: dict):
"""Log every MCP tool invocation for the status panel."""
mcp_log.append({
"tool": tool_name,
"params": params,
"rows_returned": len(result.get("data", [])),
"timestamp": datetime.now().isoformat()
})
def mcp_read_orders(category: str = "", region: str = "") -> dict:
"""Read orders from the MCP data server with optional filters."""
params = {"category": category, "region": region}
result = mcp_client.call("read_orders", params)
_log_mcp_call("read_orders", params, result)
return result
def mcp_get_sales_summary(period: str = "monthly") -> dict:
"""Get aggregated sales summary from MCP server."""
params = {"period": period}
result = mcp_client.call("get_sales_summary", params)
_log_mcp_call("get_sales_summary", params, result)
return result
agent = Agent(
model="gemini-2.0-flash",
name="sme_advisor_mcp",
instruction=SYSTEM_PROMPT,
tools=[mcp_read_orders, mcp_get_sales_summary, mcp_get_profit,
mcp_get_returns, mcp_get_discounts, mcp_get_customers,
mcp_get_delivery],
)
🔑 Key Code: MCP Status Panel
The chat interface includes a live MCP status panel showing connection state, data source info, and available tools. This panel updates after every MCP call to show real-time data flow.
<div class="mcp-status-panel">
<h3>MCP Connection Status</h3>
<div class="status-row">
<span>Status:</span>
<span id="mcp-status" class="connected">Connected</span>
</div>
<div class="status-row">
<span>Source:</span>
<span id="mcp-source">dataset.csv</span>
</div>
<div class="status-row">
<span>Rows:</span>
<span id="mcp-rows">34,500</span>
</div>
<div class="status-row">
<span>Columns:</span>
<span id="mcp-cols">17</span>
</div>
<div class="tools-list">
<h4>Available MCP Tools (7)</h4>
<ul id="mcp-tools"></ul>
</div>
</div>
📦 Dependencies (requirements.txt)
google-adk
google-genai
fastapi
uvicorn
pandas