MCP 实战:用模型上下文协议给 AI "长手"

QuibblerAgentQuibblerAgent 2026-07-22 约 11 分钟 194 次阅读

MCP 实战:用模型上下文协议给 AI "长手"

以前给 AI 接一个工具,要为每个客户端单独写一套集成——接 10 个工具、用 3 个客户端,就是 30 份适配代码,写不完、改不动。MCP(Model Context Protocol,模型上下文协议)就是为了消灭这个"M×N 适配地狱"而生的:它把"模型"与"工具/数据源"之间的连接标准化,写一次 Server,处处可用,被戏称为"AI 应用的 USB-C"。官网。本文讲清它的架构,并带你"接一个现成的 + 写一个自己的"。

1、MCP 是什么、解决什么

MCP 是 Anthropic 于 2024 年底提出、现已获多家厂商支持的开放协议。它规定"AI 客户端"与"外部能力提供方(MCP Server)"之间如何发现能力、调用工具、读取数据。打个比方:以前每个电器配一种充电线(M×N),MCP 统一成一种接口(USB-C)——只要 Server 遵循协议,任何支持 MCP 的客户端(Claude Desktop、Claude Code、Cursor 等)都能即插即用。

2、核心架构:Host、Client、Server

┌──────────────┐  MCP 协议  ┌──────────────┐
│  Host (AI端)  │ ─────────▶ │  MCP Server  │ ──▶ GitHub / 数据库 / 文件 / ...
│ Claude/Cursor │ ◀───────── │  (能力提供方) │
└──────────────┘            └──────────────┘
  - Host:运行 AI 应用的地方(Claude Desktop、Claude Code、Cursor)
  - Client:Host 内负责与 Server 通信的组件(1 Host 可带多 Client)
  - Server:暴露具体能力的进程(文件系统、数据库、GitHub...)
  - 传输:stdio(本地子进程)/ HTTP+SSE(远程),新版统一为 Streamable HTTP

关键认知:一个 Host 可接多个 Server,一个 Server 可服务多个 Host——这正是"写一次处处用"的来源。本地工具用 stdio 启动子进程,远程能力用 HTTP 传输。

3、三类能力:Tools、Resources、Prompts

能力        本质                  何时用
-------------------------------------------------------------------
Tools       可调用的函数(有副作用)  模型要"做事":发邮件、查库、建 issue
Resources   可读取的数据(只读)     模型要"看东西":读文件、读配置、读日志
Prompts     预定义的提示模板         常用交互套路:代码审查模板、总结模板

分清这三类很重要:Tools 是"动手"(有副作用、需谨慎授权),Resources 是"动眼"(只读、较安全),Prompts 是"套路复用"。一个 Server 可以同时暴露三类能力。

4、实战一:接入一个现成 Server

以官方"文件系统"Server 为例,让 AI 能读写指定目录。不同客户端配置文件不同:Claude Desktop 是 `claude_desktop_config.json`;Claude Code 是项目根的 `.mcp.json`(团队共享)或用户级配置;Cursor 在设置里配置 MCP。以 Claude Desktop 为例:

// claude_desktop_config.json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/me/Documents"]
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": { "GITHUB_TOKEN": "你的token" }
    }
  }
}

核心实现:

1. 在配置中声明要启动的 Server 及参数(命令、参数、环境变量)

2. Host 启动时拉起 Server 子进程,完成能力握手

3. 模型在对话中按需调用 Server 暴露的 Tool / 读取 Resource

4. Server 执行操作并把结果回传给模型

配好后重启客户端,就能在对话里直接说"读一下 Documents 里的笔记""帮我看下 GitHub 上 #123 的描述",AI 会自动调用对应 Server。

5、实战二:写一个自定义 Server

用官方 SDK,几十行就能把任意内部能力暴露给 AI。下面是一个最小 Server 骨架(TypeScript SDK,注册一个"查天气"工具):

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const server = new McpServer({ name: "weather", version: "1.0.0" });

// 注册一个工具
server.tool(
  "get_weather",                                   // 工具名
  "查询某城市天气",                                  // 描述(模型据此判断何时调用)
  { city: z.string() },                            // 入参 schema
  async ({ city }) => {
    const data = await fetchWeather(city);         // 你的业务逻辑
    return { content: [{ type: "text", text: JSON.stringify(data) }] };
  }
);

// 用 stdio 传输启动
const transport = new StdioServerTransport();
await server.connect(transport);

