个人数据聚合服务

MCP Yeah You Know Me 是一个个人数据聚合服务,通过单一MCP端点连接WhatsApp、Gmail、Docs、Sheets、Calendar、Tasks、Contacts、Slides、本地笔记、浏览器历史记录、实时网络搜索和Google Places,为AI助手提供一致的工具集。

  • by bdombro
  • Go
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 bdombro/mcpyeahyouknowme

使用说明

MCP是的,你认识我

一台MCP服务器。您的所有个人数据。 mcpyeahyouknowme 将WhatsApp、Gmail、文档、表格、日历、任务、联系人、幻灯片、本地笔记、浏览器历史记录、实时网络搜索和谷歌位置连接到一个单独的位置 主控程序 端点——所以你的人工智能助手使用一个一致的工具集,而不是处理一堆单独的服务器。

全球搜索一切。 一个 search 该工具一次在每个连接的源(电子邮件、聊天记录、日历事件、文档、笔记、浏览器历史记录)上执行BM25关键字搜索,并根据与后续元数据的相关性进行排名,这些元数据指向正确的源特定工具进行深度阅读。

线下优先,隐私保护。 所有数据同步到本地SQLite数据库。每个读取工具都直接查询本地文件——没有网络延迟,在您明确请求之前,任何东西都不会离开您的机器。后台守护进程处理同步;MCP服务器从本地缓存读取。

注意: 与许多MCP服务器一样,这取决于 致命的三联征及时注入可能会导致私人数据泄露。

建筑

一个带有可插拔功能的Go二进制文件 DataSource 界面。两种长时间运行模式:

模式 命令 描述
核心守护进程 mcpyeahyouknowme core 将所有源同步到本地SQLite,维护全局搜索索引,公开用于写入的REST API
MCP服务器 mcpyeahyouknowme mcp Stdio MCP服务器——从本地SQLite读取每个查询,代理写入核心守护进程

所有读取都会命中本地SQLite;MCP服务器从不直接调用外部API。写操作(发送消息、下载媒体)通过核心守护进程的环回REST API代理。

请参阅 产品规格 了解全部细节。

安全

内置可选控件 ~/.local/share/mcpyeahyouknowme/config.json 在顶级之下 mcp 对象(可以省略;默认值在运行时应用,而无需重写文件)。任何正在进行的MCP连接都需要重新启动/加载才能生效。A. 完整注释模板 (所有来源+ mcp 钥匙)在里面 config.json引用 在......下面

字段 默认值 它的作用
read_only false 何时 true,MCP服务器注册 不 变异工具(不改变状态或命中写入路径)。
disabled_tools [] 完全省略工具名称(例如。 whatsapp_send_message).
mutating_tools_per_min 10 每个工具滑动窗口:每个 非只读 工具每分钟最多只能运行这么多次;进一步的调用返回速率限制工具错误。
whatsapp_send_max_runes 1000 一个字符中允许的最大Unicode字符数 whatsapp_send_message 身体。省略或设置 ≤ 0 保持默认值(1000).如果您经常通过MCP发送长文本,请设置得更高。

审核日志: 每次MCP工具调用都会向以下对象附加一行JSON mcp-audit.log 在同一个数据目录中。敏感参数键(message, query, path, body, base64, media_path)被记录为仅限长度的编辑。文件被修剪成 core.log 当其增长超过5 MiB时(最新保持约1 MiB)。

不受信任的内容: 来自外部或用户控制的来源的结果(例如WhatsApp/Gmail消息正文、网络搜索、浏览器历史记录、笔记本阅读和全局 search / profile_about_me 当点击包含这些来源时)会以简短的安全警告作为前缀,并包括 _meta 提示支持的地方。

whatsapp_send_message 规模上限(对费率限制的补充): 不能替代 mutating_tools_per_min,但它限制了一个发送可以携带多少文本——当自动化代理可能以其他方式粘贴巨大的blob(意外或通过提示注入)时非常有用。默认 1000 每次调用的Unicode字符;用以下方式覆盖 mcp.whatsapp_send_max_runes.

2FA/OTP编辑(哪些内容会被审查): 在坚持使用SQLite之前(因此在全文索引和从本地数据库读取MCP之前),服务器会运行 保守启发式 对消息文本进行审查,以确定它是否是一次性密码消息,如果是,则进行审查。

先决条件

  • macOS (苹果硅或英特尔)
  • 家酿 (用于安装依赖项)
  • 去 (建造)

