MCP会话代码示例
此目录包含博客文章“会话、状态和连续性:MCP的秘密酱汁”中的工作示例。
设置
# Create virtual environment (optional but recommended)
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt例子
1.会话概念演示(session_demo.py)
简单演示会话如何在没有服务器复杂性的情况下工作。
python session_demo.py此示例显示:
- 创建和暂停会话
- 添加上下文和发现
- 以保留状态恢复会话
- 为期两天的调试场景
2.MCP会话服务器(mcp_session_server.py)
使用会话管理工具完成FastMCP服务器。
python mcp_session_server.py可用工具:
create_session-创建新的持久会话add_context-为会话添加上下文add_message-跟踪对话历史记录add_discovery-记录重要发现suspend_session-保存状态并释放内存resume_session-恢复以前的会话list_sessions-浏览可用会话search_sessions-按内容查找会话
与Claude Desktop一起使用
要将MCP会话服务器与Claude Desktop一起使用,请执行以下操作:
- 更新您的Claude桌面配置:
- macOS: ~/Library/Application Support/Claude/claude_desktop_config.json - 窗户: %APPDATA%\Claude\claude_desktop_config.json - Linux: ~/.config/Claude/claude_desktop_config.json
- 添加服务器配置:
{
"mcpServers": {
"session_server": {
"command": "python",
"args": ["path/to/mcp_session_server.py"]
}
}
}- 重新启动克劳德桌面
- 会话工具现在将在您的对话中可用!
示例工作流:多日调试会话
以下是如何使用Claude Desktop中的会话服务器进行多日调试任务:
第1天-初步调查:
您:“为我们的电子商务API项目创建一个名为‘memory-leak-2025-09’的新调试会话。问题是内存以100MB/小时的速度增长。”
克劳德: *使用create_session工具* “我已经创建了调试会话。让我帮助您调查此内存泄漏。”
您:“服务器运行在AWS EC2上,具有8GB RAM和Python 3.11。你能补充一下这个背景吗?"
克劳德: *使用add_context工具* “已将服务器环境详细信息添加到我们的会话中。”
你:“我发现缓存中保存了对大型对象的引用,而且它们永远不会被释放。”
克劳德: *使用add_discovery工具* “我已经记录了这一重要发现。这肯定可以解释内存增长。在我们今天结束之前,我可以暂停会议吗?”
你:“是的,我们暂停吧。我明天继续。”
克劳德: *使用suspend_session工具* “会议暂停。我们所有的发现和背景都已保存。明天见!”
第2天-继续并继续:
你:“你能列出我的可用会话吗?我需要继续调试内存泄漏。”
克劳德: *使用list_sessions工具* “我发现你昨天的课程‘失忆-2025-09’。你想让我继续吗?”
你:“是的,请继续那个会议。”
克劳德: *使用resume_session工具* “会议继续!这是我们昨天发现的:
- 在电子商务API中以100MB/小时的速度增长的内存
- 在AWS EC2上运行(8GB RAM,Python 3.11)
- 缓存正在保存对大型对象的引用
准备继续我们的调查!"
克劳德如何使用工具
当您要求Claude管理会话时,它会自动:
- 创建会话 根据您的描述使用有意义的ID
- 添加上下文 当您提供有关问题的信息时
- 记录发现 当你发现重要线索时
- 跟踪对话 维护完整的调试历史记录
- 暂停会话 在保留状态的同时释放内存
- 续会 所有上下文均保持不变
与Claude一起使用的常见命令
- “为\[问题描述\]创建调试会话”
- “添加有关\[环境/配置/症状\]的上下文”
- “我发现\[发现\]”
- “暂停此会话,我明天继续”
- “继续我关于\[主题\]的会话”
- “我有哪些可用的会话?”
- “搜索关于\[关键字\]的会话”
故障排除
会话工具未出现在Claude中:
- 验证配置文件路径是否适用于您的操作系统
- 确保Python在您的系统PATH中
- 检查mcp_ses_server.py的绝对路径是否正确
- 尝试完全重新启动Claude Desktop
会话未持续:
- 检查一下
./sessions/目录存在并且可写 - 验证存储后端是否已初始化(默认使用FileStorage)
- 在Claude Desktop的开发人员控制台中查找错误消息
3.存储后端(storage_examples.py)
演示会话持久性的不同存储选项。
python storage_examples.py包括:
- 内存存储:快速但暂时(开发/测试)
- 文件存储:基于压缩的简单文件
- 数据库存储:基于SQLite,易于设置,无需服务器
4.多日调试(multi_day_debug.py)
显示会话持久性的真实3天调试场景。
python multi_day_debug.py演示:
- 第1天:初步调查和假设
- 第2天:验证和根本原因分析
- 第3天:实施和解决
- 跨天完成上下文保存
文件结构
mcp-sessions/
├── README.md # This file
├── requirements.txt # Python dependencies
├── session_demo.py # Simple session concept demo
├── mcp_session_server.py # Complete MCP server with sessions
├── storage_examples.py # Storage backend implementations
├── multi_day_debug.py # 3-day debugging scenario
└── generate_dashboard.py # Performance monitoring dashboard generator关键概念
- 会话生命周期:初始化→ 活跃的→ 暂停→ 简历→ 终止
- 存储后端:内存(开发)、文件(简单)、数据库(生产)
- 上下文管理:智能积累和修剪
- 状态持久性:自动保存/恢复对话状态
没有Claude桌面的测试
如果你想在没有Claude Desktop的情况下测试服务器,你可以使用mcp-cli工具:
# Install mcp-cli
pip install mcp[cli]
# Run the server and interact with it
mcp run python mcp_session_server.py
# List available tools
mcp tools list
# Call a tool
mcp tools call create_session '{"session_id": "test-001", "project": "Test Project"}'备注
- 会话文件存储在
./sessions/默认目录 - 数据库示例使用SQLite(内置于Python中,无需设置)
- 所有示例都使用Python 3.8+异步/等待语法
- FastMCP包含在
mcp[cli]包裹
许可证
MIT许可证-有关详细信息,请参阅许可证文件。
