X-Git-Url: https://us-delaporte.pagekite.me/gitweb/matrix-shop-bot.git/blobdiff_plain/86ee26b6c8c89ee9ecd9ef0872becda86b672f4c..8131771c2637405493978a03e3a9acddd516e3dd:/skill.py diff --git a/skill.py b/skill.py index 82540b0..bc99032 100644 --- a/skill.py +++ b/skill.py @@ -1,13 +1,44 @@ from fastmcp import FastMCP from matrix_shop_bot.db import Data import os +import uvicorn + +# CORS +from starlette.middleware import Middleware +from starlette.middleware.cors import CORSMiddleware + +# HTTP +from starlette.applications import Starlette +from starlette.routing import Mount + MY_IP=os.environ.get('MY_IP') mcp = FastMCP("Shop Bot") @mcp.tool -def add_item(name: str) -> 'list[str]': - return Data().add_item(name) +def add_item(name: str) -> str: + return '\n'.join(Data().add_item(name)) + + +# Configure CORS for browser-based clients +middleware = [ + Middleware( + CORSMiddleware, + allow_origins=["*"], # Allow all origins; use specific origins for security + allow_methods=["GET", "POST", "DELETE", "OPTIONS"], + allow_headers=[ + "mcp-protocol-version", + "mcp-session-id", + "Authorization", + "Content-Type", + ], + expose_headers=["mcp-session-id"], + ) +] + +# if __name__ == "__main__": + + #@mcp.tool #def buy(items:str) -> 'list[str]': @@ -44,4 +75,30 @@ def add_item(name: str) -> 'list[str]': # return Data().list_purchases(store) if __name__ == "__main__": - mcp.run(transport="http", host=MY_IP, port=9000) +# mcp.run( +# transport="http", +# host=MY_IP, +# stateless_http=True, +# port=9000) + + + # Create the ASGI app + mcp_app = mcp.http_app( + path="/mcp", + # middleware=middleware + ) + + # Create a Starlette app and mount the MCP server + app = Starlette( + routes=[ + Mount("/mcp-server", app=mcp_app), + # Add other routes as needed + ], + lifespan=mcp_app.lifespan, + ) + + # http_app = mcp.http_app(transport="streamable-http",path="/",middleware=custom_middleware) + http_app = mcp.http_app(transport="streamable-http",path="/",middleware=middleware) + # http_app = mcp.http_app(transport="streamable-http",path="/") + uvicorn.run(http_app, host=MY_IP, port=9000) +