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 应用开发打下坚实的基础。

最后修改:2025 年 05 月 05 日
如果觉得我的文章对你有用,请随意赞赏