一个Swift包,作为Apple的FoundationModels框架与实现模型上下文协议(MCP)的任何服务器之间的动态桥梁。
关于此项目的说明
该项目主要由AI代理开发,旨在展示如何将Apple的
FoundationModels框架与模型上下文协议(MCP)集成。尽管功能正常,但应将其视为概念验证而非生产就绪解决方案。实际效用目前受到
FoundationModels框架中可用模型上下文大小的限制,这使得模型难以有效地使用具有复杂输入模式或长描述的工具。
随着macOS 26.0引入新的设备上AI能力,Apple的FoundationModels框架提供了一种强大的方式来与大型语言模型进行交互。通过利用开放标准的模型上下文协议,本项目使该新框架能够与更广泛的工具和服务器生态系统进行通信。
AppleFoundationMCPTool在运行时发现MCP服务器上的可用工具,并动态创建相应的FoundationModels.Tool对象。这允许FoundationModels会话中的LLM看到并执行外部工具,而无需在编译时了解其具体细节。
FoundationModels使用。async/await)构建,并利用最新的FoundationModelsAPI。此库的主要入口点是MCPToolBridge类。
在您的Package.swift文件中添加以下内容:
dependencies: [
.package(url: "https://github.com/your-username/AppleFoundationMCPTool.git", from: "1.0.0")
]
然后将依赖项添加到您的目标中:
.target(
name: "YourTarget",
dependencies: [
"AppleFoundationMCPTool"
]
)
您可以根据服务器设置以两种方式之一初始化MCPToolBridge。
如果您有一个正在监听特定URL的MCP服务器,请使用此方法。
import AppleFoundationMCPTool
import Foundation
let serverURL = URL(string: "http://127.0.0.1:8000/mcp")!
let bridge = MCPToolBridge(serverURL: serverURL)
使用此方法可以让桥梁启动并管理本地MCP服务器可执行文件,并通过stdin/stdout与其通信。
import AppleFoundationMCPTool
let serverPath = "/path/to/your/mcp_server_executable"
let bridge = MCPToolBridge(executablePath: serverPath)
一旦桥梁被初始化,您就可以连接到服务器,发现其工具并在FoundationModels会话中使用它们。
import FoundationModels
// 假设您有一个SessionManager或其他类似的类来管理LLM会话
let session = Session() // 您的FoundationModels会话对象
do {
// 连接到服务器并获取动态创建的Apple Foundation工具
let appleTools = try await bridge.connectAndDiscoverTools()
print("成功发现\(appleTools.count)个工具。")
// 注册发现的工具到您的会话
for tool in appleTools {
session.addTool(tool)
}
// 您现在可以使用会话,LLM将能够看到并调用这些工具。
let response = try await session.prompt("使用'add'工具计算5 + 7。")
print(response)
} catch {
print("发生错误:\(error.localizedDescription)")
}
// 完成后别忘了断开连接。
// 如果桥梁启动了服务器进程,这也将终止该进程。
await bridge.disconnect()
此项目包括两个可执行目标以演示其功能。
AppleFoundationMCPToolChat(推荐示例)这是一个完全交互式的命令行聊天应用程序,展示了桥梁的端到端功能。它连接到MCP服务器,注册发现的工具,并允许您与能够使用这些工具的LLM进行聊天。
main.swift:打开Sources/AppleFoundationMCPToolChat/main.swift并配置MCPToolBridge初始化以指向您的MCP服务器(通过URL或可执行文件路径)。swift run AppleFoundationMCPToolChat
AppleFoundationMCPToolExample此目标包含各种概念性代码片段。它不是一个完整的示例,更像是一个草稿,展示了库组件的不同使用方式。对于实用的工作演示,请参考AppleFoundationMCPToolChat示例。