X-Git-Url: https://us-delaporte.pagekite.me/gitweb/matrix-shop-bot.git/blobdiff_plain/c459b163b40e843daf86a6257c0c28026c4c126b..a23a70fa486a42c46e818392c6140361d4e4bd59:/skill.py diff --git a/skill.py b/skill.py index 355b9b2..428edc4 100644 --- a/skill.py +++ b/skill.py @@ -3,9 +3,13 @@ from matrix_shop_bot.db import Data import os import uvicorn +# CORS from starlette.middleware import Middleware from starlette.middleware.cors import CORSMiddleware -import uvicorn + +# HTTP +from starlette.applications import Starlette +from starlette.routing import Mount MY_IP=os.environ.get('MY_IP') @@ -15,42 +19,29 @@ mcp = FastMCP("Shop Bot") def add_item(name: str) -> str: return '\n'.join(Data().add_item(name)) -# Define custom middleware -custom_middleware = [ - Middleware(CORSMiddleware, allow_origins=["*"], - allow_methods=["*"], - allow_headers=["*"],), -] - -if __name__ == "__main__": - http_app = mcp.http_app(transport="streamable-http",path="/",middleware=custom_middleware) - uvicorn.run(http_app, host=MY_IP, port=9000) - - +@mcp.tool +def buy(items:str) -> 'list[str]': + return Data().purchase_items(items) -#@mcp.tool -#def buy(items:str) -> 'list[str]': -# return Data().purchase_items(items) -# -#@mcp.tool -#def list_bought(store:str) -> 'list[str]': -# return Data().list_purchases(store) +@mcp.tool +def list_bought(store:str) -> 'list[str]': + return Data().list_purchases(store) # #@mcp.tool #def clear(store_name: str, clear_all:bool=False) -> 'list[str]': # return Data().clear_list(store_name, clear_all) # # -#@mcp.tool -#def shop_at(store_name:str) -> 'list[str]': -# '''Select store to shop at''' -# return Data().get_shopping_list(store_name) -# -# -#@mcp.tool -#def list() -> 'list[str]': -# '''Use previous store''' -# return Data().get_last_shopping_list() +@mcp.tool +def shop_at(store_name:str) -> 'list[str]': + '''Select store to shop at''' + return Data().get_shopping_list(store_name) + + +@mcp.tool +def list() -> 'list[str]': + '''Use previous store''' + return Data().get_last_shopping_list() # # #@mcp.tool @@ -62,5 +53,43 @@ if __name__ == "__main__": #def list_purchases(store: str) -> 'list[str]': # return Data().list_purchases(store) -# if __name__ == "__main__": -# mcp.run(transport="http", host=MY_IP, port=9000) +# 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__": + + # 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) +