快速开始

  1. 克隆仓库

    git clone https://github.com/bdombro/mcpyeahyouknowme.git
    cd mcpyeahyouknowme
    
  2. 安装

    ./scripts/install.sh
    

    这将构建Go二进制文件,并将其复制到 /usr/local/bin/mcpyeahyouknowme,设置核心守护进程,并添加shell补全。

  3. 登录 (仅限第一次)

    mcpyeahyouknowme whatsapp login
    

    使用WhatsApp应用程序扫描二维码。登录时将捕获初始历史同步。守护进程将从现在开始处理重新连接。

  4. 配置MCP服务器 在您的AI客户端中:

    {
      "mcpServers": {
        "whatsapp": {
          "command": "mcpyeahyouknowme",
          "args": ["mcp"]
        }
      }
    }
    
    • 克劳德桌面版: ~/Library/Application Support/Claude/claude_desktop_config.json
    • 光标: ~/.cursor/mcp.json
  5. 重新启动克劳德桌面/光标

Google套件设置

Google Suite使用带有PKCE的桌面OAuth客户端。谷歌仍然期待两者 GOOGLE_CLIENT_ID 和 GOOGLE_CLIENT_SECRET 在令牌交换期间,但二进制文件仍然可以在没有它们的情况下构建。如果在构建时缺少其中之一 gsuite 在使用这两个值重新生成之前,源标记为不可用。

  1. Bootstrap谷歌云项目

    just google-project-setup your-google-project-id
    

    这验证了 gcloud,选择项目,启用所需的API,创建受限的Places API密钥,并打印剩余的手动Google Cloud Console步骤。

  2. 完成Google Cloud控制台的手动步骤

    • 打开 谷歌云控制台 并确认项目
    • 打开 谷歌认证平台
    • 配置品牌/应用程序信息
    • 选择观众(External 对于公共应用程序, Internal 仅限工作区使用)
    • 在应用程序未经验证时添加支持/联系电子邮件并测试用户
    • 审查请求的范围
    • 创建类型为的OAuth客户端 桌面应用
    • 复制桌面应用程序 客户端ID 和 客户端密钥

    桌面应用程序客户端密钥在已发布的macOS二进制文件中不是有意义的可信密钥,但谷歌目前在令牌交换期间仍需要它。

  3. 设置客户端凭据

    export GOOGLE_CLIENT_ID='your-desktop-client-id'
    export GOOGLE_CLIENT_SECRET='your-desktop-client-secret'
    

    将它们添加到您的shell配置文件或放入 .env 在建造之前,如果你想 gsuite 二进制文件中启用了源代码。

  4. 构建时位置API密钥 (可选)

    just google-project-setup 还将创建一个受限制的Places API密钥并将其写入 .env 作为 GOOGLE_PLACE_API_KEY.当出现在 just build,它使 google_places_* 用于实时业务和地址查找的MCP工具。

  5. 构建时勇敢搜索API密钥 (可选)

    集 BRAVE_API_KEY 在 .env 在构建之前,启用 brave_search_* 用于实时网络搜索和URL元数据查找的MCP工具。从 勇敢搜索API仪表板.

  6. 验证并启用您想要的应用程序

    mcpyeahyouknowme gsuite login
    

    这将打开您的浏览器进行OAuth授权,并将令牌存储在 ~/.local/share/mcpyeahyouknowme/gsuite_token.json,将帐户电子邮件存储在 ~/.local/share/mcpyeahyouknowme/gsuite_email.txt,并提示您选择要启用的Google应用程序。应用程序开始禁用,直到您明确启用它们。

  7. 管理已启用的应用程序

mcpyeahyouknowme gsuite管理


8. **Reset Google Suite data** (optional)

