iMCP 是一个 macOS 应用程序,用于通过人工智能连接您的数字生活。 它与 Claude Desktop 兼容,并支持 不断增长的客户端列表, 这些客户端支持 模型上下文协议 (MCP)。
首先,下载 iMCP 应用 (需要 macOS 15.3 或更高版本)。
或者,如果您已安装了 Homebrew,您可以运行以下命令:
brew install --cask mattt/tap/iMCP
<img align="right" width="344" src="/Assets/imcp-screenshot-first-launch.png" alt="iMCP 首次启动截图" />
当您打开应用程序时,您将在菜单栏中看到一个 <img style="display: inline" width="20" height="16" src="/Assets/icon.svg" /> 图标。
点击此图标会显示 iMCP 菜单,该菜单显示所有可用的服务。 最初,所有服务都会显示为灰色,表示它们是不活跃的。
顶部的蓝色切换开关表示 MCP 服务器正在运行并准备好连接到兼容的 MCP 客户端。
<br clear="all"> <img align="right" width="372" src="/Assets/imcp-screenshot-grant-permission.png" alt="macOS 权限对话框截图" />要激活某个服务,请点击其图标。 系统将提示您授予权限。 例如,当激活日历访问时,您会看到一个对话框询问“iMCP”是否可以完全访问您的日历。 点击 <kbd>允许完全访问</kbd> 继续。
<br clear="all"> <img align="right" width="344" src="/Assets/imcp-screenshot-all-services-active.png" alt="iMCP 所有服务启用截图" />[!重要] iMCP 不会 收集或存储您的任何数据。 如 Claude Desktop 这样的客户端确实会将您的数据发送到设备外作为工具调用的一部分。
一旦激活,每个服务图标将从灰色变为各自的颜色——红色代表日历,绿色代表消息,蓝色代表位置,等等。
对您想要启用的所有功能重复此过程。 这些权限遵循 Apple 的标准安全模型,让您完全控制 iMCP 可以访问的信息。
<br clear="all">如果您尚未安装 Claude Desktop,可以从 这里下载。
打开 Claude Desktop 并转到“设置... (<kbd>⌘</kbd><kbd>,</kbd>)”。
点击设置面板侧边栏中的“开发者”,然后点击“编辑配置”。
这将在 ~/Library/Application Support/Claude/claude_desktop_config.json 创建一个配置文件。
要将 iMCP 连接到 Claude Desktop,请点击 <img style="display: inline" width="20" height="16" src="/Assets/icon.svg" /> > “配置 Claude Desktop”。
这将添加或更新 MCP 服务器配置,以使用捆绑在应用程序中的 imcp-server 可执行文件。
文件中的其他 MCP 服务器配置将被保留。
点击 <img style="display: inline" width="20" height="16" src="/Assets/icon.svg" />
> “复制服务器命令到剪贴板”。
然后在您的编辑器中打开 claude_desktop_config.json 并输入以下内容:
{
"mcpServers": {
"iMCP": {
"command": "{粘贴 iMCP 服务器命令}"
}
}
}
</details>
<img align="right" width="372" src="/Assets/imcp-screenshot-approve-connection.png" />
退出并重新打开 Claude Desktop 应用程序。 您将被提示批准连接。
<br clear="all">批准连接后,您应该会在聊天框右下角看到 🔨12。 点击它可以看到由 iMCP 提供给 Claude 的所有工具列表。
<p align="center"> <img width="694" src="/Assets/claude-desktop-screenshot-tools-enabled.png" alt="Claude Desktop 启用工具截图" /> </p>现在您可以向 Claude 提问需要访问您的个人数据的问题,例如:
“我所在的位置天气如何?”
Claude 将使用适当的工具检索此信息,为您提供准确且个性化的响应,而无需您在对话过程中手动分享这些数据。
<p align="center"> <img width="738" src="/Assets/claude-desktop-screenshot-message.png" alt="Claude 对用户消息 '我所在的位置天气如何?' 的响应截图" /> </p>iMCP 是一个 macOS 应用程序,捆绑了一个命令行可执行文件 imcp-server。
iMCP.app 提供了配置服务的用户界面,并最重要的是,提供了与 macOS 系统权限交互的方式,以便它可以访问联系人、日历和其他信息。imcp-server 提供了一个 MCP 服务器,使用标准输入/输出进行通信(stdio 传输)。应用程序和 CLI 在本地网络上通过 Bonjour 自动发现彼此进行通信。
两者都广播类型为 "_mcp._tcp" 和域名为 "local" 的服务。
来自 MCP 客户端的请求由 CLI 从 stdin 读取并转发给应用程序;
来自应用程序的响应由 CLI 接收并写入 stdout。
实现细节见 StdioProxy。
对于这个项目,我们创建了 官方 Swift SDK,用于 MCP 服务器和客户端。 应用程序使用此包来处理来自 MCP 客户端的代理请求。
Apple 没有提供公开 API 来访问您的消息。
然而,macOS 上的消息应用程序将数据存储在一个位于 ~/Library/Messages/chat.db 的 SQLite 数据库中。
iMCP 在 App Sandbox 中运行,这限制了其对用户数据和系统资源的访问。
当您尝试启用消息服务时,系统会提示您通过标准文件选择器打开 chat.db 文件。
当您这样做时,macOS 会将该文件添加到应用程序的沙箱中。
NSOpenPanel 就有这样的魔力。
但打开 iMessage 数据库只是战斗的一半。
在过去几年里,Apple 已经从存储纯文本消息转向专有的 typedstream 格式。
为此项目,我们创建了 Madrid:一个用于读取您的 iMessage 数据库的 Swift 包。
它包括一个 Swift 实现,用于解码 Apple 的 typedstream 格式,改编自 Christopher Sardegna 的 imessage-exporter 项目和关于反向工程 typedstream 的博客文章。
iMCP 提供的工具返回结果为 JSON-LD 文档。
例如,fetchContacts 工具使用 Contacts 框架,该框架使用 CNContact 类型表示人员和组织。
以下是该类型的对象如何编码为 JSON-LD:
{
"@context": "https://schema.org",
"@type": "Person",
"name": "Mattt",
"url": "https://mat.tt"
}
Schema.org 提供了标准词汇表,用于表示人员、邮政地址、事件等许多对象。 而 JSON-LD 是一种方便的人类、AI 和传统软件都能使用的编码格式。
为此项目,我们创建了 Ontology:一个用于处理结构化数据的 Swift 包。 它包括从 Apple 框架返回的类型的便捷初始化器,例如 iMCP 工具返回的类型。
为了调试 iMCP 和客户端之间的交互,您可以使用 inspector 工具(需要 Node.js):
点击 <img style="display: inline" width="20" height="16" src="/Assets/icon.svg" /> > “复制服务器命令到剪贴板”
打开终端并运行以下命令:
# 下载并在 imcp-server 上运行 inspector 包
npx @modelcontextprotocol/inspector [粘贴复制的命令]
# 打开本地运行的 inspector Web 应用
open http://127.0.0.1:6274
Inspector 让您能够看到客户端和 iMCP 服务器之间所有的请求和响应,这对于理解协议的工作方式非常有帮助。
Companion 是一个用于测试和调试您的 MCP 服务器的实用工具(需要 macOS 15 或更高版本)。 它提供了一种简单的方式来浏览和与服务器的提示、资源和工具进行交互。 这里是将其连接到 iMCP 的方法:
typedstream 格式。本项目在 MIT 许可证下提供。 更多信息请参阅 LICENSE 文件。
iMessage® 是 Apple Inc. 的注册商标。 本项目未得到 Apple Inc. 的认可、赞助或关联。