MCP基础--从概念到动手实践
文章目录第一MCP是什么为什么它被称为“AI的USB-C接口”从一个问题说起什么是MCP为什么我们需要MCPMCP的核心架构MCP能做什么第二深入MCP核心——Resources、Tools与Prompts三者速览谁控制谁Resources资源让AI“知道”什么Tools工具让AI“做”什么Prompts提示引导AI“怎么”做三者如何协同工作第三动手搭建你的第一个MCP服务器——从代码到实战准备工作编写第一个MCP服务器测试你的服务器接入AI客户端最佳实践与注意事项结语第一MCP是什么为什么它被称为“AI的USB-C接口”从一个问题说起想象这样一个场景你正在VS Code里用AI助手写代码随口问了一句“PR #72的状态是什么”AI助手信心满满地给出了一个答案——听起来很合理但其实是错的因为它根本无法直接访问GitHub获取实时信息。这不是AI不够聪明而是它被“关在”了一个信息孤岛里。大语言模型LLM的能力再强如果无法连接到外部工具和数据源它的作用就大打折扣。而过去几年开发者们一直在用各种“土办法”来解决这个问题为每个AI应用、每个数据源单独写集成代码费时费力重复劳动严重。模型上下文协议Model Context Protocol简称MCP正是为了解决这个问题而诞生的。什么是MCPMCP是由Anthropic公司在2024年11月推出并开源的一种开放标准。它的核心目标很简单标准化AI应用与外部数据源、工具之间的交互方式。通俗地说MCP就像给AI应用装了一个“通用插口”。无论你是想让AI读取本地文件、查询数据库、调用API还是操作各种软件工具只要这些工具和数据源也支持MCPAI就能“即插即用”。正因如此MCP被广泛称为**“AI的USB-C接口”**。就像USB-C统一了各种电子设备的连接方式一样MCP要统一AI与外部世界的连接方式。为什么我们需要MCP在MCP出现之前AI应用的集成方式可以用一个词概括碎片化。每个AI应用比如Claude Desktop、ChatGPT、各种Agent框架要为每个工具和数据源编写专门的集成代码。如果有N个AI应用要对接M个数据源就需要开发N×M个不同的连接方案——这就是所谓的“N×M问题”。这不仅带来了巨大的重复劳动还导致系统扩展性差每接入一个新工具就要重新开发维护成本高接口一变就要到处改安全性和一致性难以保障而MCP的出现把N×M的问题简化成了NMAI应用只需要支持MCP协议数据源也只需要暴露MCP接口两者就能自动连通。MCP的核心架构MCP采用的是客户端-服务器Client-Server架构整个体系包含三个核心角色1. MCP主机Host希望访问外部数据的AI应用比如Claude Desktop、VS Code、Cursor等。2. MCP客户端Client运行在主机内部与MCP服务器保持1对1连接负责协议的通信。3. MCP服务器Server一个轻量级程序通过MCP协议对外暴露特定的功能——比如读取数据库、调用API、操作文件等。当你在AI应用里提出一个请求时流程大致是这样的主机将你的自然语言问题转化为语义请求客户端将其打包为标准的MCP请求服务器从对应的数据源获取真实数据以结构化格式返回整个过程对用户来说是完全透明的——你只需要用自然语言提问AI就能自动获取所需信息并给出回答。MCP能做什么MCP的想象空间很大。官方文档列举了几个典型场景个人助理AI可以访问你的Google日历和Notion成为一个真正了解你日程的智能助手设计开发Claude Code可以根据Figma设计稿直接生成完整的Web应用企业数据分析企业聊天机器人可以连接组织内的多个数据库用户通过聊天就能完成数据分析跨领域操作AI模型可以在Blender中创建3D设计并直接通过3D打印机打印出来在实际应用中开发者已经用MCP构建了各种有趣的功能。比如在Cursor这个代码编辑器里你可以通过Slack MCP服务器把它变成Slack客户端或者通过邮件MCP服务器直接发送邮件——你不需要离开自己的工作环境就能完成各种跨应用的任务。第二深入MCP核心——Resources、Tools与Prompts了解了MCP的宏观概念后我们来深入它的能力内核。MCP的魔力来源于三个核心原语PrimitivesResources资源、Tools工具和Prompts提示。这三个原语分别对应了AI与外部世界交互的三种基本方式读取信息、执行操作、引导对话。三者速览谁控制谁在深入细节之前先看一张官方给出的对比表格原语控制方描述示例Prompts用户控制由用户选择的交互式模板斜杠命令、菜单选项Resources应用控制由客户端附加和管理的上下文数据文件内容、Git历史Tools模型控制暴露给LLM执行操作的函数API POST请求、文件写入这个“控制层级”非常关键——它决定了谁来决定什么时候使用什么。接下来我们逐一拆解。Resources资源让AI“知道”什么Resources是MCP中用于向AI提供只读数据的原语。简单说就是让AI能够“看到”某些信息但不能修改它们。核心特点只读Read-only、由URI唯一标识、应用控制典型场景本地文件内容、数据库表结构、Git提交历史、API文档说明Resources是被动的——它们静静地躺在那里等待被读取不会主动做任何事情。Tools工具让AI“做”什么如果说Resources是让AI“知道”那Tools就是让AI“行动”。Tools是MCP中用于执行操作、产生副作用的原语。核心特点可执行Executable、有副作用Side Effects、由LLM自主决定调用、需要参数Schema典型场景调用外部API、写入或修改文件、执行数据库操作、触发业务流程Tools是主动的——它们被调用时真的会“做事”。Prompts提示引导AI“怎么”做Prompts是MCP中用于预定义对话模板和指令的原语。它们不直接读取数据也不执行操作而是告诉AI“在这种场景下应该怎么做”。核心特点模板化Template-based、纯数据Pure Data、由用户主动触发、提供指导框架典型场景代码审查流程/review-pr、项目日报生成/daily-report、特定领域的分析模板Prompts是指导性的——它们不亲自做事但告诉AI“按照这个套路来”。三者如何协同工作理解了三者各自的角色我们来看一个完整的协作示例假设你正在开发一个项目对AI说“帮我审查一下PR #72的代码变更。”Resources发挥作用AI通过MCP服务器读取PR #72的代码变更内容只读数据Prompts发挥作用你输入了/review-pr命令一个预定义的审查流程Prompt被加载告诉AI应该从哪些维度进行审查Tools发挥作用AI根据Prompt的指引调用各种Tool——可能是check_style检查代码规范、scan_vulnerabilities扫描安全漏洞最后post_comment把审查结果发布到PR上整个过程行云流水Resources提供数据Prompts提供方法Tools执行操作。第三动手搭建你的第一个MCP服务器——从代码到实战理论讲完了这一篇我们来动手。从零搭建一个属于自己的MCP服务器并让AI助手真正能够“调用外部工具”。准备工作请确保你的环境满足以下条件Python 3.10或更高版本uv推荐的Python包管理工具安装uv——这是一个快速的Python包管理工具curl-LsSfhttps://astral.sh/uv/install.sh|sh创建项目并安装依赖mkdirweather-mcp-servercdweather-mcp-server uv init.uvaddmcp[cli]httpx编写第一个MCP服务器创建一个文件weather.py写入以下代码importhttpxfrommcp.server.fastmcpimportFastMCP# 创建MCP服务器实例mcpFastMCP(Weather Server)# 定义工具1获取天气预警mcp.tool()asyncdefget_alerts(state:str)-str:获取指定州的天气预警信息urlfhttps://api.weather.gov/alerts/active?area{state}asyncwithhttpx.AsyncClient()asclient:responseawaitclient.get(url,timeout30.0)response.raise_for_status()dataresponse.json()ifnotdata.get(features):return当前没有活跃的天气预警alerts[f【{alert[properties][headline]}】foralertindata[features]]return\n.join(alerts)# 定义工具2获取天气预报mcp.tool()asyncdefget_forecast(latitude:float,longitude:float)-str:获取指定经纬度的天气预报# 先获取气象站信息points_urlfhttps://api.weather.gov/points/{latitude},{longitude}asyncwithhttpx.AsyncClient()asclient:responseawaitclient.get(points_url,timeout30.0)response.raise_for_status()dataresponse.json()forecast_urldata[properties][forecast]# 再获取预报数据asyncwithhttpx.AsyncClient()asclient:responseawaitclient.get(forecast_url,timeout30.0)response.raise_for_status()dataresponse.json()periodsdata[properties][periods][:5]forecasts[f{p[name]}:{p[detailedForecast]}forpinperiods]return\n\n.join(forecasts)# 启动服务器if__name____main__:mcp.run(transportstreamable-http)这段代码做了三件事创建服务器实例、通过mcp.tool()装饰器将函数变成AI可调用的工具、启动服务器。注意函数签名中的类型注解和文档字符串——它们会被自动解析为工具的输入参数描述和功能说明。测试你的服务器先用MCP Inspector进行测试——这是官方提供的交互式调试工具。首先启动服务器uv run weather.py然后在另一个终端窗口运行Inspectornpx-ymodelcontextprotocol/inspector浏览器会自动打开localhost:6274你可以在Tools面板中看到刚刚定义的两个工具直接运行它们就能验证功能是否正常。接入AI客户端以接入Claude Desktop为例找到配置文件macOS:~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:%APPDATA%\Claude\claude_desktop_config.json添加配置{mcpServers:{weather:{command:uv,args:[--directory,/path/to/your/weather-mcp-server,run,weather.py]}}}重启Claude Desktop你就可以在对话中让AI查询天气了——比如问“加州现在有什么天气预警”AI会自动调用工具获取实时数据并回答你。最佳实践与注意事项在实际开发中有几个要点值得注意1. 日志处理要小心如果你的服务器使用STDIO传输模式千万不要向stdout打印任何内容——这会破坏MCP的JSON-RPC消息通信。正确的做法是使用stderr或专门的日志库。2. 工具设计要清晰为每个工具编写清晰的文档字符串——它会被LLM用来理解工具的用途使用类型注解明确输入参数的类型工具的名称要直观让AI能准确判断何时该调用哪个工具3. 安全第一MCP服务器本质上是在给AI“打开一扇通往外部世界的门”。务必注意最小权限原则服务器只暴露必要的功能输入验证对来自LLM的所有参数进行校验敏感操作需人工确认对于写入、删除等操作建议增加确认机制4. 选择合适的传输模式模式适用场景特点STDIO本地开发、桌面应用简单直接通过标准输入输出通信Streamable HTTP云端部署、远程调用支持网络访问便于扩展和容器化结语回顾整个系列我们从三个层面完整地认识了MCP概念层面MCP是“AI的USB-C接口”通过标准化协议解决了AI应用与外部工具集成的碎片化问题原语层面Resources知道、Tools行动、Prompts怎么行动三大原语构建了MCP的能力基石实践层面通过Python和FastMCP我们可以轻松搭建自己的MCP服务器并将其接入主流AI客户端

