X-Git-Url: https://us-delaporte.pagekite.me/gitweb/matrix-shop-bot.git/blobdiff_plain/86ee26b6c8c89ee9ecd9ef0872becda86b672f4c..a23a70fa486a42c46e818392c6140361d4e4bd59:/skill.py?ds=inline diff --git a/skill.py b/skill.py index 82540b0..428edc4 100644 --- a/skill.py +++ b/skill.py @@ -1,37 +1,47 @@ 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)) -#@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 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) -> '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 @@ -43,5 +53,43 @@ def add_item(name: str) -> 'list[str]': #def list_purchases(store: str) -> 'list[str]': # return Data().list_purchases(store) +# 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.run(transport="http", host=MY_IP, 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) +