X-Git-Url: https://us-delaporte.pagekite.me/gitweb/matrix-shop-bot.git/blobdiff_plain/c459b163b40e843daf86a6257c0c28026c4c126b..cbc79ff7988c4c70635b2b52dc58e7dea3f5720a:/skill.py diff --git a/skill.py b/skill.py index 355b9b2..3a1b1cb 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,52 +19,77 @@ 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) -> str: + return '\n'.join(Data().purchase_items(items)) +@mcp.tool +def list_bought(store:str) -> str: + return '\n'.join(Data().list_purchases(store)) -#@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 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) -> str: + '''Select store to shop at''' + return '\n'.join(Data().get_shopping_list(store_name)) + + +@mcp.tool +def list() -> str: + '''Use previous store''' + return '\n'.join(Data().get_last_shopping_list()) + + #@mcp.tool #def list_stores() -> 'list[str]': # return Data().get_stores() -# -# + + #@mcp.tool #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) +