衢州市网站建设_网站建设公司_响应式开发_seo优化
2025/12/17 19:54:20 网站建设 项目流程

MCP(模型上下文协议)是一种用于将 AI 应用程序连接到外部系统的开源标准。
使用 MCP,Claude 或 ChatGPT 等 AI 应用程序可以连接到数据源(例如本地文件、数据库)、工具(例如搜索引擎、计算器)和工作流程(例如专门的提示),从而使它们能够访问关键信息并执行任务。
可以将MCP视为人工智能应用的USB-C接口。正如USB-CMCP(模型上下文协议)是一种用于将 AI 应用程序连接到外部系统的开源标准。
使用 MCP,Claude 或 ChatGPT 等 AI 应用程序可以连接到数据源(例如本地文件、数据库)、工具(例如搜索引擎、计算器)和工作流程(例如专门的提示),从而使它们能够访问关键信息并执行任务。
可以将MCP视为人工智能应用的USB-C接口。正如USB-C提供了一种连接电子设备的标准化方式一样,MCP也提供了一种将人工智能应用连接到外部系统的标准化方式。了一种连接电子设备的标准化方式一样,MCP也提供了一种将人工智能应用连接到外部系统的标准化方式。

MCP 可以实现哪些功能?
代理人可以访问您的 Google 日历和 Notion,充当更加个性化的 AI 助手。
Claude Code 可以使用 Figma 设计生成整个 Web 应用程序。
企业聊天机器人可以连接到组织内的多个数据库,使用户能够通过聊天分析数据。
AI模型可以在Blender上创建3D设计,并使用3D打印机将其打印出来。

为什么MCP很重要?
根据您在生态系统中所处的位置,MCP 可以带来一系列好处MCP 可以实现哪些功能?
代理人可以访问您的 Google 日历和 Notion,充当更加个性化的 AI 助手。
Claude Code 可以使用 Figma 设计生成整个 Web 应用程序。
企业聊天机器人可以连接到组织内的多个数据库,使用户能够通过聊天分析数据。
AI模型可以在Blender上创建3D设计,并使用3D打印机将其打印出来。

为什么MCP很重要?
根据您在生态系统中所处的位置,MCP 可以带来一系列好处。
开发者:MCP 可以减少构建 AI 应用程序或代理或与之集成时的开发时间和复杂性。
AI 应用或代理:MCP 提供对数据源、工具和应用程序生态系统的访问,这将增强功能并改善最终用户体验。
最终用户:MCP 可产生功能更强大的 AI 应用程序或代理,这些应用程序或代理可以访问您的数据并在必要时代表您采取行动。
开发者:MCP 可以减少构建 AI 应用程序或代理或与之集成时的开发时间和复杂性。
AI 应用或代理:MCP 提供对数据源、工具和应用程序生态系统的访问,这将增强功能并改善最终用户体验。
最终用户:MCP 可产生功能更强大的 AI 应用程序或代理,这些应用程序或代理可以访问您的数据并在必要时代表您采取行动。

以上这是MCP的官网给出的介绍 MCP

那么怎么来理解呢,我个人的看法是这样的,MCP就是一个大模型的工具,我们通过交互告诉大模型,你如果需要那么就可以在适当的时候选择使用这些工具来进一步完成工作。
通俗来说 我们可以理解成MCP是大模型的一个“外挂”
我们想要什么能力,就可以给大模型注入什么样的MCP工具 。

那么怎么来构建一个MCP并应用上去呢 ,首先我们要先知道
MCP在大模型应用中的整个交互流程是什么样的

用户自然语言 → AI理解 → 工具调用 → 机器执行 → AI理解结果 → 用户回复 ↑ ↑ ↑ ↑ ↑ ↑ NLU 意图识别 工具匹配 执行工具 结果理解 NLG

以下是MCP的一部分官网内容 大家可以看一下


架构概述
本文概述了模型上下文协议 (MCP),讨论了其范围和核心概念,并提供了一个示例来演示每个核心概念。
由于 MCP SDK 抽象化了许多细节,大多数开发者可能会发现数据层协议部分最为实用。该部分讨论了 MCP 服务器如何为 AI 应用提供上下文信息。
有关具体实现细节,请参阅您所用语言的 SDK文档。

范围
模型上下文协议包含以下项目:
MCP 规范:概述客户端和服务器实现要求的 MCP 规范。
MCP SDK:用于实现 MCP 的不同编程语言的 SDK。
MCP 开发工具:用于开发 MCP 服务器和客户端的工具,包括MCP 检查器。
MCP 参考服务器实现:MCP 服务器的参考实现。
MCP 只关注上下文交换协议——它不规定 AI 应用如何使用 LLM 或管理提供的上下文。

MCP的概念

参与者
MCP 采用客户端-服务器架构,其中 MCP 主机(例如Claude Code或Claude Desktop等 AI 应用)与一个或多个 MCP 服务器建立连接。MCP 主机通过为每个 MCP 服务器创建一个 MCP 客户端来实现这一点。每个 MCP 客户端与其对应的 MCP 服务器保持一对一的专用连接。
MCP架构的关键参与者包括:
MCP 主机:用于协调和管理一个或多个 MCP 客户端的 AI 应用程序
MCP 客户端:一个维护与 MCP 服务器连接并从 MCP 服务器获取上下文以供 MCP 主机使用的组件。
MCP 服务器:一个为 MCP 客户端提供上下文信息的程序
例如:Visual Studio Code 充当 MCP 主机。当 Visual Studio Code 与 MCP 服务器(例如Sentry MCP 服务器)建立连接时,Visual Studio Code 运行时会实例化一个 MCP 客户端对象来维护与 Sentry MCP 服务器的连接。随后,当 Visual Studio Code 连接到另一个 MCP 服务器(例如本地文件系统服务器)时,Visual Studio Code 运行时会实例化另一个 MCP 客户端对象来维护此连接,从而保持 MCP 客户端与 MCP 服务器之间的一对一关系。

请注意,MCP 服务器指的是提供上下文数据的程序,无论其运行位置如何。MCP 服务器可以本地运行,也可以远程运行。例如,当 Claude Desktop 启动文件系统服务器时,由于它使用 STDIO 传输,因此服务器运行在同一台机器上。这通常被称为“本地”MCP 服务器。官方的 Sentry MCP 服务器运行在 Sentry 平台上,并使用 Streamable HTTP 传输。这通常被称为“远程”MCP 服务器。


MCP由两层组成:
数据层:定义了基于 JSON-RPC 的客户端-服务器通信协议,包括生命周期管理和核心原语,如工具、资源、提示和通知。
传输层:定义了客户端和服务器之间进行数据交换的通信机制和通道,包括特定于传输的连接建立、消息帧和授权。
从概念上讲,数据层是内层,而传输层是外层。

数据层
数据层实现了基于JSON-RPC 2.0 的交换协议,该协议定义了消息结构和语义。该层包括:
生命周期管理:处理客户端和服务器之间的连接初始化、能力协商和连接终止。
服务器功能:使服务器能够提供核心功能,包括用于 AI 操作的工具、上下文数据资源以及来自客户端和与客户端交互的模板提示。
客户端功能:使服务器能够请求客户端从主机LLM进行采样、获取用户输入以及向客户端记录消息。
实用功能:支持实时更新通知和长时间运行操作的进度跟踪等附加功能

传输层
传输层管理客户端和服务器之间的通信通道和身份验证。它处理连接建立、消息帧构建以及MCP参与者之间的安全通信。
MCP支持两种运输机制:
Stdio 传输:使用标准输入/输出流在同一台机器上的本地进程之间进行直接进程通信,提供最佳性能,且无网络开销。
可流式 HTTP 传输:使用 HTTP POST 请求进行客户端到服务器的消息通信,并可选地使用服务器发送事件 (SENT) 来实现流式传输功能。此传输方式支持远程服务器通信,并支持包括持有者令牌、API 密钥和自定义标头在内的标准 HTTP 身份验证方法。MCP 建议使用 OAuth 获取身份验证令牌。
传输层将通信细节从协议层中抽象出来,从而实现所有传输机制都采用相同的 JSON-RPC 2.0 消息格式。

数据层协议
MCP 的核心部分在于定义 MCP 客户端和 MCP 服务器之间的模式和语义。开发人员可能会发现数据层(尤其是基本类型集合)是 MCP 中最有趣的部分。它定义了开发人员如何将上下文从 MCP 服务器共享到 MCP 客户端。
MCP 使用JSON-RPC 2.0作为其底层 RPC 协议。客户端和服务器相互发送请求并做出相应的响应。当不需要响应时,可以使用通知机制。

生命周期管理
MCP 是一种有状态协议这就需要生命周期管理。生命周期管理的目的是协商……能力客户端和服务器都支持此功能。详细信息请参阅规范,示例展示了初始化顺序。

基本元素
MCP 原语是 MCP 中最重要的概念。它们定义了客户端和服务器之间可以相互提供哪些信息。这些原语明确规定了可以与 AI 应用共享的上下文信息类型以及可以执行的操作范围。
MCP 定义了服务器可以公开的三个核心原语:
工具:人工智能应用程序可以调用以执行操作的可执行函数(例如,文件操作、API 调用、数据库查询)
资源:为人工智能应用程序提供上下文请注意,MCP 服务器指的是提供上下文数据的程序,无论其运行位置如何。MCP 服务器可以本地运行,也可以远程运行。例如,当 Claude Desktop 启动文件系统服务器时,由于它使用 STDIO 传输,因此服务器运行在同一台机器上。这通常被称为“本地”MCP 服务器。官方的 Sentry MCP 服务器运行在 Sentry 平台上,并使用 Streamable HTTP 传输。这通常被称为“远程”MCP 服务器。


