MCP客户代理-Airbnb记忆
_通过 BINATI A分析_
______________________________________________________________________
一个多服务器模型上下文协议(MCP)客户端,使用OpenAI的向量存储将Airbnb搜索功能与持久内存存储集成在一起。
概述
本项目演示了如何构建一个结合多个MCP服务器的智能代理:
- Airbnb服务器:搜索和检索Airbnb房源
- 内存服务器:使用OpenAI矢量存储存储和搜索对话记忆
该代理可以记住过去的交互,并将该上下文用于未来的对话,同时还提供实时Airbnb搜索功能。
截图
UI Screenshot 1 UI Screenshot 2
特性
- 多服务器MCP客户端架构
- 使用OpenAI矢量存储的持久内存存储
- Airbnb房源搜索集成
- 交互式CLI聊天界面
- 流线型web UI,便于交互
- 服务器之间的自动工具路由
建筑
┌─────────────────┐
│ Client App │
│ (client.py) │
└────────┬────────┘
│
├──────────────┬──────────────┐
│ │ │
┌────▼─────┐ ┌───▼────┐ ┌─────▼──────┐
│ MCP │ │ MCP │ │ OpenAI │
│ Airbnb │ │ Memory │ │ API │
│ Server │ │ Server │ │ │
└──────────┘ └────────┘ └────────────┘先决条件
- Python 3.13或更高版本
- Node.js(通过npx用于Airbnb MCP服务器)
- OpenAI API密钥
uv包管理器
安装
- 克隆存储库:
git clone https://github.com/CyprianFusi/mcp-client-agent-airbnb.git
cd mcp-client-agent-airbnb- 安装依赖项:
uv sync- 创建一个
.env使用您的OpenAI API密钥文件:
OPENAI_API_KEY=your_openai_api_key_here重要:永远不要承诺你的 .env 文件到版本控制!
用法
CLI接口
运行交互式命令行聊天:
uv run client.py命令:
- 自然地键入您的问题
- 类型
exit或quit结束会话
交互示例:
You: Find me 2-bedroom apartments in Paris under $200/night
AI: [Searches Airbnb and returns results]
You: Remember that I prefer places with good wifi
AI: [Saves this preference to memory]
You: What do you remember about my preferences?
AI: [Searches memory and recalls wifi preference]流线型Web UI
使用Airbnb和Memory服务器启动web界面:
streamlit run chat_ui.py然后打开浏览器 http://localhost:8501
Streamlit UI现在支持两种服务器:
- 搜索Airbnb房源
- 将首选项和信息保存到内存中
- 搜索您保存的记忆
独立内存服务器
只运行内存服务器:
uv run server.py服务器将于启动 http://127.0.0.1:8000
项目结构
.
├── client.py # Multi-server MCP client with CLI
├── server.py # Memory storage MCP server
├── chat_ui.py # Streamlit web interface
├── main.py # Simple entry point
├── pyproject.toml # Project dependencies
├── .env # Environment variables (create this)
├── .gitignore # Git ignore rules
└── README.md # This file关键组件
客户端.py
主MCP客户端:
- 连接到Airbnb和Memory服务器
- 将工具调用路由到相应的服务器
- 使用OpenAI管理对话流
服务器.py
提供内存工具的MCP服务器:
save_memory(memory: str):将文本存储在矢量存储中search_memory(query: str):搜索存储的记忆
使用具有file_search功能的OpenAI助理API。
chat_ui.py
基于Streamlit的web界面,可连接到Airbnb和Memory服务器,提供现代聊天UI,包括:
- 带有聊天气泡的实时消息显示
- 自动清除输入字段
- 支持保存和检索记忆
- Airbnb列表搜索功能
可用工具
来自Airbnb服务器
- 按地点、日期、价格范围搜索房源
- 获取房源详情
- 按设施过滤
来自内存服务器
- save_memory:存储信息以备将来参考
- search_memory:检索相关的过去对话
配置
环境变量
OPENAI_API_KEY:您的OpenAI API密钥(必需)MCP_HOST:内存服务器主机(默认值:127.0.0.1)MCP_PORT:内存服务器端口(默认值:8000)
服务器参数
编辑 client.py 修改:
- Airbnb服务器参数(例如。,
--ignore-robots-txt) - 内存服务器路径
- OpenAI模型选择
故障排除
windows用户
该代码包括用于子流程支持的Windows特定事件循环处理。如果你遇到问题,请确保你使用的是Python 3.13+。
API错误
- 验证您的
OPENAI_API_KEY设置正确 - 检查您是否有足够的OpenAI API信用
- 确保矢量存储名称与现有存储不冲突
连接问题
- 确保为Airbnb服务器安装了Node.js
- 验证
uv在您的PATH中可用 - 检查端口8000是否尚未使用
发展
运行测试
python -m py_compile *.py添加新的MCP服务器
要添加更多服务器,请执行以下操作:
- 定义新
StdioServerParameters在client.py - 添加到异步上下文管理器中
run()函数 - 整合来自所有服务器的工具
- 更新刀具布线逻辑
安全说明
- 永不承诺
.env包含API密钥的文件 - 这
.gitignore配置为排除敏感文件 - 如果意外暴露,则旋转API密钥
- 使用特定于环境的API密钥进行开发与生产
许可证
该项目是开源的,可在 MIT许可证.
该项目作为MCP大师班的一部分,用于教育目的。
贡献
- 复刻仓库
- 创建要素分支
- 进行更改
- 提交拉取请求
资源
支持
对于问题和疑问:
- 检查现有的GitHub问题
- 查阅MCP文档
- 打开一个带有详细描述的新问题
______________________________________________________________________
内置于❤️ 使用模型上下文协议
