|
| 1 | +"""Run with: cd servers && uvicorn deployed_mcp:app --host 0.0.0.0 --port 8000""" |
| 2 | + |
1 | 3 | import logging |
2 | 4 | import os |
3 | 5 | import uuid |
|
12 | 14 | from azure.monitor.opentelemetry import configure_azure_monitor |
13 | 15 | from dotenv import load_dotenv |
14 | 16 | from fastmcp import FastMCP |
15 | | -from opentelemetry_middleware import OpenTelemetryMiddleware |
| 17 | +from opentelemetry.instrumentation.starlette import StarletteInstrumentor |
| 18 | + |
| 19 | +try: |
| 20 | + from opentelemetry_middleware import OpenTelemetryMiddleware |
| 21 | +except ImportError: |
| 22 | + from servers.opentelemetry_middleware import OpenTelemetryMiddleware |
16 | 23 |
|
17 | 24 | RUNNING_IN_PRODUCTION = os.getenv("RUNNING_IN_PRODUCTION", "false").lower() == "true" |
18 | 25 |
|
|
23 | 30 | logger = logging.getLogger("ExpensesMCP") |
24 | 31 | logger.setLevel(logging.INFO) |
25 | 32 |
|
26 | | -# Configure OpenTelemetry tracing |
| 33 | +# Configure OpenTelemetry tracing, either via Azure Monitor or Logfire |
| 34 | +# We don't support both at the same time due to potential conflicts with tracer providers |
27 | 35 | if os.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING"): |
28 | 36 | logger.info("Setting up Azure Monitor instrumentation") |
29 | 37 | configure_azure_monitor() |
30 | 38 | elif os.getenv("LOGFIRE_PROJECT_NAME"): |
31 | 39 | logger.info("Setting up Logfire instrumentation") |
32 | | - settings.tracing_implementation = "opentelemetry" # Send Azure Monitor traces via OpenTelemetry |
| 40 | + settings.tracing_implementation = "opentelemetry" # Configure Azure SDK to use OpenTelemetry tracing |
33 | 41 | logfire.configure(service_name="expenses-mcp", send_to_logfire=True) |
34 | 42 |
|
35 | 43 | # Cosmos DB configuration from environment variables |
@@ -169,7 +177,4 @@ def analyze_spending_prompt( |
169 | 177 |
|
170 | 178 | # ASGI application for uvicorn |
171 | 179 | app = mcp.http_app() |
172 | | - |
173 | | -if __name__ == "__main__": |
174 | | - logger.info("MCP Expenses server starting (HTTP mode on port 8000)") |
175 | | - mcp.run(transport="http", host="0.0.0.0", port=8000) |
| 180 | +StarletteInstrumentor.instrument_app(app) |
0 commit comments