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')
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)
+