]> us-delaporte.pagekite.me Git - matrix-shop-bot.git/blobdiff - skill.py
Fix
[matrix-shop-bot.git] / skill.py
index 53bdf9ef052c008155ade4a63cd1b26320184ab0..3a1b1cbde80b015c99434702d557c289543391e1 100644 (file)
--- a/skill.py
+++ b/skill.py
@@ -1,45 +1,95 @@
 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) -> 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)
 
+# 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="127.0.0.1", 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)
+