换个角度认识 MCP

协议概述

MCP是一种标准化通信协议,用于桥接AI模型(如LLMs)与外部数据源/工具,实现动态上下文管理。其核心价值包括:

  • 统一上下文管理:通过结构化数据流解决AI交互中的状态丢失问题
  • 跨会话持久化:支持上下文状态的保存与恢复,提升连续对话能力
  • 工具无缝集成:标准化外部工具(如数据库、API)的调用方式

举个实际例子🌤️

用户提问: "明天北京天气如何?" 流程:

  1. 客户端发现已连接"天气服务MCP" → 注册get_weather工具。
  2. LLM判断需调用get_weather → 发送{city: '北京'}
  3. 天气服务返回{北京: 晴, 20℃}
  4. LLM生成: "明天北京晴天20℃,适合户外活动!"

其实这个例子只能说明MCP打通了三方数据交互的问题,并不能说明MCP的强大,因为就算你没有这个MCP的插件,AI照样是可以通过联网得知天气,接下来我们换个角度

开发一个MCP

js 复制代码
#!/usr/bin/env node
/**
 * @fileoverview 一个极简的查询天气命令的MCP服务器。
 * @description 只包含最核心功能的简单MCP服务示例。
 * @author Gemini
 */

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";

// 1. 定义你的工具
// 这是工具的"蓝图",告诉AI这个工具叫什么、能做什么、需要什么参数。
const weatherTool = {
  name: "query_weather",
  description: "查询指定一线城市的天气(使用模拟数据)",
  inputSchema: {
    type: "object",
    properties: {
      city: {
        type: "string",
        description: "要查询的城市名称",
        enum: ["北京", "上海", "广州", "深圳"],
      },
    },
    required: ["city"], // 将 city 设为必需参数
  },
};

// 2. 准备工具需要用到的数据和执行逻辑
// 这是工具实际要做的事情。
const weatherData = {
  北京: "晴, 15°C, 东北风3级",
  上海: "多云, 18°C, 东南风4级",
  广州: "雷阵雨, 22°C, 南风2级",
  深圳: "小雨, 24°C, 东南风3级",
};

/**
 * 当工具被调用时,执行这个函数。
 * @param {object} args - 从AI请求中收到的参数。
 * @returns {string} - 要返回给AI的结果。
 */
function executeQueryWeather(args) {
  const city = args.city;
  if (weatherData[city]) {
    return `${city}的天气是: ${weatherData[city]}`;
  }
  return `没有找到 ${city} 的天气信息。`;
}

// 3. 创建并配置MCP服务器
const server = new Server({ name: "simple-weather-server", version: "1.0.0" });

// 当AI问"你有什么工具?"时,告诉它我们有weatherTool
server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [weatherTool],
}));

// 当AI说"请用query_weather工具"时,执行我们的函数并返回结果
server.setRequestHandler(CallToolRequestSchema, async ({ params }) => {
  if (params.name === "query_weather") {
    const result = executeQueryWeather(params.arguments);
    return { content: [{ type: "text", text: result }] };
  }
  // 如果AI叫错了工具名字,给它一个提示
  return { content: [{ type: "text", text: `错误:未知的工具 "${params.name}"` }] };
});

// 4. 启动服务器,让它开始监听请求
async function startServer() {
  console.log("MCP天气服务启动中...");
  const transport = new StdioServerTransport();
  await server.connect(transport);
  console.log("🚀 服务已连接,可以接收来自AI的请求。");
}

startServer().catch((error) => {
  console.error("服务启动失败:", error);
  process.exit(1);
});

这里依旧使用天气例子,数据源固定。

  • 使用本地MCP
json 复制代码
  "my-weather-mcp": {
      "command": "node",
      "args": ["F:/XXX/weather.js"],
      "env": {}
    },
  1. main函数,MCP其实同样是一个脚本,当你指定了node环境使用的时候,main函数调用会 connect 连接。
  2. args,第一个参数指定你脚本的地址,第二个参数就是参数,也可以拼接执行
  • 执行查看

可以看到它会主动根据问题提出参数,并找到与你这个mcp匹配并调用返回。

  • 那这个和指令有什么区别?,直接说北京,然后返回对应数据!

我们可以通过这个问题对比出来与指令的区别 ,我们可以假设你这个mcp是一个非常复杂的逻辑性功能插件,当不是专业用户使用的时候,问题必然会偏离你的参数,这时候AI模型会与MCP进行精准的匹配,比如这个例子它可以从问题中自己找到信息:天气,首都,上海,相差...

总结

MCP协议正逐步发展为AI生态的基础接口,未来将重点增强工作流引擎 (支持多工具协同)、细粒度权限管理 (提升安全性)和跨平台互操作性 (统一标准)。开发者可受益于其标准化SDK (降低开发成本)、沙箱安全机制 (隔离风险)和灵活部署(本地/云端适配),为构建企业级AI应用提供高效、安全的工具集成方案。

相关推荐
曹牧6 小时前
AI编程助手
ai编程
Next_Tech_AI8 小时前
别用 JS 惯坏了鸿蒙
开发语言·前端·javascript·个人开发·ai编程·harmonyos
zhangshuang-peta10 小时前
超越Composio:ContextForge与Peta作为集成平台的替代方案
人工智能·ai agent·mcp·peta
yangminlei11 小时前
使用 Cursor 快速创建一个springboot项目
spring boot·ai编程
冬奇Lab11 小时前
团队宪法:CLAUDE.md 和rule使用技巧与复利模式
人工智能·ai编程
coder_jo11 小时前
体验MCP自动操作Pencil完成UI设计稿
ai·mcp
Java后端的Ai之路13 小时前
【AI编程工具】-Skills和Rule傻傻分不清?(一文带你读懂)
ai编程·trae·rule·skills
星辰引路-Lefan13 小时前
Antigravity 登录问题及解决方案:Antigravity Tools 账号管理工具详解
ide·ai编程·gemini·antigravity
HyperAI超神经15 小时前
覆盖天体物理/地球科学/流变学/声学等19种场景,Polymathic AI构建1.3B模型实现精确连续介质仿真
人工智能·深度学习·学习·算法·机器学习·ai编程·vllm
猫头虎17 小时前
2026全网最热Claude Skills工具箱,GitHub上最受欢迎的7大Skills开源AI技能库
langchain·开源·prompt·github·aigc·ai编程·agi