XcodeMCPBridge
一个Swift包,用于在macOS应用程序中与Xcode的MCP(模型上下文协议)桥集成。内置于 可组合架构(TCA).
建筑
┌──────────────┐ App Protocol ┌──────────────┐ MCP JSON-RPC ┌────────────┐ XPC ┌───────┐
│ Your App │ ◄────────────► │ mcpbridge-cli│ ◄─────────────► │ mcpbridge │ ◄────► │ Xcode │
│ (SwiftUI) │ stdin/stdout │ (MCP Client) │ stdin/stdout │ (Apple) │ │ (IDE) │
└──────────────┘ └──────────────┘ └────────────┘ └───────┘您的应用程序 --任何使用此软件包的macOS SwiftUI应用程序。通过以下方式与桥梁互动 MCPBridgeClient (TCA依赖性)或 MCPBridgeFeature (TCA减速器)。从不触碰 MCP协议细节直接。
mcpbridge cli --此软件包附带的配套CLI二进制文件。充当MCP客户端, 与苹果公司沟通 xcrun mcpbridge 通过stdio上的JSON-RPC 2.0。包裹 自动将其从应用程序捆绑包安装到系统路径。
麦克布里奇(苹果) --Xcode 26+附带了苹果的原生MCP服务器。桥梁MCP 通过XPC向正在运行的Xcode实例发出请求。
需求
- macOS 26.2+
- Swift 5.9+
- Xcode 26.3+(含
xcrun mcpbridge支持)
安装
Swift包管理器
添加到您的 Package.swift:
dependencies: [
.package(url: "https://github.com/renderplace/XcodeMCPBridge.git", from: "1.0.0"),
]或者在Xcode中: File → 添加包依赖关系 并输入存储库URL。
嵌入CLI二进制文件
该软件包包括一个配套的CLI可执行文件(mcpbridge-cli)将您的应用程序连接到 xcrun mcpbridge。您的应用程序必须构建和嵌入此二进制文件。
在Xcode项目/XcodeGen规范中:
- 添加
mcpbridge-cli产品仅作为构建依赖(无链接,无嵌入):
# project.yml (XcodeGen)
packages:
XcodeMCPBridge:
url: https://github.com/renderplace/XcodeMCPBridge.git
from: "1.0.0"
targets:
MyApp:
dependencies:
- package: XcodeMCPBridge
product: XcodeMCPBridge
- package: XcodeMCPBridge
product: mcpbridge-cli
embed: false
link: false- 添加a 运行脚本 构建阶段,将CLI复制到您的应用程序包中:
mkdir -p "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Contents/Resources"
cp "${BUILT_PRODUCTS_DIR}/mcpbridge-cli" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Contents/Resources/mcpbridge-cli"
chmod 755 "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Contents/Resources/mcpbridge-cli"快速开始
import XcodeMCPBridge
import ComposableArchitecture
@Reducer
struct AppFeature {
struct State {
var bridge = MCPBridgeFeature.State()
}
enum Action {
case bridge(MCPBridgeFeature.Action)
}
var body: some ReducerOf {
Scope(state: \.bridge, action: \.bridge) {
MCPBridgeFeature()
}
}
}您认为:
// Connect button
Button("Connect to Xcode") {
store.send(.bridge(.connectTapped))
}
// Status display
Text(store.bridge.statusText)直接使用依赖关系
要获得更多控制,请使用 MCPBridgeClient 作为TCA依赖关系:
@Dependency(\.mcpBridgeClient) var mcpBridge
// Install CLI binary
try await mcpBridge.install()
// Connect to Xcode's MCP bridge
let serverInfo = try await mcpBridge.connect()
// List available tools
let tools = try await mcpBridge.listTools()
// Execute a tool
let result = try await mcpBridge.callTool("XcodeBuildProject", ["tabIdentifier": "windowtab1"])
// Check status
let status = mcpBridge.status() // .connected, .executing, etc.
// Disconnect
await mcpBridge.disconnect()
// Uninstall CLI
try await mcpBridge.uninstall()配置
自定义CLI二进制名称和安装位置:
Store(initialState: AppFeature.State()) {
AppFeature()
} withDependencies: {
$0.mcpBridgeClient = .live(
configuration: MCPBridgeConfiguration(
cliBinaryName: "my-custom-mcp-cli",
installDirectory: "/usr/local/bin"
)
)
}注: 使用自定义二进制名称时,运行脚本构建阶段和捆绑的资源名称必须匹配。
API 参考
MCPBridgeClient
| 方法 | 说明 |
|---|---|
install() | 将CLI二进制文件从应用程序捆绑包安装/更新到系统路径 |
uninstall() | 删除已安装的CLI二进制文件 |
connect() | 连接到Xcode的MCP桥,返回 BridgeServerInfo |
disconnect() | 与桥断开连接 |
listTools() | 退货可用 [MCPTool] 来自Xcode |
callTool(_:_:) | 执行工具,返回 BridgeToolResult |
status() | 返回当前值 MCPBridgeStatus |
MCP桥接状态
.notInstalled--未安装CLI二进制文件.installing--安装正在进行中.installed--已安装但未连接.connecting--连接正在进行中.connected--准备执行工具.executing--工具调用正在进行中
MCPBridgeFeature(TCA减速器)
预构建的减速器可处理整个生命周期。行动:
.installTapped--仅安装CLI.uninstallTapped--删除CLI.connectTapped--自动安装+连接.disconnectTapped--断开连接
州包括 status, serverInfo, error, isConnected,以及 statusText.
演示应用程序
使用此软件包构建的完全可用的示例应用程序可在以下网址获得:
Xcodemcpswiftapp --macOS SwiftUI应用程序,使用 XcodeMCPBridge 要连接到Xcode的MCP桥,请浏览所有可用工具,填写参数并执行它们。非常适合作为将此软件包集成到您自己的应用程序中的参考。
______________________________________________________________________
*“由开发人员为开发人员构建,因为最好的工具是你自己想使用的工具。”* ❤️ — 安东·格雷冈 · @渲染位置
许可证
MIT许可证
版权所有©2026 Anton Gregorn。保留所有权利。
特此免费向任何获得副本的人授予许可 本软件和相关文档文件(“软件”),以处理 在软件中不受限制,包括但不限于权利 使用、复制、修改、合并、发布、分发、再许可和/或销售 软件的副本,并允许软件的接收者 根据以下条件提供:
上述版权声明和本许可声明应包含在所有 软件的副本或实质性部分。
软件按“原样”提供,不提供任何形式的明示或明示担保 隐含的,包括但不限于适销性保证, 适用于特定目的且不造成伤害。在任何情况下 作者或版权持有人对任何索赔、损害赔偿或其他 因以下原因产生的责任,无论是在合同、侵权或其他诉讼中, 出于或与软件、使用或其他交易有关 软件。
