尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

MCP协议:AI开发新范式,从工具集成到能力连接

MCP协议:AI开发新范式,从工具集成到能力连接 1. 从“工具集成”到“能力连接”MCP协议为何成为AI开发新范式最近在折腾AI应用开发的朋友可能都注意到了“MCP”这个词的热度。无论是Claude Code、Cursor还是各种AI Agent框架都在讨论如何集成MCP。今天看到FTShare上线了150金融数据工具的MCP免费开放这让我觉得是时候聊聊MCP到底是什么以及它为什么能让我们调用工具的方式发生根本性改变。简单来说MCPModel Context Protocol是一个标准化的协议它的核心目标就一个让大语言模型LLM能够安全、可靠、标准化地调用外部工具和数据。听起来是不是有点像Function Calling没错它们目的相似但实现路径和哲学完全不同。传统的Function Calling你需要把工具的API接口、参数格式、返回结构全部硬编码到你的应用代码或者提示词里。每增加一个新工具就得改一次代码调试一次兼容性非常繁琐。而MCP则把工具本身“服务器化”了。你可以把MCP Server理解为一个专门为AI模型设计的、标准化的“工具驱动包”。这个Server定义好了工具的名称、描述、输入参数和输出格式。AI客户端比如Claude Desktop、Cursor只需要按照MCP协议去“发现”和“连接”这些Server就能直接使用里面的工具完全不需要关心工具内部是用Python写的还是Go写的调的是哪个API。这就好比以前你家装修每装一个电器工具都得专门为它拉一条独特的电线、配一个特殊的插座写适配代码。而现在有了MCP就像所有电器都统一成了国标插头MCP协议你只需要有标准的插座MCP客户端任何符合标准的电器插上就能用。FTShare这次做的事情就是提供了150多个金融数据领域的“国标电器”并且免费给你用。这对于做量化分析、金融研究或者需要实时市场数据的开发者来说相当于直接获得了一个开箱即用的强大工具箱。2. 实战在Claude Code中配置与使用FTShare金融MCP理论说得再多不如亲手配置一遍来得实在。下面我就以Claude Code或Claude Desktop原理相通为例带你一步步把FTShare的金融数据MCP配置起来并实际调用几个工具看看效果。这是理解MCP工作流最直接的方式。2.1 环境准备与MCP Server获取首先你需要一个支持MCP的客户端。目前最主流的就是Anthropic官方推出的Claude Desktop桌面版以及深度集成Claude的Cursor编辑器。这里以Claude Desktop为例它的配置更加直观。安装Claude Desktop前往Anthropic官网下载并安装对应你操作系统Windows/macOS的Claude Desktop应用。定位配置目录Claude Desktop的MCP配置通常通过一个配置文件来管理。这个文件的位置因系统而异macOS:~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:%APPDATA%\Claude\claude_desktop_config.json如果这个文件不存在你需要手动创建它。获取FTShare MCP Server根据FTShare官方公告你需要通过特定的方式获取他们的MCP Server。通常这可能需要通过npm安装一个包或者从GitHub仓库克隆。假设他们提供了一个npm包ftshare/mcp-server-finance那么你可以在终端执行npm install -g ftshare/mcp-server-finance安装后该包会提供一个可执行命令或脚本作为MCP Server启动。你需要记下这个启动命令的路径或名称比如可能是ftshare-mcp-server。2.2 编辑Claude Desktop配置文件接下来编辑或创建上面提到的claude_desktop_config.json文件。这个文件的核心结构是一个JSON对象其中mcpServers字段用来定义所有你想要连接的MCP Server。一个典型的配置示例如下{ mcpServers: { ftshare-finance: { command: node, args: [ /usr/local/bin/ftshare-mcp-server ], env: { FTSHARE_API_KEY: your_actual_api_key_here } } } }我们来拆解一下这个配置ftshare-finance这是你给这个Server起的别名可以自定义方便识别。command启动Server的命令。这里假设Server是一个Node.js脚本所以命令是node。args传递给命令的参数。这里指向了全局安装后Server脚本的路径。请注意这个路径需要根据你的实际安装位置进行调整。你可以通过which ftshare-mcp-server(macOS/Linux) 或where ftshare-mcp-server(Windows) 来查找确切路径。env设置环境变量。很多MCP Server需要API Key或其他认证信息通常通过环境变量传入。这里假设FTShare的Server需要FTSHARE_API_KEY。你需要将your_actual_api_key_here替换为你在FTShare平台获取的真实API Key。如果FTShare当前免费且无需Key则可能不需要这个env字段。注意配置文件的路径和格式必须绝对准确。一个常见的错误是JSON格式不对比如多了或少了一个逗号这会导致Claude Desktop完全无法读取配置。建议使用支持JSON语法高亮的编辑器如VSCode来编辑并利用其格式化功能。2.3 验证与使用保存配置文件后完全重启Claude Desktop应用不是关闭聊天窗口而是退出整个应用再重新打开。这是关键一步因为配置只在启动时加载。重启后新建一个对话。如果你配置成功Claude应该会自动感知到新连接的工具。你可以尝试用自然语言询问例如“查看一下贵州茅台的实时股价。”“获取上证指数最近5天的日K线数据。”“搜索一下新能源汽车行业的最新研报。”Claude在理解你的意图后会自动调用FTShare MCP Server中对应的工具比如get_realtime_quoteget_historical_datasearch_research_reports并将结果返回给你。你会在Claude的回复中看到它执行了某个“工具调用”并附上结构化的数据结果。实操心得第一次配置时最容易出问题的地方就是Server启动命令的路径和环境变量。如果Claude没有任何反应或者提示找不到工具首先去检查Claude Desktop的应用日志。在macOS上你可以通过Console.app查看在Windows上日志可能位于%APPDATA%\Claude\logs。日志里通常会明确告诉你MCP Server启动失败的原因比如“命令未找到”或“API Key无效”。3. 深入拆解MCP协议的核心组件与通信机制理解了怎么用我们再来深入看看MCP是怎么工作的。这有助于你在遇到复杂情况时能够自己进行排查甚至未来创建自己的MCP Server。MCP协议主要包含三个核心角色和一套基于JSON-RPC的通信机制。3.1 核心三要素Server Client与TransportMCP Server服务器这就是工具的提供方比如FTShare的金融数据服务。它的职责是声明能力在初始化时告诉Client“我有哪些工具可用”。每个工具都有唯一的名称、详细描述、严格的输入参数模式JSON Schema和输出格式。处理请求当Client发起工具调用请求时Server执行实际的后端逻辑比如调用金融数据API、查询数据库、执行计算。返回结果将执行结果按照约定的格式返回给Client。 Server可以是一个长期运行的守护进程也可以是按需启动的脚本。MCP Client客户端这是AI模型的前端界面比如Claude Desktop、Cursor编辑器。它的职责是发现与连接根据配置启动或连接到指定的MCP Server。管理工具列表从所有已连接的Server那里收集工具列表并将其“上下文”提供给AI模型。模型在生成回复时就知道有哪些工具可以调用。代理调用当模型决定使用某个工具时Client负责按照MCP协议格式向对应的Server发送调用请求并将结果返回给模型用于组织最终回复。Transport传输层这是Server和Client之间通信的管道。MCP协议设计上不绑定于某种特定的传输方式常见的有stdio标准输入输出最常用的方式。Client通过命令行启动Server进程两者通过标准输入(stdin)和标准输出(stdout)交换JSON-RPC消息。上面Claude Desktop的配置就是这种方式。优点是简单、跨平台适合大多数本地工具。HTTP/SSEServer作为一个HTTP服务运行Client通过HTTP请求或Server-Sent Events与之通信。这种方式更适合远程服务或需要更高并发能力的场景。3.2 基于JSON-RPC的通信流程MCP在传输层之上使用JSON-RPC 2.0作为消息协议。整个交互流程可以简化为以下几步初始化握手Client启动Server后双方会交换initialize和initialized消息协商协议版本等基本信息。工具列表同步Client向Server发送tools/list请求。Server回复一个包含所有可用工具定义的列表。这是最关键的一步Client由此知道能干什么。工具调用当AI模型需要时Client向Server发送tools/call请求其中包含工具名称和调用参数。结果返回Server执行完毕通过tools/call的响应返回执行结果成功或错误信息。资源管理可选MCP还支持“资源”Resources和“提示模板”Prompts的概念。Server可以声明一些只读的数据资源比如一个参考文档的URI或可复用的提示模板Client可以读取resources/listresources/read或获取模板prompts/listprompts/get进一步丰富模型的上下文。为什么是JSON-RPC因为它是一个轻量级、语言无关的远程调用协议。无论是用Python、JavaScript、Go还是Rust编写的Server只要按照同样的JSON格式收发消息就能被任何Client理解。这种标准化极大地降低了生态建设的门槛。4. MCP与Function Calling、Skill的横向对比与选型思考现在AI调用外部能力的方式不止一种除了MCP你可能还经常听到Function Calling和像cursor-agent里提到的Skill。它们之间有什么区别又该如何选择呢4.1 与Function Calling的对比Function Calling本质上是LLM原生能力的一部分。你需要在请求LLM API时在消息体中附带一个tools或functions数组里面详细描述每个函数的名称、描述和参数模式。LLM在生成回复时如果认为需要调用函数就会在响应中返回一个特殊的结构指示应该调用哪个函数以及参数是什么然后由你的应用程序去执行对应的代码。MCP的优势解耦与标准化工具的实现和AI客户端完全解耦。工具开发者只需要维护一个符合MCP协议的Server就可以被所有支持MCP的客户端使用。无需为每个客户端Claude, Cursor, 其他Agent框架单独做适配。动态发现工具列表是在运行时动态获取的无需在应用代码中硬编码。添加或移除工具只需要重启Client连接新的Server无需修改Client的源码。安全性Server运行在独立的进程或环境中与AI客户端隔离。即使某个Server出现问题如内存泄漏、崩溃也不容易拖垮主Client。Function Calling的优势零延迟由于函数定义和调用逻辑都在你的应用程序内部没有进程间通信的开销速度最快。深度集成函数可以直接访问应用的内存状态、数据库连接等实现更紧密的集成。简单场景更直接如果你只是为自己的单一应用添加几个固定的工具使用Function Calling可能更简单直接不需要引入MCP的复杂度。简单比喻Function Calling像是你家的定制家具工具直接固定在房子里应用代码里。MCP像是标准接口的智能家电工具通过统一的智能插座MCP协议接入全屋智能系统AI客户端。4.2 与Skill的对比“Skill”这个概念在不同框架中含义不同。在一些AI Agent框架如LangChain的Agent里Skill可能指的是一组预定义的工具链或复杂流程。而在Cursor的上下文中“Skill”可能更接近一种增强提示词或特定工作流的封装。MCP vs. SkillMCP是协议层它解决的是“如何让AI安全、标准地调用任意外部功能”的基础设施问题。它不关心这个功能是简单查询还是复杂流程。Skill是应用层它建立在协议或基础工具之上封装了解决特定领域问题如“代码审查”、“数据库查询优化”的完整逻辑、提示词和工具组合。一个Skill内部可能会调用多个MCP工具。关系可以认为MCP提供了砖块和水泥标准化工具而Skill是用这些材料建造出来的功能房间。MCP使得构建Skill变得更加容易和标准化。选型建议如果你是工具/数据服务提供商像FTShare希望你的能力能被广泛集成到各种AI应用中那么开发一个MCP Server是最佳选择一劳永逸。如果你在构建一个具体的AI应用需要集成一些外部能力并且希望保持架构的灵活性和未来可扩展性优先选择集成MCP Client来连接现有的MCP Server。如果你需要封装一个非常特定、复杂的AI工作流并且主要在某个特定框架如Cursor内使用那么研究该框架的Skill机制可能更合适。如果你的需求极其简单、固定且对延迟敏感直接使用模型原生的Function Calling可能是最快捷的方案。5. 扩展探索MCP生态中的其他热门Server与配置踩坑FTShare的金融MCP是一个垂直领域的优秀例子。实际上MCP生态正在快速成长涌现出许多解决通用问题的Server了解它们能极大提升你的AI生产力。5.1 值得关注的MCP Server类型搜索类如tavily-mcp,brave-search-mcp。它们为AI提供了联网搜索能力是克服大模型信息陈旧问题的关键。配置时通常需要申请对应的搜索API Key。代码仓库类如git-mcp。允许AI直接读取、分析Git仓库的代码结构、提交历史甚至进行简单的代码操作非常适合代码审查和项目理解。数据库类如sqlite-mcp。让AI能够连接并查询数据库。这里有一个大坑很多教程会教你配置command: npx -y modelcontextprotocol/server-sqlite然后args: [“/path/to/your.db”]。但如果你在Windows上路径中的反斜杠和空格可能会引发解析错误。更可靠的做法是用一个批处理脚本或PowerShell脚本包装一下或者在配置中使用正斜杠/并确保路径用双引号包裹。浏览器自动化类如playwright-mcp。赋予AI操控浏览器如Chrome的能力可以自动填写表单、抓取动态渲染的网页内容等功能强大但需谨慎授权。设计工具类如figma-mcp。允许AI读取Figma设计稿的信息是实现“设计稿转代码”或“根据AI描述修改设计”的桥梁。有用户反馈“还原度低”这往往是因为Figma API返回的是抽象的节点树和样式数据如何精准地映射到前端代码如CSS-in-JS、Tailwind类名是一个复杂的工程问题并非MCP协议本身之过。笔记知识库类如obsidian-mcp。将你的Obsidian笔记库暴露给AI使其能基于你的个人知识进行问答和创作实现真正的“第二大脑”联动。5.2 常见配置问题与排查指南在配置各种MCP Server时我踩过不少坑这里总结几个高频问题问题一Claude Desktop重启后配置不生效检查点首先确认配置文件路径和名称绝对正确。其次配置文件必须是有效的JSON。一个多余的逗号或缺失的引号都会导致整个文件被忽略。使用在线JSON校验工具或编辑器的Lint功能检查。检查点查看Claude Desktop的日志。这是最直接的排错方式里面会记录加载配置时遇到的错误或者启动MCP Server失败的原因。问题二MCP Server启动失败提示“命令未找到”场景这在Windows上尤其常见。你的command配置的是node但系统PATH环境变量里可能没有node或者你用的是node.exe。解决在命令行中直接输入你配置的command看是否能识别。如果不能需要使用绝对路径。例如在Windows上command可能是C:\\Program Files\\nodejs\\node.exe。对于通过npm全局安装的包其可执行文件路径也可能不在默认PATH中同样需要配置绝对路径。问题三工具列表可见但调用时失败权限错误、网络错误场景Claude能列出FTShare的工具但调用“获取股价”时失败。排查这通常是MCP Server自身的问题。首先检查配置中env部分传入的API_KEY等环境变量是否正确。其次尝试在终端手动以相同命令和环境变量启动这个MCP Server看它是否能独立运行并响应测试请求。很多Server提供测试模式或健康检查端点。问题四多个MCP Server冲突场景配置了多个Server后某个工具无法使用或Client行为异常。排查检查是否有不同Server提供了同名工具这可能会引起混淆。暂时注释掉其他Server的配置单独测试有问题的Server以确定冲突源。一个高级技巧对于复杂的、需要多个步骤启动的Server或者需要在调用前后做一些预处理/后处理的可以编写一个简单的包装脚本Shell脚本或批处理文件。在MCP配置中command指向这个包装脚本然后在脚本内部去设置环境变量、启动真正的Server进程。这能极大提升配置的灵活性和可维护性。6. 从使用到创造如何规划与开发自己的MCP Server当你充分体验了MCP带来的便利后很可能会萌生一个想法我能不能把自己的内部工具或服务也封装成MCP Server让团队内的AI都能方便调用答案是肯定的而且开发一个基础MCP Server的门槛并不高。6.1 核心开发思路与工具选型开发一个MCP Server本质上就是创建一个遵循JSON-RPC 2.0和MCP协议规范的程序。你需要处理以下几件事实现协议消息处理解析Client发来的initializetools/listtools/call等请求并按照规范格式返回响应。定义工具明确你的Server提供哪些工具每个工具需要什么参数用JSON Schema定义以及返回什么格式的数据。实现工具逻辑当收到tools/call请求时执行实际的操作比如调用一个内部API、运行一个计算、查询数据库等。幸运的是社区已经提供了多种语言的SDK来帮你处理底层的协议通信让你可以专注于工具逻辑本身。TypeScript/JavaScript使用官方modelcontextprotocol/sdk包。这是目前生态最繁荣的选择文档和示例也最全。它提供了高级API让你通过声明式的方式定义工具和资源非常简单。npm install modelcontextprotocol/sdkPython使用mcp包。对于Python技术栈的团队来说非常友好。pip install mcp其他语言Go、Rust、Java等语言的SDK也在逐步完善中可以在MCP官方GitHub仓库找到。6.2 一个简单的Python MCP Server示例假设我们要创建一个提供“天气查询”和“单位换算”两个简单工具的Server。# weather_converter_server.py import asyncio from typing import Any import mcp.server as mcp from mcp.server.models import InitializationOptions import httpx # 创建Server实例 server mcp.Server(example-weather-converter) # 1. 定义工具 server.list_tools() async def handle_list_tools() - list[mcp.Tool]: return [ mcp.Tool( nameget_weather, description获取指定城市的当前天气, inputSchema{ type: object, properties: { city: {type: string, description: 城市名称如北京} }, required: [city] } ), mcp.Tool( nameconvert_units, description进行常用单位换算, inputSchema{ type: object, properties: { value: {type: number, description: 要换算的数值}, from_unit: {type: string, description: 原单位如km}, to_unit: {type: string, description: 目标单位如mile} }, required: [value, from_unit, to_unit] } ) ] # 2. 实现工具调用逻辑 server.call_tool() async def handle_call_tool(name: str, arguments: dict[str, Any]) - list[mcp.TextContent]: if name get_weather: city arguments[city] # 模拟一个API调用 async with httpx.AsyncClient() as client: # 这里应替换为真实的天气API # response await client.get(fhttps://api.weather.com/...{city}) # data response.json() data {temperature: 22, condition: 晴朗, humidity: 65} return [mcp.TextContent( typetext, textf城市{city}的天气温度{data[temperature]}°C{data[condition]}湿度{data[humidity]}%。 )] elif name convert_units: value arguments[value] from_unit arguments[from_unit] to_unit arguments[to_unit] # 简单的换算逻辑 conversions { (km, mile): 0.621371, (mile, km): 1.60934, (kg, lb): 2.20462, (lb, kg): 0.453592, } factor conversions.get((from_unit, to_unit)) if factor: result value * factor return [mcp.TextContent( typetext, textf{value} {from_unit} {result:.2f} {to_unit} )] else: return [mcp.TextContent(typetext, textf不支持从{from_unit}到{to_unit}的换算。)] else: raise ValueError(f未知工具: {name}) # 3. 启动Server使用stdio传输 async def main(): async with server.run_stdio(): await asyncio.Future() # 永久运行 if __name__ __main__: asyncio.run(main())这个示例展示了MCP Server的核心结构定义工具列表并实现对应的调用处理器。你可以用以下配置在Claude Desktop中连接它{ mcpServers: { my-python-server: { command: python, args: [/绝对路径/weather_converter_server.py] } } }开发注意事项错误处理在handle_call_tool中务必做好异常捕获并返回格式化的错误信息而不是让进程崩溃。资源清理如果工具调用涉及网络连接、文件句柄等确保在使用后正确关闭。安全性这是重中之重。你的Server可能被AI客户端调用而AI生成的参数可能是不可预测的。必须对输入参数进行严格的验证和清理防止注入攻击。例如如果工具涉及数据库查询绝对不要直接将用户输入拼接成SQL。性能工具逻辑应尽可能高效避免长时间阻塞。如果是IO密集型操作使用异步。从FTShare开放金融MCP这件事我们可以看到MCP协议正在从一个小众的开发者协议迅速成长为连接AI模型与现实世界能力的“USB-C接口”。它带来的标准化和生态化潜力是巨大的。对于开发者而言现在正是学习和拥抱这套范式的好时机。无论是通过配置现有Server来增强你的AI助手还是着手将内部能力封装成Server以提升团队效率MCP都提供了一个清晰、高效的路径。
返回列表