```bash
mcpyeahyouknowme gsuite reset

这将删除令牌和同步的Google数据,然后禁用源,直到您再次登录。

环境变量

变量 必填 描述
BRAVE_API_KEY 可选 构建时勇敢搜索API密钥,用于启用 brave_search_* 工具
GOOGLE_CLIENT_ID 可选 来自谷歌云控制台的桌面OAuth客户端ID;仅当您需要时才需要 gsuite 来源可用
GOOGLE_CLIENT_SECRET 可选 匹配桌面OAuth客户端密钥;仅当您需要时才需要 gsuite 来源可用
GOOGLE_PLACE_API_KEY 可选 Build-time Places API键,用于启用 google_places_* 工具
GOOGLE_PROJECT_ID 可选 由使用 scripts/google-project-setup.sh / just google-project-setup

管理守护进程

安装核心守护进程(登录时运行,自动重启)并对其进行管理:

mcpyeahyouknowme start
mcpyeahyouknowme stop
mcpyeahyouknowme restart

其他命令:

# Show status and data locations
mcpyeahyouknowme status

# Refresh the status view every 10 seconds
mcpyeahyouknowme status --live

# Wipe WhatsApp data and session (only WhatsApp)
mcpyeahyouknowme whatsapp reset

# Wipe Google Suite token and synced data
mcpyeahyouknowme gsuite reset

卸载

要完全删除mcpyeahyouknowme:

cd /path/to/mcpyeahyouknowme
./scripts/uninstall.sh

这将:

  • 杀死所有正在运行的mcpyeahyouknowme进程
  • 清理数据库锁文件
  • 卸载并删除守护进程
  • 删除数据目录(~/.local/share/mcpyeahyouknowme)
  • 从以下位置移除壳体完井 ~/.zshrc
  • 从中删除二进制文件 /usr/local/bin/mcpyeahyouknowme

故障排除

  • 二维码未显示:重新启动CLI。检查您的终端是否支持QR渲染。
  • 已登录:CLI会自动重新连接,无需二维码。
  • 已达到设备限制:从手机上的WhatsApp中删除现有设备(设置>链接设备)。
  • 没有消息加载:对于大型帐户,初始历史同步可能需要几分钟。历史记录仅在第一次配对时推送。如果您的数据库为空,请运行 mcpyeahyouknowme whatsapp login --relogin 以重新配对并捕获初始同步。
  • 不同步:运行 mcpyeahyouknowme whatsapp reset 要擦除所有数据,则 mcpyeahyouknowme whatsapp login 重新验证。
  • 会话已过期/405错误:运行 mcpyeahyouknowme whatsapp login --relogin 清除过时的会话并重新配对。守护程序将自动重新启动。

有关其他Claude Desktop故障排除,请参阅 MCP文件.

config.json引用

路径: ~/.local/share/mcpyeahyouknowme/config.json (与SQLite数据库和 mcp-audit.log).

守护进程会随着时间的推移使此文件正常化:每个 注册源 得到a sources.<name> 即使在禁用时也可以输入,因此密钥可能会在配置源之前出现。这 mcp 块是可选的,由只读 mcpyeahyouknowme mcp 子流程。

完整参考(带注释的JSON,tsconfig样式)

重要提示: Go运行时使用严格 JSON — // 和 /* */ 不允许发表评论 在磁盘上的真实文件中。将下面的块视为文档:复制所需的结构和值, 删除所有注释行,然后保存。(有些编辑器可以在导出时将JSONC剥离为JSON。)

{
  // --- sources: one object per integration (names are fixed) ---
  "sources": {
    "brave_search": {
      // Whether this source is turned on in config. Live Brave tools also need
      // BRAVE_API_KEY at build time; there is no API key stored here.
      "enabled": false,
      // When true, the core daemon runs source Reset() on its next loop, then
      // tooling normally clears this flag. You rarely set it by hand.
      // "reset": false,
      // No "auth" blob for brave_search.
    },
    "browser_history": {
      "enabled": false,
      // "auth" selects which Chromium profile DB to snapshot (macOS).
      // Typical values: "chrome", "brave". Use: mcpyeahyouknowme browser_history enable <browser>
      "auth": {
        "browser": "chrome"
      }
    },
    "google_places": {
      "enabled": false,
      // Places needs GOOGLE_PLACE_API_KEY at build time; nothing stored under "auth".
    },
    "gsuite": {
      "enabled": false,
      // "auth" only holds per-app toggles. OAuth tokens live in gsuite_token.json
      // next to this file (written by: mcpyeahyouknowme gsuite login).
      "auth": {
        "apps": {
          "docs": false,
          "sheets": false,
          "gmail": false,
          "calendar": false,
          "tasks": false,
          "contacts": false,
          "slides": false
        }
      }
    },
    "notebook": {
      "enabled": false,
      // Local directories to index (markdown, PDF, images). Use:
      // mcpyeahyouknowme notebook add <path>  (populates dirs for you)
      "auth": {
        "dirs": []
      }
    },
    "whatsapp": {
      "enabled": false
      // Pairing/session files live under the data directory; login sets enabled.
      // No "auth" object in config.json for WhatsApp.
    }
  },

  // --- mcp: optional; used only by `mcpyeahyouknowme mcp` (restart MCP to apply) ---
  "mcp": {
    // When true, no mutating tools are registered (no sends, downloads, etc.).
    "read_only": false,

    // Exact tool names to hide entirely, e.g. "whatsapp_send_message".
    "disabled_tools": [],

    // Per mutating tool name: max calls per sliding minute (default 10 if omitted or <= 0).
    "mutating_tools_per_min": 10,

    // Max Unicode runes/words per whatsapp_send_message body (default 1000 if omitted or <= 0).
    "whatsapp_send_max_runes": 1000
  }
}