MCP集成系统
一个基于Chainlit的聊天界面,连接到多个MCP(模型控制协议)服务器,允许用户通过统一的界面与不同的工具提供商进行交互。
特性
- 同时连接到多个MCP服务器
- 处理文档上传并自动转换为Markdown
- 跨不同存储库存储和检索文档
- 通过自然语言从各种服务器执行工具
- 查看跨连接系统的文档活动
先决条件
- 码头工人
- Python 3.9+
- OpenAI API密钥(用于GPT-4集成)
- MongoDB实例(用于文档存储)
安装说明
1.安装依赖项
pip install chainlit openai mcp-client asyncio2.环境设置
创建一个 .env 项目根目录中的文件,包含以下变量:
OPENAI_API_KEY=your_openai_api_key_here4.构建Markitdown Docker镜像
系统需要自定义Markitdown MCP服务器映像。使用以下方式构建:
# Clone the Markitdown repo if needed
cd mcp
# use https://github.com/microsoft/markitdown/tree/main/packages/markitdown-mcp Markdown MCP to build docker image if you can't access markdown folder.
# Build the image
cd markitdown/
docker build -t markitdown-mcp-server .
cd document-ingestion
docker build -t mcp/document-ingestion .
cd sqlite
docker build -t mcp/sqlite .5.MongoDB设置
确保MongoDB正在运行并可访问 mongodb://localhost:27017.你可以使用Docker启动MongoDB:
docker run -d -p 27017:27017 --name mongodb mongo运行应用程序
使用Chainlit启动应用程序:
chainlit run chainlit-ui-v2.py这将在以下位置启动web界面http://localhost:8000默认情况下。
运作原理
服务器连接
系统在启动时自动连接到三个MCP服务器:
- 文档服务器:处理文档存储和检索
- SQLite服务器:提供数据库功能
- Markitdown服务器:在不同格式之间转换文档(尤其是Markdown)
文档工作流
- 使用文件上传按钮上传文档
- 系统将尝试使用Markitdown服务器将其转换为Markdown
- 文档与元数据一起存储在MongoDB中
- 您稍后可以使用以下命令检索文档
/display [document_id]
PDF处理限制
当前的实现可能存在将PDF文件转换为Markdown的问题,原因如下:
- 复杂的PDF结构(表、列等)
- 基于图像的PDF或扫描文档
- Docker容器中所需的系统依赖关系
扩展系统
添加新的MCP服务器
要添加新的MCP服务器,请将其配置添加到 server_configs 在中列出 chainlit-ui.py:
{
"name": "New Server Name",
"command": "docker",
"args": [
"run",
"--rm",
"-i",
# other docker arguments
"your-mcp-server-image",
# server arguments
],
"env": None, # or provide environment variables
}切换LLM提供商
该系统通过模型架构支持不同的LLM后端。要使用Ollama而不是OpenAI:
model = OllamaModel(model_name="llama2") # Instead of OpenAI在Markdown中查看上传的文件
当通过Chainlit UI上传文档时,会自动为该文件生成一个唯一的UUID。 您可以使用“最近的活动”工具检索UUID。
