1. MCP到底是什么?我们为何要采用它?

MCP,即模型上下文协议(Model Context Protocol),是由Anthropic 推出的开放式规范,旨在打通 AI 模型与外部数据源和各类工具之间的“沟通桥梁”。

设想一下,当你希望像 Claude 这样的 AI 助手读取你的文档、查询数据库或调用专属工具时,过去往往需要为每一个场景单独编写连接代码,繁琐且耗时。

MCP 就好比 AI 领域的“万用接口”:它定义了一套统一的接入标准,使得 AI 应用能够无需额外适配,就能快速挂载各种数据源和工具,从而大幅降低集成成本与开发难度。

MCP所要攻克的核心痛点:

  • 集成零散繁杂:每个 AI 应用均需为不同数据源单独开发对接接口
  • 大量重复建设:各团队各自为阵,反复搭建同质化的连接方案
  • N×M接口爆炸:当 N 个 AI 客户端要接入 M 类数据源时,往往产生 N×M 条定制化集成路径

2. MCP核心架构:三大角色

MCP的设计逻辑十分直观,围绕以下三类主体展开:

  1. 主机(Host)

主机是MCP体系的“大脑”,它负责:

  • 创建并管理多个客户端实例
  • 掌控客户端的访问权限与生命周期
  • 实施安全策略与权限校验
  • 协调AI/LLM与各组件之间的交互

在实际使用中,主机通常指你正在运行的AI应用,比如 Claude Desktop、Cursor 编辑器,或其他兼容MCP的工具。

  1. 客户端(Client)

客户端由主机动态生成,用来对接特定服务器,它的职责包括:

  • 与某一服务器建立专属会话
  • 完成协议协商与功能能力交换
  • 在服务器与主机间进行双向消息转发

每个客户端实例仅专注于与对应服务器的通信,确保信息流畅无误。

  1. 服务器(Server)

服务器是功能和数据的提供者,它:

  • 通过MCP接口暴露资源、工具或提示模板
  • 独立运行,专注履行自身职责
  • 可部署为本地进程或远程服务

你将构建


3. MCP的三大功能模块

MCP服务器可为AI模型提供三类关键服务:

  1. 资源(Resources) 资源指服务器向AI暴露的各种数据内容,每项资源均有唯一URI标识。

    • 示例:文件系统中的文档、数据库里的表结构或字段说明、特定业务信息等
    • 由应用端驱动,根据上下文需求动态聚合并下发给模型
  2. 工具(Tools) 工具使AI模型能够执行具体操作,每个工具通过名称与元数据描述自身接口。

    • 示例:数据库查询工具、调用外部API的接口、复杂计算模块等
    • 由模型主动调用:AI根据上下文和用户指令自动发现并触发所需工具
  3. 提示模板(Prompts) 提示模板是一组预定义的结构化消息和指令,帮助模型高效完成特定任务。

    • 示例:生成报告的格式化模板、代码审查的专用指令集等
    • 由用户选定并传入参数,确保输出符合预期需求


4. 实战演练:打造你第一个MCP服务器

接下来,我们将通过两个简明示例,分别使用 Python 与 Node.js,手把手实现一个 MCP 服务器。

方案一:Python 版简易计算器

在此示例中,我们将创建一个基础的 MCP 服务器,向 AI 模型公开“加法”和“乘法”两个工具,演示如何快速让模型调用你的自定义功能。

import sys
from mcp.server.fastmcp import FastMCP

# 初始化MCP服务器
calculator = FastMCP("calculator")

# 注册加法工具
@calculator.tool()
async def add(a: float, b: float) -> float:
    """将两个数字相加并返回结果。"""
    print(f"执行加法: {a} + {b}", file=sys.stderr)
    return a + b

# 注册乘法工具
@calculator.tool()
async def multiply(a: float, b: float) -> float:
    """将两个数字相乘并返回结果。"""
    print(f"执行乘法: {a} * {b}", file=sys.stderr)
    return a * b

# 运行服务器
if __name__ == "__main__":
    calculator.run(transport="stdio")

步骤说明:

安装依赖:首先安装MCP Python SDK

pip install "mcp[cli]"

创建服务器文件:将上面的代码保存为calculator.py

运行服务器:

python calculator.py

