ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从零到一:5分钟上手第三方MCP服务,以12306为例

从零到一:5分钟上手第三方MCP服务,以12306为例 目录从零到一5分钟上手第三方MCP服务以12306为例一、背景痛点二、MCP到底是什么一句话说清楚三、自己创建一个MCP Server有多简单3.1 写一个 Client 连上去验证服务可用四、快速上手第三方MCP服务以12306为例4.1 12306 MCP 能做什么4.2 魔搭社区简单认识4.2 完整代码4.3 逐行拆解这5步做了什么五、学会这一个就会调用所有MCP服务从零到一5分钟上手第三方MCP服务以12306为例学会这一个就会调用所有MCP服务一、背景痛点传统接入方式如果我们需要接入天气 API应对几个项目AI应用还好当项目量一庞大就会存在冗余的接入开发和维护成本高的问题引入 MCP 方案由统一的“服务提供天气工具” 通过MCP 标准接口输出LLM 角色来负责决策和发起调用二、MCP到底是什么一句话说清楚先别急着看代码。在动手之前我们花两分钟搞清楚一个概念——MCP到底是什么MCP全称Model Context Protocol模型上下文协议是Anthropic在2024年底发布的一个开放协议。名字听起来很抽象但它干的事情其实特别简单让AI模型能够调用外部工具和数据源你可以把MCP理解成AI世界的USB接口——不管什么品牌的设备大模型只要插上这个接口就能用。以前每个AI要集成一个外部工具比如查天气、订机票都得自己写一套适配代码换一个模型代码又要重写。有了MCP只要服务端实现了这个协议所有支持MCP的AI客户端都能直接用MCP的架构其实只有三个角色组件作用通俗理解MCP Server提供工具的服务端工具本身比如查12306票务MCP Client访问Server的SDK连接线帮你调用工具Host使用Client的应用AI Agent你的AI程序搞懂这三个概念你就已经掌握了MCP的80%三、自己创建一个MCP Server有多简单在调用别人的服务之前不妨先看看自己创建一个MCP Server有多简单——这能帮你更深刻地理解MCP的工作原理用Python的FastMCP框架30行代码就能搞定一个MCP Server安装pipinstallfastmcp⽰例1通过本地进程通信的方式启动 mcp 服务# server1.pyfrommcp.server.fastmcpimportFastMCP mcpFastMCP(my-tool-server1)mcp.tool()defcheck_balance(provider:strall)-str:查询API账户余额# 这里写你的业务逻辑returnf余额查询结果:{provider}if__name____main__:mcp.run(transportstdio)示例2启动一个以http方式调用的mcp服务# server2.pyfromfastmcpimportFastMCP mcpFastMCP(my-tool-server2)mcp.tool()defsend_notification(message:str)-str:发送通知# 这里写发送通知的逻辑returnf已发送:{message}if__name____main__:mcp.run(transportstreamable-http,port8000)就是这么简单——用mcp.tool()装饰器标记函数MCP Server启动时会自动收集这些工具的信息并暴露给客户端。你不需要关心通信协议、序列化格式这些底层细节SDK全帮你封装好了3.1 写一个 Client 连上去验证服务可用Server 写好了怎么确认它跑通了我们写一个最简单的原生 MCP Client 来连接它安装pipinstalllangchain-mcp-adapters连接importasynciofromlangchain.agentsimportcreate_agentfromlangchain_mcp_adapters.clientimportMultiServerMCPClientfromlangchain_mcp_adapters.toolsimportload_mcp_toolsasyncdeftest_my_server():# 指向我们刚才写的 server1/2.py确保文件在相同目录下server_paramsMultiServerMCPClient({# 要连接哪些mcp服务器my-tool-server1:{transport:stdio,# 本地进程通信command:python,# 如果用了 uv可以改成 uvargs:[server1.py],# 你的 Server 文件名},my-tool-server2:{transport:streamable-http,# 通过http方式调用url:http://127.0.0.1:8000/mcp# mcp服务的url}})# 获取连接的服务器的所有工具无状态# tools await client.get_tools()# print(tools)# 获取连接的服务器的所有工具持久会话asyncwithclient.session(my-tool-server2)assession:toolsawaitload_mcp_tools(session)# 绑定工具给Agentagentcreate_agent(deepseek-v4-pro,tools,system_prompt你是一个专业的助手回答问题必须要调用工具)# 异步调用result1awaitagent.ainvoke({messages:[{role:user,content:查询账户余额多少}]})result2awaitagent.ainvoke({messages:[{role:user,content:你好}]})# 工具调用print(result1)print(result2)if__name____main__:asyncio.run(test_my_server())四、快速上手第三方MCP服务以12306为例理解了MCP是什么也知道了Server怎么创建接下来就是重头戏——我将以魔搭社区中的12306-MCP车票查询工具来讲解如何快速调用第三方MCP服务在MCP爱好者社区中活跃着众多平台与技术⼈员致⼒于为MCP⽤⼾提供交流互动、资源分享等服务以下几个为广受认可的 MCP 社区魔搭社区 https://modelscope.cn/mcp阿里百炼 https://bailian.console.aliyun.com/cn-beijing?spma2c4g.11186623.0.0.33f5494ctCRYJvtabmcp#/mcp‑marketMCP 官方参考服务器 https://github.com/modelcontextprotocol/servers?tabreadme‑ov‑file#‑reference‑servers4.1 12306 MCP 能做什么12306-mcp是一个基于MCP协议的火车票查询服务支持余票查询、票价查询、车站搜索、中转换乘、经停站查询、时刻查询六大能力。它通过标准化接口提供官方12306的实时数据4.2 魔搭社区简单认识打开 12306-MCP车票查询工具 页面点击 [服务详情]后我们可以看见作者提供的详细使用方式快速安装我们采用 Node.js 的 npx 工具执行 12306-mcp 包在项目终端输入选取 根据使用的是http/stdio的方式来选取 服务配置4.2 完整代码importasynciofromlangchain.agentsimportcreate_agentfromlangchain_mcp_adapters.clientimportMultiServerMCPClientfromlangchain_mcp_adapters.toolsimportload_mcp_toolsasyncdefmain():# 1. 创建MCP客户端配置要连接的ServerclientMultiServerMCPClient({12306-mcp:{transport:stdio,# 通信方式本地子进程args:[-y,12306-mcp],# 启动参数command:npx# 用npx执行}})# 2. 建立会话加载工具asyncwithclient.session(12306-mcp)assession:toolsawaitload_mcp_tools(session)# 3. 创建AI Agent并绑定工具agentcreate_agent(deepseek-v4-pro,tools,system_prompt务必调用工具)# 4. 用自然语言调用responseawaitagent.ainvoke({messages:[{role:user,content:查询温州的车站}]})print(response[messages][-1].content)if__name____main__:asyncio.run(main())4.3 逐行拆解这5步做了什么第1步配置MCP ClientclientMultiServerMCPClient({12306-mcp:{transport:stdio,args:[-y,12306-mcp],command:npx}})从页面中拿取已经为我们配置好的12306-mcp的MCP Servertransport: stdio通过本地子进程通信command: npx用Node.js的npx命令执行args: [-y, 12306-mcp]直接运行12306-mcp这个npm包第2步加载工具asyncwithclient.session(12306-mcp)assession:toolsawaitload_mcp_tools(session)建立会话后load_mcp_tools会自动从Server获取所有可用的工具比如查车站、查余票等并转换成LangChain兼容的工具格式第3步创建Agentagentcreate_agent(deepseek-v4-pro,tools,system_prompt务必调用工具)把加载到的工具绑定给AI Agent。Agent收到用户问题后会自动判断该调用哪个工具第4步自然语言调用responseawaitagent.ainvoke({messages:[{role:user,content:查询温州的车站}]})print(response[messages][-1].content)用户只需要说人话Agent会自动理解意图、选择工具、填充参数、执行并返回结果第五步执行if__name____main__:asyncio.run(main())测试结果五、学会这一个就会调用所有MCP服务最关键的一点来了你学会了调用12306 MCP就等于学会了调用所有MCP服务为什么因为调用方式完全一样。只需要换一个配置clientMultiServerMCPClient({# 换成GitHub MCPgithub:{transport:stdio,command:npx,args:[-y,modelcontextprotocol/server-github]},# 或者换成Playwright MCP浏览器自动化playwright:{transport:stdio,command:npx,args:[-y,playwright/mcplatest]#},# 或者换成Fetch MCP网页抓取fetch:{transport:stdio,command:npx,args:[-y,modelcontextprotocol/server-fetch]}})剩下的代码一行都不用改——同样的load_mcp_tools、同样的create_agent、同样的ainvoke这就是MCP最大的价值一次集成到处使用。你不需要为每个第三方服务写不同的适配代码所有MCP Server都遵循同一个标准
返回列表