mcp: throttle rapid stream session polls

This commit is contained in:
a.tolmachev
2026-05-01 16:36:50 +00:00
parent 8ac55ebcc2
commit 4cd5d5b132
3 changed files with 182 additions and 1 deletions
+19 -1
View File
@@ -811,7 +811,7 @@ async fn handle_session_start_call(
batch_size,
}),
expires_at,
last_poll_at: Some(now),
last_poll_at: None,
created_at: now,
closed_at: None,
};
@@ -996,6 +996,24 @@ async fn handle_session_poll_call(
);
}
let poll_after_ms = streaming.poll_interval_ms.unwrap_or(1_000);
let remaining_delay_ms = loaded.remaining_poll_delay_ms(now, poll_after_ms);
if remaining_delay_ms > 0 {
return tool_error_response(
message,
response_mode,
&session.protocol_version,
"stream_session_poll_rate_limited",
format!(
"stream session {} must wait before the next poll",
control.session_id
),
Some(json!({
"poll_after_ms": remaining_delay_ms
})),
);
}
let mut state_payload: StoredSessionState = match serde_json::from_value(loaded.state.clone()) {
Ok(value) => value,
Err(error) => {