相关新闻

6款AI写论文工具盘点

6款AI写论文工具盘点

真正的学术 AI,从不替你代笔,而是做你的选题军师、文献管家、逻辑教练、润色专家。从中文毕业论文到英文期刊发表,从框架搭建到降重合规,这 6 款工具覆盖全场景,帮你用最低时间成本,写出高质量、高原创、高…

2026/10/19 3:53:09 阅读更多 →
如何5分钟永久备份QQ空间青春回忆:GetQzonehistory终极指南

如何5分钟永久备份QQ空间青春回忆:GetQzonehistory终极指南

如何5分钟永久备份QQ空间青春回忆:GetQzonehistory终极指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心那些记录青春岁月的QQ空间说说会随着时间消失&#…

2026/10/18 14:49:13 阅读更多 →
Windows Cleaner:彻底告别C盘爆红的终极清理解决方案

Windows Cleaner:彻底告别C盘爆红的终极清理解决方案

Windows Cleaner:彻底告别C盘爆红的终极清理解决方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你的Windows电脑是否经常被C盘空间不足的警告困扰…

2026/10/19 4:09:32 阅读更多 →

最新新闻

如何用Ming-3.0-tts-tiny设计全新声音:voice_design与ip任务自然语言描述教程

如何用Ming-3.0-tts-tiny设计全新声音:voice_design与ip任务自然语言描述教程

