如果你是一名Dart开发者,想尝试用Agent和Model Context Protocol(MCP)工具做点实验,现在不再需要单独搭一个Python或Node.js服务来凑合。这个开源项目使用adk_dart作为Agent运行时,并用shelf搭建了一个轻量HTTP服务器,通过Server-Sent Events(SSE)暴露一个MCP兼容的greeting工具。完整代码已经放在adk-hello-world-dart仓库中,拿来即用。 需要特别说明的是,这个adk_dart库并不是Google官方的ADK实现。截至2026年7月,官方Dart ADK尚未发布。因此,这个项目提供了一条替代路径:如果你不想等官方SDK,可以先在Dart里把Agent开发流程跑起来。 仓库里包含两个关联示例: - Dart CLI示例:使用ADK里的LlmAgent和FunctionTool构建一个简单的greeting Agent。 - Shelf服务器示例:通过SSE暴露同一个greeting工具,使任何MCP客户端都能远程调用。 服务器端只为演示实现了必要的MCP方法,包括initialize、notifications/initialized、ping、tools/list和tools/call。transport层和JSON-RPC路由刻意做得非常精简,全部集中在SessionService里。作者在README里明确提醒:这不是一个通用MCP服务器实现,而是一个便于观察协议流转的迷你样例。 以下是这个示例的整体架构: ```text flowchart LR Client[MCP client] -->|GET /sse| Server[Shelf server] Server -->|endpoint event| Client Client -->|POST /messages?sessionId=...| Server Server --> Session[SessionService] Session --> Tool[greet tool] CLI[Dart CLI] --> Agent[ADK LlmAgent] Agent --> ADKTool[ADK FunctionTool] ``` 简单来说,MCP客户端通过SSE建立事件流,随后向服务器的messages端点发送JSON-RPC请求,由SessionService完成路由,最终调用greet工具返回结果。而CLI示例则是完全本地的Agent调用链路,适合先跑通逻辑再接入网络层。 ### 1. 添加依赖 当前项目要求Dart 3.5或更高版本,使用的核心依赖如下: ```yaml environment: sdk: ^3.5.0 dependencies: adk_dart: ^2026.7.24 adk_mcp: ^2026.7.24 logging: ^1.3.0 shelf: ^1.4.1 shelf_router: ^1.1.4 uuid: ^4.5.1 ``` 安装依赖只需执行: ```bash dart pub get ``` 其中,adk_dart被示例Agent直接调用。仓库里还跟踪了adk_mcp依赖,但当前服务器并未将其作为核心依赖使用,而是把MCP传输逻辑显式放在SessionService中,方便你直接阅读代码理解整个协议流转过程。 ### 2. 为什么值得看一下 这个项目最大的价值在于它把“Agent框架”和“MCP协议”之间的边界拆得很清楚:Agent部分的代码由adk_dart负责,MCP协议部分则由自己实现最少的必要方法。你不需要理解一套庞大的SDK体系,只要照着SessionService里的代码,就能搞清楚一个MCP工具服务是怎么响应SSE、怎么处理JSON-RPC请求、怎么分发工具调用的。 如果你正准备在Dart生态里做Agent开发,或者在等官方ADK发布之前想先熟悉MCP的交互方式,这个仓库是一个很干净的起点。趁着依赖足够少,你可以直接改greet工具的业务逻辑,把它替换成自己的搜索、计算或数据库查询函数,很快就能变成一个真实可用的MCP工具服务。

打开网易新闻 查看精彩图片