MCP到底是什么,原理是啥?

MCP (Model Context Protocol)

文末有视频教程链接

MCP 协议概述

MCP(Model Context Protocol)是一种用于 AI 模型上下文通信的协议,它允许开发环境与外部服务进行标准化交互。

以下是 MCP 配置文件示例:

{
    // Node.js MCP server
    "mcpServers": {
        "demo": {
            "command": "cmd",  // 在 Windows 上使用 cmd
            "args": [
                "/c",
                "npx",
                "-y",
                "@modelcontextprotocol/server-application"
            ],
            "env": {
                "API_KEY": "this is a example API key"
            }
        },
        // Python MCP server
        "time": {
            "command": "python",
            "args": [
                "-m",
                "mcp_server_time",
                "TimeZone"
            ]
        }
    }
}

在这个示例中,mcpServers 定义了两个 MCP 服务器:demotime。每个服务器都有自己的命令、参数和环境变量。

你可以在支持MCP服务的软件(例如:cursor)上导入这个配置文件,就会自动识别MCP服务

MCP Server 工作原理

MCP 服务器可以提供三种标准能力,每个服务器可以同时提供这三种能力或其中的任意组合:

  1. Resources:提供资源访问,如文件读取或 API 响应内容
    /* MCP 服务器的资源访问示例
    * https://github.com/modelcontextprotocol/typescript-sdk
    * https://github.com/modelcontextprotocol/python-sdk
    * Static resource
    */
    server.resource(
      "config",
      "config://app",
      async (uri) => ({
        contents: [{
          uri: uri.href,
          text: "App configuration here"
        }]
      })
    );

    // Dynamic resource with parameters
    server.resource(
      "user-profile",
      new ResourceTemplate("users://{userId}/profile", { list: undefined }),
      async (uri, { userId }) => ({
        contents: [{
          uri: uri.href,
          text: `Profile data for user ${userId}`
        }]
      })
    );
  1. Tools:提供工具功能,允许 LLM 调用特定函数或第三方服务
    // Simple tool with parameters
    server.tool(
      "calculate-bmi",
      {
        weightKg: z.number(),
        heightM: z.number()
      },
      async ({ weightKg, heightM }) => ({
        content: [{
          type: "text",
          text: String(weightKg / (heightM * heightM))
        }]
      })
    );

    // Async tool with external API call
    server.tool(
      "fetch-weather",
      { city: z.string() },
      async ({ city }) => {
        const response = await fetch(`https://api.weather.com/${city}`);
        const data = await response.text();
        return {
          content: [{ type: "text", text: data }]
        };
      }
    );
  1. Prompts:提供预定义的提示词模板,用于完成特定任务
    server.prompt(
      "review-code",
      { code: z.string() },
      ({ code }) => ({
        messages: [{
          role: "user",
          content: {
            type: "text",
            text: `Please review this code:\n\n${code}`
          }
        }]
      })
    );

工作流程

flowchart LR Client[客户端应用] <--> Protocol{MCP 协议} Protocol <--> Server[MCP 服务器] Server --> Resources[资源访问] Server --> Tools[工具功能] Server --> Prompts[提示词模板] Resources --> Files[(文件系统)] Resources --> APIs[(外部 API)] Tools --> Functions[函数执行] Tools --> Services[第三方服务] Prompts --> Templates[(任务模板)]

支持 MCP Client 的软件

  • Cline:VS Code插件
  • Cursor:内置AI Agent的代码编辑器

一般来说,MCP服务器需要node.js(指令:npx)和python环境,并且需要安装一些依赖包,如mcp_server_time@modelcontextprotocol/server-application等。
具体的安装和使用方法可以参考各个软件的文档或 GitHub 仓库。

参考资源

更多信息请访问

B站视频教程:

posted @ 2025-04-14 22:31  Whitejoce  阅读(126)  评论(0)    收藏  举报