写点什么

MCP 新手图文指南:轻松实现 AI 与您的数据和工具无缝对接

作者:测试人
  • 2025-07-08
    北京
  • 本文字数:3708 字

    阅读完需:约 12 分钟

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

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

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

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


MCP 所要攻克的核心痛点:

  • 集成零散繁杂:每个 AI 应用均需为不同数据源单独开发对接接口

  • 大量重复建设:各团队各自为阵,反复搭建同质化的连接方案

  • N×M 接口爆炸:当 N 个 AI 客户端要接入 M 类数据源时,往往产生 N×M 条定制化集成路径

MCP 核心架构:三大角色

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

1. 主机(Host)

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

  • 创建并管理多个客户端实例

  • 掌控客户端的访问权限与生命周期

  • 实施安全策略与权限校验

  • 协调 AI/LLM 与各组件之间的交互

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

2. 客户端

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

  • 与某一服务器建立专属会话

  • 完成协议协商与功能能力交换

  • 在服务器与主机间进行双向消息转发

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

3. 服务器

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

  • 通过 MCP 接口暴露资源、工具或提示模板

  • 独立运行,专注履行自身职责

  • 可部署为本地进程或远程服务

你将构建的正是这一环节,使 AI 能够调用你的特定数据源或业务功能。


MCP 的三大功能模块

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

1. 资源

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

  • 示例:文件系统中的文档、数据库里的表结构或字段说明、特定业务信息等

  • 由应用端驱动,根据上下文需求动态聚合并下发给模型

2. 工具

工具使 AI 模型能够执行具体操作,每个工具通过名称与元数据描述自身接口。

  • 示例:数据库查询工具、调用外部 API 的接口、复杂计算模块等

  • 由模型主动调用:AI 根据上下文和用户指令自动发现并触发所需工具

3. 提示模板

提示模板是一组预定义的结构化消息和指令,帮助模型高效完成特定任务。

  • 示例:生成报告的格式化模板、代码审查的专用指令集等

  • 由用户选定并传入参数,确保输出符合预期需求


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

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

方案一:Python 版简易计算器

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

import sysfrom 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-mcpcd file-reader-mcpnpm init -ynpm 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 工具读取并展示文件内容

应用示例: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 号 PR”

  4. Claude 会调用 fetch_pr 工具拉取该 PR 的变更内容

  5. Claude 对代码差异进行智能分析,并反馈评审意见

  6. 若需归档评审结果,可指示 Claude 调用 create_notion_page 工具,将分析报告写入你的 Notion 空间

安全与隐私考量

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

  • 用户知情与授权:在任何数据访问或操作前,清晰告知用户用途并征得其同意。

  • 数据保密与访问控制:主机在转发用户数据给服务器之前,需获得明确授权;敏感信息应加密并设置严格权限。

  • 工具执行风险管理:由于工具调用可能执行任意代码,主机须在触发前再次取得用户许可,并通过白名单或沙箱隔离降低风险。

  • LLM 交互与采样审批:任何涉及语言模型采样的请求,都要让用户确认采样意图、所用提示与可见结果;禁止在未经授权的情况下发送私密数据给模型。

总结与未来展望

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

  • 一体化集成:统一协议大幅简化了对接流程,减少重复开发。

  • 跨平台互通:支持在不同 AI 引擎与供应商之间灵活切换,无需定制化适配。

  • 安全可控:数据与权限可在本地或受信任环境中管理,降低隐私泄露风险。

  • 高可扩展性:兼容 stdio、WebSocket、HTTP 等多种通信方式,易于横向扩展。

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

  • 即插即用插件:社区和厂商将贡献更多开箱即用的服务器实现。

  • 集中化发现平台:可能出现 MCP 注册中心,便于搜索、验证与管理服务。

  • 全面远程支持:基于 SSE、gRPC 等协议的远程 MCP 服务将更加成熟。

  • 标准化安全认证:与 OAuth 2.0、OIDC 等认证框架深度融合,提升安全体验。

用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
MCP新手图文指南:轻松实现AI与您的数据和工具无缝对接_测试人_InfoQ写作社区