MCP新手图文指南:轻松实现AI与您的数据和工具无缝对接
摘要:MCP(模型上下文协议)是由Anthropic推出的开放式规范,旨在标准化AI模型与外部数据源和工具之间的交互。它通过定义主机、客户端和服务器三大角色,提供资源、工具和提示模板三大功能模块,大幅降低AI应用的集成成本。文章详细介绍了如何用Python和Node.js构建MCP服务器(如计算器和文件读取工具),并展示了GitHub PR审核助手的实战案例。MCP的优势包括一体化集成、跨平台互通
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的设计逻辑十分直观,围绕以下三类主体展开:
- 主机(Host)
主机是MCP体系的“大脑”,它负责:
- 创建并管理多个客户端实例
- 掌控客户端的访问权限与生命周期
- 实施安全策略与权限校验
- 协调AI/LLM与各组件之间的交互
在实际使用中,主机通常指你正在运行的AI应用,比如 Claude Desktop、Cursor 编辑器,或其他兼容MCP的工具。
- 客户端(Client)
客户端由主机动态生成,用来对接特定服务器,它的职责包括:
- 与某一服务器建立专属会话
- 完成协议协商与功能能力交换
- 在服务器与主机间进行双向消息转发
每个客户端实例仅专注于与对应服务器的通信,确保信息流畅无误。
- 服务器(Server)
服务器是功能和数据的提供者,它:
- 通过MCP接口暴露资源、工具或提示模板
- 独立运行,专注履行自身职责
- 可部署为本地进程或远程服务
你将构建
3. MCP的三大功能模块
MCP服务器可为AI模型提供三类关键服务:
-
资源(Resources) 资源指服务器向AI暴露的各种数据内容,每项资源均有唯一URI标识。
- 示例:文件系统中的文档、数据库里的表结构或字段说明、特定业务信息等
- 由应用端驱动,根据上下文需求动态聚合并下发给模型
-
工具(Tools) 工具使AI模型能够执行具体操作,每个工具通过名称与元数据描述自身接口。
- 示例:数据库查询工具、调用外部API的接口、复杂计算模块等
- 由模型主动调用:AI根据上下文和用户指令自动发现并触发所需工具
-
提示模板(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()
使用步骤:
- 启动你的 PR 审核 MCP 服务
- 在 Claude Desktop 中添加并连接该服务
- 向 Claude 下达审查请求,例如:“请帮我审查 owner/repo 库的 #123 (closed) 号 PR”
- Claude 会调用
fetch_pr
工具拉取该 PR 的变更内容 - Claude 对代码差异进行智能分析,并反馈评审意见
- 若需归档评审结果,可指示 Claude 调用
create_notion_page
工具,将分析报告写入你的 Notion 空间
6. 安全与隐私考量
在部署和使用 MCP 时,需要遵循以下原则,确保数据与操作的安全性:
- 用户知情与授权:在任何数据访问或操作前,清晰告知用户用途并征得其同意。
- 数据保密与访问控制:主机在转发用户数据给服务器之前,需获得明确授权;敏感信息应加密并设置严格权限。
- 工具执行风险管理:由于工具调用可能执行任意代码,主机须在触发前再次取得用户许可,并通过白名单或沙箱隔离降低风险。
- LLM 交互与采样审批:任何涉及语言模型采样的请求,都要让用户确认采样意图、所用提示与可见结果;禁止在未经授权的情况下发送私密数据给模型。
7. 总结与未来展望
MCP 作为开放标准,为 AI 模型与外部系统的对接提供了显著优势:
- 一体化集成:统一协议大幅简化了对接流程,减少重复开发。
- 跨平台互通:支持在不同 AI 引擎与供应商之间灵活切换,无需定制化适配。
- 安全可控:数据与权限可在本地或受信任环境中管理,降低隐私泄露风险。
- 高可扩展性:兼容 stdio、WebSocket、HTTP 等多种通信方式,易于横向扩展。
随着MCP生态系统的发展,以后将持续壮大:
- 即插即用插件:社区和厂商将贡献更多开箱即用的服务器实现。
- 集中化发现平台:可能出现 MCP 注册中心,便于搜索、验证与管理服务。
- 全面远程支持:基于 SSE、gRPC 等协议的远程 MCP 服务将更加成熟。
- 标准化安全认证:与 OAuth 2.0、OIDC 等认证框架深度融合,提升安全体验。
MCP交流群
推荐阅读
DeepSeek实践指导手册、人工智能在软件测试中的应用、我们是如何测试人工智能的?
在本地部署属于自己的 DeepSeek 模型,搭建AI 应用平台
DeepSeek 大模型与智能体公开课,带你从零开始,掌握 AI 的核心技术,开启智能未来!
深度解析:如何通过DeepSeek优化软件测试开发工作,提升效率与准确度
DeepSeek、文心一言、Kimi、豆包、可灵……谁才是你的最佳AI助手?
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 Kill/Pause/Unpause命令详细使用指南
Selenium
软件测试/测试开发/全日制|selenium NoSuchDriverException问题解决
软件测试/人工智能|解决Selenium中的异常问题:“error sending request for url”
Python
更多推荐
所有评论(0)