从零搭建 MCP 服务——让 AI 拥有无限扩展能力

副标题:通过一个简单的 MCP 示例,理解 Model Context Protocol 的核心原理


故事开场

"老板,我们的 AI 助手需要对接公司内部的知识库、飞书消息和高德地图 API。"

"好的,那你需要写三套不同的对接代码------一套给 Claude,一套给 GPT,一套给 DeepSeek。"

"......"

这是我去年遇到的真实场景。当时我们团队花了整整两周时间,为三个不同的大模型写了三套几乎一样的工具调用代码。代码重复率高达 80%,维护起来简直是噩梦。

直到我发现了 MCP------Model Context Protocol。它就像 AI 界的 USB-C 接口,让所有模型和工具都能统一连接。从此,一套代码,所有模型通用。

今天,我们就通过一个简单的 MCP 示例项目,来理解这个神奇协议的核心原理。


MCP 是什么?

钩子

你有没有想过,为什么电脑上的 USB 接口能插鼠标、键盘、U盘、打印机,甚至充电?因为它们都遵循同一个标准------USB 协议。

在 AI 领域,MCP 就是这个"USB 协议"。

问题

大模型本身只能处理文本,但现实世界有数据库、API、文件系统等各种资源。如何让模型统一访问这些资源?

解法

MCP(Model Context Protocol) 是 Anthropic 公司于 2024 年 11 月推出的协议,它定义了大模型与外部世界通信的标准方式。

拆解

MCP 由三部分组成:

scss 复制代码
┌─────────────────────────────────────────────────────────────┐
│                      MCP 架构图                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌──────────────────────────────────────────────────────┐   │
│  │                    MCP Host (智能体)                  │   │
│  │              Claude Code / Trae / Cursor             │   │
│  └──────────────────────────────────────────────────────┘   │
│                            │                                │
│                            │  调用                          │
│                            ▼                                │
│  ┌──────────────────────────────────────────────────────┐   │
│  │              MCP Client (客户端)                      │   │
│  │     Gitee / 高德地图 / 飞书 / 本地文件系统            │   │
│  └──────────────────────────────────────────────────────┘   │
│                            │                                │
│                            │  访问                          │
│                            ▼                                │
│  ┌──────────────────────────────────────────────────────┐   │
│  │              MCP Server (服务端)                      │   │
│  │       提供上下文:数据库、API、文件、工具              │   │
│  └──────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘
组件 作用 示例
MCP Host AI 智能体,负责分析需求、调用工具 Claude Code、Trae、Cursor
MCP Client 插件式客户端,对接各种外部服务 Gitee、高德地图、飞书
MCP Server 提供上下文服务的后端 文件系统、数据库、API

核心价值

  1. 统一标准:一套代码,所有模型通用
  2. 安全可控:细粒度权限控制
  3. 无限扩展:接入任何外部服务

项目结构解析

钩子

让我们打开项目文件夹,看看一个最简单的 MCP 项目长什么样。

项目结构

bash 复制代码
mcp/
├── readme.md          # MCP 概念介绍
└── mcp-test/          # MCP 测试目录
    ├── .mcp.json      # MCP Server 配置文件
    └── test.js        # 测试脚本

文件作用分析

文件 作用 重要性
readme.md MCP 概念介绍、架构说明 学习资料
.mcp.json MCP Server 配置文件,定义服务类型和参数 核心配置
test.js 测试脚本,验证 MCP 是否正常工作 测试用途

小结

这个项目虽然简单,但包含了 MCP 的核心要素:配置文件 + 测试脚本。接下来我们深入分析配置文件。


核心配置详解

钩子

.mcp.json 是 MCP 的灵魂。它告诉 AI 智能体:"这里有一个工具,你可以这样用它。"

配置文件解析

json 复制代码
{
    "mcpServers": {
        "filesystem": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "@modelcontextprotocol/server-filesystem",
                "C:\\Users\\DMYX\\Desktop\\workspace\\lesson_zp\\ai\\mcp\\mcp-test"
            ]
        }
    }
}

字段解释

字段 说明
mcpServers 对象 包含所有 MCP Server 配置
filesystem 对象 Server 名称,可以自定义
type "stdio" 通信类型:stdio(标准输入输出)或 http
command "npx" 启动命令
args 数组 命令参数

启动流程

vbscript 复制代码
┌─────────────────────────────────────────────────────────────┐
│                    MCP Server 启动流程                     │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  用户配置 .mcp.json                                          │
│       │                                                     │
│       ▼                                                     │
│  AI 智能体读取配置                                           │
│       │                                                     │
│       ▼                                                     │
│  执行命令:npx -y @modelcontextprotocol/server-filesystem    │
│       │                                                     │
│       ▼                                                     │
│  启动 MCP Server(文件系统服务)                              │
│       │                                                     │
│       ▼                                                     │
│  Server 监听 stdio 端口                                      │
│       │                                                     │
│       ▼                                                     │
│  AI 智能体通过 stdio 与 Server 通信                           │
│       │                                                     │
│       ▼                                                     │
│  提供文件读写能力给大模型                                     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

为什么选择 stdio 类型?