【免费下载链接】Ming-3.0-tts-tiny 项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/Ming-3.0-tts-tiny 点击查看 免费下载 Ming-3.0-tts-tiny 是一款开源的多语言语音合成(TTS)模型,7.9B 总参数、每 token 仅激活约 …

2026/10/21 1:16:56 阅读更多 →
从御剑到dirsearch:Web目录扫描工具完整实战指南

从御剑到dirsearch:Web目录扫描工具完整实战指南

1. 为什么从御剑转向dirsearch:一个老牌工具的优缺点盘点1.1 御剑的先天优势与尴尬现状御剑在早期是Windows平台上很多入门者最先接触的目录扫描工具,GUI界面简洁、双击即用,预置字典丢进去就能开扫,确实帮一代人完成了启蒙。但用…

2026/10/21 1:16:56 阅读更多 →
如何把一台安卓手机变成企业微信无人值守机器人:WorkTool 安装配置教程

如何把一台安卓手机变成企业微信无人值守机器人:WorkTool 安装配置教程

如何把一台安卓手机变成企业微信无人值守机器人:WorkTool 安装配置教程 【免费下载链接】worktool 一款安全稳定的Android无障碍服务工具,支持控制企微/微信来运行的无人值守群管理企业微信机器人 项目地址: https://gitcode.com/GitHub_Trending/wo/w…

2026/10/21 1:16:56 阅读更多 →
OpenMontage 的 BFL Webhook 集成指南:FLUX 图像生成如何用事件驱动回调替代轮询

OpenMontage 的 BFL Webhook 集成指南:FLUX 图像生成如何用事件驱动回调替代轮询

OpenMontage 的 BFL Webhook 集成指南:FLUX 图像生成如何用事件驱动回调替代轮询 【免费下载链接】OpenMontage Worlds first open-source, agentic video production system. 12 production pipelines, 100 tools, 700 agent skill and production-knowledge files…

2026/10/21 1:16:56 阅读更多 →
Golang 字符串字面量表示方法

Golang 字符串字面量表示方法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:16:56 阅读更多 →
ESP-Drone 上手指南:基于 ESP32 的四旋翼飞控固件如何工作、如何上手

ESP-Drone 上手指南:基于 ESP32 的四旋翼飞控固件如何工作、如何上手

ESP-Drone 上手指南:基于 ESP32 的四旋翼飞控固件如何工作、如何上手 【免费下载链接】esp-drone Mini Drone/Quadcopter Firmware for ESP32 and ESP32-S Series SoCs. 项目地址: https://gitcode.com/GitHub_Trending/es/esp-drone ESP-Drone 是乐鑫推出的…

2026/10/21 1:15:56 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →