聊天应用

一个基于Streamlit和CLI的聊天界面,利用模型上下文协议(MCP)将Google的Gemini LLM与各种工具和服务器连接。

  • by dvy246
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 dvy246/Mcp-server

使用说明

MCP聊天应用程序

一个基于Streamlit和CLI的生产就绪聊天界面,利用模型上下文协议(MCP)将谷歌的Gemini LLM与各种工具和服务器连接起来。

特性

  • 交互式聊天:基于Streamlit的干净web界面和CLI选项
  • 多服务器支持:同时连接到多个MCP服务器
    • 费用服务器:远程费用跟踪服务器
    • Manim服务器:用于生成数学动画的本地Manim服务器
    • 数学服务器:本地数学运算服务器(server.py)
  • 配置驱动:基于YAML的配置,支持环境变量
  • 综合录井:文件和控制台的结构化日志记录
  • 错误处理:在整个应用程序中进行稳健的错误处理
  • 已测试:所有数学运算的单元测试
  • Gemini集成:用途 langchain-google-genai 用于对话式人工智能

先决条件

  • Python 3.10+
  • 紫外线 (可选,用于通过fastmcp运行数学服务器)
  • Google Gemini API密钥

安装

  1. 克隆存储库 (如果适用)或导航到项目目录。

  2. 再进行:

    pip install streamlit langchain-google-genai langchain-mcp-adapters python-dotenv pyyaml fastmcp pytest
    
  3. 环境设置: 复制示例环境文件并填写您的值:

    cp .env.example .env
    

    编辑 .env 并添加您的Gemini API密钥:

    GEMINI_API_KEY=your_api_key_here
    

    (可选)覆盖默认路径:

    UV_PATH=/path/to/uv
    PYTHON_PATH=/path/to/python3
    MANIM_EXECUTABLE=/path/to/manim
    MATH_SERVER_PATH=/path/to/server.py
    MANIM_SERVER_PATH=/path/to/manim_server.py
    
  4. 配置: 这 config.yaml 该文件定义了服务器连接和应用程序设置。你可以:

    • 通过设置启用/禁用服务器 enabled: true/false
    • 修改服务器传输类型和命令
    • 调整LLM设置(型号、温度)
    • 配置日志记录级别

用法

运行Streamlit聊天应用程序

streamlit run app.py

应用程序将在默认web浏览器中打开。您可以与代理聊天,代理将使用连接的MCP工具回答查询。

运行CLI应用程序

python client1.py

或者以编程方式使用它:

from client1 import main
import asyncio

result = asyncio.run(main("What is 25 + 17?"))
print(result)

运行本地数学服务器

要独立运行数学服务器(用于测试):

python server.py

要在聊天应用程序中使用它,请在中启用它 config.yaml:

servers:
  math:
    enabled: true
    # ... rest of configuration

测试

运行测试套件:

pytest test_server.py -v

这将测试服务器提供的所有数学运算。

项目结构

mcp-server/
├── app.py              # Streamlit web interface
├── client1.py          # CLI interface
├── server.py           # Math MCP server
├── config.yaml         # Application configuration
├── config_loader.py    # Configuration loader utility
├── test_server.py      # Unit tests
├── .env                # Environment variables (not in git)
├── .env.example        # Example environment file
├── logs/               # Application logs
│   ├── mcp_chat.log
│   └── mcp_cli.log
├── README.md           # This file
├── LICENSE             # License file
└── pyproject.toml      # Python project metadata

配置

服务器配置(config.yaml)

服务器的定义结构如下:

servers:
  server-name:
    enabled: true
    transport: stdio  # or streamable_http
    command: ${PYTHON_PATH:-python3}
    args:
      - /path/to/server.py
    env:
      ENV_VAR: value

格式中的环境变量 ${VAR_NAME:-default} 自动扩展。

日志记录

日志将写入:

  • logs/mcp_chat.log (Streamlit应用程序)
  • logs/mcp_cli.log (CLI应用程序)

在中配置日志记录级别 config.yaml:

logging:
  level: INFO  # DEBUG, INFO, WARNING, ERROR

故障排除

的FileNotFound错误 uv 或 python3

更新您的 .env 具有正确路径的文件:

UV_PATH=/Users/yourname/path/to/uv
PYTHON_PATH=/Users/yourname/path/to/python3

找不到GEMINI_API_KEY

确保您的 .env 文件包含:

GEMINI_API_KEY=your_actual_api_key

MCP服务器连接错误

检查登录 logs/ 详细错误消息的目录。确保:

  • 服务器路径正确 .env
  • 服务器已启用 config.yaml
  • 已安装所需的依赖项

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 添加新功能的测试
  5. 运行测试套件
  6. 提交拉取请求

许可证

有关详细信息,请参阅LICENSE文件。