MCP 从入门到实战:手把手搭建你的第一个可用的 AI 工具服务器

📅 2026/8/5 ✍️ 小文 📖 约 1 分钟

零基础看懂MCP协议核心,并通过一个真实的天气查询场景,逐步实现从定义工具、配置server到被AI调用和技能测试的完整流程,附可直接运行的参考代码。

什么是 MCP?一句话讲清

MCP(Model Context Protocol,模型上下文协议)本质是一个**“通用插座”**——让大模型(宿主)和外部工具(server)通过统一规范互相通信。有了它,你不必为每个工具写一套私有接口,而是按标准化协议暴露”技能”,任何支持 MCP 的 AI 都能自动调用。今天我们就从零搭建一个能真正跑通的 MCP 工具服务器。

前置准备

你需要:

  • Node.js 18+ 环境(本文用 TypeScript 演示)
  • 一个支持 MCP 的客户端(如 Claude Desktop、Cursor,或任意 MCP 协议的宿主)
  • 对 JSON 有基本了解即可,不要求深度工程经验

第一步:理解 MCP 的三个核心概念

在写代码前,先搞懂三个词,否则容易绕晕:

  1. Server(服务器):提供”技能”的一方,比如”查天气""查数据库”。
  2. Tool(工具):server 暴露的具体能力,有名字、入参描述和执行逻辑。
  3. Host(宿主):调用这些工具的 AI 客户端,负责根据用户意图选工具、传参数、解析结果。

你先当 server 的提供者,任务是”把某个能力包装成符合规范的 tool”。

第二步:初始化项目与安装依赖

mkdir my-mcp-weather && cd my-mcp-weather
npm init -y
npm install @modelcontextprotocol/sdk

SDK 装好后,新建 server.ts,引入 sdk 的基础能力(这里的 McpServer 帮你省掉大量协议细节,聚焦业务逻辑)。

第三步:定义一个”查询天气”的工具

核心代码长这样(逻辑已简化为结构示意):

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";

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

server.tool("get_weather", { city: { type: "string", description: "城市名" } },
  async ({ city }) => ({
    content: [{ type: "text", text: `今天${city}:晴,25℃,宜出行` }],
  })
);

await server.connect(/* 走 stdio 或 SSE 传输 */);

关键点:每个 tool 有三个要素——名字(AI 用来识别)、入参 Schema(告诉 AI 该传什么)、执行回调(真正干活并返回结构化结果)。SDK 会自动把我们的函数暴露成 MCP 标准格式。

第四步:把 server 接到 AI 客户端

  1. 写一个 start 脚本运行 server。
  2. 在客户端(以 Claude Desktop 为例)的配置文件里加入:
    { "mcpServers": { "weather": { "command": "node", "args": ["dist/server.js"] } } }
  3. 重启客户端,就能看到新增的 weather 工具了。

之后你在对话里说”查一下上海的天气”,宿主会自动匹配到 get_weather、填入参数并调用——这就是一次完整的 MCP 工具调用

第五步:上线前的三个自检清单

  1. 入参描述要写人话:AI 靠 description 决定怎么传参,“city""股票代码”这种命名能显著提高调用准确率。
  2. 错误要返回结构化信息:别直接抛异常让宿主懵,返回”查询失败:城市不存在”这类可读结果。
  3. 先做技能冒烟测试:用宿主真实问几轮不同说法,确认它能正确选工具、传对参数、解析结果。

结论

从”定义一个查询函数”到”被 AI 自动调用”,MCP 的核心就是遵循统一规范、把能力声明清楚、给足描述这三件事。有了第一个 server 的完整手感,再往企业场景(接数据库、接 ERP、接内部 API)复制就顺理成章了。工具是 Agent 的”手脚”,MCP 就是让手脚能被 AI 指挥的”神经网络”——今天是查天气,明天你就能让它干活、办事、甚至赚钱。

📤 分享到