会话管理工具

mcp-session是一个为MCP服务器设计的有限会话管理工具,提供并发会话控制、速率限制和空闲超时等功能,适用于需要防止资源耗尽的高并发场景。

  • by butterflyskies
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 butterflyskies/mcp-session

使用说明

mcp会议

有限会话管理 主控程序 服务器构建于 rmcp.

MCP的Streamable HTTP传输在每个客户端上创建服务器端会话 initialize 请求。没有界限,会话会无限积累——这是一个资源耗尽向量。这个箱子包裹着rmcp LocalSessionManager 具有生产强化的会话生命周期控制。

特性

  • 最大并发会话数 --当达到配置的限制时,FIFO驱逐最旧的会话
  • 速率限制 --滑动窗口计数器拒绝突发会话创建(防止会话洪水DoS)
  • 空闲超时 --rmcp的直通配置 keep_alive 计时器
  • 零死亡分配 --速率限制器状态仅在启用速率限制时分配

用法

use std::sync::Arc;
use mcp_session::{BoundedSessionManager, SessionConfig};

let manager = Arc::new(
    BoundedSessionManager::new(
        SessionConfig {
            keep_alive: Some(std::time::Duration::from_secs(4 * 60 * 60)),
            ..Default::default()
        },
        100, // max concurrent sessions
    )
    .with_rate_limit(10, std::time::Duration::from_secs(60)), // 10 new sessions per minute
);

// Pass to StreamableHttpService::new(factory, manager, config)

设计

BoundedSessionManager 实现rmcp SessionManager 通过委派来培养特质 LocalSessionManager 对于会话存储和生命周期,添加:

  1. 容量检查 使用 inner.sessions (权威实时计数)-过期的会话不会占用容量槽
  2. FIFO驱逐 通过a VecDeque<SessionId> 跟踪创建顺序
  3. 速率限制 通过可选 RateLimiter 创建失败时进行滑动窗口令牌回滚
  4. 分割关键部分 --异步操作之间没有锁

看 ADR-0001 用于架构决策记录。

并发注意事项

在并发会话创建下,活动计数可能会暂时超过 max_sessions 最多减少并发呼叫者的数量。在争论中,极限是尽最大努力。看 讨论#6 为了设计上的权衡。

状态

这个箱子正在积极开发中。公共API如下 森伯,但内部架构可能会发生重大变化,特别是未来的版本可能会取代当前的版本 LocalSessionManager 委托模型具有完全自主的会话生命周期实现,以提高并发特性。

许可证

根据以下任一方式获得许可 Apache许可证,版本2.0 或 MIT许可证 由您选择。