连接到Claude Desktop:

  • 打开Claude Desktop应用
  • 在聊天输入框中,你会看到一个插件图标(🔌)
  • 点击并选择"Connect to MCP Server"
  • 输入你的服务器路径(如果是在本地运行,通常是当前目录下的calculator.py)

使用服务器:

  • 连接后,你可以在Claude中要求计算,如"请帮我计算15+27"
  • Claude会自动调用add工具,返回结果42

方案二:NodeJS文件读取服务器

下面是一个使用NodeJS创建的简单MCP服务器,用于读取本地文件:

import { MCPServer } from '@modelcontextprotocol/typescript-sdk';
import fs from 'fs/promises';
import path from 'path';

// 创建MCP服务器
const server = new MCPServer({
  name: 'file_reader'
});

// 注册读取文件工具
server.registerTool({
  name: 'read_file',
  description: '读取指定路径的文本文件内容',
  parameters: {
    type: 'object',
    properties: {
      file_path: {
        type: 'string',
        description: '要读取的文件路径'
      }
    },
    required: ['file_path']
  },
  handler: async ({ file_path }) => {
    try {
      // 确保文件路径安全
      const normalizedPath = path.normalize(file_path);
      // 读取文件内容
      const content = await fs.readFile(normalizedPath, 'utf-8');
      return content;
    } catch (error) {
      return `读取文件失败: ${error.message}`;
    }
  }
});

// 启动服务器
server.start();

步骤说明:

初始化项目:

mkdir file-reader-mcp
cd file-reader-mcp
npm init -y
npm install @modelcontextprotocol/typescript-sdk

创建服务器文件:将上面的代码保存为index.js

配置package.json:添加type:"module"和启动脚本

{
  "type": "module",
  "scripts": {
    "start": "node index.js"
  }
}

运行服务器:

npm start

连接到Claude Desktop:同上,连接到你的文件读取服务器

使用服务器:

  • 你可以在Claude中要求读取特定文件,如"请读取D:/projects/example.txt文件"
  • Claude会使用read_file工具读取并展示文件内容

5. 应用示例:GitHub Pull Request 审核助手

在此示例中,我们将开发一款能够自动化审查 GitHub PR 的助手,具备以下功能:

  • 抓取指定 PR 的代码变更详情
  • 利用 Claude 对差异部分进行智能分析
  • 将审查结果同步写入 Notion 中便于后续跟踪和归档

该MCP服务器的核心功能:

# 省略导入和初始化代码...

class PRAnalyzer:
    def __init__(self):
        # 加载环境变量
        load_dotenv()
        
        # 初始化MCP服务器
        self.mcp = FastMCP("github_pr_analysis")
        
        # 初始化Notion客户端
        self._init_notion()
        
        # 注册MCP工具
        self._register_tools()
    
    def _register_tools(self):
        """注册PR分析工具"""
        @self.mcp.tool()
        async def fetch_pr(repo_owner: str, repo_name: str, pr_number: int) -> Dict[str, Any]:
            """获取GitHub PR的变更内容"""
            pr_info = fetch_pr_changes(repo_owner, repo_name, pr_number)
            return pr_info
        
        @self.mcp.tool()
        async def create_notion_page(title: str, content: str) -> str:
            """创建Notion页面保存PR分析结果"""
            # 创建Notion页面的代码...
            return f"Notion页面'{title}'创建成功!"
    
    def run(self):
        """启动MCP服务器"""
        self.mcp.run(transport="stdio")

# 启动服务器
if __name__ == "__main__":
    analyzer = PRAnalyzer()
    analyzer.run()

使用步骤:

  1. 启动你的 PR 审核 MCP 服务
  2. 在 Claude Desktop 中添加并连接该服务
  3. 向 Claude 下达审查请求,例如:“请帮我审查 owner/repo 库的 #123 (closed) 号 PR”
  4. Claude 会调用 fetch_pr 工具拉取该 PR 的变更内容
  5. Claude 对代码差异进行智能分析,并反馈评审意见
  6. 若需归档评审结果,可指示 Claude 调用 create_notion_page 工具,将分析报告写入你的 Notion 空间

Claude分析PR

Claude分析PR示例


6. 安全与隐私考量