我们大概理解一下基本上就是说我们需要遵循JSON-RPC 2.0作为其底层 RPC 协议,然后需要提供客户端和服务端。最后我们把客户端集成到大模型使用就行了。是不是很简单呢

那么接下来我们来聊一下,如果我们要做一个MCP,需要几个步骤呢

第一步:整理我们定制MCP要做的能力有哪些 ,抽象出来对应的工具 例如想让大模型帮我们分析一下当前文件夹或者项目内容 第二步:实现一个客户端支持我们需要的工具能力的触发 包括初始化、工具列表、触发调用 第三步:根据客户端对应的功能能力,我们需要开发实际可以工作的服务端能力,来保证大模型使用我们MCP的功能的时候能够得到足够好的结果。 最后一步:告诉大模型,现在我这有这个工具了 ,你如果有需要那么就可以调用我的工具来补充你的能力。

MCP的客户端是怎么集成到AI中并做到工具发现的呢

1. AI 启动时创建 MCP 客户端 2. 客户端连接到 MCP 服务器 3. 发送初始化请求建立会话 4. 调用 tools/list 发现可用工具 5. AI 解析工具列表并构建工具注册表 6. AI 根据用户请求智能选择和调用工具

MCP 工具发现机制详解

🔍工具发现的核心流程

1. 初始化阶段

AI 启动 → 创建 MCP 客户端 → 连接 MCP 服务器 → 发送初始化请求

初始化请求示例:

{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},"clientInfo":{"name":"AI Assistant","version":"1.0.0"}}}

2. 工具发现阶段

AI 发送 tools/list 请求 → MCP 服务器返回工具列表 → AI 解析并缓存

工具发现请求:

{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}

工具列表响应:

{"jsonrpc":"2.0","id":2,"result":{"tools":[{"name":"echo","description":"回显输入的消息","inputSchema":{"type":"object","properties":{"message":{"type":"string","description":"要回显的消息"}},"required":["message"]}},{"name":"calculator","description":"数学计算工具","inputSchema":{"type":"object","properties":{"expression":{"type":"string","description":"数学表达式"}},"required":["expression"]}}]}}

🏗️MCP 客户端的核心实现

工具注册表

