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

119 阅读9分钟

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的工具。

2. 客户端

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

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

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

3. 服务器

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

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

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

3. MCP的三大功能模块

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

1. 资源

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

  • 示例:文件系统中的文档、数据库里的表结构或字段说明、特定业务信息等
  • 由应用端驱动,根据上下文需求动态聚合并下发给模型

2. 工具

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

  • 示例:数据库查询工具、调用外部API的接口、复杂计算模块等
  • 由模型主动调用:AI根据上下文和用户指令自动发现并触发所需工具

3. 提示模板

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

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

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 号 PR”
  4. Claude 会调用 fetch_pr 工具拉取该 PR 的变更内容
  5. Claude 对代码差异进行智能分析,并反馈评审意见
  6. 若需归档评审结果,可指示 Claude 调用 create_notion_page 工具,将分析报告写入你的 Notion 空间

6. 安全与隐私考量

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

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

7. 总结与未来展望

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

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

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

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

推荐阅读

软件测试/测试开发丨常见面试题与流程篇(附答案)

软件测试/测试开发丨学习笔记之Allure2测试报告

软件测试/测试开发丨Pytest测试用例生命周期管理-Fixture

软件测试/测试开发丨Python学习笔记之基本数据类型与操作

软件测试/测试开发丨学习笔记之列表、元组、集合

软件测试/测试开发丨Python常用数据结构-学习笔记

软件测试/测试开发丨Python控制流-判断&循环

软件测试/测试开发丨Python学习笔记之内置库科学计算、日期与时间处理

软件测试/测试开发丨面试题之软素质与反问面试官篇(附答案)

软件测试/测试开发丨iOS 自动化测试踩坑(一): 技术方案、环境配置与落地实践