Jeremiah Lowin commited on
Commit
1cd0ac1
·
unverified ·
2 Parent(s): 1868fa8c976454

Merge pull request #323 from jlowin/add-timeout-graceful-shutdown

Browse files
Files changed (1) hide show
  1. src/fastmcp/server/server.py +7 -2
src/fastmcp/server/server.py CHANGED
@@ -826,16 +826,21 @@ class FastMCP(Generic[LifespanResultT]):
826
  host: str | None = None,
827
  port: int | None = None,
828
  log_level: str | None = None,
 
829
  ) -> None:
830
  """Run the server using SSE transport."""
831
- app = self.sse_app()
832
- app = RequestMiddleware(app)
 
 
 
833
 
834
  config = uvicorn.Config(
835
  app,
836
  host=host or self.settings.host,
837
  port=port or self.settings.port,
838
  log_level=log_level or self.settings.log_level.lower(),
 
839
  )
840
  server = uvicorn.Server(config)
841
  await server.serve()
 
826
  host: str | None = None,
827
  port: int | None = None,
828
  log_level: str | None = None,
829
+ uvicorn_config: dict | None = None,
830
  ) -> None:
831
  """Run the server using SSE transport."""
832
+ uvicorn_config = uvicorn_config or {}
833
+ # the SSE app hangs even when a signal is sent, so we disable the timeout to make it possible to close immediately.
834
+ # see https://github.com/jlowin/fastmcp/issues/296
835
+ uvicorn_config.setdefault("timeout_graceful_shutdown", 0)
836
+ app = RequestMiddleware(self.sse_app())
837
 
838
  config = uvicorn.Config(
839
  app,
840
  host=host or self.settings.host,
841
  port=port or self.settings.port,
842
  log_level=log_level or self.settings.log_level.lower(),
843
+ **uvicorn_config,
844
  )
845
  server = uvicorn.Server(config)
846
  await server.serve()