在部署和使用 MCP 时,需要遵循以下原则,确保数据与操作的安全性:

  • 用户知情与授权:在任何数据访问或操作前,清晰告知用户用途并征得其同意。
  • 数据保密与访问控制:主机在转发用户数据给服务器之前,需获得明确授权;敏感信息应加密并设置严格权限。
  • 工具执行风险管理:由于工具调用可能执行任意代码,主机须在触发前再次取得用户许可,并通过白名单或沙箱隔离降低风险。
  • LLM 交互与采样审批:任何涉及语言模型采样的请求,都要让用户确认采样意图、所用提示与可见结果;禁止在未经授权的情况下发送私密数据给模型。

7. 总结与未来展望

MCP 作为开放标准,为 AI 模型与外部系统的对接提供了显著优势:

  • 一体化集成:统一协议大幅简化了对接流程,减少重复开发。
  • 跨平台互通:支持在不同 AI 引擎与供应商之间灵活切换,无需定制化适配。
  • 安全可控:数据与权限可在本地或受信任环境中管理,降低隐私泄露风险。
  • 高可扩展性:兼容 stdio、WebSocket、HTTP 等多种通信方式,易于横向扩展。

随着MCP生态系统的发展,以后将持续壮大:

  • 即插即用插件:社区和厂商将贡献更多开箱即用的服务器实现。
  • 集中化发现平台:可能出现 MCP 注册中心,便于搜索、验证与管理服务。
  • 全面远程支持:基于 SSE、gRPC 等协议的远程 MCP 服务将更加成熟。
  • 标准化安全认证:与 OAuth 2.0、OIDC 等认证框架深度融合,提升安全体验。

 MCP交流群


推荐阅读

DeepSeek实践指导手册、人工智能在软件测试中的应用、我们是如何测试人工智能的?

Deepseek52条喂饭指令

在本地部署属于自己的 DeepSeek 模型,搭建AI 应用平台

DeepSeek 大模型与智能体公开课,带你从零开始,掌握 AI 的核心技术,开启智能未来!

深度解析:如何通过DeepSeek优化软件测试开发工作,提升效率与准确度

DeepSeek、文心一言、Kimi、豆包、可灵……谁才是你的最佳AI助手?

从零到一:如何构建一个智能化测试平台?

DeepSeek-R1+ Ollama 本地部署全攻略

DeepSeek与Playwright结合:利用AI提升自动化测试脚本生成与覆盖率优化

DeepSeek大模型6大部署模式解析与探索测试开发技术赋能点

爱测智能化服务平台

测开人必看!0代码+AI驱动,测试效率飙升300% ——霍格沃兹测试开发学社‌重磅上新‌「爱测智能化服务平台」限时开放体验!

一码难求的Manus:智能体技术如何重构生产力?测试领域又有哪些新机遇?

开源工具

AppCrawler 开源版
https://github.com/seveniruby/AppCrawler

Hogwarts-Browser-Use 开源版
指导安装贴:hogwarts-browser-use - 开源项目 - 爱测-测试人社区


专业版 (7天免费试用)

自动遍历测试框架 AppCrawler 专业版
通用数据驱动测试框架 hogwarts-ddt 专业版
测试智能体框架 hogwarts-agent 专业版

学社提供的资源

教育官网:霍格沃兹测试开发学社
科技官网:测吧(北京)科技有限公司
火焰杯就业选拔赛:火焰杯就业选拔赛 - 霍格沃兹测试开发学社
火焰杯职业竞赛:火焰杯职业竞赛 - 霍格沃兹测试开发学社
学习路线图:霍格沃兹测试开发学社
公益社区论坛:爱测-测试人社区 - 软件测试开发爱好者的交流社区,交流范围涵盖软件测试、自动化测试、UI测试、接口测试、性能测试、安全测试、测试开发、测试平台、开源测试、测试教程、测试面试题、appium、selenium、jmeter、jenkins
公众号:霍格沃兹测试学院
视频号:霍格沃兹软件测试
ChatGPT体验地址:霍格沃兹测试开发学社

本套视频教程所有配套资料领取方式如下:

