使用说明
DocAssistant:MCP服务器和客户端
该项目演示了一个使用 fastmcp 图书馆。服务器提供了一组用于与文本文件交互的工具和资源,客户端脚本显示了如何使用它们。客户端和服务器之间的通信通过标准输入/输出(stdio)处理,使其成为本地进程间通信的轻量级高效解决方案。
项目结构
MCP-Server-And-Client/
├── documents/ # Stores all text documents
│ └── notes.txt # An example document
├── MCP-client.py # Example script to interact with the server
├── MCP-server.py # The backend server logic
├── app.py # Cloud-ready Streamlit app (no MCP dependencies)
├── requirements.txt # Python dependencies for cloud deployment
├── requirements_local.txt # Full dependencies for local development
└── README.md # This file
特性
这 DocAssistant 服务器暴露了几个 fastmcp 端点:
资源
docs://list:列出所有可用.txt文件在documents目录。docs://{filename}:检索指定文档的完整内容。
工具
append_to_doc:将内容字符串附加到指定文件的末尾。- 参数:
filename(str),content(str)
- 参数:
search_in_doc:在文档中搜索关键字,并返回所有匹配项的行号和内容。- 参数:
filename(str),keyword(str)
- 参数:
鼓励
append_prompt:生成用于附加内容的标准化消息,旨在指导用户或其他人工智能。search_prompt:创建用于搜索内容的标准化消息。
设置和安装
1.先决条件
- Python 3.8+
- 已激活的虚拟环境(推荐)
2.安装依赖项
对于云部署(Streamlit cloud):
pip install -r requirements.txt
对于具有完整MCP功能的本地开发:
# First, save the original requirements if needed
cp requirements.txt requirements_local.txt
# Then install from the local requirements
pip install fastmcp mcp
3.运行应用程序
选项1:命令行界面(仅限本地)
客户端和服务器在一个协调的单一进程中运行。要启动应用程序,只需从终端运行客户端脚本:
python MCP-client.py
客户端将自动启动服务器作为子进程,并开始与之交互。您将在终端中看到客户端和服务器的输出,演示 DocAssistant.
选项2:Web界面(适用于云端)
为了获得更用户友好的体验,您可以使用Streamlit web界面:
streamlit run app.py
这将在您的浏览器中打开一个漂亮的web应用程序,您可以在其中:
- 列出所有可用文档
- 通过语法高亮显示查看文档内容
- 在文档中添加新内容
- 在文档中搜索关键字
- 下载文档
这 app.py 该版本适用于Streamlit Cloud,因为它不需要MCP子流程通信。
云部署
部署到Streamlit云
- 将代码推送到GitHub
- 首选 分享.streamlit.io
- 连接您的GitHub存储库
- 选择
app.py作为主文件 - 部署!
备注:云版本(app.py)直接实现文档操作,无需MCP客户端-服务器架构,使其与云环境兼容。
运作原理
本地版本(MCP-client.py+MCP-server.py)
这 MCP-client.py 脚本初始化 StdioTransport 管理与 MCP-server.py 脚本。然后,它使用 fastmcp 客户:
- Ping服务器 以确保其正常运行。
- 列出所有可用 工具、资源和提示。
- 打电话给
append_to_doc工具 向添加新行documents/notes.txt. - 打电话给
search_in_doc工具 查找单词“Hello”的出现次数。 - 阅读全部内容 属于的
documents/notes.txt使用其资源URI。 - 生成提示消息 使用
append_prompt模板。
云版本(app.py)
云版本直接实现文件操作,不需要单独的服务器进程,使其适合在子流程通信受到限制的Streamlit cloud等平台上部署。
