🚀 使用模型上下文协议(MCP)构建服务器和客户端的分步指南
本指南将详细介绍如何使用模型上下文协议(MCP)构建服务器和客户端,帮助你快速搭建分布式计算系统。
✨ 主要特性
- 提供服务器和客户端的完整项目结构。
- 支持命令行和图形用户界面(GUI)两种客户端交互方式。
- 易于扩展,可添加更多工具和功能。
📦 安装指南
服务器端
pip install mcp-server
客户端
pip install mcp-client
客户端 GUI
pip install tkinter mcp-client
💻 使用示例
服务器端示例
基础用法
from mcp_server import Server, Tool
class CalculatorTool(Tool):
def add(self, a: int, b: int) -> int:
return a + b
if __name__ == "__main__":
server = Server()
server.add_tool(CalculatorTool())
server.start()
客户端示例
基础用法(命令行)
from mcp_client import ServerConnector
connector = ServerConnector("localhost", 1234)
tools = await connector.connect()
calculator_tool = tools["Calculator"]
result = await calculator_tool.add(5, 3)
高级用法(GUI)
import tkinter as tk
from mcp_client import ServerConnector
class CalculatorApp:
def __init__(self):
self.window = tk.Tk()
self.window.title("MCP 计算器客户端")
self.entry1 = tk.Entry(self.window)
self.entry2 = tk.Entry(self.window)
self.button = tk.Button(self.window, text="计算", command=self.calculate)
self.result_label = tk.Label(self.window, text="")
self.entry1.pack()
self.entry2.pack()
self.button.pack()
self.result_label.pack()
def calculate(self):
try:
a = int(self.entry1.get())
b = int(self.entry2.get())
connector = ServerConnector("localhost", 1234)
tools = connector.connect_synchronously()
calculator_tool = tools["Calculator"]
result = calculator_tool.add(a, b)
self.result_label.config(text=f"结果: {result}")
except Exception as e:
self.result_label.config(text=f"错误: {str(e)}")
if __name__ == "__main__":
app = CalculatorApp()
app.window.mainloop()
📚 详细文档
创建 MCP 服务器的步骤
步骤一: 安装所需库
pip install mcp-server
步骤二: 初始化项目结构
mkdir server
cd server
nano server.py
在文件中添加以下内容:
from mcp_server import Server, Tool
class CalculatorTool(Tool):
def add(self, a: int, b: int) -> int:
return a + b
if __name__ == "__main__":
server = Server()
server.add_tool(CalculatorTool())
server.start()
保存并关闭文件。
步骤三: 启动服务器
cd ..
python -m server.server_project_name.server
创建 MCP 客户端的步骤
步骤一: 安装所需库
pip install mcp-client
步骤二: 初始化项目结构
mkdir client
cd client
nano server_connector.py
在文件中添加以下内容:
from mcp_client import ServerConnector
async def main():
connector = ServerConnector("localhost", 1234)
tools = await connector.connect()
calculator_tool = tools["Calculator"]
result = await calculator_tool.add(5, 3)
print(f"Result: {result}")
if __name__ == "__main__":
import asyncio
asyncio.run(main())
保存并关闭文件。
步骤三: 运行客户端
cd ..
python -m client.server_connector
创建 MCP 客户端图形用户界面(GUI)
步骤一: 安装 GUI 库
pip install tkinter mcp-client
步骤二: 初始化项目结构
mkdir client_ui
cd client_ui
nano app.py
在文件中添加以下内容:
import tkinter as tk
from mcp_client import ServerConnector
class CalculatorApp:
def __init__(self):
self.window = tk.Tk()
self.window.title("MCP 计算器客户端")
self.entry1 = tk.Entry(self.window)
self.entry2 = tk.Entry(self.window)
self.button = tk.Button(self.window, text="计算", command=self.calculate)
self.result_label = tk.Label(self.window, text="")
self.entry1.pack()
self.entry2.pack()
self.button.pack()
self.result_label.pack()
def calculate(self):
try:
a = int(self.entry1.get())
b = int(self.entry2.get())
connector = ServerConnector("localhost", 1234)
tools = connector.connect_synchronously()
calculator_tool = tools["Calculator"]
result = calculator_tool.add(a, b)
self.result_label.config(text=f"结果: {result}")
except Exception as e:
self.result_label.config(text=f"错误: {str(e)}")
if __name__ == "__main__":
app = CalculatorApp()
app.window.mainloop()
保存并关闭文件。
步骤三: 运行 GUI 应用程序
cd ..
python -m client_ui.app
🔧 技术细节
项目结构
服务器端 (server
目录)
- 位置:
server/server_project_name/server.py
- 内容: 包含服务器核心逻辑、工具定义以及组件配置。
客户端 (client
目录)
- 位置:
client/mcp_client/server_connector.py
- 内容: 包含连接到服务器的逻辑以及与服务器交互的功能。
扩展系统
- 添加更多工具: 在服务器中定义新的工具类,并在
server.py
中注册它们。
- 增强 GUI: 向客户端 GUI 添加更多功能,例如减法、乘法和除法操作。
- 配置管理: 创建配置文件以管理服务器地址和其他设置。
- 日志记录: 实施日志记录以跟踪客户端和服务器之间的交互。
测试系统
服务器端测试
cd server
python server.py
客户端命令行测试
cd ..
cd client
python server_connector.py
客户端 GUI 测试
cd ..
cd client_ui
python app.py
结论
模型上下文协议(MCP)提供了一种强大的方法来构建分布式计算系统。通过遵循本指南,您将能够创建功能完善的服务器和客户端,并扩展它们以满足各种需求。继续探索 MCP 的潜力,并将其应用于您的项目中!