MCP (Model Context Protocol) 近期备受关注,它提供了一种强大的机制,将大型语言模型(LLM)与现有的传统系统(例如文件服务器、API 和数据库)进行集成。本文将以 MCP Python SDK 为切入点,带领大家从零开始搭建一个基本的 MCP 开发环境,并通过实际案例展示如何利用 FastMCP 构建一个简单的问候语服务,最终实现 LLM 与该服务的无缝集成,为后续的大模型应用开发奠定坚实的基础。

一、MCP:大模型时代的桥梁

MCP (Model Context Protocol) 旨在解决 LLM 在实际应用中面临的一个核心挑战:如何有效地获取和利用外部数据。传统 LLM 通常依赖于预训练数据,缺乏与外部系统交互的能力,这限制了其在特定领域的应用。MCP 提供了一个标准化的协议,允许 LLM 通过定义好的接口(例如 tools 和 resources)与外部系统进行通信,从而扩展了 LLM 的知识范围和能力边界。简单来说,MCP 就是一个桥梁,连接着 LLM 的智能大脑和传统系统的丰富数据。

例如,假设我们需要开发一个智能客服机器人,该机器人需要能够查询公司内部的知识库,并根据用户的问题给出准确的答案。如果直接让 LLM 进行查询,可能会因为知识库信息的时效性或专业性而导致回答不准确。而通过 MCP,我们可以将知识库封装成一个 MCP server,并定义一个 query_knowledge_base 的 tool。LLM 在接收到用户的问题后,可以调用该 tool 从知识库获取相关信息,然后再结合自身的语言生成能力,给出高质量的答案。

二、MCP Python SDK:开发者的利器

MCP 提供了多种编程语言的 SDK,方便开发者快速构建 MCP server。对于 Python 开发者来说,MCP Python SDK 提供了简洁易用的 API,可以轻松定义 tools、resources 和 prompts,从而实现 LLM 与外部系统的集成。

本文将以创建一个简单的问候语服务为例,展示 MCP Python SDK 的基本用法。该服务接收一个姓名作为输入,并返回一个个性化的问候语。通过这个简单的例子,读者可以快速了解 MCP Python SDK 的核心概念和用法,并为后续更复杂的应用开发打下基础。

三、FastMCP:构建高性能 MCP Server

MCP Python SDK 中,FastMCP 是一个轻量级且高性能的 MCP server 实现。它基于 FastAPI 框架构建,可以轻松地处理大量的并发请求,并提供高效的数据传输能力。

在本文的示例中,我们将使用 FastMCP 来构建问候语服务。FastMCP 提供了 FastMCP 类,用于初始化 MCP server,并提供了 @mcp.tool()@mcp.resource()@mcp.prompt() 等装饰器,用于定义 tools、resources 和 prompts。

四、开发环境搭建:一切从基础开始

在开始编写代码之前,我们需要先搭建好开发环境。首先,我们需要确保已经安装了 Python 和 Node.js,并安装了 uv 包管理器。

npx - version # ~11.3.0
npm - version # ~11.3.0
node - version # ~v22.15.0
Python - version # ~Python 3.13.3
uv - version # ~uv 0.7.8

然后,我们需要创建一个新的 Python 项目,并安装 fastmcpsimplejson 依赖包。

uv init my_first_mcp_server
cd my_first_mcp_server
uv add fastmcp simplejson

最后,我们需要安装 MCP Inspector,这是一个用于测试和调试 MCP server 的工具。

npx @modelcontextprotocol/inspector

五、问候语服务:代码实现与解析

接下来,我们将编写问候语服务的代码。首先,创建一个名为 greeting_mcp_server.py 的文件,并添加以下代码:

from mcp.server.fastmcp.server import FastMCP
import json
import random

# FastMCP 初始化
mcp = FastMCP("greetings")

@mcp.prompt()
def greeting_prompt():
    return """
    你正在与一个问候语服务交互,该服务使用配置文件 ('greetings_style.json') 加载问候语样式。
    调用 'greet' 工具,并传入一个参数:姓名 (字符串)。
    姓名必须只包含字母,最多 20 个字符。
    服务器将返回一个个性化的问候语,从配置文件中随机选择,例如 '你好,{name}!'、'嗨,{name}!' 或 '问候,{name}!'。
    示例:调用 greet("Alice") 将收到一个问候语,例如 '问候,Alice!, 欢迎加入团队' 或配置文件中的其他样式。
    """