几个要点:工具描述要写清楚(模型靠它判断"该不该调用");入参用 schema 校验(防模型乱传参);返回统一格式(content 数组)。写完用 `npx` 或打包成可执行命令,再在客户端配置里引用即可。调试可用官方的 MCP Inspector 工具,单步测试每个工具。

6、安全:Server 能干什么,就代表 AI 能干什么

这是最容易被忽视、却最重要的一点。MCP Server 是一个进程,它的权限 = 它能访问什么。给文件系统 Server 一个根目录参数,AI 就能读写整台机器;给数据库 Server 写权限,AI 就能删数据。安全准则:最小权限(只暴露必要目录/表/操作);敏感操作要用户授权(让客户端弹确认);只读优先(能只读就别给写);警惕命令注入(本地 Server 的命令参数要做校验);token 与密钥别硬编码。把 Server 当成"给 AI 的权限边界"来设计。

7、生态全景

Server 生态在 2026 年已爆发,常见几类:文件系统(读写本地)、GitHub / GitLab(仓库、issue、PR)、数据库(PostgreSQL、SQLite,自然语言查数)、搜索与浏览器(Brave、Google、Playwright)、协作工具(Slack、Notion、Linear)、记忆库、云服务(S3、K8s)等。挑选原则:优先官方/高星 Server,自建敏感能力时自己写并严控权限。

8、MCP vs Function Calling:何时用谁

Function Calling   模型能力:输出"结构化工具调用请求"(模型侧)
MCP                连接协议:统一"工具从哪来、怎么标准接入"(生态侧)

关系:MCP Server 暴露的工具 → 通过 Function Calling 被模型调用
     MCP 解决"工具的供给与标准化",FC 解决"模型如何发起调用"

两者不冲突,而是配合:少量、固定、自有的工具,直接用 Function Calling 即可;大量、可复用、跨客户端的能力,封装成 MCP Server 更省心。随着 Agent 生态对"工具丰富度"的要求暴涨,MCP 的标准化价值会越来越大。

9、总结

MCP 把"AI 接工具"从"一对一定制"升级为"即插即用":它用 Host/Client/Server 架构 + 三类能力(Tools/Resources/Prompts)+ 标准传输,化解了 M×N 适配地狱。配一段 JSON 就能接入现成 Server,用 SDK 几十行就能写出自定义 Server。

关键要点:

- MCP 统一 Host 与工具/数据源的连接,化解 M×N 适配地狱

- 三类能力:Tools(做事)/ Resources(看东西)/ Prompts(套路)

- 配 JSON 接现成 Server,用 SDK 写自定义 Server,权限按"最小授权"设计

- 与 Function Calling 配合而非替代

对于想给 AI"长手"的开发者而言,MCP 是当前最省心的方案:不必再为每个客户端重复造轮子,把精力放在"定义好能力、守好权限边界"上。挑几个现成 Server 快速获得读写万物的能力,再为自己最核心的业务写一个专属 Server——你的 AI 应用,会因此从"只能聊"变成"真能干"。

相关推荐

置顶 精选
博客七周年:AI 一天完成整体重构
AI

博客七周年:AI 一天完成整体重构

博客从 2019 年国庆用 Xiuno BBS 搭建,到 2026 年国庆整整七年。868 篇文章、53 条评论、6060 个代码块,这次与 AI Agent 结对,一天完成从 PHP 论坛到 Next.js 的整体重构与无损迁移。

23
精选
​Jev 详解:不做生成的判断模型
AI

​Jev 详解:不做生成的判断模型

Jev 详解:不做生成的判断模型让 LLM 干"判断"的活,一直是件拧巴的事:它擅长生成文本给人读,你要的却是结构化决策给代码用——于是提示词约束、JSON 解析、重试兜底一层层糊上去。TypeSafe AI 的答案是干脆换一类模型:Jev,首个 System One 模型——不做文本生成,专职快速、结构化的判断:输入状态与类型化问题,输出带概率与置信度的结构化答案,类型错误在数学上不可能发生,因

11
精选
Laya 详解:可自托管微调的非自回归判断模型
AI

Laya 详解:可自托管微调的非自回归判断模型

Laya 详解:可自托管微调的非自回归判断模型Jev 证明了"判断模型"这条路走得通,但它闭源、按 token 计费、只能云端调用。两天后(2026 年 9 月 18 日),NandhaKishorM 在 GitHub 开源了 NandhaKishorM/laya(Laya):多语言、非自回归的 System 1 判断引擎——三个 checkpoint(laya / laya-multilingu

6