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::{
|
use rmcp::transport::streamable_http_server::{
|
||||||
StreamableHttpServerConfig, StreamableHttpService, session::local::LocalSessionManager,
|
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(
|
let service = StreamableHttpService::new(
|
||||||
move || Ok(AgentServer::new(socket.clone())),
|
move || Ok(AgentServer::new(socket.clone())),
|
||||||
session_manager,
|
session_manager,
|
||||||
|
|
|
||||||
|
|
@ -272,7 +272,15 @@ pub async fn serve_http(addr: std::net::SocketAddr) -> anyhow::Result<()> {
|
||||||
use rmcp::transport::streamable_http_server::{
|
use rmcp::transport::streamable_http_server::{
|
||||||
StreamableHttpServerConfig, StreamableHttpService, session::local::LocalSessionManager,
|
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(
|
let service = StreamableHttpService::new(
|
||||||
|| Ok(BashMcp),
|
|| Ok(BashMcp),
|
||||||
session_manager,
|
session_manager,
|
||||||
|
|
|
||||||
|
|
@ -570,7 +570,16 @@ pub async fn serve_http(addr: std::net::SocketAddr, registry: Arc<Registry>) ->
|
||||||
use rmcp::transport::streamable_http_server::{
|
use rmcp::transport::streamable_http_server::{
|
||||||
StreamableHttpServerConfig, StreamableHttpService, session::local::LocalSessionManager,
|
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 mcp_registry = registry.clone();
|
||||||
let service = StreamableHttpService::new(
|
let service = StreamableHttpService::new(
|
||||||
move || {
|
move || {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue