首页AI 学习中心AI Agent
AI Agent进阶15 分钟

MCP 协议详解:Claude 如何连接外部工具与数据源

深入讲解 MCP 协议详解:Claude 如何连接外部工具与数据源,覆盖核心概念、实战操作与最佳实践。

📅 2026年7月17日👁 阅读❤️ 点赞
# MCP# Claude

MCP 协议概述

MCP(Model Context Protocol)是一种开放标准协议,旨在为大型语言模型(LLM)提供统一、安全的外部工具与数据源接入方式。它由 Anthropic 提出并率先在 Claude 中实现,核心目标是解决传统 LLM 与外部系统交互时的碎片化问题——每个工具需要定制 API、认证方式与上下文传递格式,导致开发成本高、扩展性差。

MCP 借鉴了 LSP(Language Server Protocol)的设计哲学,将“工具能力”与“模型调用”解耦:Claude 作为客户端(Client),通过 MCP 协议与服务器(Server)通信,服务器负责封装实际的数据源或工具逻辑(如数据库查询、文件系统操作、第三方 API 调用等)。Claude 只需理解 MCP 标准消息格式,无需关心底层实现细节。

核心架构与通信流程

MCP 采用客户端-服务器架构,通信基于 JSON-RPC 2.0 协议,支持同步请求和异步通知。典型交互流程如下:

  1. 初始化:Claude 客户端向 MCP Server 发送 initialize 请求,获取服务器支持的 capabilities(如工具列表、资源类型)。
  2. 能力协商:双方确认协议版本与功能集,例如是否支持“流式响应”或“文件资源”。
  3. 工具调用:Claude 根据用户意图,通过 tools/call 请求调用服务器上的具体工具,服务器执行后返回结果。
  4. 资源访问:若需要读取外部数据源(如数据库表、文件内容),使用 resources/read 请求。

下图是一个简化示例(用文本表示交互逻辑):

Claude (Client)                     MCP Server (e.g., Database)

| |

|--- initialize (capabilities) ------->|

|<--- server_info (tools list) --------|

| |

|--- tools/call (query_users) -------->|

|<--- result (user data JSON) ---------|

| |

|--- resources/read (config.json) ---->|

|<--- content (file content) ----------|

关键参数与配置示例

MCP 的可配置项集中在服务器端,以下为 claude_desktop_config.json 中的典型配置(该文件用于 Claude Desktop 客户端注册 MCP 服务器):

{

"mcpServers": {

"local-file-server": {

"command": "node",

"args": ["/path/to/mcp-server.js"],

"env": {

"ALLOWED_PATHS": "/data",

"MAX_FILE_SIZE": "10485760"

}

},

"remote-api-server": {

"url": "http://localhost:3000/mcp",

"headers": {

"Authorization": "Bearer YOUR_API_KEY"

}

}

}

}

关键参数说明:

参数类型说明示例值
commandstring本地服务器的启动命令"node", "python"
argsarray命令参数列表["server.js"]
urlstring远程服务器的 HTTP 端点"http://localhost:3000/mcp"
envobject环境变量配置{"API_KEY": "xxx"}
headersobject自定义 HTTP 请求头{"Authorization": "Bearer xxx"}

实战:构建一个简单的 MCP 文件服务器

下面是一个基于 Node.js 的最小化 MCP 文件服务器示例,它实现两个工具:read_filelist_files

// mcp-file-server.js

const { Server } = require('@modelcontextprotocol/sdk/server');

const { StdioServerTransport } = require('@modelcontextprotocol/sdk/server/stdio');

const fs = require('fs').promises;

const path = require('path');

const server = new Server(

{ name: 'file-server', version: '1.0.0' },

{ capabilities: { tools: {} } }

);

// 定义工具

server.setRequestHandler('tools/list', async () => ({

tools: [

{

name: 'read_file',

description: '读取指定文件内容',

inputSchema: {

type: 'object',

properties: { filePath: { type: 'string' } },

required: ['filePath']

}

},

{

name: 'list_files',

description: '列出目录内容',

inputSchema: {

type: 'object',

properties: { dirPath: { type: 'string' } },

required: ['dirPath']

}

}

]

}));

// 处理工具调用

server.setRequestHandler('tools/call', async (request) => {

const { name, arguments: args } = request.params;

if (name === 'read_file') {

const content = await fs.readFile(args.filePath, 'utf-8');

return { content: [{ type: 'text', text: content }] };

} else if (name === 'list_files') {

const files = await fs.readdir(args.dirPath);

return { content: [{ type: 'text', text: files.join('\n') }] };

}

throw new Error(Unknown tool: ${name});

});

const transport = new StdioServerTransport();

await server.connect(transport);

启动命令(在 claude_desktop_config.json 中配置):

node mcp-file-server.js

Claude 收到用户请求“读取 /data/notes.txt”后,会通过 MCP 协议调用 read_file 工具,服务器返回文本内容,Claude 即可基于该内容进行后续推理或回答。

与传统 API 集成的对比

特性传统 API 集成MCP 协议
工具发现需预定义所有 API 端点动态 tools/list 发现
认证方式每个 API 独立实现统一在 Server 层处理
上下文传递需手动拼接历史协议自带 context 字段
扩展性每新增工具需修改客户端仅需部署新 Server
安全性依赖应用层过滤支持 scope 限制

小结

MCP 协议通过标准化的客户端-服务器架构,为 Claude 等 LLM 提供了一种高效、可扩展的外部工具集成方案。它解决了传统 API 集成中工具发现困难、认证分散、上下文传递混乱等问题,让开发者只需专注于实现 MCP Server 的业务逻辑,而 Claude 客户端自动处理协议交互。对于进阶开发者,理解 MCP 的 JSON-RPC 消息格式、Server 能力声明机制以及环境变量配置,是构建生产级 AI Agent 的关键。随着生态发展,MCP 有望成为 LLM 与外部世界交互的基础设施标准。

觉得这篇文章有帮助?点个赞支持一下 👇

点赞会记录在本地,不需要登录

相关教程

← 上一篇
DeepSeek + 即梦:零基础制作节日海报的 AIGC 工作流
下一篇 →
AutoGen 多智能体协作:让 AI 团队自动完成复杂任务
← 返回学习中心
AI Explorer · 实战教程