大模型的得力干将MCP(4) - 开发客户端
大模型的得力干将MCP(4) - 开发客户端
麦金叔的AI之旅今天我们将继续学习,将了解MCP服务的SSE通信的客户端编写。当完成之后,就可以连接上节课的SSE服务了。
等系列课学习完成,你将能了解什么是MCP,如何开发MCP和如何实际使用它(当然我们会回归到Dify中,配合LLM,更加完善我们的AI应用适用场景)。
**01.**动手做一做
我们再来复习一下协议的架构。
我们看到Client和Server之间是MCP Protocol通讯的,但是我们已经用了两篇文章来解释服务端开发,显然他们一个是stdio,另一个是SSE,是不一样的。
因此,Client必然是有差异的,今天我们就来看看如何实现目标。
同样从TypeScript的SDK开始,来写一个Client(SSE通信方式)。
在目录下新建一个client.ts文件,引用SDK的client和sse,其余代码见下图。
代码不多,仅作演示。谜题揭晓,SSE的服务需要用SSEClientTransport去连接。而本地stdio服务,就需要用StdioServerTransport去连接。目前大部分助手类工具都是用的stdio的方式。这里卖个关子,在Dify应用中,会讲如何更好的使用MCP。
**02.**测试说明
通过编译得到sse.js和client.js,启动两个命令行窗口,并分别运行如下命令:
1 |
|
如果client窗口运行报错,出现”Error: EventSource is not defined”。请修改引用库@modelcontextprotocal\sdk库下dist\client\sse.js,在文件第一行插入以下代码。
1 | import { EventSource } from 'eventsource'; |
再为项目添加依赖库eventsource。
1 | npm install eventsource |
原因在于SSE通常运行在浏览器里,在node环境下默认是没有的,所以需要手动添加。
这样,就完成了基于SSE的MCP Client的编写(当然这个Client有点简单,只列举了MCP服务端支持的tools)。
此时第一个运行SSE服务端的窗口,出现了Connection和Message的日志。
重点是看第二个窗口的输出,可以看到服务端的工具已经都获取到了。
**03.**补充说明
上节课所说的完整,就是今天的客户端补齐。对于MCP中最核心的概念,应该算都涉及了。作为开发者,应该就能依葫芦画瓢了。
正如麦金叔说的MCP是新兴的协议,所以对于入局者来说机遇和挑战并存。通过这段时间麦金叔的测试,不像网上大家说的那么热闹,好多问题还没有解决,是需要社区和开发者共同努力去丰富的。
所以在结束MCP系列之前,麦金叔还将花一篇文章来”画一下大饼”。之后再回归Dify课程中,给大家讲解如何让Dify来用上MCP的能力,这样就闭环了。敬请期待!
总结
今天学习了MCP基于SSE服务的客户端实现。理解同为客户端在stdio和sse通信方式下的代码差异。