@mcp.resource(uri="file://greetings_style.json")
def load_greeting_data():
    # 从名为 'greetings.json' 的文件加载数据
    with open("greetings_style.json", "r") as f:
        data = json.load(f)
    return data

@mcp.tool()
def greet(name: str) -> str:
    greeting_data = load_greeting_data()  # Defined under @mcp.resource
    greeting_styles = greeting_data["greeting_styles"]
    # 选择一个随机的问候语样式
    greeting_template = random.choice(greeting_styles)
    return greeting_template.format(name=name)

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

这段代码定义了一个名为 greetings 的 MCP server,包含一个名为 greet 的 tool。

  • @mcp.prompt() 装饰器定义了一个提示语,用于指导 LLM 如何使用 greet tool。
  • @mcp.resource() 装饰器定义了一个资源,用于加载问候语样式。
  • @mcp.tool() 装饰器定义了 greet tool,该 tool 接收一个姓名作为输入,并返回一个个性化的问候语。

此外,还需要创建一个名为 greetings_style.json 的文件,并添加以下内容:

{
  "greeting_styles": [
    "你好,{name}! 很高兴见到你!",
    "嗨,{name}! 欢迎来到课堂",
    "问候,{name}! 欢迎加入团队"
  ]
}

这个 JSON 文件定义了问候语的样式。

六、MCP Inspector:测试与验证

在将 MCP server 集成到 LLM 之前,我们需要先使用 MCP Inspector 对其进行测试和验证。

在 VS Code 中,导航到 greeting_mcp_server.py 文件所在的目录,并运行以下命令:

mcp dev greeting_mcp_server.py

这将启动 MCP Inspector,并打开一个浏览器窗口。在浏览器窗口中,我们可以看到 MCP server 的各种信息,例如 tools、resources 和 prompts。

我们可以点击 “Tools” 选项卡,选择 greet tool,并输入一个姓名,然后点击 “Run Tool” 按钮。如果一切正常,我们可以看到 MCP server 返回一个个性化的问候语。

七、与 LLM 集成:释放大模型的力量

现在,我们已经成功构建了一个简单的 MCP server,并使用 MCP Inspector 对其进行了测试和验证。接下来,我们将把这个 MCP server 集成到 LLM 中,并展示如何利用 LLM 的力量来生成更智能的问候语。

本文以 Cline 为例,展示如何将 MCP server 集成到 LLM 中。 Cline 是一个 Autonomous Coding Agent,可以自动完成各种编程任务。

首先,我们需要打开 Cline 扩展,并点击 “Select Model/API Provider” 链接,选择一个 LLM 模型。

然后,我们需要打开 cline_mcp_settings.json 文件,并添加以下配置:

{
  "mcpServers": {
    "greetings": {
      "disabled": false,
      "timeout": 60,
      "command": "uv",
      "args": [
        "--directory",
        "path\\where\\your\\mcp\\server\\is\\running",
        "run",
        "greeting_mcp_server.py"
      ],
      "transportType": "stdio"
    }
  }
}

请务必将 path\\where\\your\\mcp\\server\\is\\running 替换为 greeting_mcp_server.py 文件所在的实际路径。

配置完成后,Cline 扩展将显示一个欢迎消息,表明集成已激活。我们可以展开 greetings MCP server,查看可用的 tools 和 resources。

现在,我们可以尝试使用 Cline 扩展,并输入包含 “name” 关键字的 prompt,例如 “his name is john doe”。 Cline 将自动调用 greet tool,并返回一个个性化的问候语。

对于 Claude 用户,可以将 cline_mcp_settings.json 文件的内容复制到 claude_desktop_config.json 文件中,即可实现与 Claude 的集成。

八、总结与展望:MCP 的未来

本文以 MCP Python SDK 为起点,介绍了如何构建一个简单的问候语服务,并将其集成到 LLM 中。通过这个例子,我们可以看到 MCP 在连接 LLM 和传统系统方面所具有的巨大潜力。

MCP 不仅仅是一个简单的协议,更是一种新的开发模式。它可以帮助开发者将 LLM 应用到更广泛的领域,例如智能客服、智能助手、自动化办公等等。

随着 MCP 生态的不断发展,相信未来会出现更多优秀的 MCP server 和 client,从而推动 LLM 应用的普及。

希望本文能够帮助读者快速入门 MCP,并为后续的大模型应用开发提供一些启发。通过 MCP 的桥梁作用,我们可以将 LLM 的智能大脑与传统系统的丰富数据相结合,创造出更多更强大的应用。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注