Skip to content

MCP入门

约 1408 字大约 5 分钟

2025-11-10

什么是 MCP

MCP 即模型上下文协议(Model Context Protocol),是 Anthropic 于 2024 年 11 月推出的开源开放标准协议,核心是为大模型与外部数据源、各类工具的交互制定统一 “规则”,就像 AI 应用领域的 USB - C 接口,通过客户端 - 服务器架构实现二者安全、高效的连接与上下文传递。

MCP 的特点

  • 交互标准化:统一大模型与外部数据、工具的对接方式,形成通用 “语言”。
  • 集成高效化:一次开发适配所有支持 MCP 的模型 / 应用,迁移无需重写代码。
  • 生态开放化:支持第三方开发可复用服务器,形成共享的工具 / 数据接入生态。
  • 安全可控化:权限自主管控、敏感信息隔离、传输加密,降低数据泄露风险。

MCP 优缺点

  1. 优点
  • 打破数据与工具的孤岛,实现跨场景资源互通。
  • 大幅减少重复开发工作,降低开发与迁移成本。
  • 无需依赖单一厂商,提升应用灵活性和可扩展性。
  • 从架构设计上保障数据安全,适配企业私有场景。
  1. 缺点
  • 作为新兴协议,部分小众工具 / 系统暂无成熟适配方案。
  • 企业部署需搭建 MCP 服务器,对小型团队存在一定技术门槛。
  • 生态仍在完善中,跨厂商的深度协同场景尚未完全覆盖。

MCP 与传统集成方式对比表

对比维度MCP(模型上下文协议)传统集成方式(自定义接口/厂商私有插件)
对接标准统一开放协议,所有支持 MCP 的模型/工具通用无统一标准,需按不同厂商/工具的接口规则适配
开发成本一次开发适配所有兼容平台,无重复工作每新增一个模型/工具需单独编写适配代码,成本高
迁移灵活性支持跨厂商快速迁移,无需重写核心代码绑定单一厂商或工具,迁移需重构适配逻辑
数据安全敏感信息本地存储,权限自主管控,传输加密常需向第三方厂商提供密钥,数据泄露风险较高
生态覆盖开放生态,第三方可开发复用服务器,适配场景持续扩充多为厂商私有生态,工具/数据互通性差
技术门槛需搭建 MCP 服务器,对小型团队有一定门槛无需额外搭建中间层,但适配复杂度随工具增多上升
协同能力支持跨平台、跨工具无缝协同,共享上下文不同工具/系统间难以联动,协同效率低
实时数据接入原生支持对接实时业务系统,获取最新数据需单独开发实时同步逻辑,适配难度大

基本规范

MCP 协议由两部分组成:工具描述工具调用

知识点

  • stdio:标准输入输出,用于工具与外部交互。
  • jsonrpc:JSON-RPC 是一种轻量级、基于文本的远程过程调用(RPC)协议,它允许客户端通过 HTTP 或其他传输协议调用远程服务器上的方法。

工具描述

工具描述是 MCP 服务中最重要的部分,它定义了工具的功能、输入输出格式、权限等信息。工具描述通常以 JSON 格式表示。

  • 初始化化请求
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-06-18",
    "capabilities": {
      "roots": {
        "listChanged": true
      }
    }
  },
  "clientInfo": {
    "name": "clientName",
    "title": "clientTitle",
    "version": "clientVersion"
  }
}
  • 初始化响应
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2025-06-18",
    "capabilities": {
      "tools": {
        "listChanged": true
      }
    },
    "serverInfo": {
      "name": "mcp-server",
      "title": "MCP Server",
      "version": "0.0.1"
    }
  }
}

工具列表

  • 调用请求
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list",
  "params": {}
}
  • 调用响应
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "sum",
        "title": "两数求和",
        "description": "Get the sum of two numbers",
        "inputSchema": {
          "type": "object",
          "properties": {
            "a": {
              "type": "number",
              "description": "The first number"
            },
            "b": {
              "type": "number",
              "description": "The second number"
            }
          },
          "required": ["a", "b"]
        }
      }
    ]
  }
}

工具调用

  • 调用请求
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "sum",
    "arguments": {
      "a": 1,
      "b": 2
    }
  }
}
  • 调用响应
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "1 + 2 = 3"
      }
    ]
  }
}

MCP 开发调试

工具

npx @modelcontextprotocol/inspector

SDK

npm install @modelcontextprotocol/sdk

案例

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
//官方指定zod,用于定义输入输出格式
import { z } from "zod";

//创建一个McpServer实例
const server = new McpServer({
  //设置服务器信息
  name: "mcp-server",
  title: "MCP Server",
  version: "0.0.1",
});

//注册一个求和的工具
server.registerTool(
  "sum",
  {
    title: "两数求和",
    description: "两数求和",
    inputSchema: {
      a: z.number().describe("第一个数"),
      b: z.number().describe("第二个数"),
    },
  },
  ({ a, b }) => {
    return {
      content: [
        {
          type: "text",
          text: `${a} + ${b} = ${a + b}`,
        },
      ],
    };
  }
);

//添加一个StdioServerTransport实例
const transport = new StdioServerTransport();
server.connect(transport);

对应上面的三个步骤

mcp-init

mcp-list

mcp-call

使用:

可以使用编辑器连接,例如:Trae

  • 手动添加 MCP 服务
{
  "mcpServers": {
    "test": {
      //服务名称
      "command": "node", //执行命令
      "args": ["绝对路径"] //执行命令参数
    }
  }
}

本地 MCP 服务配置完成,并且识别出了 sum 工具。

mcp-eg1

也可以把编写好的服务上传到 npm,就可以远程配置。

{
  "mcpServers": {
    "Puppeteer": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-puppeteer"],
      "env": {}
    }
  }
}

mcp-eg2

  • 将 MCP 添加到自定义智能体中

  • 使用

mcp-eg3

这里就可以看到 AI 就开始调用自己写的工具输出结果。