aeonshift commited on
Commit
8f10289
·
verified ·
1 Parent(s): 9c74566

Update server.py

Browse files
Files changed (1) hide show
  1. server.py +19 -7
server.py CHANGED
@@ -1,8 +1,11 @@
1
  import os
2
- import anyio
 
3
  from mcp.server.lowlevel import Server
4
  from mcp.server.sse import SseServerTransport
5
 
 
 
6
  # Define the MCP server
7
  server = Server(name="airtable-mcp")
8
  transport = SseServerTransport("/airtable/mcp")
@@ -13,12 +16,21 @@ base_id = os.getenv("AIRTABLE_BASE_ID")
13
  print(f"Using Airtable token: {token}")
14
  print(f"Using Airtable base ID: {base_id}")
15
 
16
- # Start the server with the transport's streams
17
- async def main():
18
- # Use a dummy scope and empty receive/send functions as placeholders
19
- scope = {"type": "http", "method": "GET", "path": "/airtable/mcp"}
20
- async with transport.connect_sse(scope, lambda: None, lambda x: None) as (read_stream, write_stream):
 
 
 
 
 
 
 
21
  await server.run(read_stream, write_stream, server.create_initialization_options())
 
22
 
23
  if __name__ == "__main__":
24
- anyio.run(main, backend="asyncio")
 
 
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
10
  server = Server(name="airtable-mcp")
11
  transport = SseServerTransport("/airtable/mcp")
 
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
36
+ uvicorn.run(app, host="0.0.0.0", port=7860)