aeonshift commited on
Commit
194d298
·
verified ·
1 Parent(s): 09588bc

Update server.py

Browse files
Files changed (1) hide show
  1. server.py +24 -13
server.py CHANGED
@@ -1,9 +1,14 @@
1
  import os
 
2
  from fastapi import FastAPI, Request
3
  from sse_starlette import EventSourceResponse
4
  from mcp.server.lowlevel import Server
5
  from mcp.server.sse import SseServerTransport
6
 
 
 
 
 
7
  app = FastAPI()
8
 
9
  # Define the MCP server
@@ -13,23 +18,29 @@ transport = SseServerTransport("/airtable/mcp")
13
  # Configure environment variables (for logging purposes)
14
  token = os.getenv("AIRTABLE_API_TOKEN")
15
  base_id = os.getenv("AIRTABLE_BASE_ID")
16
- print(f"Using Airtable token: {token}")
17
- print(f"Using Airtable base ID: {base_id}")
18
 
19
  @app.get("/airtable/mcp")
20
  async def handle_sse(request: Request):
21
- async def sse_writer():
22
- async with sse_stream_writer:
23
- await sse_stream_writer.send({"event": "endpoint", "data": "/airtable/mcp"})
24
- async for session_message in write_stream_reader:
25
- message_data = session_message.message.model_dump_json(by_alias=True, exclude_none=True)
26
- await sse_stream_writer.send({"event": "message", "data": message_data})
 
27
 
28
- sse_stream_writer, sse_stream_reader = anyio.create_memory_object_stream(0)
29
- async with transport.connect_sse(request.scope, request.receive, request._send) as (read_stream, write_stream):
30
- write_stream_reader = write_stream
31
- await server.run(read_stream, write_stream, server.create_initialization_options())
32
- return EventSourceResponse(sse_stream_reader, data_sender_callable=sse_writer)
 
 
 
 
 
33
 
34
  if __name__ == "__main__":
35
  import uvicorn
 
1
  import os
2
+ import logging
3
  from fastapi import FastAPI, Request
4
  from sse_starlette import EventSourceResponse
5
  from mcp.server.lowlevel import Server
6
  from mcp.server.sse import SseServerTransport
7
 
8
+ # Set up logging
9
+ logging.basicConfig(level=logging.INFO)
10
+ logger = logging.getLogger(__name__)
11
+
12
  app = FastAPI()
13
 
14
  # Define the MCP server
 
18
  # Configure environment variables (for logging purposes)
19
  token = os.getenv("AIRTABLE_API_TOKEN")
20
  base_id = os.getenv("AIRTABLE_BASE_ID")
21
+ logger.info(f"Using Airtable token: {token}")
22
+ logger.info(f"Using Airtable base ID: {base_id}")
23
 
24
  @app.get("/airtable/mcp")
25
  async def handle_sse(request: Request):
26
+ try:
27
+ async def sse_writer():
28
+ async with sse_stream_writer:
29
+ await sse_stream_writer.send({"event": "endpoint", "data": "/airtable/mcp"})
30
+ async for session_message in write_stream_reader:
31
+ message_data = session_message.message.model_dump_json(by_alias=True, exclude_none=True)
32
+ await sse_stream_writer.send({"event": "message", "data": message_data})
33
 
34
+ sse_stream_writer, sse_stream_reader = anyio.create_memory_object_stream(0)
35
+ async with transport.connect_sse(request.scope, request.receive, request._send) as (read_stream, write_stream):
36
+ write_stream_reader = write_stream
37
+ logger.info("Starting MCP server with streams")
38
+ await server.run(read_stream, write_stream, server.create_initialization_options())
39
+ logger.info("MCP server running")
40
+ return EventSourceResponse(sse_stream_reader, data_sender_callable=sse_writer)
41
+ except Exception as e:
42
+ logger.error(f"Error in handle_sse: {str(e)}")
43
+ raise
44
 
45
  if __name__ == "__main__":
46
  import uvicorn