Model Context Protocol (MCP) 学习心得
1. 什么是 MCP?
Model Context Protocol (MCP) 是一个开放协议,旨在标准化应用程序如何向大型语言模型 (LLMs) 提供上下文。它类似于 USB-C 的概念,为 AI 应用程序提供了一种标准化的方式来连接不同的数据源和工具。
2. MCP 的架构
MCP 主机:类似网页对话或者各种agent这样的程序,希望通过MCP协议去访问数据
MCP 客户端:MCP主机通过MCP客户端去访问MCP服务器提供的数据
MCP 服务器:通过标准的MCP协议暴露特定功能
3. MCP 的优势
- 标准化:提供统一的接口,方便集成不同的数据源。
- 灵活性:支持快速切换 LLM 提供商。
- 安全性:遵循最佳实践,确保数据访问的安全性。
- 高效性:通过预构建的集成和工具,提升开发效率。
4. 使用MCP协议
现在各种服务提供商都有现成的MCP协议的接口可供调用,比如高德地图等
将其接入dify也很容易,在dify中安装MCP_SSE插件
配置MCP_SSE插件
选择去授权,填入以下内容:
{
"server_name": {
//"url": "http://127.0.0.1:8000/sse",
//这里改成高德开放平台提供的SSE地址,并填入申请的APIkey
"url": "https://mcp.amap.com/sse?key=你的高德API KEY",
"headers": {},
"timeout": 50,
"sse_read_timeout": 50
}
}
新建一个agent应用
在工具部分添加MCP_SSE
测试对话
5. 编写MCP Server
简单写一个查询我家服务器上的文件的功能,代码如下:
# 导入mcp的FastMCP
from mcp.server.fastmcp import FastMCP
# 导入paramiko,用于远程连接服务器
import paramiko
# 初始化 MCP 服务器,定义服务名称为 "list_files",并定义SSE协议监听端口为54484
mcp = FastMCP("list_files",port=54484)
# 定义常量,用于远程服务器的连接信息
HOST_IP = "192.168.100.12" # 目标服务器的 IP 地址
USERNAME = "airmomi" # 登录用户名
PASSWORD = "********" # 登录密码
# 定义 MCP 工具
@mcp.tool()
async def list_files(directory: str = ".") -> str:
"""
列出远程服务器指定目录中的文件。
Args:
directory: 要列出文件的目录,默认为当前目录。
Returns:
返回文件列表的字符串。
"""
try:
# 初始化 SSH 客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(HOST_IP, username=USERNAME, password=PASSWORD)
# 执行 ls -lrt 命令
command = f"ls -lrt {directory}"
stdin, stdout, stderr = ssh.exec_command(command)
# 获取命令输出
output = stdout.read().decode()
error = stderr.read().decode()
# 关闭 SSH 连接
ssh.close()
if error:
return f"Error: {error.strip()}"
return output.strip()
except Exception as e:
return f"An error occurred: {str(e)}"
if __name__ == "__main__":
# 初始化并运行 MCP 服务器,这里使用SSE来传递数据
mcp.run(transport="sse")
在dify中测试,修改好MCP_SSE工具的授权地址为运行MCP Server的地址和监听端口
{
"server_name": {
//"url": "http://127.0.0.1:8000/sse",
//这里改成高德开放平台提供的SSE地址,并填入申请的APIkey
//"url": "https://mcp.amap.com/sse?key=你的高德API KEY",
//这里就改成运行MCP Server的主机和监听的端口
"url": "http://192.168.100.12:54484/sse",
"headers": {},
"timeout": 50,
"sse_read_timeout": 50
}
}
测试如下:
6. 总结
MCP 是一个强大的协议,能够显著提升 AI 应用程序的开发效率和可扩展性。通过学习 MCP,可以更好地理解如何与 LLM 集成,并为未来的 AI 应用开发打下坚实的基础。