求职中:luozirong7@163.com

MCP 技术深度解析:从概念到实践

什么是 MCP?

MCP (Model Context Protocol),也被称为模型上下文协议,是一种专为AI模型工具交互而设计的通信协议。它的核心思想是提供一种标准化的机制,让 AI 客户端(如 LLM)能够以统一的方式调用外部工具和服务。

MCP 协议通过定义清晰的工具(Tool)资源(Resource)提示(Prompt) 三种核心元素,将外部能力进行抽象和封装。开发者可以通过简单的装饰器(Decorator)来暴露服务的功能,而无需关心底层的通信细节。这极大地简化了 AI 代理和外部服务之间的集成过程,使 AI 能够更智能地调用外部功能。

MCP 的通信模式:STDIO、SSE 和 Streamable HTTP

MCP 提供了多种通信模式,以适应不同的应用场景。

STDIO (Standard Input/Output)

STDIO 是一种基于标准输入/输出流的通信模式。它主要用于本地进程间通信

  • 工作原理:当一个 MCP 客户端(如 Cherry Studio)需要调用一个 STDIO 模式的 MCP 服务器时,它会在本地将服务器程序作为一个子进程启动。客户端通过服务器的标准输入流(stdin)发送请求,并通过标准输出流(stdout)接收响应。
  • 适用场景:这种模式非常适合本地开发、调试和命令行工具。它的优点是低延迟、高效率,因为没有网络栈的开销。但缺点是它只能在同一台机器上工作,且通常是一对一的客户端-服务器关系。

SSE (Server-Sent Events)

SSE 是一种基于 HTTP 的通信模式,允许服务器向客户端单向推送数据。

  • 工作原理:SSE 模式下,MCP 服务器会启动一个 Web 服务。客户端通过一个 HTTP GET 请求与服务器建立一个长连接。服务器可以利用这个连接持续地向客户端发送事件流,而客户端则不需要不断地发起请求。客户端也可以通过一个独立的 HTTP POST 请求向服务器发送消息。
  • 适用场景:SSE 非常适合需要实时数据更新的场景,比如实时日志、进度更新或通知。它可以在网络上工作,支持多个客户端连接,但它的通信是单向的,如果要实现双向通信需要额外的机制。

Streamable HTTP

Streamable HTTP 是 MCP 中一种现代且灵活的通信模式,它结合了 HTTP 的请求-响应机制和流式传输的能力。

  • 工作原理:它利用 HTTP POST 请求发送数据,并利用 HTTP 的流式传输特性,允许服务器在响应中持续地向客户端发送数据流。这实现了双向的流式通信,比 SSE 更加强大和灵活。
  • 适用场景Streamable HTTP 是目前官方推荐的远程通信标准,适用于需要更灵活、双向实时交互的分布式系统。它可以支持复杂的实时交互,并可以更好地利用 HTTP 生态中的各种技术。

如何搭建一个简易的 MCP(Python)

接下来,通过 Python 搭建一个简单的 MCP 服务。这个例子将展示如何定义工具资源提示

首先,确保你已经安装了 fastmcp 库。

pip install fastmcp

现在,我们创建一个 Python 文件,比如 mcp_server.py,并将以下代码粘贴进去。为了方便本地测试,我们将 host 设置为本地地址。

from mcp.server.fastmcp import FastMCP

# 创建一个 MCP 服务器实例
# host 127.0.0.1 方便本地测试
mcp = FastMCP(name="Demo", host="127.0.0.1")

# 添加一个加法工具 (Tool)
@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b

# 添加一个动态问候资源 (Resource)
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Get a personalized greeting"""
    return f"Hello, {name}!"

# 添加一个提示 (Prompt)
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
    """Generate a greeting prompt"""
    styles = {
        "friendly": "Please write a warm, friendly greeting",
        "formal": "Please write a formal, professional greeting",
        "casual": "Please write a casual, relaxed greeting",
    }
    return f"{styles.get(style, styles['friendly'])} for someone named {name}."

if __name__ == "__main__":
    mcp.run(transport="sse")

如何通过 Cherry Studio 调用自己的 MCP

Cherry Studio 是一个强大的开发工具,能够方便地发现和调用 MCP 服务。一旦你的 MCP 服务运行起来,你就可以将其注册到 Cherry Studio 中。

首先,让我们启动你刚刚编写的 MCP 服务。

uv run mcp_server.py
或者:Python mcp_server.py

执行后,你应该会看到服务器启动的日志,它会提示你服务运行在 http://127.0.0.1:8000/sse 地址上。

接下来,打开 Cherry Studio。在工具的配置界面中,你需要添加你的 MCP 服务器。

  1. 在 Cherry Studio 中找到 MCP 服务器配置页面:这通常在设置或连接管理部分。
  2. 添加新的 MCP 服务器:点击“添加”按钮,输入你的服务器信息。
    • 名称:自定义,比如 “我的 MCP 服务”。
    • 类型:选择 sse
    • 基地址:输入服务器地址 http://127.0.0.1:8000/sse

在这里插入图片描述

{
  "mcpServers": {
    "UKC-5sC_3f_G6IQ-Ev4EY": {
      "isActive": true,
      "name": "MCP 服务器",
      "type": "sse",
      "description": "",
      "baseUrl": "http://192.168.10.230:8000/sse"
    }
  }
}

执行效果如下:

在这里插入图片描述

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