项目简介

'imessage-search' 是一个智能的 iMessage 搜索后端,它将您的 macOS iMessage 聊天记录、联系人信息和图片附件(通过CLIP嵌入)进行索引,然后通过 Model Context Protocol (MCP) 服务器以标准化的方式向大型语言模型(LLM)客户端提供高级搜索功能。它允许LLM理解复杂的自然语言查询,进行混合搜索和图片搜索。

主要功能点

  • 智能搜索: 利用LLM理解自然语言查询,包括时间表达、人物提及和查询意图。
  • 混合搜索: 结合语义相似性(OpenAI嵌入+kNN)和关键词匹配(BM25),提供最佳搜索结果。
  • 图片搜索: 通过文本描述使用CLIP嵌入查找图片。
  • 联系人解析: 在索引过程中自动将电话号码映射到联系人姓名。
  • 增量索引: 仅处理新消息,并在运行之间跟踪状态。
  • MCP工具: 提供 'smart_search' (智能自然语言查询), 'hybrid_search' (精细控制的混合查询), 'image_search' (图片描述搜索) 等功能供LLM调用。

安装步骤

  1. 环境准备:
    • 确保您使用的是 macOS 系统,以便访问 '~/Library/Messages/chat.db'。
    • 安装 Node.js 20+
    • 安装 pnpm: 运行 'npm install -g pnpm'。
    • 安装 Docker (用于运行Elasticsearch)。
    • 获取 OpenAI API key (用于嵌入和查询解析)。
    • 如果需要图片搜索,请安装 Python 3.8+ 和 PyTorch。
    • 为您的终端授予“完全磁盘访问权限”(系统偏好设置 → 隐私与安全性 → 完全磁盘访问)。
  2. 安装依赖: 在项目根目录运行 'pnpm install'。
  3. 配置环境变量: 复制 'env.example' 为 '.env' 文件,并编辑 '.env' 添加您的 'OPENAI_API_KEY'。您也可以根据需要配置 'ELASTICSEARCH_URL', 'MESSAGES_DB_PATH', 'ADDRESSBOOK_DB_PATH'。
  4. 启动Elasticsearch: 运行 'pnpm es:start'。
  5. 索引消息:
    • 检查当前状态: 'pnpm index:status'。
    • 索引新消息(增量): 'pnpm index'。
    • 完整重新索引(清除现有数据): 'pnpm index:full'。
  6. (可选)索引图片: 如果需要图片搜索,请执行以下步骤:
    • 安装 Python 依赖: 'pip install -r scripts/requirements.txt'。
    • 使用CLIP嵌入图片(增量): 'pnpm images:embed'。

服务器配置 (供MCP客户端使用)

这个MCP服务器可以通过 Stdio 传输协议启动。要在您的MCP客户端(例如 Claude Desktop)中使用此服务器,您需要配置客户端以调用本服务器的启动命令。

以下是一个示例配置,您需要根据实际安装路径进行调整:

{
  "mcpServers": {
    "imessage": {
      "command": "node",
      "args": ["/path/to/imessage-mcp/dist/index.js"],
      "env": {
        "OPENAI_API_KEY": "sk-..."
      }
    }
  }
}

在上述配置中:

  • '"imessage"' 是您给这个MCP服务器起的名字,可以自定义。
  • '"command"' 指定了启动服务器的程序,通常是 '"node"'。
  • '"args"' 是传递给 'command' 的参数列表。'"/path/to/imessage-mcp/dist/index.js"' 需要替换为您的 'imessage-search' 项目在本地文件系统中的实际安装路径下 'dist/index.js' 文件的完整路径。
  • '"env"' 允许您为服务器进程设置环境变量,例如 'OPENAI_API_KEY'。

基本使用方法

  1. 确保已完成上述所有安装和索引步骤,并且 Elasticsearch 和 MCP 服务器已启动。
  2. 启动您的MCP客户端(例如 Claude Desktop)。
  3. 在MCP客户端中,您可以像与LLM对话一样,通过自然语言查询您的iMessage历史记录。
  4. LLM会根据您的查询,自动调用本服务器提供的 'smart_search'、'hybrid_search' 或 'image_search' 工具来获取结果。
  5. 示例查询:
    • “上周我和Alex聊了些什么?”
    • “晚餐计划?”
    • “从Sarah那里收到的关于项目的消息”
    • “找一张我提到狗的照片”

信息

分类

桌面与硬件