Ktor + MCP 协议:从零搓一个跑在 KMP 后端的 AI Agent 服务 本文基于 Ktor 异步网关与 MCPModel Context ProtocolSSE 工具调用技术链结合 Kotlin MultiplatformKMP后端共享逻辑给出从零搭建生产级 AI Agent 服务的代码实战与架构范式。适合 Android/Kotlin 开发者向全栈智能体架构师进阶。一、技术基座为何选 Ktor 做 Agent 服务端Ktor 是 JetBrains 推出的轻量级、异步、纯 Kotlin 框架基于协程实现非阻塞 I/O可用极少线程承载高并发。其多平台特性JVM/JS/Native与 KMP 天然契合后端逻辑可与移动端共享commonMain代码。最新稳定版为 3.5.0Netty 引擎嵌入式启动仅需数行代码。二、KMP 后端分层与 MCP 集成架构参照 KMP 全栈“共享逻辑层 Agent 服务端”演进落地分为shared 模块定义ChatRequest、Agent 状态机、工具契约expect/actual隔离平台Ktor 网关层SSE 路由接收请求调用 Koog/MCP 引擎MCP 工具层通过 SSE 暴露标准化工具如时间、计算供模型选择性调用三、实战代码从零搓一个 Agent 服务1. Ktor 基础网关异步非阻塞kotlinfun main() { embeddedServer(Netty, port 8080) { install(ContentNegotiation) { json() } routing { post(/chat) { val req call.receiveChatRequest() // 调用 Agent 引擎见下 val reply agentEngine.run(req.sessionId, req.question) call.respond(mapOf(answer to reply)) } } }.start(wait true) }该写法利用suspend路由处理器实现原生异步避免线程阻塞。2. MCP SSE 工具端点Server-Sent Eventskotlinrouting { get(/mcp/sse) { call.response.header(Content-Type, text/event-stream) val channel call.response.channel() // 推送工具清单与调用结果 channel.write(data: ${toolSchemaJson()}\n\n.toByteArray()) channel.flush() } post(/mcp/sse/post) { val toolCall call.receiveToolCall() val result executeLocalTool(toolCall) // 如 getCurrentTime() call.respond(mapOf(result to result)) } }SSE 双向流使前端/客户端可流式接收 Agent 思考与工具响应。3. Agent 引擎与工具注册Koog 风格kotlinval agentEngine AIAgent( executor simpleOpenAIExecutor(System.getenv(API_KEY)), llmModel OpenAIModels.Chat.GPT4o, features listOf( ToolCallingFeature(tools listOf(TimeTool(), CalcTool())), HistoryCompressionFeature() ) )工具以强类型函数声明编译期生成 JSON Schema经 MCP SSE 透出[前文 Koog 框架解析]。4. KMP 共享模型跨端复用kotlin// commonMain Serializable data class ChatRequest(val sessionId: String, val question: String)Android/iOS/Web 前端与 Ktor 后端共用同一序列化定义消除双边解析分歧。四、性能与工程避坑协程隔离阻塞任务JDBC/文件必须用withContext(Dispatchers.IO)保事件循环不被拖垮。结构化并发路由内用coroutineScope { async {}.await() }并行工具调用单失败自动取消兄弟任务。超时与压缩生产环境装RequestTimeout5s、Compression、CachingHeaders防劣化。资源释放Native 模型句柄、MCP 会话须显式shutdown()防 OOM[前文 KMP 避坑]。五、小结以 Ktor 异步网关 MCP SSE 工具链为骨架KMPshared模块复用领域模型即可在 100 行内搓出跑在 JVM/多端的 AI Agent 服务。该范式已被 Koog、OfflineAI-KMP 等验证是 2026 年 Android 开发者全栈跃迁的最短路径。