From 346f891b5bb03ac7004b22e2e10d7536ac9a30cf Mon Sep 17 00:00:00 2001 From: saidsurucu Date: Sun, 29 Jun 2025 21:01:27 +0300 Subject: [PATCH] Update asgi_app.py --- asgi_app.py | 149 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 85 insertions(+), 64 deletions(-) diff --git a/asgi_app.py b/asgi_app.py index fe90e23..2a503b6 100644 --- a/asgi_app.py +++ b/asgi_app.py @@ -2,77 +2,28 @@ ASGI application for Yargı MCP Server This module provides ASGI/HTTP access to the Yargı MCP server, -allowing it to be deployed as a web service. +allowing it to be deployed as a web service with FastAPI wrapper +for Stripe webhook integration. Usage: uvicorn asgi_app:app --host 0.0.0.0 --port 8000 - -Or with custom transport: - uvicorn asgi_app:sse_app --host 0.0.0.0 --port 8000 """ import os +from fastapi import FastAPI, Request +from fastapi.responses import JSONResponse from starlette.middleware import Middleware from starlette.middleware.cors import CORSMiddleware -from starlette.requests import Request -from starlette.responses import JSONResponse, PlainTextResponse # Import the main MCP app from mcp_factory import create_app +# Import Stripe webhook router +from stripe_webhook import router as stripe_router + +# Create MCP server instance mcp_server = create_app() -# Add a health check endpoint -@mcp_server.custom_route("/health", methods=["GET"]) -async def health_check(request: Request) -> JSONResponse: - """Health check endpoint for monitoring""" - return JSONResponse({ - "status": "healthy", - "service": "Yargı MCP Server", - "version": "0.1.0", - "tools_count": len(mcp_server._tool_manager._tools) - }) - -@mcp_server.custom_route("/", methods=["GET"]) -async def root(request: Request) -> JSONResponse: - """Root endpoint with service information""" - return JSONResponse({ - "service": "Yargı MCP Server", - "description": "MCP server for Turkish legal databases", - "endpoints": { - "mcp": "/mcp/", - "health": "/health", - "status": "/status" - }, - "supported_databases": [ - "Yargıtay (Court of Cassation)", - "Danıştay (Council of State)", - "Emsal (Precedent)", - "Uyuşmazlık Mahkemesi (Court of Jurisdictional Disputes)", - "Anayasa Mahkemesi (Constitutional Court)", - "Kamu İhale Kurulu (Public Procurement Authority)", - "Rekabet Kurumu (Competition Authority)", - "Bedesten API (Multiple courts)" - ] - }) - -@mcp_server.custom_route("/status", methods=["GET"]) -async def status(request: Request) -> JSONResponse: - """Status endpoint with detailed information""" - tools = [] - for tool in mcp_server._tool_manager._tools.values(): - tools.append({ - "name": tool.name, - "description": tool.description[:100] + "..." if len(tool.description) > 100 else tool.description - }) - - return JSONResponse({ - "status": "operational", - "tools": tools, - "total_tools": len(tools), - "transport": "streamable_http" - }) - # Configure CORS middleware cors_origins = os.getenv("ALLOWED_ORIGINS", "*").split(",") custom_middleware = [ @@ -85,19 +36,89 @@ custom_middleware = [ ), ] -# Import Stripe webhook router -from stripe_webhook import router as stripe_router +# Create FastAPI wrapper application +app = FastAPI( + title="Yargı MCP Server", + description="MCP server for Turkish legal databases with JWT authentication", + version="0.1.0", + middleware=custom_middleware +) -# Create ASGI apps with different transports +# Add Stripe webhook router to FastAPI +app.include_router(stripe_router, prefix="/api") -# Recommended: Streamable HTTP transport -app = mcp_server.http_app( +# Create MCP Starlette sub-application +mcp_app = mcp_server.http_app( path="/mcp", middleware=custom_middleware ) -# Add Stripe webhook router -app.include_router(stripe_router, prefix="/api") +# Mount MCP app as sub-application +app.mount("/mcp", mcp_app) + +# FastAPI health check endpoint +@app.get("/health") +async def health_check(): + """Health check endpoint for monitoring""" + return JSONResponse({ + "status": "healthy", + "service": "Yargı MCP Server", + "version": "0.1.0", + "tools_count": len(mcp_server._tool_manager._tools), + "auth_enabled": os.getenv("ENABLE_AUTH", "false").lower() == "true" + }) + +# FastAPI root endpoint +@app.get("/") +async def root(): + """Root endpoint with service information""" + return JSONResponse({ + "service": "Yargı MCP Server", + "description": "MCP server for Turkish legal databases with JWT authentication", + "endpoints": { + "mcp": "/mcp/", + "health": "/health", + "status": "/status", + "stripe_webhook": "/api/stripe/webhook" + }, + "supported_databases": [ + "Yargıtay (Court of Cassation)", + "Danıştay (Council of State)", + "Emsal (Precedent)", + "Uyuşmazlık Mahkemesi (Court of Jurisdictional Disputes)", + "Anayasa Mahkemesi (Constitutional Court)", + "Kamu İhale Kurulu (Public Procurement Authority)", + "Rekabet Kurumu (Competition Authority)", + "Sayıştay (Court of Accounts)", + "Bedesten API (Multiple courts)" + ], + "authentication": { + "enabled": os.getenv("ENABLE_AUTH", "false").lower() == "true", + "type": "JWT Bearer Token", + "issuer": os.getenv("CLERK_ISSUER", "https://clerk.accounts.dev"), + "required_scopes": ["yargi.read"] + } + }) + +# FastAPI status endpoint +@app.get("/status") +async def status(): + """Status endpoint with detailed information""" + tools = [] + for tool in mcp_server._tool_manager._tools.values(): + tools.append({ + "name": tool.name, + "description": tool.description[:100] + "..." if len(tool.description) > 100 else tool.description + }) + + return JSONResponse({ + "status": "operational", + "tools": tools, + "total_tools": len(tools), + "transport": "streamable_http", + "architecture": "FastAPI wrapper + MCP Starlette sub-app", + "auth_status": "enabled" if os.getenv("ENABLE_AUTH", "false").lower() == "true" else "disabled" + }) # Alternative: SSE transport (for compatibility) sse_app = mcp_server.http_app(