🤖 MCP客户端(Chainlit+MCP)
   
专业人士 模型上下文协议(MCP) 客户与现代 Chainlit UI和 无缝 奥拉玛 集成(或任何与OpenAI兼容的API)。专为代理研究而设计 跨连接的MCP服务器的工作流、工具编排和结构化推理。
______________________________________________________________________
✨ 主要特点
- MCP兼容性:连接到任何符合MCP的服务器。
- 交互式用户界面:由Chainlit提供技术支持,提供干净、基于聊天的体验。
- 重新激活工作流:工具使用、分析和响应综合在一个循环中。
- Olama集成:针对本地模型和OpenAI兼容API进行了优化。
- 集中式配置:LLM默认值和采样的统一设置。
- uv优先:可复制的依赖关系管理和执行。
______________________________________________________________________
🛠️ 安装
先决条件
在开始之前,请确保已安装以下内容:
- Python 3.12+
- 紫外线 (推荐):https://github.com/astral-sh/uv
- 奥拉玛 (或任何与OpenAI兼容的API):https://ollama.com/
设置
- 克隆存储库
git clone https://github.com/YI-TING-EE13/chainlit-mcp-client.git
cd chainlit-mcp-client- 安装依赖项
使用 uv 确保可复制的环境:
uv sync- 配置MCP服务器
客户端从根目录中的mcp.json读取服务器配置。确保此文件存在并指向您的MCP服务器。
mcp.json示例:
{
"mcpServers": {
"arxiv": {
"command": "uv",
"args": ["run", "arxiv_insight.py"],
"env": {
"PYTHONPATH": "../ArXiv-Insight-MCP-Server"
}
}
}
}- 安装SQLite(用于长期内存)
如果启用长期内存,则需要SQLite。在Ubuntu/Debian上:
sudo apt-get update
sudo apt-get install -y sqlite3______________________________________________________________________
⚙️ 配置
配置集中在core/settings.py中,并通过环境变量进行控制。 在chainlit mcp客户端目录中创建.env文件以配置LLM连接 以及生成超参数。您可以复制.env.example.作为起点。
# .env
# URL for your Ollama instance (default: http://localhost:11434/v1)
OLLAMA_HOST=http://localhost:11434/v1
# API Key (optional for Ollama, required for OpenAI)
OLLAMA_KEY=ollama
# Model to use (ensure you have pulled this model in Ollama)
OLLAMA_MODEL=nemotron-3-nano:latest
# UI display name
ASSISTANT_NAME=Nemotron
# Default chat generation settings
LLM_NUM_CTX=1048576
LLM_MAX_TOKENS=
LLM_TEMPERATURE=0.8
LLM_TOP_P=
LLM_TOP_K=
LLM_REPEAT_PENALTY=
LLM_NUM_PREDICT=
# MCP sampling defaults (used for tool-driven summarization)
SAMPLING_NUM_CTX=1048576
SAMPLING_MAX_TOKENS=4096
SAMPLING_TEMPERATURE=0.8
SAMPLING_TOP_P=
SAMPLING_TOP_K=
SAMPLING_REPEAT_PENALTY=
SAMPLING_NUM_PREDICT=
# Local token usage reporting
TOKEN_USAGE_ENABLED=true
TOKENIZER_MODEL=cl100k_base
# Long-term memory
MEMORY_ENABLED=true
MEMORY_DB_PATH=data/memory.db
MEMORY_DEFAULT_INCOGNITO=false
MEMORY_SUMMARY_ENABLED=true
MEMORY_SUMMARY_MAX_TOKENS=512
MEMORY_SUMMARY_SCHEDULER_ENABLED=true
MEMORY_SUMMARY_INTERVAL_SECONDS=600要在Ollama中拉取默认模型,请执行以下操作:
ollama pull nemotron-3-nano______________________________________________________________________
🚀 用法
运行UI
要启动Chainlit聊天界面:
uv run main.py或者明确地:
uv run main.py ui用户界面将在http://localhost:8000.
长期记忆
当MEMORY_DEFAULT_INCOGNITO=false时,应用程序会存储对话历史记录和 启动时将最新摘要注入系统上下文。当设置为真时, 只使用默认的系统提示,不写入历史记录。
令牌使用情况
当Token_usage_ENABLED=true时,使用令牌生成器在本地计算令牌使用量。
代理模式(无头)
即将推出:自动化任务的无头模式。
uv run main.py agent______________________________________________________________________
🏗️ 建筑
该项目采用模块化架构:
mcp-client/
├── core/
│ ├── config.py # System prompts + MCP configuration
│ ├── settings.py # Centralized LLM + hyperparameter settings
│ ├── engine.py # Chat Engine (ReAct Loop)
│ ├── llm.py # LLM Client Wrapper (OpenAI/Ollama)
│ └── mcp_client.py # MCP Connection & Tool Management
├── interfaces/
│ └── ui.py # Chainlit UI Event Handlers
├── main.py # Entry Point
├── mcp.json # MCP Server Registry
└── pyproject.toml # Project Metadata & Dependencies关键组件
- 聊天引擎(核心/引擎.py):管理对话历史记录和ReAct循环。
- MCPClientWrapper(核心/mcp_client.py):连接到MCP服务器,路由工具调用,并处理采样。
- llm客户端(核心/llm.py):使用集中式默认值对AsyncOpenAI进行精简包装。
- 内存存储(核心/memory_store.py):SQLite支持的对话和摘要长期存储。
______________________________________________________________________
🤝 贡献
欢迎投稿!请随时提交拉取请求。
- 分叉项目
- 创建功能分支(
git checkout -b feature/AmazingFeature) - 提交您的更改(
git commit -m 'Add some AmazingFeature') - 推到分支(
git push origin feature/AmazingFeature) - 打开拉取请求
📄 许可证
该项目根据MIT许可证获得许可。有关更多信息,请参阅许可证。