classToolRegistry{privatefinalMap<String,McpTool>tools=newConcurrentHashMap<>();privatefinalMap<String,ToolSchema>schemas=newConcurrentHashMap<>();// 发现并注册工具publicvoiddiscoverAndRegister(McpClientclient){List<McpTool>discoveredTools=client.discoverTools();for(McpTooltool:discoveredTools){tools.put(tool.getName(),tool);schemas.put(tool.getName(),validateSchema(tool.getInputSchema()));}}// 获取工具publicMcpToolgetTool(Stringname){returntools.get(name);}// 验证参数publicValidationResultvalidateParams(StringtoolName,Map<String,Object>params){ToolSchemaschema=schemas.get(toolName);returnschema.validate(params);}}

智能工具选择器

classIntelligentToolSelector{privatefinalToolRegistryregistry;// AI 根据用户意图选择工具publicToolSelectionselectTool(StringuserIntent,Map<String,Object>context){// 1. 语义匹配List<McpTool>candidates=semanticMatch(userIntent);// 2. 上下文匹配candidates=contextMatch(candidates,context);// 3. 参数可行性检查candidates=parameterFeasibilityCheck(candidates,userIntent);// 4. 选择最佳工具returnselectBestTool(candidates,userIntent);}privateList<McpTool>semanticMatch(StringuserIntent){// 使用关键词匹配、语义相似度等算法StringlowerIntent=userIntent.toLowerCase();List<McpTool>matches=newArrayList<>();for(McpTooltool:registry.getAllTools()){if(matchesKeywords(lowerIntent,tool)||calculateSimilarity(lowerIntent,tool)>0.7){matches.add(tool);}}returnmatches;}}

🔧AI 集成的三种模式

模式1: 内嵌集成(推荐用于单AI应用)

publicclassAiModelWithEmbeddedMcp{privatefinalMcpClientmcpClient;privatefinalToolRegistrytoolRegistry;privatefinalIntelligentToolSelectortoolSelector;publicAiModelWithEmbeddedMcp(){// 1. 初始化 MCP 客户端this.mcpClient=newDefaultMcpClient();this.mcpClient.initialize(config);// 2. 发现工具this.toolRegistry=newToolRegistry();this.toolRegistry.discoverAndRegister(mcpClient);// 3. 初始化工具选择器this.toolSelector=newIntelligentToolSelector(toolRegistry);}// AI 处理用户请求的核心方法publicStringprocessUserRequest(Stringrequest){// 1. 意图分析UserIntentintent=analyzeUserIntent(request);// 2. 工具选择ToolSelectionselection=toolSelector.selectTool(request,intent.getContext());if(selection.getTool()==null){return"抱歉,我没有合适的工具来处理您的请求";}// 3. 参数提取Map<String,Object>params=extractParameters(request,selection.getTool());// 4. 参数验证ValidationResultvalidation=toolRegistry.validateParams(selection.getTool().getName(),params);if(!validation.isValid()){return"参数验证失败:"+validation.getErrorMessage();}// 5. 工具调用McpResultresult=mcpClient.callTool(selection.getTool().getName(),params);// 6. 生成回复returngenerateResponse(request,selection,result);}}

模式2: 微服务集成(推荐用于AI平台)

@RestController@RequestMapping("/api/mcp")publicclassMcpToolController{privatefinalMcpClientmcpClient;privatefinalToolRegistrytoolRegistry;@PostMapping("/discover")publicResponseEntity<List<McpTool>>discoverTools(){returnResponseEntity.ok(toolRegistry.getAllTools());}@PostMapping("/call")publicResponseEntity<McpResult>callTool(@RequestBodyToolCallRequestrequest){// 验证工具存在McpTooltool=toolRegistry.getTool(request.getToolName());if(tool==null){returnResponseEntity.badRequest().build();}// 验证参数ValidationResultvalidation=toolRegistry.validateParams(request.getToolName(),request.getParameters());if(!validation.isValid()){returnResponseEntity.badRequest().build();}// 调用工具McpResultresult=mcpClient.callTool(request.getToolName(),request.getParameters());returnResponseEntity.ok(result);}}// AI 模型通过 HTTP 调用publicclassAiModelWithHttpService{privatefinalRestTemplaterestTemplate;publicList<McpTool>discoverTools(){returnrestTemplate.postForObject("/api/mcp/discover",null,List.class);}publicMcpResultcallTool(StringtoolName,Map<String,Object>params){ToolCallRequestrequest=newToolCallRequest(toolName,params);returnrestTemplate.postForObject("/api/mcp/call",request,McpResult.class);}}

模式3: 插件化集成(推荐用于可扩展系统)

publicclassPluginBasedToolManager{privatefinalMap<String,ToolPlugin>plugins=newConcurrentHashMap<>();privatefinalPluginClassLoaderpluginLoader;// 动态加载工具插件publicvoidloadPlugins(StringpluginDirectory){try{Files.list(Paths.get(pluginDirectory)).filter(path->path.toString().endsWith(".jar")).forEach(this::loadPlugin);}catch(IOExceptione){logger.error("Failed to load plugins",e);}}privatevoidloadPlugin(PathpluginPath){try{// 创建插件类加载器URLClassLoaderclassLoader=newURLClassLoader(newURL[]{pluginPath.toUri().toURL()},getClass().getClassLoader());// 加载插件ServiceLoader<ToolPlugin>serviceLoader=ServiceLoader.load(ToolPlugin.class,classLoader);for(ToolPluginplugin:serviceLoader){// 注册插件plugins.put(plugin.getName(),plugin);plugin.initialize();logger.info("Loaded tool plugin: {}",plugin.getName());}}catch(Exceptione){logger.error("Failed to load plugin: "+pluginPath,e);}}// 获取可用工具publicList<McpTool>getAvailableTools(){returnplugins.values().stream().map(ToolPlugin::getToolDefinition).collect(Collectors.toList());}// 调用工具publicMcpResultcallTool(StringtoolName,Map<String,Object>params){ToolPluginplugin=plugins.get(toolName);if(plugin==null){returnMcpResult.error("Tool not found: "+toolName);}returnplugin.execute(params);}}// 插件接口定义publicinterfaceToolPlugin{StringgetName();StringgetDescription();McpToolgetToolDefinition();voidinitialize();McpResultexecute(Map<String,Object>params);voidcleanup();}

💡总结

MCP 客户端集成到 AI 的关键点:

  1. 工具发现: 通过tools/list请求动态发现可用工具
  2. 智能选择: AI 根据用户意图和工具描述选择最佳工具
  3. 参数验证: 根据工具的 inputSchema 验证参数合法性
  4. 安全调用: 通过权限控制、参数过滤等确保安全
  5. 性能优化: 使用缓存、异步调用、连接池等提升性能
  6. 监控追踪: 记录调用指标,便于运维和调试

这种设计使得 AI 可以动态适应不同的工具环境,同时保证了系统的安全性、可扩展性和高性能。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询