raise mcp streamable-http session keepalive from 5m to 24h
This commit is contained in:
parent
d6f3af60ae
commit
6ccd634afb
3 changed files with 29 additions and 3 deletions
|
|
@ -1020,7 +1020,16 @@ pub async fn serve_http(socket: PathBuf, addr: std::net::SocketAddr) -> Result<(
|
|||
use rmcp::transport::streamable_http_server::{
|
||||
StreamableHttpServerConfig, StreamableHttpService, session::local::LocalSessionManager,
|
||||
};
|
||||
let session_manager = std::sync::Arc::new(LocalSessionManager::default());
|
||||
let mut session_manager = LocalSessionManager::default();
|
||||
// rmcp's default session idle timeout is 5 minutes, meant to reap zombie
|
||||
// connections lost to an HTTP/2 RST_STREAM — far too short for a claude
|
||||
// turn that goes several minutes between MCP calls to this daemon (a long
|
||||
// Read/Edit stretch, a background-task wait). That trips a client-visible
|
||||
// "MCP server ... session expired" mid-turn; self-recovering on the next
|
||||
// call, but confusing. Give it real headroom instead of turning it off
|
||||
// outright.
|
||||
session_manager.session_config.keep_alive = Some(std::time::Duration::from_hours(24));
|
||||
let session_manager = std::sync::Arc::new(session_manager);
|
||||
let service = StreamableHttpService::new(
|
||||
move || Ok(AgentServer::new(socket.clone())),
|
||||
session_manager,
|
||||
|
|
|
|||
|
|
@ -272,7 +272,15 @@ pub async fn serve_http(addr: std::net::SocketAddr) -> anyhow::Result<()> {
|
|||
use rmcp::transport::streamable_http_server::{
|
||||
StreamableHttpServerConfig, StreamableHttpService, session::local::LocalSessionManager,
|
||||
};
|
||||
let session_manager = std::sync::Arc::new(LocalSessionManager::default());
|
||||
let mut session_manager = LocalSessionManager::default();
|
||||
// rmcp's default session idle timeout is 5 minutes, meant to reap zombie
|
||||
// connections lost to an HTTP/2 RST_STREAM — far too short for a claude
|
||||
// turn that goes several minutes between bash-MCP calls (a long Read/Edit
|
||||
// stretch, a background-task wait). That trips a client-visible "MCP
|
||||
// server ... session expired" mid-turn; self-recovering on the next call,
|
||||
// but confusing. Give it real headroom instead of turning it off outright.
|
||||
session_manager.session_config.keep_alive = Some(std::time::Duration::from_hours(24));
|
||||
let session_manager = std::sync::Arc::new(session_manager);
|
||||
let service = StreamableHttpService::new(
|
||||
|| Ok(BashMcp),
|
||||
session_manager,
|
||||
|
|
|
|||
|
|
@ -570,7 +570,16 @@ pub async fn serve_http(addr: std::net::SocketAddr, registry: Arc<Registry>) ->
|
|||
use rmcp::transport::streamable_http_server::{
|
||||
StreamableHttpServerConfig, StreamableHttpService, session::local::LocalSessionManager,
|
||||
};
|
||||
let session_manager = std::sync::Arc::new(LocalSessionManager::default());
|
||||
let mut session_manager = LocalSessionManager::default();
|
||||
// rmcp's default session idle timeout is 5 minutes, meant to reap zombie
|
||||
// connections lost to an HTTP/2 RST_STREAM — far too short for a claude
|
||||
// turn that goes several minutes between matrix-MCP calls (a long
|
||||
// Read/Edit stretch, a background-task wait). That trips a client-visible
|
||||
// "MCP server ... session expired" mid-turn; self-recovering on the next
|
||||
// call, but confusing. Give it real headroom instead of turning it off
|
||||
// outright.
|
||||
session_manager.session_config.keep_alive = Some(std::time::Duration::from_hours(24));
|
||||
let session_manager = std::sync::Arc::new(session_manager);
|
||||
let mcp_registry = registry.clone();
|
||||
let service = StreamableHttpService::new(
|
||||
move || {
|
||||
|
|
|
|||
Loading…
Reference in a new issue