NewApp / backend /api /mcp_server.py
tejani's picture
Upload 75 files
5b16c73 verified
import platform
import uvicorn
from backend.device import get_device_name
from backend.models.device import DeviceInfo
from constants import APP_VERSION, DEVICE
from context import Context
from fastapi import FastAPI, Request
from fastapi_mcp import FastApiMCP
from state import get_settings
from fastapi.middleware.cors import CORSMiddleware
from models.interface_types import InterfaceType
from fastapi.staticfiles import StaticFiles
app_settings = get_settings()
app = FastAPI(
title="FastSD CPU",
description="Fast stable diffusion on CPU",
version=APP_VERSION,
license_info={
"name": "MIT",
"identifier": "MIT",
},
describe_all_responses=True,
describe_full_response_schema=True,
)
origins = ["*"]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
print(app_settings.settings.lcm_diffusion_setting)
context = Context(InterfaceType.API_SERVER)
app.mount("/results", StaticFiles(directory="results"), name="results")
@app.get(
"/info",
description="Get system information",
summary="Get system information",
operation_id="get_system_info",
)
async def info() -> dict:
device_info = DeviceInfo(
device_type=DEVICE,
device_name=get_device_name(),
os=platform.system(),
platform=platform.platform(),
processor=platform.processor(),
)
return device_info.model_dump()
@app.post(
"/generate",
description="Generate image from text prompt",
summary="Text to image generation",
operation_id="generate",
)
async def generate(
prompt: str,
request: Request,
) -> str:
"""
Returns URL of the generated image for text prompt
"""
app_settings.settings.lcm_diffusion_setting.prompt = prompt
images = context.generate_text_to_image(app_settings.settings)
image_names = context.save_images(
images,
app_settings.settings,
)
url = request.url_for("results", path=image_names[0])
image_url = f"The generated image available at the URL {url}"
return image_url
def start_mcp_server(port: int = 8000):
mcp = FastApiMCP(
app,
name="FastSDCPU MCP",
description="MCP server for FastSD CPU API",
base_url=f"http://localhost:{port}",
)
mcp.mount()
uvicorn.run(
app,
host="0.0.0.0",
port=port,
)