🔗 SME Business Advisor — MCP

Source Code — AI Agent + MCP Server

📁 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 # Register all MCP tools with the ADK agent 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.

<!-- MCP Status Panel in index.html --> <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 Agent Development Kit google-genai # Gemini API SDK fastapi # Web framework for API server uvicorn # ASGI server pandas # Data analysis library