类型 优点 缺点 适用场景
stdio 无需网络配置,本地运行 只能本地访问 本地工具、文件系统
http 支持远程访问 需要配置网络 远程 API、云端服务

配置参数说明

json 复制代码
"args": [
    "-y",                                      // 自动确认安装
    "@modelcontextprotocol/server-filesystem", // MCP Server 包名
    "C:\\Users\\...\\mcp-test"                  // 文件系统根目录(权限范围)
]

关键安全设计:最后一个参数指定了文件系统的根目录。AI 只能访问这个目录及其子目录,防止误删其他文件。


MCP 的工作原理

钩子

现在我们知道了配置文件怎么写,但 MCP 到底是怎么工作的?AI 怎么知道什么时候调用它?

完整工作流程

arduino 复制代码
┌─────────────────────────────────────────────────────────────┐
│                    MCP 完整工作流程                         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  用户提问:"帮我读取 mcp-test 目录下的 test.js 文件"          │
│       │                                                     │
│       ▼                                                     │
│  AI 分析需求:需要读取本地文件                                 │
│       │                                                     │
│       ▼                                                     │
│  AI 检查可用工具:发现 filesystem MCP Client                  │
│       │                                                     │
│       ▼                                                     │
│  AI 通过 MCP 协议发送请求:                                   │
│  {                                                          │
│    "type": "read_file",                                     │
│    "path": "test.js"                                        │
│  }                                                          │
│       │                                                     │
│       ▼                                                     │
│  MCP Server 执行:读取文件内容                                │
│       │                                                     │
│       ▼                                                     │
│  MCP Server 返回结果:                                       │
│  {                                                          │
│    "content": "var i = 1;"                                  │
│  }                                                          │
│       │                                                     │
│       ▼                                                     │
│  AI 整理回答:"test.js 文件内容是:var i = 1;"               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

通信协议

MCP 使用 JSON-RPC 风格的通信:

css 复制代码
请求:
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "filesystem/read",
  "params": {
    "path": "test.js"
  }
}

响应:
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": "var i = 1;"
  }
}

小结

MCP 的工作流程很简单:

  1. 用户提问 → AI 分析需求
  2. AI 判断需要调用工具 → 查找可用的 MCP Client
  3. 通过 MCP 协议发送请求 → Server 执行
  4. 返回结果 → AI 整理回答

MCP 的实际应用场景

场景1:文件操作

markdown 复制代码
用户:"帮我创建一个 README.md 文件"

AI 通过 filesystem MCP:
1. 检查文件是否存在
2. 创建文件
3. 写入内容
4. 返回成功信息

场景2:代码搜索

markdown 复制代码
用户:"搜索项目中所有使用 async/await 的文件"

AI 通过 filesystem MCP:
1. 遍历目录
2. 读取每个文件
3. 搜索关键词
4. 返回匹配结果

场景3:跨平台工具调用

markdown 复制代码
用户:"在 Gitee 上创建一个仓库"

AI 通过 Gitee MCP:
1. 调用 Gitee API
2. 创建仓库
3. 返回仓库链接

实战总结

核心要点

  1. MCP 是协议,不是工具:它定义了 AI 与外部世界通信的标准方式
  2. 配置即接入 :通过 .mcp.json 配置文件即可接入新工具
  3. 安全可控:细粒度权限控制,防止误操作
  4. 无限扩展:任何外部服务都可以封装为 MCP Server

为什么 MCP 重要?

在没有 MCP 之前:

  • 每个模型有自己的工具调用方式
  • 需要为每个模型写对接代码
  • 工具维护成本高

有了 MCP 之后:

  • 一套代码,所有模型通用
  • 工具即插即用
  • 快速扩展 AI 能力

如果是你,你会怎么做?

假设你要开发一个 AI 编程助手,需要支持:

  1. 代码搜索
  2. 文件读写
  3. Git 操作
  4. 代码执行

你会如何设计 MCP 配置?哪些功能适合用 stdio,哪些适合用 http?欢迎在评论区分享你的想法!


MCP 不仅仅是便利,它从根本上重构了 AI 的应用架构,把 AI 从 chatbot 推向了 Agentic AI 阶段。希望这篇文章能帮助你理解 MCP 的核心原理,开启 AI 智能体开发之旅!

相关推荐
zzzzzz3101 小时前
你的 AI 写的 React 烂透了?这个 8000+ Star 的开源工具能揪出 90% 的「Agent 屎山」
人工智能
小星AI1 小时前
MCP协议超详细教程,从入门到实战
人工智能
小星AI1 小时前
Kimi Code CLI 超详细教程,附源码
人工智能·agent
牧艺2 小时前
Cursor Rules / Skills 分层设计:让 Agent 像「团队新同事」
前端·人工智能·cursor
SamDeepThinking2 小时前
从源码到代码:MyBatis-Flex 与 MyBatis-Plus 的逐项对比
java·后端·程序员
shepherd1112 小时前
一文带你掌握 LLM、Token、Context、Prompt、RAG、MCP、Skill、Agent 等 AI 核心概念
人工智能·后端·ai编程
小林ixn2 小时前
MCP 保姆级入门指南:AI 的“万能充电口”到底怎么玩?
人工智能
转转技术团队4 小时前
没有测试的核心代码,怎么交给 AI 重构
人工智能