swift-sdk
Apple 生态接入 MCP AI 工具协议官方 SDK,支持 iOS/macOS/watchOS
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Apple 生态接入 MCP AI 工具协议官方 SDK,支持 iOS/macOS/watchOS
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你在 Xcode 里开发一款 iOS 应用,想让 AI 模型直接帮你调用应用内部的工具——比如查询本地数据库、调用某个 API、或者读取用户偏好设置。但 AI 模型在云端,你的应用在用户手机上,两者之间没有"共同语言"。传统的解决方案是为每个 AI 平台写专门的适配层,每个项目都要重复造轮子,维护成本极高。
Model Context Protocol(模型上下文协议,MCP) 就是来解决这个问题的。这是一个由 Anthropic 主导推出的开放协议,定义了应用程序与 AI 模型之间的标准化通信方式——类似于 USB 协议让各种设备都能统一接入电脑,MCP 让各种应用都能统一接入 AI 模型。而 modelcontextprotocol/swift-sdk 则是这个协议的官方 Swift 实现,让 Apple 生态(iOS、macOS、watchOS、tvOS、visionOS)的开发者能够零门槛地接入这个 AI 工具生态。
这个 SDK 由 MCP 官方工作组(Anthropic 主导)维护,诞生于 2025 年初,虽然还很年轻,但已经获得了 1400+ GitHub Stars、193 个 Fork,并吸引了 76 个 open issue,说明社区活跃度相当可观。## 二、项目背景与行业意义
在 MCP 出现之前,AI 工具调用生态处于碎片化状态。每个 AI 平台(Claude、GPT-4、Gemini 等)都有自己的工具调用协议和格式定义,开发者想要让自己的应用同时支持多个 AI 平台,往往需要编写大量重复的适配代码。更糟糕的是,当新的 AI 模型发布时,又要重新适配。
Anthropic 看到了这个机会,于 2024 年底正式推出 MCP 开放协议,目标是成为 AI 工具调用的"USB 标准"。协议的核心思路是:定义一套统一的 JSON-RPC 消息格式,让 AI 应用(称为 MCP Server)和 AI 模型(称为 MCP Client)之间可以进行标准化通信。无论底层是 Claude、Gemini 还是其他模型,只要实现了 MCP 协议,就能无缝互通。
Apple 生态拥有全球最大的移动开发者群体和最活跃的原生应用生态。在 MCP 协议生态中,Python SDK 和 TypeScript SDK 早已存在,但 Swift SDK 一直是社区呼声最高的缺失环节。modelcontextprotocol/swift-sdk 的出现填补了这个空白,让 iOS/macOS 开发者能够:
截至 2026 年初,MCP 生态已有超过 10000 个开源 Server 实现,涵盖了文件系统、数据库、GitHub、Slack、数据库等主流工具,swift-sdk 的加入让 Apple 开发者终于能够接入这个蓬勃发展的生态。## 三、核心架构与技术设计
swift-sdk 的代码结构清晰,采用模块化分层设计:
Sources/MCP/
Base/ # 核心基础层(消息、传输、授权、错误处理)
Transports/ # 传输层实现(HTTP/Stdio/InMemory)
Utilities/ # 工具函数
Authorization/ # 授权认证
Client/ # MCP 客户端实现
Server/ # MCP 服务端实现
Extensions/ # Swift 扩展工具
Sources/MCPConformance/
Server/ # 协议一致性测试服务器
Client/ # 协议一致性测试客户端
Base 层是整个 SDK 的核心,包含了:
Messages.swift(14206 bytes):JSON-RPC 消息的序列化/反序列化定义,涵盖了 MCP 协议规定的所有请求/响应/通知消息类型。Error.swift(12687 bytes):完整的错误类型体系,定义了 MCP 协议规定的错误码和错误处理逻辑。Transport.swift:传输层抽象接口,定义了统一的发送/接收 API。ID.swift、Versioning.swift:协议版本管理和消息 ID 生成。Lifecycle.swift:会话生命周期管理。swift-sdk 的传输层设计非常灵活,实现了三种传输机制:
StdioTransport:适用于本地子进程通信。当 MCP Server 作为当前应用的子进程启动时,使用标准输入/输出进行 JSON-RPC 消息交换。这是本地开发最简单的模式,也是官方 conformance 测试默认使用的传输方式。
HTTPClientTransport:适用于连接远程 MCP Server。SDK 实现了完整的 HTTP 流式传输(基于 Server-Sent Events),支持实时的双向通信。底层依赖 mattt/eventsource 库处理 SSE 事件流,确保消息的低延迟传递。
InMemoryTransport:用于同一进程内的 Client-Server 通信,适合测试场景和进程内集成。
此外,代码库中还有一个 HTTPServer 子目录,说明未来版本可能会原生支持 HTTP Server 端的实现。
Client.swift(46420 bytes)是 SDK 中最大的单个文件,完整实现了 MCP 客户端能力:
// 基本连接模式
let client = Client(name: "MyApp", version: "1.0.0")
let transport = StdioTransport() // 或 HTTPClientTransport
try await client.connect(transport: transport)
客户端核心功能包括:
Server.swift(41293 bytes)实现了 MCP Server 功能,开发者可以用它将任何 Swift 应用快速暴露为 MCP Server:
Server.swift 的 Tools.swift 模块(21291 bytes)提供了完整的工具注册和管理 API。Resources.swift(16299 bytes)支持将应用内部的数据以结构化资源的形式暴露给 AI。swift-log,支持分级日志输出。这个 SDK 从设计之初就面向 Swift 6,采用严格并发检查(StrictConcurrency),全面使用 async/await 和结构化并发。主要依赖包括:
swift-nio(2.65.0+):异步 I/O 和网络编程swift-log(1.5.0+):结构化日志swift-system:系统级 API 封装SDK 实现了完整的 OAuth 2.0 认证流程,包括:
项目包含 MCPConformanceServer 和 MCPConformanceClient 两个可执行目标,用于验证 SDK 对 MCP 协议规范的完整遵循。这保证了使用该 SDK 开发的 Client 和 Server 能够与生态中其他实现互操作。
通过 Package.swift 中的平台声明,SDK 支持:
通过 Swift Package Manager 添加依赖(最低版本 0.11.0):
// Package.swift
dependencies: [
.package(url: "https://github.com/modelcontextprotocol/swift-sdk.git", from: "0.11.0")
]
要求:Swift 6.0+(Xcode 16+)。这是硬性要求,Swift 5.x 无法编译。
import MCP
let server = Server(name: "my-fileserver", version: "1.0.0")
// 注册一个工具
server.addTool(
Tool(
name: "read-file",
description: "Read contents of a file",
inputSchema: .object([
"path": .string(description: "File path to read")
])
)
) { request in
let path = request.arguments["path"] as? String ?? ""
let content = try String(contentsOfFile: path, encoding: .utf8)
return [.text(content)]
}
// 启动 stdio 传输
let transport = StdioTransport()
try await server.run(transport: transport)
import MCP
let client = Client(name: "my-app", version: "1.0.0")
let transport = HTTPClientTransport(
endpoint: URL(string: "http://localhost:8080")!,
streaming: true
)
try await client.connect(transport: transport)
// 调用远程工具
let (content, isError) = try await client.callTool(
name: "image-generator",
arguments: ["prompt": "A sunset over mountains", "style": "photorealistic"]
)
需要明确:这不是一个独立部署的服务,而是一个 SDK 库。开发者将其集成到自己的 Swift 应用中才能使用。如果你希望构建一个带 Web UI 的 MCP Server,推荐方案是使用 Python SDK 或 TypeScript SDK 配合 Flask/FastAPI 提供 HTTP 接口,再通过 swift-sdk 的 HTTPClientTransport 连接。
从部署角度看,swift-sdk 的使用场景更偏向于:
SDK 要求 Swift 6.0+ 是一把双刃剑。一方面,它确保了代码能够充分利用 Swift 最新特性(严格并发、类型化抛出、宏系统);另一方面,大量存量项目仍在 Swift 5.x,导致这些项目无法直接使用。Apple 生态中仍有相当比例的应用因第三方库兼容性等原因停留在 Swift 5.x,Swift 6 的普及仍需时间。
与 Python SDK 和 TypeScript SDK 相比,swift-sdk 诞生最晚(2025 年 2 月),生态中的示例代码、社区讨论和第三方集成都相对匮乏。对于刚接触 MCP 的 Swift 开发者来说,可参考的学习资源有限,遇到问题可能需要深入源码或 GitHub Issue 寻求答案。
目前 SDK 的 HTTP 传输层仅实现了客户端(HTTPClientTransport),服务端 HTTP 接收部分(HTTPServer 目录存在但似乎尚未完全成熟)。这意味着如果你想构建一个纯 Swift 的 HTTP MCP Server,可能还需要等待后续版本。对于需要 HTTP Server 能力的场景,当前的 workaround 是用其他语言编写 Server 端。
MCP 协议本质上是面向 AI 工具调用的。对于不需要 AI 集成的普通 Swift 应用,这个 SDK 几乎没有使用价值。它不是一个通用 RPC 框架或网络库,其设计完全围绕 AI 场景展开。## 六、总结
modelcontextprotocol/swift-sdk 是 Apple 生态接入 MCP 开放协议的官方桥梁,由 Anthropic 主导的 MCP 工作组维护,是 MCP Swift 生态的核心基础设施。
核心优势:
核心局限:
适合人群: 需要在 Apple 原生应用(iOS/macOS/watchOS/visionOS)中集成 AI 工具调用能力的 Swift 开发者,以及希望构建跨平台 MCP Server 并需要原生 Apple 客户端的开发者。