方式1:访问官网可下载:testingstudio.com
方式2:关注ceshiren.com社区
人工智能/AI/为什么测试工程师需要掌握AI_哔哩哔哩_bilibili
​adb命令:【霍格沃兹测试开发】adb命令零基础快速入门–深入理解掌握app自动化测试底层技术_哔哩哔哩_bilibili
Python语法:1.闭包和装饰器_哔哩哔哩_bilibili?
人工智能:人工智能在音频、视觉、多模态领域的应用_哔哩哔哩_bilibili
软件测试入门:【霍格沃兹测试开发】7小时速成!软件测试新手入门指南,轻松掌握测试技能!_哔哩哔哩_bilibili
测试开发:【霍格沃兹测试开发】面试BAT软件测试开发,你需要具备哪些技能?_哔哩哔哩_bilibili
面试题指导:【霍格沃兹测试开发】软件测试工程师如何拿到P5-P7高薪offer?_哔哩哔哩_bilibili
JMeter:JMeter从入门到精通全集 包含http/dubbo/Kafka压测、Grafana监控_哔哩哔哩_bilibili
Java测试框架:【软件测试】Java测试框架Junit5与Allure测试报告免费课_哔哩哔哩_bilibili
简历面试教程:软件测试工程师简历面试教程攻略–如何写出能进BAT大厂测开岗的优质简历?如何在面试中向HR要到更高薪资?如何拿到更高级别的offer?–持续更新!_哔哩哔哩_bilibili
Java:【软件测试教程】Java自动化测试平台开发入门篇之初识springboot_哔哩哔哩_bilibili?
java语言rest-assured:【霍格沃兹测试开发】java语言rest-assured框架进行接口测试实战_哔哩哔哩_bilibili
Java接口自动化:【软件测试】Java接口自动化测试之RestAssured_哔哩哔哩_bilibili
性能测试:【软件测试教程】高级性能测试-JMeter+InfluxDB+Grafana压测数据展示_哔哩哔哩_bilibili
Linux:Linux 中如何实时查看日志记录-【软件测试面试题】_哔哩哔哩_bilibili
接口测试:【软件测试教程】接口测试入门实战-基于企业微信api进行接口测试_哔哩哔哩_bilibili
APP自动化:【霍格沃兹测试开发】APP移动端自动化测试从入门到精通/Appium环境安装/元素定位与隐式等待(最全攻略)_哔哩哔哩_bilibili
MySQL:【软件测试教程】MySQL数据库基本增删改查与多表查询_哔哩哔哩_bilibili
postman:【软件测试】postman基础-发送post请求_哔哩哔哩_bilibili
性能实战:【软件测试教程】性能测试压测实战-JMeter+InfluxDB+Grafana压测数据展示_哔哩哔哩_bilibili
零基础入门:零基础快速入门软件测试的秘籍_哔哩哔哩_bilibili
Java-JUnit5:软件测试之Java测试框架JUnit5 L1_哔哩哔哩_bilibili
接口测试:【软件测试】App抓包实战练习-接口测试初级入门_哔哩哔哩_bilibili
接口mitmproxy工具:【软件测试教程】测开必备工具mitmproxy_哔哩哔哩_bilibili
pytest:1.pytest简介与安装-【软件测试实战教程】_哔哩哔哩_bilibili
app功能测试:14.app压力测试-【软件测试实战教程】_哔哩哔哩_bilibili
前端开发-vue:Vue生命周期_哔哩哔哩_bilibili
flask:Flask环境安装与配置_哔哩哔哩_bilibili
Appium:appium的基本介绍_哔哩哔哩_bilibili
精品课试听:1.接口测试价值与体系_哔哩哔哩_bilibili

Docker

Docker cp命令详解:在Docker容器和主机之间复制文件/文件夹

Docker pull 命令详解:从镜像仓库获取镜像

深入理解 Docker Run 命令:从入门到精通

Docker Exec 命令详解与实践指南

Docker Kill/Pause/Unpause命令详细使用指南

Docker Logs命令详解

Selenium

多任务一次搞定!selenium自动化复用浏览器技巧大揭秘

如何使用Selenium处理隐藏元素

软件测试/测试开发/全日制|selenium NoSuchDriverException问题解决

软件测试/人工智能|解决Selenium中的异常问题:“error sending request for url”

Python

使用Python爬取豆瓣电影影评:从数据收集到情感分析

如何使用 Python 实现十进制转二进制的程序

Python教程:如何获取颜色的RGB值

Python处理日期的利器—日期转换指南

Python字符串的编码与解码

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