{
  "canonical_name": "pquattro/memoraeu-mcp",
  "compilation_id": "pack_5b362e61eb5a41bfa583d933f5cd4d98",
  "created_at": "2026-05-15T06:04:21.919457+00:00",
  "created_by": "project-pack-compiler",
  "feedback": {
    "carrier_selection_notes": [
      "viable_asset_types=mcp_config, recipe, host_instruction, eval, preflight",
      "recommended_asset_types=mcp_config, recipe, host_instruction, eval, preflight"
    ],
    "evidence_delta": {
      "confirmed_claims": [
        "identity_anchor_present",
        "capability_and_host_targets_present",
        "install_path_declared_or_better"
      ],
      "missing_required_fields": [],
      "must_verify_forwarded": [
        "Run or inspect `pip install memoraeu-mcp` in an isolated environment.",
        "Confirm the project exposes the claimed capability to at least one target host."
      ],
      "quickstart_execution_scope": "allowlisted_sandbox_smoke",
      "sandbox_command": "pip install memoraeu-mcp",
      "sandbox_container_image": "python:3.12-slim",
      "sandbox_execution_backend": "docker",
      "sandbox_planner_decision": "llm_execute_isolated_install",
      "sandbox_validation_id": "sbx_1af7e5f3b3994096b8cd7bb41c987140"
    },
    "feedback_event_type": "project_pack_compilation_feedback",
    "learning_candidate_reasons": [],
    "template_gaps": []
  },
  "identity": {
    "canonical_id": "project_fac6d5e17d6e0ecd8a20c3dfb9a14239",
    "canonical_name": "pquattro/memoraeu-mcp",
    "homepage_url": null,
    "license": "unknown",
    "repo_url": "https://github.com/pquattro/memoraeu-mcp",
    "slug": "memoraeu-mcp",
    "source_packet_id": "phit_e63dddb047ec422882b5d98045a4180c",
    "source_validation_id": "dval_017644bf19ad4842aff2692e2be4439b"
  },
  "merchandising": {
    "best_for": "需要工具连接与集成能力，并使用 mcp_host的用户",
    "github_forks": 0,
    "github_stars": 1,
    "one_liner_en": "Zero-knowledge persistent memory layer for Claude — AES-256-GCM encrypted, semantic search, EU hosted. MCP server for Claude Desktop.",
    "one_liner_zh": "Zero-knowledge persistent memory layer for Claude — AES-256-GCM encrypted, semantic search, EU hosted. MCP server for Claude Desktop.",
    "primary_category": {
      "category_id": "tool-integrations",
      "confidence": "high",
      "name_en": "Tool Integrations",
      "name_zh": "工具连接与集成",
      "reason": "matched_keywords:mcp, server, github"
    },
    "target_user": "使用 mcp_host, claude 等宿主 AI 的用户",
    "title_en": "memoraeu-mcp",
    "title_zh": "memoraeu-mcp 能力包",
    "visible_tags": [
      {
        "label_en": "Security & Permissions",
        "label_zh": "安全审查与权限治理",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "product_domain-security-permissions",
        "type": "product_domain"
      },
      {
        "label_en": "Knowledge Base Q&A",
        "label_zh": "知识库问答",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "user_job-knowledge-base-q-a",
        "type": "user_job"
      },
      {
        "label_en": "Durable Memory",
        "label_zh": "长期记忆",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "core_capability-durable-memory",
        "type": "core_capability"
      },
      {
        "label_en": "Verifiable Workflow",
        "label_zh": "可验证工作流",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "workflow_pattern-verifiable-workflow",
        "type": "workflow_pattern"
      },
      {
        "label_en": "Local-first",
        "label_zh": "本地优先",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "selection_signal-local-first",
        "type": "selection_signal"
      }
    ]
  },
  "packet_id": "phit_e63dddb047ec422882b5d98045a4180c",
  "page_model": {
    "artifacts": {
      "artifact_slug": "memoraeu-mcp",
      "files": [
        "PROJECT_PACK.json",
        "QUICK_START.md",
        "PROMPT_PREVIEW.md",
        "HUMAN_MANUAL.md",
        "AI_CONTEXT_PACK.md",
        "BOUNDARY_RISK_CARD.md",
        "PITFALL_LOG.md",
        "REPO_INSPECTION.json",
        "REPO_INSPECTION.md",
        "CAPABILITY_CONTRACT.json",
        "EVIDENCE_INDEX.json",
        "CLAIM_GRAPH.json"
      ],
      "required_files": [
        "PROJECT_PACK.json",
        "QUICK_START.md",
        "PROMPT_PREVIEW.md",
        "HUMAN_MANUAL.md",
        "AI_CONTEXT_PACK.md",
        "BOUNDARY_RISK_CARD.md",
        "PITFALL_LOG.md",
        "REPO_INSPECTION.json"
      ]
    },
    "detail": {
      "capability_source": "Project Hit Packet + DownstreamValidationResult",
      "commands": [
        {
          "command": "pip install memoraeu-mcp",
          "label": "Python / pip · 官方安装入口",
          "source": "https://github.com/pquattro/memoraeu-mcp#readme",
          "verified": true
        }
      ],
      "display_tags": [
        "安全审查与权限治理",
        "知识库问答",
        "长期记忆",
        "可验证工作流",
        "本地优先"
      ],
      "eyebrow": "工具连接与集成",
      "glance": [
        {
          "body": "判断自己是不是目标用户。",
          "label": "最适合谁",
          "value": "需要工具连接与集成能力，并使用 mcp_host的用户"
        },
        {
          "body": "先理解能力边界，再决定是否继续。",
          "label": "核心价值",
          "value": "Zero-knowledge persistent memory layer for Claude — AES-256-GCM encrypted, semantic search, EU hosted. MCP server for Claude Desktop."
        },
        {
          "body": "未完成验证前保持审慎。",
          "label": "继续前",
          "value": "publish to Doramagic.ai project surfaces"
        }
      ],
      "guardrail_source": "Boundary & Risk Card",
      "guardrails": [
        {
          "body": "Prompt Preview 只展示流程，不证明项目已安装或运行。",
          "label": "Check 1",
          "value": "不要把试用当真实运行"
        },
        {
          "body": "mcp_host, claude",
          "label": "Check 2",
          "value": "确认宿主兼容"
        },
        {
          "body": "publish to Doramagic.ai project surfaces",
          "label": "Check 3",
          "value": "先隔离验证"
        }
      ],
      "mode": "mcp_config, recipe, host_instruction, eval, preflight",
      "pitfall_log": {
        "items": [
          {
            "body": "项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主，或安装命令涉及用户配置目录。",
            "category": "配置坑",
            "evidence": [
              "capability.host_targets | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | host_targets=mcp_host, claude"
            ],
            "severity": "medium",
            "suggested_check": "列出会写入的配置文件、目录和卸载/回滚步骤。",
            "title": "可能修改宿主 AI 配置",
            "user_impact": "安装可能改变本机 AI 工具行为，用户需要知道写入位置和回滚方法。"
          },
          {
            "body": "README/documentation is current enough for a first validation pass.",
            "category": "能力坑",
            "evidence": [
              "capability.assumptions | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | README/documentation is current enough for a first validation pass."
            ],
            "severity": "medium",
            "suggested_check": "将假设转成下游验证清单。",
            "title": "能力判断依赖假设",
            "user_impact": "假设不成立时，用户拿不到承诺的能力。"
          },
          {
            "body": "未记录 last_activity_observed。",
            "category": "维护坑",
            "evidence": [
              "evidence.maintainer_signals | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | last_activity_observed missing"
            ],
            "severity": "medium",
            "suggested_check": "补 GitHub 最近 commit、release、issue/PR 响应信号。",
            "title": "维护活跃度未知",
            "user_impact": "新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。"
          },
          {
            "body": "no_demo",
            "category": "安全/权限坑",
            "evidence": [
              "downstream_validation.risk_items | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | no_demo; severity=medium"
            ],
            "severity": "medium",
            "suggested_check": "进入安全/权限治理复核队列。",
            "title": "下游验证发现风险项",
            "user_impact": "下游已经要求复核，不能在页面中弱化。"
          },
          {
            "body": "no_demo",
            "category": "安全/权限坑",
            "evidence": [
              "risks.scoring_risks | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | no_demo; severity=medium"
            ],
            "severity": "medium",
            "suggested_check": "把风险写入边界卡，并确认是否需要人工复核。",
            "title": "存在评分风险",
            "user_impact": "风险会影响是否适合普通用户安装。"
          },
          {
            "body": "issue_or_pr_quality=unknown。",
            "category": "维护坑",
            "evidence": [
              "evidence.maintainer_signals | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | issue_or_pr_quality=unknown"
            ],
            "severity": "low",
            "suggested_check": "抽样最近 issue/PR，判断是否长期无人处理。",
            "title": "issue/PR 响应质量未知",
            "user_impact": "用户无法判断遇到问题后是否有人维护。"
          },
          {
            "body": "release_recency=unknown。",
            "category": "维护坑",
            "evidence": [
              "evidence.maintainer_signals | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | release_recency=unknown"
            ],
            "severity": "low",
            "suggested_check": "确认最近 release/tag 和 README 安装命令是否一致。",
            "title": "发布节奏不明确",
            "user_impact": "安装命令和文档可能落后于代码，用户踩坑概率升高。"
          }
        ],
        "source": "ProjectPitfallLog + ProjectHitPacket + validation + community signals",
        "summary": "发现 7 个潜在踩坑项，其中 0 个为 high/blocking；最高优先级：配置坑 - 可能修改宿主 AI 配置。",
        "title": "踩坑日志"
      },
      "snapshot": {
        "contributors": 1,
        "forks": 0,
        "license": "unknown",
        "note": "站点快照，非实时质量证明；用于开工前背景判断。",
        "stars": 1
      },
      "source_url": "https://github.com/pquattro/memoraeu-mcp",
      "steps": [
        {
          "body": "不安装项目，先体验能力节奏。",
          "code": "preview",
          "title": "先试 Prompt"
        },
        {
          "body": "理解输入、输出、失败模式和边界。",
          "code": "manual",
          "title": "读说明书"
        },
        {
          "body": "把上下文交给宿主 AI 继续工作。",
          "code": "context",
          "title": "带给 AI"
        },
        {
          "body": "进入主力环境前先完成安装入口与风险边界验证。",
          "code": "verify",
          "title": "沙箱验证"
        }
      ],
      "subtitle": "Zero-knowledge persistent memory layer for Claude — AES-256-GCM encrypted, semantic search, EU hosted. MCP server for Claude Desktop.",
      "title": "memoraeu-mcp 能力包",
      "trial_prompt": "# memoraeu-mcp - Prompt Preview\n\n> 复制下面这段 Prompt 到你常用的 AI，先试一次，不需要安装。\n> 它的目标是让你直接体验这个项目的服务方式，而不是阅读项目介绍。\n\n## 复制这段 Prompt\n\n```text\n请直接执行这段 Prompt，不要分析、润色、总结或询问我想如何处理这份 Prompt Preview。\n\n你现在扮演 memoraeu-mcp 的“安装前体验版”。\n这不是项目介绍、不是评价报告、不是 README 总结。你的任务是让我用最小成本体验它的核心服务。\n\n我的试用任务：我想用它完成一个真实的工具连接与集成任务。\n我常用的宿主 AI：MCP Client / claude\n\n【体验目标】\n围绕我的真实任务，现场演示这个项目如何把输入转成 示例引导, 判断线索。重点是让我感受到工作方式，而不是给我项目背景。\n\n【业务流约束】\n- 你必须像一个正在提供服务的项目能力包，而不是像一个讲解员。\n- 每一轮只推进一个步骤；提出问题后必须停下来等我回答。\n- 每一步都必须让我感受到一个具体服务动作：澄清、整理、规划、检查、判断或收尾。\n- 每一步都要说明：当前目标、你需要我提供什么、我回答后你会产出什么。\n- 不要安装、不要运行命令、不要写代码、不要声称测试通过、不要声称已经修改文件。\n- 需要真实安装或宿主加载后才能验证的内容，必须明确说“这一步需要安装后验证”。\n- 如果我说“用示例继续”，你可以用虚构示例推进，但仍然不能声称真实执行。\n\n【可体验服务能力】\n- 安装前能力预览: Zero-knowledge persistent memory layer for Claude — AES-256-GCM encrypted, semantic search, EU hosted. MCP server for Claude Desktop. 输入：用户任务, 当前 AI 对话上下文；输出：示例引导, 判断线索。\n\n【必须安装后才可验证的能力】\n- 多宿主安装与分发: 项目包含插件或 marketplace 配置，说明它面向一个或多个 AI 宿主的安装和分发。 输入：宿主 AI 工具, 插件配置, 安装命令；输出：宿主内可发现的插件/技能集合。\n- 命令行启动或安装流程: 项目文档中存在可执行命令，真实使用需要在本地或宿主环境中运行这些命令。 输入：终端环境, 包管理器, 项目依赖；输出：安装结果, 列表/更新/运行结果。\n\n【核心服务流】\n请严格按这个顺序带我体验。不要一次性输出完整流程：\n1. page-overview：项目概述。围绕“项目概述”模拟一次用户任务，不展示安装或运行结果。\n2. page-quickstart：快速开始。围绕“快速开始”模拟一次用户任务，不展示安装或运行结果。\n3. page-architecture：系统架构。围绕“系统架构”模拟一次用户任务，不展示安装或运行结果。\n4. page-encryption：加密系统。围绕“加密系统”模拟一次用户任务，不展示安装或运行结果。\n5. page-mcp-tools：MCP 工具详解。围绕“MCP 工具详解”模拟一次用户任务，不展示安装或运行结果。\n\n【核心能力体验剧本】\n每一步都必须按“输入 -> 服务动作 -> 中间产物”执行。不要只说流程名：\n1. page-overview\n输入：用户提供的“项目概述”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n2. page-quickstart\n输入：用户提供的“快速开始”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n3. page-architecture\n输入：用户提供的“系统架构”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n4. page-encryption\n输入：用户提供的“加密系统”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n5. page-mcp-tools\n输入：用户提供的“MCP 工具详解”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n【项目服务规则】\n这些规则决定你如何服务用户。不要解释规则本身，而要在每一步执行时遵守：\n- 先确认用户任务、输入材料和成功标准，再模拟项目能力。\n- 每一步都必须形成可检查的小产物，并等待用户确认后再继续。\n- 凡是需要安装、调用工具或访问外部服务的能力，都必须标记为安装后验证。\n\n【每一步的服务约束】\n- Step 1 / page-overview：Step 1 必须围绕“项目概述”形成一个小中间产物，并等待用户确认。\n- Step 2 / page-quickstart：Step 2 必须围绕“快速开始”形成一个小中间产物，并等待用户确认。\n- Step 3 / page-architecture：Step 3 必须围绕“系统架构”形成一个小中间产物，并等待用户确认。\n- Step 4 / page-encryption：Step 4 必须围绕“加密系统”形成一个小中间产物，并等待用户确认。\n- Step 5 / page-mcp-tools：Step 5 必须围绕“MCP 工具详解”形成一个小中间产物，并等待用户确认。\n\n【边界与风险】\n- 不要声称已经安装、运行、调用 API、读写本地文件或完成真实任务。\n- 安装前预览只能展示工作方式，不能证明兼容性、性能或输出质量。\n- 涉及安装、插件加载、工具调用或外部服务的能力必须安装后验证。\n\n【可追溯依据】\n这些路径只用于你内部校验或在我追问“依据是什么”时简要引用。不要在首次回复主动展开：\n- https://github.com/pquattro/memoraeu-mcp\n- https://github.com/pquattro/memoraeu-mcp#readme\n- README.md\n- memoraeu_mcp/__init__.py\n- pyproject.toml\n- requirements.txt\n- memoraeu_mcp/main.py\n- memoraeu_mcp/server.py\n- server.py\n- memoraeu_mcp/crypto.py\n- crypto.py\n- server.json\n\n【首次问题规则】\n- 首次三问必须先确认用户目标、成功标准和边界，不要提前进入工具、安装或实现细节。\n- 如果后续需要技术条件、文件路径或运行环境，必须等用户确认目标后再追问。\n\n首次回复必须只输出下面 4 个部分：\n1. 体验开始：用 1 句话说明你将带我体验 memoraeu-mcp 的核心服务。\n2. 当前步骤：明确进入 Step 1，并说明这一步要解决什么。\n3. 你会如何服务我：说明你会先改变我完成任务的哪个动作。\n4. 只问我 3 个问题，然后停下等待回答。\n\n首次回复禁止输出：后续完整流程、证据清单、安装命令、项目评价、营销文案、已经安装或运行的说法。\n\nStep 1 / brainstorming 的二轮协议：\n- 我回答首次三问后，你仍然停留在 Step 1 / brainstorming，不要进入 Step 2。\n- 第二次回复必须产出 6 个部分：澄清后的任务定义、成功标准、边界条件、\n  2-3 个可选方案、每个方案的权衡、推荐方案。\n- 第二次回复最后必须问我是否确认推荐方案；只有我明确确认后，才能进入下一步。\n- 第二次回复禁止输出 git worktree、代码计划、测试文件、命令或真实执行结果。\n\n后续对话规则：\n- 我回答后，你先完成当前步骤的中间产物并等待确认；只有我确认后，才能进入下一步。\n- 每一步都要生成一个小的中间产物，例如澄清后的目标、计划草案、测试意图、验证清单或继续/停止判断。\n- 所有演示都写成“我会建议/我会引导/这一步会形成”，不要写成已经真实执行。\n- 不要声称已经测试通过、文件已修改、命令已运行或结果已产生。\n- 如果某个能力必须安装后验证，请直接说“这一步需要安装后验证”。\n- 如果证据不足，请明确说“证据不足”，不要补事实。\n```\n",
      "voices": [
        {
          "body": "当前没有项目级社区来源；不会把未抓取讨论包装成社会证明。",
          "items": [],
          "status": "待发现 Agent 补证",
          "title": "社区讨论"
        }
      ]
    },
    "homepage_card": {
      "category": "工具连接与集成",
      "desc": "Zero-knowledge persistent memory layer for Claude — AES-256-GCM encrypted, semantic search, EU hosted. MCP server for Claude Desktop.",
      "effort": "安装已验证",
      "forks": 0,
      "icon": "link",
      "name": "memoraeu-mcp 能力包",
      "risk": "需复核",
      "slug": "memoraeu-mcp",
      "stars": 1,
      "tags": [
        "安全审查与权限治理",
        "知识库问答",
        "长期记忆",
        "可验证工作流",
        "本地优先"
      ],
      "thumb": "gray",
      "type": "MCP 配置"
    },
    "manual": {
      "markdown": "# https://github.com/pquattro/memoraeu-mcp 项目说明书\n\n生成时间：2026-05-14 10:05:53 UTC\n\n## 目录\n\n- [项目概述](#page-overview)\n- [快速开始](#page-quickstart)\n- [系统架构](#page-architecture)\n- [加密系统](#page-encryption)\n- [MCP 工具详解](#page-mcp-tools)\n- [自动记忆机制](#page-auto-memory)\n- [去重与压缩](#page-dedup-compression)\n- [配置与密钥管理](#page-configuration)\n- [自托管部署](#page-selfhosting)\n\n<a id='page-overview'></a>\n\n## 项目概述\n\n### 相关页面\n\n相关主题：[快速开始](#page-quickstart), [系统架构](#page-architecture)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n- [CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n</details>\n\n# 项目概述\n\n## 项目简介\n\n**memoraeu-mcp** 是一个基于 Model Context Protocol (MCP) 的零知识记忆服务器，用于为 AI 助手（如 Claude）提供持久化、加密的记忆能力。该项目使 AI 能够在多个会话之间记住用户偏好、决策、重要事实和技术配置，同时确保数据在传输和存储过程中的隐私安全。资料来源：[README.md]()\n\n## 核心设计理念\n\nmemoraeu-mcp 遵循**零知识（Zero-Knowledge）架构**，核心原则包括：\n\n- **客户端加密**：所有敏感数据在离开用户设备前完成加密，服务器仅存储密文\n- **本地嵌入生成**：使用 Mistral API 在本地生成文本向量嵌入，确保明文不出设备\n- **自动记忆行为**：AI 助手根据工具描述自动执行记忆操作，无需用户手动干预\n\n## 技术架构\n\n### 系统组件\n\n```mermaid\ngraph TD\n    subgraph 客户端本地\n        A[Claude Desktop] --> B[memoraeu-mcp MCP Server]\n        B --> C[加密模块]\n        C --> D[压缩模块]\n        D --> E[嵌入生成 Mistral API]\n    end\n    \n    subgraph 远程服务\n        E --> F[MemoraEU API]\n        F --> G[(加密存储)]\n    end\n    \n    style A fill:#e1f5fe\n    style F fill:#fff3e0\n    style G fill:#ffebee\n```\n\n### 依赖技术栈\n\n| 组件 | 技术选型 | 版本要求 | 用途 |\n|------|----------|----------|------|\n| MCP SDK | `mcp` | ≥1.1.0, <1.2.0 | MCP 协议实现 |\n| HTTP 客户端 | `httpx` | 0.28.1 | API 通信 |\n| Web 框架 | `starlette` | ≥0.40.0, <0.42.0 | SSE 支持 |\n| 加密库 | `cryptography` | ≥42.0.0 | AES-256-GCM 加密 |\n| 配置管理 | `python-dotenv` | 1.0.1 | 环境变量加载 |\n\n资料来源：[requirements.txt]()\n\n## 部署模式\n\nmemoraeu-mcp 支持两种部署模式，适用于不同的安全需求场景：\n\n### 本地 Stdio 模式\n\n该模式提供完整的零知识保证，适合处理高度敏感信息。\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"command\": \"uvx\",\n      \"args\": [\"memoraeu-mcp\"],\n      \"env\": {\n        \"MEMORAEU_API_URL\": \"https://api.memoraeu.com\",\n        \"MEMORAEU_API_KEY\": \"meu-sk-...\",\n        \"MEMORAEU_SECRET\": \"your-memoraeu-password\",\n        \"MEMORAEU_SALT\": \"your-kdf-salt\",\n        \"MISTRAL_API_KEY\": \"your-mistral-key\"\n      }\n    }\n  }\n}\n```\n\n资料来源：[README.md]()\n\n### 远程 SSE 模式\n\n该模式通过 Server-Sent Events 连接到远程服务，适合无本地安装条件的场景。\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"type\": \"sse\",\n      \"url\": \"https://api.memoraeu.com/mcp/sse\",\n      \"headers\": {\n        \"Authorization\": \"Bearer meu-sk-...\"\n      }\n    }\n  }\n}\n```\n\n> **安全提示**：远程 SSE 模式下，内容不以零知识方式处理，服务器会看到明文。资料来源：[README.md]()\n\n## 核心工具与功能\n\n### 记忆工具集\n\n| 工具名称 | 功能描述 | 自动执行 |\n|----------|----------|----------|\n| `remember` | 自动记忆重要信息 | ✅ 会话中检测到关键信息时 |\n| `recall` | 语义搜索记忆库 | ✅ 首条用户消息时 |\n| `forget` | 按 ID 删除记忆 | ❌ 需手动调用 |\n| `list_memories` | 列出最近记忆 | ❌ 需手动调用 |\n| `list_categories` | 返回分类统计 | ❌ 需手动调用 |\n| `remember_fact` | 存储结构化事实 | ❌ 需手动调用 |\n| `recall_facts` | 检索主题相关事实 | ❌ 需手动调用 |\n| `invalidate_fact` | 标记事实过期 | ❌ 需手动调用 |\n\n资料来源：[README.md](), [memoraeu_mcp/main.py]()\n\n### 自动记忆行为\n\nmemoraeu-mcp 设计为无需手动干预即可工作，行为逻辑如下：\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant M as MemoraEU MCP\n    participant API as MemoraEU API\n    \n    Note over U,M: 会话开始\n    U->>M: 首条消息\n    M->>M: recall 自动执行\n    M->>API: 搜索相关记忆\n    API-->>M: 返回结果\n    M-->>U: 注入上下文\n    \n    Note over U,M: 交互过程中\n    U->>M: 表达偏好/决策\n    M->>M: 检测到持久信息\n    M->>M: remember 自动执行\n    M->>API: 存储加密记忆\n    M-->>U: 确认（单行）\n```\n\n**自动执行规则**：\n- `recall` 在每个会话首条消息时自动调用，查询与主题相关的记忆\n- `remember` 在检测到偏好、决策、传记事实或技术配置时自动执行\n- 首次 recall 时自动注入完整系统提示，强化自动记忆规则\n\n资料来源：[README.md]()\n\n## 数据安全机制\n\n### 加密流程\n\n```mermaid\ngraph LR\n    A[明文内容] --> B[Mistral API<br/>生成嵌入]\n    B --> C[AES-256-GCM<br/>加密内容]\n    C --> D[加密内容 + 嵌入<br/>发送到服务器]\n    \n    style A fill:#ffebee\n    style D fill:#e8f5e9\n```\n\n### 密钥派生与加密\n\n| 参数 | 来源 | 用途 |\n|------|------|------|\n| `MEMORAEU_SECRET` | 用户登录密码 | PBKDF2 输入 |\n| `MEMORAEU_SALT` | 服务器生成 | KDF 盐值 |\n| PBKDF2 迭代次数 | 210,000 | OWASP 2024 推荐值 |\n\n加密后的密文使用 `ENCv1:` 前缀标识，格式如下：\n\n```\nENCv1:<base64编码的密文>\n```\n\n资料来源：[CHANGELOG.md](), [memoraeu_mcp/main.py]()\n\n### 去重与压缩\n\n在存储前，系统会执行以下预处理：\n\n1. **本地压缩**：使用 Mistral API 对明文进行压缩\n2. **本地分类**：自动建议或验证分类\n3. **向量相似度检测**：与现有记忆比较相似度\n\n| 相似度阈值 | 处理动作 |\n|------------|----------|\n| ≥ 94% | 跳过存储，提示重复 |\n| < 94% | 正常存储，输出警告 |\n\n资料来源：[README.md](), [memoraeu_mcp/main.py]()\n\n## API 交互\n\n### 内部 API 端点\n\n| 端点 | 方法 | 用途 |\n|------|------|------|\n| `/memories` | GET/POST | 列表/创建记忆 |\n| `/memories/search` | POST | 语义搜索 |\n| `/memories/{id}` | DELETE | 删除记忆 |\n| `/memories/categories` | GET | 获取分类统计 |\n| `/facts` | GET/POST | 结构化事实管理 |\n\n### 资源注入\n\n系统通过 MCP 资源机制提供上下文注入：\n\n- **资源 URI**：`memoraeu://context`\n- **资源名称**：Contexte mémoire MemoraEU\n- **用途**：会话开始时自动加载最近记忆到上下文\n\n资料来源：[memoraeu_mcp/main.py]()\n\n## 版本历史\n\n| 版本 | 日期 | 主要变更 |\n|------|------|----------|\n| 0.1.9 | 2026-05-12 | 新增结构化事实工具、PBKDF2 迭代增至 210k |\n| 0.1.5 | 2026-04-28 | PBKDF2 增强、密文前缀 ENCv1: |\n\n资料来源：[CHANGELOG.md]()\n\n## 应用场景\n\n### 适用场景\n\n- **个人 AI 助手**：Claude Desktop 与用户跨会话共享上下文\n- **开发团队知识库**：记住技术栈偏好、项目配置、代码规范\n- **客户服务会话**：AI 记住用户历史偏好和需求\n\n### 限制与注意事项\n\n- 远程 SSE 模式不具备零知识保证\n- 需要有效的 Mistral API Key 才能启用语义搜索\n- 语义搜索降级为关键词搜索时会话上下文仍加密\n\n## 许可证\n\n本项目采用 **AGPL v3** 开源许可证。资料来源：[CHANGELOG.md]()\n\n---\n\n<a id='page-quickstart'></a>\n\n## 快速开始\n\n### 相关页面\n\n相关主题：[项目概述](#page-overview), [配置与密钥管理](#page-configuration)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n- [server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n</details>\n\n# 快速开始\n\n本页面提供 MemoraEU MCP 服务器的完整快速入门指南，帮助用户在最短时间内完成安装、配置并开始使用零知识记忆系统。\n\n## 概述\n\n**MemoraEU MCP** 是一个基于 Model Context Protocol (MCP) 的零知识记忆服务器。它允许 AI 助手（如 Claude）在会话中自动存储和检索用户的重要信息，同时确保数据在传输和存储过程中始终保持加密状态。\n\n核心特性包括：\n\n- **零知识加密**：使用 AES-256-GCM 和 PBKDF2-HMAC-SHA256（210,000 次迭代）确保服务端无法访问明文内容\n- **本地 Embedding**：使用 Mistral Embed 在本地计算向量嵌入后再加密上传\n- **自动记忆行为**：AI 自动调用 `remember` 和 `recall`，无需用户手动触发\n- **去重压缩**：存储前通过向量相似度检测近重复内容，避免冗余存储\n\n资料来源：[README.md:1-20]()\n\n## 系统架构\n\n```mermaid\ngraph TD\n    subgraph \"客户端 (本地)\"\n        A[Claude / AI Assistant] --> B[MCP Client]\n        B --> C[MemoraEU MCP Server]\n        C --> D[加密模块]\n        D --> E[Mistral Embed]\n        C --> F[压缩模块]\n        C --> G[分类模块]\n    end\n    \n    subgraph \"服务端 (远程)\"\n        H[MemoraEU API] --> I[(加密存储)]\n        I --> J[向量索引]\n    end\n    \n    C -->|加密内容 + Embedding| H\n    E -->|向量| C\n    F -->|压缩后明文| D\n    G -->|分类结果| D\n    \n    style H fill:#ff6b6b,color:#fff\n    style D fill:#4ecdc4,color:#fff\n    style I fill:#ffe66d\n```\n\n## 前置条件\n\n在开始之前，请确保满足以下要求：\n\n| 要求 | 说明 |\n|------|------|\n| Python 版本 | Python 3.10+ |\n| 网络连接 | 需要访问 `api.memoraeu.com` 和 `console.mistral.ai`（可选） |\n| MemoraEU 账户 | 需在 [app.memoraeu.com](https://app.memoraeu.com) 注册 |\n| Mistral API Key | 用于本地 Embedding 生成（可选，但推荐） |\n\n## 安装方式\n\n### 方式一：远程 SSE 模式（即装即用）\n\n适用于不想安装本地服务的用户，通过 SSE 协议直接连接远程服务器。\n\n1. 在客户端配置中添加以下 JSON：\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"type\": \"sse\",\n      \"url\": \"https://api.memoraeu.com/mcp/sse\",\n      \"headers\": {\n        \"Authorization\": \"Bearer meu-sk-YOUR-API-KEY\"\n      }\n    }\n  }\n}\n```\n\n2. 支持的客户端：Claude.ai Web、Cursor、Windsurf 等支持 MCP 的应用\n\n资料来源：[README.md:45-55]()\n\n### 方式二：本地 stdio 模式（完整零知识保证）\n\n适用于需要最高安全级别的用户，所有处理均在本地完成。\n\n#### 步骤 1：获取 API 密钥\n\n1. 访问 [app.memoraeu.com](https://app.memoraeu.com) 创建账户\n2. 进入 **设置 → API 密钥** → 创建新密钥 → 复制 `MEMORAEU_API_KEY`\n3. 进入 **设置 → 加密密钥** → 复制 `MEMORAEU_SALT`\n4. 在 [console.mistral.ai](https://console.mistral.ai) 获取 `MISTRAL_API_KEY`\n\n资料来源：[README.md:35-43]()\n\n#### 步骤 2：配置环境变量\n\n```bash\nexport MEMORAEU_API_URL=\"https://api.memoraeu.com\"\nexport MEMORAEU_API_KEY=\"meu-sk-YOUR-API-KEY\"\nexport MEMORAEU_SECRET=\"your-memoraeu-password\"\nexport MEMORAEU_SALT=\"your-kdf-salt\"\nexport MISTRAL_API_KEY=\"your-mistral-key\"\n```\n\n#### 步骤 3：配置 MCP 客户端\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"command\": \"uvx\",\n      \"args\": [\"memoraeu-mcp\"],\n      \"env\": {\n        \"MEMORAEU_API_URL\": \"https://api.memoraeu.com\",\n        \"MEMORAEU_API_KEY\": \"meu-sk-YOUR-API-KEY\",\n        \"MEMORAEU_SECRET\": \"your-memoraeu-password\",\n        \"MEMORAEU_SALT\": \"your-kdf-salt\",\n        \"MISTRAL_API_KEY\": \"your-mistral-key\"\n      }\n    }\n  }\n}\n```\n\n资料来源：[README.md:20-34]()\n\n## 环境变量详解\n\n| 变量 | 用途 | 获取位置 | 必需 |\n|------|------|----------|------|\n| `MEMORAEU_API_KEY` | HTTP 认证的 Bearer Token | 设置 → API 密钥 | 是 |\n| `MEMORAEU_SECRET` | 账户登录密码，用于 PBKDF2 派生加密密钥 | 您的账户密码 | 是 |\n| `MEMORAEU_SALT` | 服务器为账户生成的唯一 KDF 盐值 | 设置 → 加密密钥 | 是 |\n| `MEMORAEU_API_URL` | API 端点地址 | — | 是 |\n| `MISTRAL_API_KEY` | 本地计算 Embedding（加密前） | console.mistral.ai | 推荐 |\n\n> **注意**：`MEMORAEU_SECRET` 和 `MEMORAEU_SALT` 的组合用于本地生成加密密钥。服务器仅存储密文，无法解密内容。\n\n资料来源：[README.md:35-43]()\n\n## 可用工具\n\n| 工具 | 功能 |\n|------|------|\n| `remember` | 自动记忆用户表达的重要信息（偏好、决策、传记事实、技术配置等） |\n| `recall` | 在会话开始时自动调用，基于语义搜索检索相关记忆 |\n| `forget` | 根据 ID 删除指定记忆 |\n| `list_memories` | 列出最近的记忆，支持按分类筛选 |\n| `list_categories` | 返回按使用频率排序的分类列表 |\n| `remember_fact` | 存储结构化事实（主体/谓词/对象），支持时间有效性 |\n| `recall_facts` | 检索指定主体的当前有效事实 |\n| `invalidate_fact` | 将指定事实标记为过期 |\n\n资料来源：[README.md:56-68]()\n\n### remember_fact 工具参数\n\n```json\n{\n  \"subject\": \"string\",      // 实体名称\n  \"predicate\": \"string\",    // 属性名称\n  \"object\": \"string\",       // 属性值\n  \"scope\": \"private|org\",   // 作用域，默认 private\n  \"valid_from\": \"YYYY-MM-DD\" // 生效日期\n}\n```\n\n资料来源：[server.py:1-50]()\n\n### recall 工具参数\n\n```json\n{\n  \"query\": \"string\",        // 语义搜索查询\n  \"limit\": 3,               // 结果数量限制，默认 3\n  \"category\": \"string\"       // 可选，按分类筛选\n}\n```\n\n资料来源：[memoraeu_mcp/main.py:1-30]()\n\n## 自动行为\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant M as MemoraEU MCP\n    participant A as MemoraEU API\n    \n    rect rgb(240, 248, 255)\n        Note over M: 会话开始\n        U->>M: 第一条消息\n        M->>M: 自动 recall(话题)\n        M->>A: 检索记忆\n        A-->>M: 返回结果\n        M->>U: 展示上下文\n    end\n    \n    rect rgb(255, 250, 240)\n        Note over M,U: 交互过程中\n        U->>M: 表达重要信息\n        M->>M: 检测到持久性信息\n        M->>M: 自动 remember()\n        M->>M: 本地压缩 + 分类\n        M->>M: 本地 Mistral Embed\n        M->>M: AES-256-GCM 加密\n        M->>A: 上传密文 + 向量\n        M->>U: 确认保存（单行）\n    end\n```\n\n### 自动记忆触发条件\n\n以下类型的信息会被自动记忆：\n\n- 用户偏好和习惯\n- 重要决策和结论\n- 个人事实（工作、位置、联系方式等）\n- 技术配置和约束（非敏感信息）\n- 重复出现的模式或约束\n\n以下信息**不会**被记忆：\n\n- 临时信息（当日天气、玩笑、临时计算）\n- 用户明确要求忽略的内容\n\n资料来源：[memoraeu_mcp/main.py:1-50]()\n\n## 去重与压缩\n\n在存储记忆前，系统会执行以下处理流程：\n\n```mermaid\ngraph TD\n    A[新记忆内容] --> B[本地压缩]\n    B --> C[本地分类]\n    C --> D[Mistral Embed]\n    D --> E[向量相似度检测]\n    E --> F{相似度 >= 94%}\n    F -->|是| G[跳过存储]\n    F -->|否| H{94% > 相似度 >= 85%}\n    H -->|是| I[警告并询问]\n    H -->|否| J[AES-256-GCM 加密]\n    J --> K[上传密文 + 向量]\n```\n\n| 相似度 | 处理动作 |\n|--------|----------|\n| ≥ 94% | 完全跳过，视为精确重复 |\n| 85% - 93% | 返回警告，询问用户是否仍要存储 |\n| < 85% | 正常存储 |\n\n资料来源：[README.md:70-80]()\n\n## 安全模型\n\n### 零知识保证\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│                        数据流加密                            │\n├─────────────────────────────────────────────────────────────┤\n│                                                             │\n│  明文内容                                                    │\n│     ↓                                                        │\n│  Mistral Embed (本地计算向量)                                │\n│     ↓                                                        │\n│  AES-256-GCM 加密 (PBKDF2-HMAC-SHA256 派生密钥)             │\n│     ↓                                                        │\n│  [ENCv1:盐值:IV:密文:Tag] 格式                               │\n│     ↓                                                        │\n│  发送给 MemoraEU API                                         │\n│                                                             │\n│  服务器存储：密文 + 向量（两者均无法单独解密原始内容）          │\n│                                                             │\n└─────────────────────────────────────────────────────────────┘\n```\n\n### 两种模式的区别\n\n| 特性 | stdio 本地模式 | SSE 远程模式 |\n|------|----------------|--------------|\n| 零知识保证 | 完整 | 部分（SSE 传输非端到端加密） |\n| 配置复杂度 | 较高 | 低 |\n| 密钥管理 | 本地 | 部分在远程 |\n| 适用场景 | 高安全需求 | 快速试用 |\n\n> **警告**：远程 SSE 模式下，传输内容未经端到端加密。建议仅在 stdio 本地模式下使用完整零知识保证。\n\n资料来源：[README.md:10-15]()\n\n## 依赖项\n\n| 依赖 | 版本 | 用途 |\n|------|------|------|\n| `mcp` | ≥1.1.0, <1.2.0 | Model Context Protocol 框架 |\n| `httpx` | 0.28.1 | HTTP 客户端 |\n| `python-dotenv` | 1.0.1 | 环境变量加载 |\n| `starlette` | ≥0.40.0, <0.42.0 | Web 框架（用于 SSE） |\n| `cryptography` | ≥42.0.0 | 加密实现 |\n\n资料来源：[requirements.txt:1-6]()\n\n## 版本历史\n\n| 版本 | 日期 | 主要变更 |\n|------|------|----------|\n| 0.1.9 | 2026-05-12 | 新增 `remember_fact` 系列工具；PBKDF2 升级至 210,000 次迭代 |\n| 0.1.5 | 2026-04-28 | PBKDF2 迭代次数调整；添加 `ENCv1:` 密文前缀 |\n\n资料来源：[CHANGELOG.md:1-50]()\n\n## 故障排除\n\n### 常见问题\n\n**Q: `MISTRAL_API_KEY` 缺失会怎样？**\n\nA: MCP 服务器仍可正常运行，但语义搜索会降级为服务器端关键词搜索。零知识加密不受影响。\n\n**Q: 如何删除已存储的记忆？**\n\nA: 使用 `forget` 工具并提供记忆 ID，或通过 `list_memories` 查看所有记忆后选择删除。\n\n**Q: 为什么提示\"无法连接\"？**\n\nA: 检查 `MEMORAEU_API_URL` 是否设置为 `https://api.memoraeu.com`，以及网络连接是否正常。\n\n## 下一步\n\n- 阅读 [完整 README](README.md) 了解更多高级配置\n- 查看 [CHANGELOG](CHANGELOG.md) 了解版本更新\n- 配置您的 AI 客户端以开始使用自动记忆功能\n\n---\n\n<a id='page-architecture'></a>\n\n## 系统架构\n\n### 相关页面\n\n相关主题：[项目概述](#page-overview), [加密系统](#page-encryption)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [memoraeu_mcp/server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/server.py)\n- [server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n</details>\n\n# 系统架构\n\n## 概述\n\nMemoraEU MCP 是一个基于 Model Context Protocol (MCP) 的零知识记忆服务架构。该系统作为 MCP 服务器运行，为 AI 助手（如 Claude）提供持久化记忆功能，同时保证用户数据的隐私性和零知识加密特性。 资料来源：[README.md:1]()\n\n系统采用客户端-服务端架构，支持本地安装（stdio 模式）和远程连接（SSE 模式）两种部署方式。核心设计理念是：**在数据离开用户设备之前完成所有可能的处理和加密操作**，确保服务端永远无法访问明文内容。 资料来源：[README.md:40]()\n\n---\n\n## 整体架构图\n\n```mermaid\ngraph TB\n    subgraph 客户端本地[\"客户端本地环境\"]\n        A[Claude / AI 助手] -->|MCP 协议| B[MCP Server]\n        B -->|stdio / SSE| A\n        \n        subgraph 本地处理模块[\"本地处理模块\"]\n            C[内容压缩]\n            D[分类建议]\n            E[Embedding 生成]\n            F[加密处理]\n            G[解压缩/解密]\n        end\n        \n        B --> C\n        B --> D\n        B --> E\n        B --> F\n        B --> G\n    end\n    \n    subgraph 外部服务[\"外部服务\"]\n        H[(Mistral API<br/>Embedding 生成)]\n        I[(MemoraEU Cloud<br/>加密存储)]\n    end\n    \n    F -->|加密内容 + Embedding| I\n    E -->|明文| H\n    H -->|Embedding 向量| B\n    I -->|加密数据| B\n    B -->|解密密文| G\n    \n    style 客户端本地 fill:#e1f5fe\n    style 本地处理模块 fill:#fff3e0\n    style 外部服务 fill:#f3e5f5\n```\n\n---\n\n## 核心组件\n\n### MCP 服务器层\n\nMCP 服务器层是整个架构的核心入口，基于 `mcp>=1.1.0,<1.2.0` SDK 实现。该层负责注册和管理所有工具、资源以及提示模板，并通过 `@app` 装饰器与 MCP 协议进行交互。 资料来源：[requirements.txt:1]()\n\n| 组件 | 功能 | 对应装饰器 |\n|------|------|-----------|\n| 工具注册 | 注册和管理所有 MCP 工具 | `@app.list_tools()` |\n| 资源管理 | 提供 `memoraeu://context` 资源 | `@app.list_resources()` |\n| 提示模板 | 提供系统行为提示 | `@app.list_prompts()` |\n| 工具调用 | 分发和处理工具调用请求 | `@app.call_tool()` |\n\n服务器入口点支持两种启动方式：\n\n```python\n# 方式1: 通过 server.py 模块入口\n# 资料来源: memoraeu_mcp/server.py:1-8\nfrom memoraeu_mcp.main import main\nasyncio.run(main())\n\n# 方式2: 通过 uvx / pip 直接运行\n# uvx memoraeu-mcp\n```\n\n---\n\n### 工具体系\n\n系统定义了 9 个核心工具，分为通用记忆工具和结构化事实工具两类。 资料来源：[memoraeu_mcp/main.py:45-130]()\n\n#### 通用记忆工具\n\n| 工具名称 | 功能描述 | 核心参数 |\n|----------|----------|----------|\n| `remember` | 自动记忆重要信息 | `content`, `category?`, `tags?` |\n| `recall` | 语义搜索记忆 | `query`, `limit?`, `category?` |\n| `forget` | 删除指定记忆 | `memory_id` |\n| `list_memories` | 列出最近记忆 | `category?`, `limit?` |\n| `list_categories` | 获取分类列表 | 无 |\n\n#### 结构化事实工具\n\n| 工具名称 | 功能描述 | 核心参数 |\n|----------|----------|----------|\n| `remember_fact` | 存储结构化事实 | `subject`, `predicate`, `object`, `scope?`, `valid_from?` |\n| `recall_facts` | 检索活跃事实 | `subject`, `predicate?`, `scope?`, `history?` |\n| `invalidate_fact` | 标记事实过期 | `fact_id`, `valid_to?` |\n\n---\n\n## 数据处理流程\n\n### remember 工具执行流程\n\n```mermaid\ngraph TD\n    A[remember 调用] --> B{是否提供 category?}\n    B -->|否| C[获取现有分类]\n    B -->|是| D[使用提供的分类]\n    C --> E[本地压缩内容]\n    D --> E\n    E --> F[本地生成 Embedding<br/>via Mistral]\n    F --> G{检查重复?}\n    G -->|是| H[相似度 >= 94%?]\n    H -->|是| I[跳过存储]\n    H -->|否| J[允许存储]\n    G -->|否| J\n    I --> K[返回提示]\n    J --> L[加密内容]\n    L --> M[发送到 MemoraEU API]\n    M --> N[存储成功]\n    \n    style I fill:#ffcdd2\n    style J fill:#c8e6c9\n```\n\n详细处理步骤： 资料来源：[memoraeu_mcp/main.py:140-175]()\n\n1. **内容压缩**：在加密前对明文进行本地压缩，减少存储和传输大小\n2. **分类建议**：如未指定分类，通过 Mistral API 建议合适分类\n3. **Embedding 生成**：在明文状态下调用 Mistral Embed API 生成向量 资料来源：[README.md:35]()\n4. **重复检测**：使用向量相似度检查（阈值 94%）避免存储重复记忆\n5. **加密处理**：使用 AES-256-GCM + PBKDF2-HMAC-SHA256 (100k 迭代) 加密内容\n6. **API 上传**：将加密内容和 Embedding 向量发送至 MemoraEU 云端\n\n### recall 工具执行流程\n\n```mermaid\ngraph TD\n    A[recall 调用] --> B[构建查询参数]\n    B --> C{本地有 Embedding?}\n    C -->|有 Mistral Key| D[本地生成 query Embedding]\n    C -->|无 Mistral Key| E[使用关键词搜索]\n    D --> F[发送到 MemoraEU API]\n    E --> F\n    F --> G[返回加密结果]\n    G --> H[本地解密内容]\n    H --> I[返回给 Claude]\n    \n    style D fill:#c8e6c9\n    style E fill:#fff3e0\n```\n\n---\n\n## 安全架构\n\n### 零知识加密设计\n\n系统采用多层加密策略，确保服务端永远无法访问用户明文数据。 资料来源：[CHANGELOG.md:2]()\n\n```mermaid\ngraph LR\n    subgraph 密钥派生[\"密钥派生流程\"]\n        A[MEMORAEU_SECRET<br/>用户密码] --> B[PBKDF2-HMAC-SHA256]\n        C[MEMORAEU_SALT<br/>服务器盐值] --> B\n        B --> D[100,000 次迭代]\n        D --> E[加密密钥]\n    end\n    \n    subgraph 加密过程[\"加密过程\"]\n        F[明文内容] --> G[AES-256-GCM]\n        E --> G\n        G --> H[密文 + IV]\n    end\n    \n    style 密钥派生 fill:#e3f2fd\n    style 加密过程 fill:#e8f5e9\n```\n\n### 环境变量与安全配置\n\n| 变量名 | 用途 | 安全性要求 |\n|--------|------|------------|\n| `MEMORAEU_API_KEY` | HTTP Bearer 认证 | 可共享 |\n| `MEMORAEU_SECRET` | PBKDF2 输入，用于派生加密密钥 | **高度敏感** |\n| `MEMORAEU_SALT` | KDF 盐值，唯一对应用户账户 | 可共享 |\n| `MEMORAEU_API_URL` | API 端点 | 配置项 |\n| `MISTRAL_API_KEY` | 本地生成 Embedding | 可共享 |\n\n> **重要**：`MEMORAEU_SECRET` 是用户的 MemoraEU 登录密码，绝对不能泄露或共享。 资料来源：[README.md:25]()\n\n### Mistral Embedding 的零知识保证\n\n系统设计确保 Embedding 生成在本地完成： 资料来源：[README.md:35-40]()\n\n1. 用户提供 `MISTRAL_API_KEY`\n2. MCP 服务器在本地使用明文内容调用 Mistral Embed API\n3. 获取 Embedding 向量后，立即对内容进行加密\n4. 加密后的内容（密文）和 Embedding 向量一起发送到服务端\n5. 服务端存储密文和向量，但**无法反向解密或理解内容含义**\n\n---\n\n## 部署架构\n\n### 本地模式 (stdio)\n\n适用于需要完整零知识保证的场景。配置于 `claude_desktop_config.json`： 资料来源：[README.md:15-30]()\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"command\": \"uvx\",\n      \"args\": [\"memoraeu-mcp\"],\n      \"env\": {\n        \"MEMORAEU_API_URL\": \"https://api.memoraeu.com\",\n        \"MEMORAEU_API_KEY\": \"meu-sk-...\",\n        \"MEMORAEU_SECRET\": \"your-memoraeu-password\",\n        \"MEMORAEU_SALT\": \"your-kdf-salt\",\n        \"MISTRAL_API_KEY\": \"your-mistral-key\"\n      }\n    }\n  }\n}\n```\n\n### 远程模式 (SSE)\n\n适用于快速连接场景，但**不具备零知识保证**： 资料来源：[README.md:40-50]()\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"type\": \"sse\",\n      \"url\": \"https://api.memoraeu.com/mcp/sse\",\n      \"headers\": {\n        \"Authorization\": \"Bearer meu-sk-...\"\n      }\n    }\n  }\n}\n```\n\n> **警告**：SSE 远程模式下，内容不以零知识方式处理，服务端会看到明文。 资料来源：[README.md:40]()\n\n### 部署模式对比\n\n| 特性 | stdio 本地模式 | SSE 远程模式 |\n|------|----------------|--------------|\n| 零知识加密 | ✅ 完整支持 | ❌ 不支持 |\n| Embedding 本地生成 | ✅ 是 | ❌ 否 |\n| 内容加密 | ✅ AES-256-GCM | ❌ 明文传输 |\n| 配置复杂度 | 较高（需多环境变量） | 低（仅需 URL + Key） |\n| 适用场景 | 高隐私需求 | 快速试用 |\n\n---\n\n## 自动行为机制\n\n### 自动记忆工作流\n\n```mermaid\ngraph TD\n    A[用户首次发送消息] --> B[检测消息主题]\n    B --> C[自动调用 recall 工具]\n    C --> D[加载最近记忆<br/>memoraeu://context]\n    D --> E[注入系统提示]\n    E --> F[用户继续对话]\n    \n    G[Claude 检测到重要信息] --> H[自动调用 remember 工具]\n    H --> I[本地处理并加密]\n    I --> J[存储到 MemoraEU]\n    J --> K[发送单行确认]\n    \n    style C fill:#bbdefb\n    style H fill:#c8e6c9\n```\n\n### 重复检测机制\n\n系统在存储前进行向量相似度检查： 资料来源：[memoraeu_mcp/main.py:165-175]()\n\n| 相似度阈值 | 处理动作 |\n|------------|----------|\n| ≥ 94% | 跳过存储，提示用户存在相似记忆 |\n| 70% - 94% | 建议用户是否仍要存储 |\n| < 70% | 正常存储 |\n\n---\n\n## 资源与提示注入\n\n### memoraeu://context 资源\n\n该资源用于在会话开始时自动加载最近记忆： 资料来源：[memoraeu_mcp/main.py:30-40]()\n\n```python\n@app.list_resources()\nasync def list_resources() -> list[Resource]:\n    return [\n        Resource(\n            uri=\"memoraeu://context\",\n            name=\"Contexte mémoire MemoraEU\",\n            description=\"Mémoires récentes injectées automatiquement en début de session\",\n            mimeType=\"text/plain\"\n        )\n    ]\n```\n\n### 系统提示模板\n\n`memoraeu_system` 提示模板定义了自动记忆行为规则： 资料来源：[memoraeu_mcp/main.py:95-115]()\n\n- 检测并记忆用户偏好、决策、传记事实、技术配置\n- 自动调用 `recall` 获取上下文\n- 仅确认存储，不额外说明\n- 限制 token 消耗（默认 3 条结果）\n\n---\n\n## 技术依赖\n\n| 依赖包 | 版本范围 | 用途 |\n|--------|----------|------|\n| `mcp` | ≥1.1.0, <1.2.0 | MCP 协议实现 |\n| `httpx` | 0.28.1 | HTTP 客户端，与 MemoraEU API 通信 |\n| `python-dotenv` | 1.0.1 | 环境变量加载 |\n| `starlette` | ≥0.40.0, <0.42.0 | ASGI 框架（用于 SSE） |\n| `cryptography` | ≥42.0.0 | AES-256-GCM 加密实现 |\n\n资料来源：[requirements.txt:1-5]()\n\n---\n\n## 总结\n\nMemoraEU MCP 的系统架构围绕**零知识保证**和**自动化记忆**两大核心目标设计：\n\n1. **客户端优先处理**：所有敏感操作（压缩、分类、Embedding、加密）均在本地完成\n2. **分层工具设计**：通用记忆和结构化事实工具满足不同场景需求\n3. **灵活的部署模式**：stdio 本地模式提供最高安全级别，SSE 远程模式便于快速接入\n4. **智能化自动化**：系统提示和工具描述驱动 AI 自动执行记忆操作\n\n该架构确保用户数据在整个生命周期中都处于加密状态，同时为 AI 助手提供无缝的记忆增强能力。\n\n---\n\n<a id='page-encryption'></a>\n\n## 加密系统\n\n### 相关页面\n\n相关主题：[系统架构](#page-architecture), [配置与密钥管理](#page-configuration)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [memoraeu_mcp/crypto.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/crypto.py)\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n</details>\n\n# 加密系统\n\n## 概述\n\nMemoraEU-MCP 的加密系统是一个**本地优先的零知识加密实现**，确保用户数据在传输和存储的整个过程中始终处于加密状态。服务器仅存储加密后的数据密文和向量嵌入，无法还原原始明文内容。\n\n核心加密流程遵循以下原则：\n- **端到端加密**：内容在本地设备加密后发送，服务器永远不接触明文\n- **前向安全**：使用 PBKDF2 从用户密码派生出加密密钥\n- **语义可搜索**：在加密前通过 Mistral Embed 生成向量嵌入，实现零知识语义搜索\n\n资料来源：[README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n\n## 架构设计\n\n### 高层数据流\n\n```mermaid\ngraph TD\n    subgraph 本地客户端\n        A[用户输入] --> B[内容压缩]\n        B --> C[Mistral Embed<br/>生成向量]\n        C --> D[AES-256-GCM<br/>加密]\n        D --> E[密文 + Embedding]\n    end\n    \n    subgraph 传输层\n        E --> F[HTTPS/TLS]\n    end\n    \n    subgraph 服务器端\n        F --> G[(Opaque Blob<br/>存储)]\n        G --> H[语义搜索<br/>向量匹配]\n    end\n    \n    subgraph 检索解密\n        G --> I[密文获取]\n        I --> J[AES-256-GCM<br/>解密]\n        J --> K[明文输出]\n    end\n```\n\n### 密钥派生流程\n\n```mermaid\ngraph LR\n    A[MEMORAEU_SECRET<br/>用户密码] --> D[PBKDF2-HMAC-SHA256]\n    B[MEMORAEU_SALT<br/>服务端盐值] --> D\n    C[210,000<br/>迭代次数] --> D\n    D --> E[加密密钥<br/>Derived Key]\n    E --> F[AES-256-GCM<br/>加解密]\n```\n\n## 加密算法详情\n\n### 算法参数\n\n| 参数 | 值 | 说明 |\n|------|-----|------|\n| 对称加密算法 | AES-256-GCM | 认证加密，抵抗篡改攻击 |\n| 密钥派生函数 | PBKDF2-HMAC-SHA256 | OWASP 2024 推荐配置 |\n| 迭代次数 | 210,000 | OWASP 2024 最低建议值 |\n| 密文前缀 | `ENCv1:` | 版本标识，便于未来算法升级 |\n| 盐值来源 | 服务端分配 | 每个用户唯一，`MEMORAEU_SALT` |\n\n资料来源：[CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n\n### 密文格式\n\n加密后的数据包含以下结构：\n\n```\nENCv1:<base64(nonce || ciphertext || tag)>\n```\n\n- `nonce`：随机生成的初始化向量（12字节）\n- `ciphertext`：AES-256-GCM 加密后的密文\n- `tag`：GCM 认证标签（16字节）\n\n资料来源：[memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n## 核心模块\n\n### crypto.py 模块\n\n该模块负责所有加密/解密操作的实现：\n\n| 函数 | 职责 |\n|------|------|\n| `get_key()` | 获取当前派生的加密密钥 |\n| `derive_key(secret, salt)` | 使用 PBKDF2 从密码和盐值派生密钥 |\n| `encrypt_content(plaintext)` | 对传入的明文进行 AES-256-GCM 加密 |\n| `decrypt_content(ciphertext)` | 对密文进行解密并返回明文 |\n| `is_encrypted(text)` | 检查文本是否已加密（检测 `ENCv1:` 前缀） |\n\n资料来源：[memoraeu_mcp/crypto.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/crypto.py)\n\n### 环境变量配置\n\n| 变量名 | 用途 | 必需性 |\n|--------|------|--------|\n| `MEMORAEU_SECRET` | 用户登录密码，用于 PBKDF2 密钥派生 | **必需** |\n| `MEMORAEU_SALT` | 服务端分配的 KDF 盐值 | **必需** |\n| `MEMORAEU_API_KEY` | HTTP 认证 Bearer Token | 必需 |\n| `MEMORAEU_API_URL` | API 端点地址 | 必需 |\n| `MISTRAL_API_KEY` | 本地生成 Embedding | 可选（影响搜索能力） |\n\n资料来源：[README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n\n## 工作流程\n\n### 存储记忆流程\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant MCP as MCP Client\n    participant M as Mistral API\n    participant C as Crypto Module\n    participant S as MemoraEU Server\n\n    U->>MCP: remember(content)\n    MCP->>M: 生成 Embedding\n    M-->>MCP: embedding_vector\n    MCP->>C: encrypt_content(content)\n    C-->>MCP: ENCv1:xxxx\n    MCP->>S: POST /memories<br/>{content: ENCv1:..., embedding: [...]}\n    S-->>MCP: memory_id\n    MCP-->>U: ✅ 已记住\n```\n\n### 检索记忆流程\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant MCP as MCP Client\n    participant C as Crypto Module\n    participant S as MemoraEU Server\n\n    U->>MCP: recall(query)\n    MCP->>S: POST /memories/search<br/>{query: xxx}\n    S-->>MCP: [{content: ENCv1:..., score: 0.95}]\n    MCP->>C: decrypt_content(ENCv1:...)\n    C-->>MCP: 明文内容\n    MCP-->>U: 记忆列表\n```\n\n## 零知识保证\n\n### 服务器可见内容\n\n| 数据项 | 服务器可见性 | 说明 |\n|--------|-------------|------|\n| 用户输入明文 | ❌ 不可见 | 始终在本地处理 |\n| 加密后的内容 | ✅ 可见 | 仅存储密文 |\n| 向量嵌入 | ✅ 可见 | 加密前在本地生成 |\n| 类别/标签 | ⚠️ 部分可见 | 由 MCP 客户端添加后加密 |\n| 加密密钥 | ❌ 不可见 | 密钥从不传输 |\n\n### 语义搜索原理\n\n1. **本地 Embedding 生成**：使用 `MISTRAL_API_KEY` 在本地调用 Mistral Embed API，生成明文内容的向量表示\n2. **加密存储**：将 Embedding 与加密后的内容一起发送到服务器\n3. **向量匹配**：服务器基于 Embedding 进行语义相似度计算\n4. **本地解密**：匹配结果返回后，在本地使用 `decrypt_content()` 解密\n\n资料来源：[README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n\n## 安全特性\n\n### 认证加密（AES-GCM）\n\n使用 Galois/Counter Mode (GCM) 模式提供：\n- **机密性**：使用 AES-256 位密钥加密\n- **完整性**：GCM 标签检测密文篡改\n- **认证**：防止选择密文攻击\n\n### 密钥派生加固\n\nPBKDF2 参数配置：\n\n| 参数 | 值 | 安全性说明 |\n|------|-----|----------|\n| 迭代次数 | 210,000 | OWASP 2024 建议的最低值 |\n| 输出长度 | 256 位 | 匹配 AES-256 密钥长度 |\n| 伪随机函数 | HMAC-SHA256 | 行业标准 |\n\n### 盐值管理\n\n- 每个用户分配唯一的 `MEMORAEU_SALT`\n- 盐值由服务端生成，确保不可预测性\n- 防止彩虹表攻击和预计算攻击\n\n## 依赖项\n\n核心加密库依赖：\n\n```\ncryptography>=42.0.0\n```\n\n该库提供：\n- `cryptography.hazmat.primitives.ciphers.aead.AESGCM`\n- `cryptography.hazmat.primitives.kdf.pbkdf2.PBKDF2HMAC`\n- `cryptography.hazmat.backends.default_backend()`\n\n资料来源：[requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n\n## 版本演进\n\n| 版本 | 更新内容 |\n|------|----------|\n| 0.1.5 | PBKDF2 升级至 210,000 次迭代 |\n| 0.1.5 | 引入 `ENCv1:` 密文前缀 |\n| 0.1.0 | 初始 AES-256-GCM 实现 |\n\n资料来源：[CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n\n## 最佳实践\n\n1. **使用强密码**：`MEMORAEU_SECRET` 应使用高熵密码\n2. **保护盐值**：虽然盐值可公开，但应与密码分开存储\n3. **定期轮换**：未来版本应支持密钥轮换机制\n4. **本地 Mistral 密钥**：确保 `MISTRAL_API_KEY` 不泄露，确保端到端零知识\n\n---\n\n<a id='page-mcp-tools'></a>\n\n## MCP 工具详解\n\n### 相关页面\n\n相关主题：[自动记忆机制](#page-auto-memory), [项目概述](#page-overview)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n</details>\n\n# MCP 工具详解\n\n## 概述\n\nMemoraEU MCP 是一个基于 Model Context Protocol (MCP) 的记忆服务器实现，旨在为 AI 助手提供持久化的上下文记忆能力。该项目允许 Claude 等大语言模型自动记忆用户偏好、决策和重要信息，并在后续对话中自动检索相关内容。\n\n核心功能包括：\n\n- **自动记忆**：AI 自动检测并存储重要信息，无需用户手动触发\n- **零知识加密**：所有数据在本地加密后再发送至服务器\n- **语义搜索**：支持基于向量相似度的语义检索\n- **结构化事实**：存储带有时间有效性的三元组事实\n- **自动去重**：防止存储重复或相似的记忆\n\n资料来源：[README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n\n## 架构概览\n\n```mermaid\ngraph TD\n    subgraph \"客户端本地\"\n        A[\"用户输入\"] --> B[\"Claude / AI 模型\"]\n        B --> C[\"MCP Client\"]\n        C --> D[\"记忆处理模块\"]\n        D --> E[\"本地加密模块\"]\n        E --> F[\"Mistral Embedding\"]\n    end\n    \n    subgraph \"数据传输\"\n        F --> G[\"加密内容 + Embedding\"]\n        G --> H[\"MemoraEU API\"]\n    end\n    \n    subgraph \"服务端存储\"\n        H --> I[\"向量数据库<br/>存储 embedding\"]\n        H --> J[\"加密Blob存储<br/>存储密文\"]\n    end\n    \n    D --> K[\"压缩模块\"]\n    D --> L[\"分类模块\"]\n    D --> M[\"去重检测模块\"]\n```\n\n资料来源：[memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n## 工具分类\n\nMCP 服务器提供 8 个核心工具，分为三大类别：\n\n| 类别 | 工具 | 功能描述 |\n|------|------|----------|\n| **记忆工具** | `remember` | 自动记忆重要信息 |\n| | `recall` | 语义搜索记忆 |\n| | `forget` | 删除指定记忆 |\n| | `list_memories` | 列出最近的记忆 |\n| | `list_categories` | 列出分类统计 |\n| **事实工具** | `remember_fact` | 存储结构化事实 |\n| | `recall_facts` | 检索结构化事实 |\n| | `invalidate_fact` | 标记事实过期 |\n\n资料来源：[memoraeu_mcp/main.py:70-170](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n## 记忆工具详解\n\n### remember\n\n`remember` 是核心的记忆存储工具，设计为 AI 自动调用，无需用户请求。\n\n#### 功能描述\n\n自动检测并存储用户表达的重要信息，包括偏好、决策、传记事实和技术配置。\n\n#### 参数定义\n\n```json\n{\n  \"type\": \"object\",\n  \"properties\": {\n    \"content\": {\n      \"type\": \"string\",\n      \"description\": \"要记忆的内容\"\n    },\n    \"category\": {\n      \"type\": \"string\",\n      \"description\": \"分类名称（可选，自动推断）\"\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"description\": \"标签数组（可选）\"\n    }\n  },\n  \"required\": [\"content\"]\n}\n```\n\n#### 处理流程\n\n```mermaid\ngraph TD\n    A[\"remember 调用\"] --> B[\"本地压缩内容\"]\n    B --> C[\"自动分类（如未指定）\"]\n    C --> D[\"生成/获取 Embedding\"]\n    D --> E{\"去重检测\"}\n    E -.\"≥94% 相似<br/>跳过存储\"--> F[\"返回去重警告\"]\n    E -.\"<94% 相似<br/>继续存储\"--> G[\"本地加密\"]\n    G --> H[\"POST /memories\"]\n    H --> I[\"返回记忆ID\"]\n```\n\n#### 关键特性\n\n| 特性 | 说明 |\n|------|------|\n| 自动压缩 | 使用 `compress_locally()` 在加密前压缩内容 |\n| 自动分类 | 未指定分类时调用 `suggest_category_locally()` |\n| 去重检测 | 与现有记忆比较向量相似度 |\n| 零知识加密 | 加密后发送至服务器 |\n\n资料来源：[memoraeu_mcp/main.py:120-160](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n### recall\n\n`recall` 是语义搜索工具，用于检索已存储的记忆。\n\n#### 功能描述\n\n在首次用户消息时自动调用，使用语义理解而非关键词匹配进行搜索。\n\n#### 参数定义\n\n```json\n{\n  \"type\": \"object\",\n  \"properties\": {\n    \"query\": {\n      \"type\": \"string\",\n      \"description\": \"搜索查询（使用消息主题）\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"default\": 3,\n      \"description\": \"返回结果数量上限\"\n    },\n    \"category\": {\n      \"type\": \"string\",\n      \"description\": \"按分类过滤（可选）\"\n    }\n  },\n  \"required\": [\"query\"]\n}\n```\n\n#### 特殊行为\n\n```mermaid\ngraph TD\n    A[\"首次 recall\"] --> B{\"_first_recall 标志?\"}\n    B -.->|\"是\"| C[\"注入系统提示词\"]\n    B -.->|\"是\"| D[\"加载会话上下文\"]\n    C --> E[\"POST /memories/search\"]\n    D --> E\n    E --> F[\"解密结果内容\"]\n    F --> G[\"返回格式化结果\"]\n    \n    H[\"非首次 recall\"] --> E\n```\n\n#### 返回格式\n\n```\n🔍 N mémoire(s) :\n\n• [分类] 记忆内容预览... (ID: xxxxxxxx)\n  标签: tag1, tag2 | 相关度: 0.95\n```\n\n资料来源：[memoraeu_mcp/main.py:160-200](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n### forget\n\n删除指定 ID 的记忆。\n\n#### 参数定义\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `memory_id` | string | 是 | 要删除的记忆 ID |\n\n#### 返回值\n\n| 结果 | 返回内容 |\n|------|----------|\n| 成功 | `🗑️ Supprimée.` |\n| 未找到 | `Introuvable.` |\n| 错误 | `❌ Erreur : {错误信息}` |\n\n资料来源：[memoraeu_mcp/main.py:200-210](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n### list_memories\n\n列出最近的记忆列表。\n\n#### 参数定义\n\n| 参数 | 类型 | 默认值 | 说明 |\n|------|------|--------|------|\n| `category` | string | — | 按分类过滤（可选） |\n| `limit` | integer | 20 | 返回数量上限 |\n\n#### 返回格式\n\n```\n📋 N mémoire(s) :\n\n• [分类名称] 内容预览... (ID: xxxxxxxx)\n• [分类名称] 内容预览... (ID: xxxxxxxx)\n```\n\n资料来源：[memoraeu_mcp/main.py:210-230](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n### list_categories\n\n返回所有已存在的分类，按使用频率排序。\n\n#### 参数定义\n\n无参数。\n\n#### 返回格式\n\n```\n📂 Catégories :\n\n• 工作偏好 (15)\n• 技术配置 (8)\n• 个人信息 (3)\n```\n\n资料来源：[memoraeu_mcp/main.py:230-245](https://github.com/pquattro/memoraeu-mcp/blob/main/moraeu_mcp/main.py)\n\n## 事实工具详解\n\n结构化事实存储采用主语-谓语-宾语（SPO）三元组模型，支持时间有效性。\n\n### remember_fact\n\n存储结构化事实，支持时间范围定义。\n\n#### 数据模型\n\n```mermaid\ngraph LR\n    S[\"subject<br/>主语\"] --> P[\"predicate<br/>谓语\"]\n    P --> O[\"object<br/>宾语\"]\n    \n    S -.->|\"valid_from<br/>开始时间\"| T[\"时间范围\"]\n    P -.->|\"valid_to<br/>结束时间\"| T\n```\n\n#### 参数定义\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `subject` | string | 是 | 实体/主语 |\n| `predicate` | string | 是 | 属性/谓语 |\n| `object` | string | 是 | 值/宾语（加密存储） |\n| `scope` | string | 否 | `private` 或 `org`（默认 `private`） |\n| `valid_from` | string | 否 | 开始日期 YYYY-MM-DD |\n| `valid_to` | string | 否 | 结束日期 YYYY-MM-DD |\n\n#### 返回格式\n\n```\n✅ Fait mémorisé 🔒 (remplace xxxxxxxx)\n  主语 → 谓语\n  Depuis: 2024-01-01 | ID: xxxxxxxx\n```\n\n#### 过期替换机制\n\n当存储与已有事实相同主语和谓语的新事实时，系统自动：\n1. 将旧事实标记为 `superseded`\n2. 新事实的 `supersedes` 字段记录旧事实 ID\n\n资料来源：[server.py:150-180](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n\n### recall_facts\n\n检索指定主语的结构化事实。\n\n#### 参数定义\n\n| 参数 | 类型 | 默认值 | 说明 |\n|------|------|--------|------|\n| `subject` | string | 是 | 要查询的实体 |\n| `predicate` | string | 否 | 过滤特定谓语 |\n| `scope` | string | `private` | 范围：`private` 或 `org` |\n| `history` | boolean | `false` | 是否包含过期事实 |\n\n#### 返回格式\n\n```\n📊 N fait(s) pour '主语' :\n\n• 谓语: 宾语值\n  [2024-01-01 → 2024-06-15 (expiré)] | ID: xxxxxxxx\n• 谓语: 宾语值\n  [2024-06-15 → aujourd'hui] | ID: xxxxxxxx\n```\n\n资料来源：[server.py:180-210](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n\n### invalidate_fact\n\n标记事实为过期（不再真实）。\n\n#### 参数定义\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `fact_id` | string | 是 | 要过期的事实 ID |\n| `valid_to` | string | 否 | 结束日期 YYYY-MM-DD（默认今天） |\n\n#### 使用场景\n\n- 用户更正之前提供的信息\n- 临时状态变更（如 \"出差中\" → 恢复）\n- 计划性失效（如活动结束）\n\n资料来源：[server.py:210-220](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n\n## 自动记忆行为\n\n系统设计了完整的自动记忆工作流，AI 模型根据工具描述自动执行。\n\n### 工作流程图\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant C as Claude\n    participant MCP as MCP Server\n    participant API as MemoraEU API\n    \n    U->>C: 第一条消息\n    C->>C: 检测话题\n    C->>MCP: recall(query=话题)\n    MCP->>API: POST /memories/search\n    API-->>MCP: 记忆结果\n    MCP-->>C: 格式化结果 + 系统提示词\n    C->>C: 处理用户请求\n    \n    Note over C: 用户表达重要信息\n    C->>MCP: remember(content=...)\n    MCP->>MCP: 压缩 → 分类 → 去重检测\n    MCP->>MCP: 加密内容\n    MCP->>API: POST /memories\n    API-->>MCP: 记忆ID\n    MCP-->>C: ✅ 已记忆\n    C->>U: 简洁确认\n```\n\n### 自动触发规则\n\n| 场景 | 触发条件 | 示例 |\n|------|----------|------|\n| 偏好表达 | 用户说 \"我喜欢...\"、\"我通常...\" | \"我更喜欢在上午工作\" |\n| 决策声明 | 用户做出明确选择 | \"我们决定用 React\" |\n| 传记事实 | 用户介绍自己 | \"我是后端工程师\" |\n| 技术配置 | 用户指定环境或工具 | \"我的项目用 Poetry\" |\n| 约束条件 | 用户说明限制 | \"不能超过 2 周\" |\n\n### 不应记忆的内容\n\n- 日常闲聊（天气、问候）\n- 临时性信息（今日菜单）\n- 一次性计算结果\n- 用户明确要求遗忘的内容\n\n### 系统提示词注入\n\n首次调用 `recall` 时，系统自动注入完整的行为规范：\n\n```markdown\n## 记忆范围\n- 用户偏好和习惯\n- 重要决策和结论\n- 反复出现的信息或约束\n\n## 自动记忆原则\n当用户表达以下内容时，立即调用 remember 工具：\n- 偏好、决策、传记事实、技术配置\n- 或持久性约束\n\n## 规则\n- 不记忆一般信息或临时性内容\n- 用户要求\"遗忘\"时使用 forget\n- 记忆确认仅需一行\n- 优化 tokens：recall 默认限制 3 条结果\n```\n\n资料来源：[memoraeu_mcp/main.py:30-60](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n## 去重与压缩机制\n\n### 去重检测流程\n\n```mermaid\ngraph TD\n    A[\"新记忆内容\"] --> B[\"计算向量 Embedding\"]\n    B --> C[\"与所有现有记忆比较\"]\n    C --> D{\"相似度阈值\"}\n    \n    D -.->|\">94%\"| E[\"跳过存储<br/>返回去重警告\"]\n    D -.->|\"75%-94%\"| F[\"存储但打印警告\"]\n    D -.->|\"<75%\"| G[\"正常存储\"]\n    \n    E --> H[\"⚠️ Doublon détecté (N% similaire)\"]\n    H --> I[\"显示相似记忆预览\"]\n```\n\n### 相似度阈值表\n\n| 相似度 | 行为 |\n|--------|------|\n| ≥ 94% | 完全跳过，不创建新记忆 |\n| 75% - 94% | 存储新记忆，打印警告日志 |\n| < 75% | 正常存储流程 |\n\n### 本地压缩\n\n在加密前，内容会经过本地压缩处理：\n\n```python\ncontent = await compress_locally(raw_content)\n```\n\n压缩目的：\n1. 减少加密和传输的数据量\n2. 降低 Mistral API 调用成本\n3. 保持记忆简洁\n\n资料来源：[memoraeu_mcp/main.py:130-140](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n## 配置与部署\n\n### stdio 模式（推荐）\n\n适用于需要完整零知识保证的场景。\n\n#### 配置示例\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"command\": \"uvx\",\n      \"args\": [\"memoraeu-mcp\"],\n      \"env\": {\n        \"MEMORAEU_API_URL\": \"https://api.memoraeu.com\",\n        \"MEMORAEU_API_KEY\": \"meu-sk-...\",\n        \"MEMORAEU_SECRET\": \"your-memoraeu-password\",\n        \"MEMORAEU_SALT\": \"your-kdf-salt\",\n        \"MISTRAL_API_KEY\": \"your-mistral-key\"\n      }\n    }\n  }\n}\n```\n\n### SSE 远程模式\n\n适用于快速连接，但不具备零知识保证。\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"type\": \"sse\",\n      \"url\": \"https://api.memoraeu.com/mcp/sse\",\n      \"headers\": {\n        \"Authorization\": \"Bearer meu-sk-...\"\n      }\n    }\n  }\n}\n```\n\n### 环境变量说明\n\n| 变量 | 用途 | 获取方式 |\n|------|------|----------|\n| `MEMORAEU_API_KEY` | HTTP 认证 Bearer Token | 设置 → API Keys |\n| `MEMORAEU_SECRET` | 账户密码（PBKDF2 输入） | 账户密码 |\n| `MEMORAEU_SALT` | KDF 盐值 | 设置 → 加密 Keys |\n| `MEMORAEU_API_URL` | API 端点 | 默认 `https://api.memoraeu.com` |\n| `MISTRAL_API_KEY` | 本地生成 embedding | Mistral Console |\n\n资料来源：[README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n\n## 安全模型\n\n### 零知识加密架构\n\n```mermaid\ngraph LR\n    subgraph \"本地客户端\"\n        A[\"明文内容\"] --> B[\"PBKDF2 密钥派生\"]\n        C[\"SECRET + SALT\"] --> B\n        B --> D[\"AES-256-GCM 加密\"]\n        A --> D\n        D --> E[\"加密 Blob\"]\n    end\n    \n    subgraph \"传输 & 存储\"\n        E --> F[\"HTTPS 传输\"]\n        F --> G[\"服务器存储<br/>（无法解密）\"]\n    end\n    \n    subgraph \"搜索\"\n        H[\"明文\"] --> I[\"Mistral Embedding\"]\n        I --> J[\"向量搜索\"]\n        G --> J\n    end\n```\n\n### 密钥派生参数\n\n| 参数 | 值 |\n|------|------|\n| 算法 | PBKDF2-HMAC-SHA256 |\n| 迭代次数 | 100,000 |\n| 输出密钥长度 | 256 位 |\n\n### Mistral Embedding 的必要性\n\n由于向量搜索需要比较语义相似度，embedding 必须从明文生成：\n\n1. 客户端调用 Mistral API 获取明文 embedding\n2. 内容加密后与 embedding 一起发送\n3. 服务器仅存储加密 blob 和向量\n4. 服务器无法反推明文内容\n\n**无 MISTRAL_API_KEY 时**：搜索降级为服务器端关键词匹配，不影响加密功能。\n\n资料来源：[CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n\n## 依赖项\n\n| 依赖 | 版本 | 用途 |\n|------|------|------|\n| `mcp` | ≥1.1.0, <1.2.0 | MCP 协议实现 |\n| `httpx` | 0.28.1 | HTTP 客户端 |\n| `python-dotenv` | 1.0.1 | 环境变量加载 |\n| `starlette` | ≥0.40.0, <0.42.0 | ASGI 框架 |\n| `cryptography` | ≥42.0.0 | 加密实现 |\n\n资料来源：[requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n\n## 资源与提示词\n\n### 资源\n\n| URI | 名称 | 说明 |\n|-----|------|------|\n| `memoraeu://context` | 会话上下文 | 自动加载最近记忆 |\n\n### 提示词\n\n| 名称 | 用途 |\n|------|------|\n| `memoraeu_system` | 完整的自动记忆行为规范 |\n\n调用方式：\n\n```python\n@app.list_prompts()\nasync def list_prompts() -> list[Prompt]:\n    return [\n        Prompt(\n            name=\"memoraeu_system\",\n            description=\"系统记忆行为规范\",\n            arguments=[]\n        )\n    ]\n```\n\n资料来源：[memoraeu_mcp/main.py:60-80](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n---\n\n<a id='page-auto-memory'></a>\n\n## 自动记忆机制\n\n### 相关页面\n\n相关主题：[MCP 工具详解](#page-mcp-tools), [去重与压缩](#page-dedup-compression)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n</details>\n\n# 自动记忆机制\n\nMemoraEU MCP 服务器的核心功能是一套**自动记忆机制**（Auto-memory），它使 AI 能够主动学习、存储和检索用户信息，无需用户手动干预。该机制通过 MCP 工具定义、系统提示注入和上下文资源加载三种方式协同工作。\n\n---\n\n## 概述\n\n自动记忆机制的设计目标是让 AI 在对话过程中自动识别并记住重要的用户信息，包括：\n\n| 信息类型 | 示例 |\n|---------|------|\n| 用户偏好 | \"我更喜欢 TypeScript\" |\n| 决策记录 | \"我们决定用 PostgreSQL\" |\n| 传记事实 | \"我住在上海\" |\n| 技术约束 | \"项目要求 Python 3.10+\" |\n\n资料来源：[README.md:1-30]()\n\n### 核心工作流\n\n```mermaid\ngraph TD\n    A[用户发送消息] --> B{首次会话?}\n    B -->|是| C[自动调用 recall]\n    B -->|否| D[检测记忆内容]\n    C --> E[加载 memoraeu://context]\n    E --> F[注入系统提示]\n    F --> G[返回记忆结果]\n    D --> H{检测到重要信息?}\n    H -->|是| I[自动调用 remember]\n    H -->|否| J[正常处理消息]\n    I --> K[去重检查]\n    K --> L{相似度 ≥94%?}\n    L -->|是| M[跳过存储]\n    L -->|否| N[本地处理]\n    N --> O[加密并发送]\n    M --> P[返回警告]\n    O --> Q[返回确认]\n```\n\n---\n\n## 三大自动行为\n\n### 1. 自动召回（Automatic Recall）\n\n**触发时机**：每个会话的第一条用户消息\n\n**执行流程**：\n1. 检测用户消息的主题\n2. 使用该主题作为查询词调用 `recall` 工具\n3. 通过 `memoraeu://context` 资源加载最近的记忆\n4. 将记忆内容注入到会话上下文\n\n```mermaid\ngraph LR\n    A[第一条用户消息] --> B[提取主题]\n    B --> C[recall 工具]\n    C --> D[memoraeu://context]\n    D --> E[上下文注入]\n```\n\n资料来源：[README.md:45-50]()\n\n### 2. 自动记忆（Automatic Remember）\n\n**触发时机**：当 AI 检测到以下类型的信息时\n\n| 类型 | 判断标准 |\n|------|----------|\n| 偏好 | 用户表达的个人喜好或选择倾向 |\n| 决策 | 涉及项目、方案或技术选型的决定 |\n| 传记事实 | 关于用户身份、背景的信息 |\n| 技术约束 | 配置、凭证（非敏感）、技术栈信息 |\n\n**执行特点**：\n- 无需用户请求，AI 主动调用 `remember` 工具\n- 记忆后仅返回一行简短确认\n- 不会频繁确认打扰用户\n\n资料来源：[README.md:51-55]()\n\n### 3. 系统提示注入（System Prompt Injection）\n\n**触发时机**：首次调用 `recall` 工具时\n\n**注入内容**：完整的自动记忆行为规范，定义于 `SYSTEM_PROMPT_TEXT` 常量中\n\n**注入方式**：作为用户角色消息注入到 Claude 上下文，强化后续会话中的自动记忆规则\n\n```python\nSYSTEM_PROMPT_TEXT = \"\"\"\n## Objectif\nMémoriser automatiquement les informations importantes de l'utilisateur...\n\n## Rappel automatique\nDès le premier message de l'utilisateur, utilise recall avec le sujet détecté comme query...\n\n## Règles\n- Ne mémorise pas les informations générales ou éphémères\n- Si l'utilisateur dit \"oublie ça\", utilise forget\n- Confirme discrètement les mémorisations\n- Optimisation tokens : limite recall à 3 résultats\n\"\"\"\n```\n\n资料来源：[memoraeu_mcp/main.py:1-50]()\n\n---\n\n## 本地预处理流程\n\n自动记忆机制在数据发送到服务器之前执行完整的本地处理，确保**零知识（Zero-Knowledge）**保障：\n\n```mermaid\ngraph TD\n    A[原始内容] --> B[本地压缩]\n    A --> C[本地分类]\n    A --> D[本地嵌入]\n    B --> E{去重检查}\n    D --> E\n    E -->|≥94%相似| F[跳过存储]\n    E -->|<94%相似| G[加密内容]\n    G --> H[发送到API]\n    H --> I[返回确认]\n```\n\n### 处理步骤详解\n\n| 步骤 | 操作 | 说明 |\n|------|------|------|\n| 1 | 压缩 | 使用 Mistral API 在明文状态下压缩内容，减少 token 消耗 |\n| 2 | 分类 | 如果未指定类别，自动建议合适的分类 |\n| 3 | 嵌入 | 使用 Mistral Embed 从明文生成向量，用于语义搜索 |\n| 4 | 去重 | 使用向量相似度检查（阈值 94%），避免重复存储 |\n| 5 | 加密 | 使用 AES-256-GCM 加密内容后发送 |\n| 6 | 存储 | API 存储加密内容和向量，但不包含明文 |\n\n资料来源：[memoraeu_mcp/main.py:200-260]()\n\n### 零知识保障\n\n**关键设计**：嵌入向量在加密之前生成\n\n```\n用户明文 → Mistral Embed API → 向量 → 加密 → 发送到服务器\n                              ↑\n                       本地执行，保证服务器无法看到明文\n```\n\n资料来源：[README.md:75-85]()\n\n---\n\n## 工具定义\n\n### 核心记忆工具\n\n| 工具名 | 功能 | 关键参数 |\n|--------|------|----------|\n| `remember` | 自动记忆重要信息 | `content`（必需）、`category`、`tags` |\n| `recall` | 语义搜索记忆 | `query`（必需）、`limit`（默认3）、`category` |\n| `forget` | 删除指定记忆 | `memory_id`（必需） |\n| `list_memories` | 列出最近记忆 | `limit`（默认20）、`category` |\n| `list_categories` | 获取分类列表 | 无 |\n\n### 结构化事实工具\n\n| 工具名 | 功能 | 关键参数 |\n|--------|------|----------|\n| `remember_fact` | 存储结构化事实 | `subject`（必需）、`predicate`（必需）、`object`（必需） |\n| `recall_facts` | 检索活动事实 | `subject`（必需）、`predicate`、`history` |\n| `invalidate_fact` | 标记事实过期 | `fact_id`（必需）、`valid_to` |\n\n资料来源：[server.py:50-150]()\n\n---\n\n## 去重与压缩机制\n\n### 向量相似度阈值\n\n| 相似度 | 处理动作 |\n|--------|----------|\n| ≥ 94% | 记忆被忽略，提示用户为重复内容 |\n| < 94% | 正常存储（可能打印警告日志） |\n\n```python\nDEDUP_SKIP_THRESHOLD = 0.94  # 94% 相似度阈值\n```\n\n资料来源：[memoraeu_mcp/main.py:230-245]()\n\n### 去重检查流程\n\n```mermaid\ngraph TD\n    A[新内容] --> B[生成本地嵌入]\n    B --> C[API 搜索相似向量]\n    C --> D{最高相似度?}\n    D -->|≥94%| E[返回重复警告]\n    D -->|<94%| F{≥70%| \n    F -->|否| G[存储新记忆]\n    F -->|是| H[存储并记录警告]\n```\n\n---\n\n## 配置要求\n\n### 环境变量\n\n| 变量名 | 用途 | 获取方式 |\n|--------|------|----------|\n| `MEMORAEU_API_KEY` | HTTP 认证令牌 | Dashboard → Settings → API Keys |\n| `MEMORAEU_SECRET` | 登录密码，用于派生加密密钥 | 用户账户密码 |\n| `MEMORAEU_SALT` | KDF 盐值，服务器生成 | Dashboard → Settings → Encryption Keys |\n| `MEMORAEU_API_URL` | API 端点 | 托管服务使用 `https://api.memoraeu.com` |\n| `MISTRAL_API_KEY` | 本地嵌入生成（可选但推荐） | console.mistral.ai |\n\n### Mistral API Key 的必要性\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│  为什么需要 Mistral API Key？                               │\n├─────────────────────────────────────────────────────────────┤\n│  零知识搜索 = 服务器无法看到你的明文                          │\n│                                                             │\n│  语义搜索需要向量 → 向量必须在本地生成 → 需要 Mistral Embed  │\n└─────────────────────────────────────────────────────────────┘\n```\n\n**无 Mistral Key 时**：搜索降级为服务器端关键词搜索，加密不受影响。\n\n资料来源：[README.md:70-85]()\n\n---\n\n## 安全特性\n\n### 加密方案\n\n| 参数 | 值 |\n|------|-----|\n| 算法 | AES-256-GCM |\n| 密钥派生 | PBKDF2-HMAC-SHA256 |\n| 迭代次数 | 210,000（OWASP 2024 推荐） |\n| 密文前缀 | `ENCv1:` |\n\n资料来源：[CHANGELOG.md:15-20]()\n\n### 密钥管理\n\n```python\ndef get_key() -> bytes | None:\n    \"\"\"从环境变量派生加密密钥\"\"\"\n    secret = os.environ.get(\"MEMORAEU_SECRET\")\n    salt = os.environ.get(\"MEMORAEU_SALT\")\n    if not secret or not salt:\n        return None\n    return PBKDF2(secret, salt, iterations=210000)\n```\n\n---\n\n## 会话上下文资源\n\nMCP 服务器通过 `memoraeu://context` 资源提供会话上下文：\n\n```python\n@app.list_resources()\nasync def list_resources() -> list[Resource]:\n    return [\n        Resource(\n            uri=\"memoraeu://context\",\n            name=\"Contexte mémoire MemoraEU\",\n            description=\"Mémoires récentes injectées automatiquement...\",\n            mimeType=\"text/plain\"\n        )\n    ]\n\n@app.read_resource()\nasync def read_resource(uri: str) -> list[ResourceContents]:\n    if uri == \"memoraeu://context\":\n        context = await load_session_context()\n        return [TextResourceContents(uri=uri, text=context)]\n```\n\n资料来源：[memoraeu_mcp/main.py:80-100]()\n\n---\n\n## 行为规则总结\n\n| 规则 | 说明 |\n|------|------|\n| 不记忆 | 通用信息、临时信息（天气、笑话、一次性计算） |\n| 响应确认 | 仅一行，简洁低调 |\n| Token 优化 | 默认限制 3 条记忆结果 |\n| 遗忘请求 | 用户说\"忘记\"时立即调用 `forget` |\n\n```mermaid\ngraph TD\n    A[用户消息] --> B{信息类型?}\n    B -->|偏好/决策/传记/技术约束| C[自动 remember]\n    B -->|通用/临时| D[正常处理]\n    C --> E{重复检查}\n    E -->|≥94%| F[返回警告]\n    E -->|<94%| G[存储]\n    D --> H[无记忆]\n```\n\n资料来源：[memoraeu_mcp/main.py:30-45]()\n\n---\n\n## 版本变更记录\n\n| 版本 | 变更内容 |\n|------|----------|\n| 0.1.9 | 新增 `remember_fact`、`recall_facts`、`invalidate_fact` 结构化事实工具；PBKDF2 迭代次数提升至 210,000 |\n| 0.1.5 | 初始版本，包含基础 `remember`、`recall`、`forget` 工具和自动行为 |\n\n资料来源：[CHANGELOG.md:1-35]()\n\n---\n\n<a id='page-dedup-compression'></a>\n\n## 去重与压缩\n\n### 相关页面\n\n相关主题：[自动记忆机制](#page-auto-memory), [加密系统](#page-encryption)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n</details>\n\n# 去重与压缩\n\n## 概述\n\nmemoraeu-mcp 实现了客户端去重与压缩机制，在数据加密前对内容进行处理。这一设计确保了：\n\n1. **存储效率** — 避免存储重复或冗余的记忆\n2. **零知识保证** — 所有处理均在加密前本地完成，服务器无法访问明文\n\n资料来源：[README.md:1-50]()\n\n## 工作流程\n\n### 整体数据流\n\n```mermaid\ngraph TD\n    A[用户输入内容] --> B[本地压缩]\n    B --> C[本地分类建议]\n    C --> D[生成 Embedding]\n    D --> E[重复检测]\n    E --> F{是否重复?}\n    F -->|是| G[跳过存储]\n    F -->|否| H[加密内容]\n    H --> I[发送到 API]\n    G --> J[返回警告]\n    I --> K[存储成功]\n    \n    L[Mistral API] -.->|压缩/分类| B\n    L -.->|Embedding| D\n```\n\n### 记忆存储流程\n\n在 `remember` 工具调用时，系统按以下顺序执行：\n\n| 步骤 | 操作 | 执行位置 | 依赖 |\n|------|------|----------|------|\n| 1 | 内容压缩 | 本地 | Mistral Chat |\n| 2 | 分类建议 | 本地 | Mistral Chat |\n| 3 | 生成 Embedding | 本地 | Mistral Embed |\n| 4 | 重复检测 | 本地 | 向量相似度 |\n| 5 | 内容加密 | 本地 | PBKDF2 + AES-256-GCM |\n| 6 | 发送存储 | 远程 | MemoraEU API |\n\n资料来源：[memoraeu_mcp/main.py:150-200]()\n\n## 压缩机制\n\n### 压缩阈值\n\n系统使用 `COMPRESSION_THRESHOLD` 变量控制压缩触发条件。当内容长度超过此阈值时才进行压缩处理。\n\n```python\nif len(content) <= COMPRESSION_THRESHOLD:\n    return content\n```\n\n资料来源：[memoraeu_mcp/main.py:1-50]()\n\n### 压缩实现\n\n压缩功能由 `compress_locally()` 函数实现：\n\n```python\nasync def compress_locally(content: str) -> str:\n    \"\"\"\n    Résume ce texte en 1-3 phrases concises, en français, \n    en gardant l'essentiel. Réponds uniquement avec le résumé.\n    \"\"\"\n    prompt = (\n        \"Résume ce texte en 1-3 phrases concises, en français, \"\n        \"en gardant l'essentiel. Réponds uniquement avec le résumé, \"\n        \"sans introduction ni conclusion.\\n\\n\"\n        f\"{content}\"\n    )\n    compressed = await _mistral_chat(prompt)\n    if compressed and len(compressed) < len(content):\n        print(f\"[mcp] Compression: {len(content)} → {len(compressed)} chars\")\n        return compressed\n    return content\n```\n\n资料来源：[memoraeu_mcp/main.py:50-80]()\n\n### 压缩特点\n\n| 特性 | 说明 |\n|------|------|\n| 触发条件 | 内容长度 > `COMPRESSION_THRESHOLD` |\n| 压缩方式 | Mistral Chat API 生成 1-3 句法式摘要 |\n| 语言 | 使用法语（与系统语言一致） |\n| 降级策略 | 若压缩后更长，保留原内容 |\n| 加密时机 | 压缩后立即加密，服务器不可见 |\n\n## 分类建议机制\n\n### 本地分类函数\n\n```python\nasync def suggest_category_locally(content: str, existing: list[str]) -> str:\n    \"\"\"Suggère une catégorie pour le contenu en clair.\"\"\"\n    existing_str = \", \".join(existing) if existing else \"aucune\"\n    prompt = (\n        f\"Catégories existantes : {existing_str}\\n\\n\"\n        f\"Texte : {content[:500]}\\n\\n\"\n        \"Quelle catégorie courte (1-2 mots, en français, minuscules) \"\n        \"correspond le mieux ? Utilise une existante si pertinent, \"\n        \"sinon crée-en une. Réponds uniquement avec la catégorie.\"\n    )\n    cat = await _mistral_chat(prompt)\n    if cat:\n        return cat.lower().strip().strip('\"').strip(\"'\")[:30]\n    return \"personnel\"\n```\n\n资料来源：[memoraeu_mcp/main.py:80-110]()\n\n### 分类处理流程\n\n```mermaid\ngraph TD\n    A[新内容] --> B[获取已有分类列表]\n    B --> C[调用 Mistral Chat]\n    C --> D{返回有效分类?}\n    D -->|是| E[规范化分类名]\n    D -->|否| F[返回默认分类: personnel]\n    E --> G[限制长度 30 字符]\n    G --> H[返回分类]\n```\n\n### 分类默认值\n\n| 情况 | 行为 |\n|------|------|\n| 用户指定分类 | 使用用户提供的分类 |\n| 未指定且有现有分类 | 调用 Mistral 建议分类 |\n| 未指定且无现有分类 | 返回默认分类 `personnel` |\n\n## 去重检测机制\n\n### 重复检测阈值\n\n| 相似度 | 处理行为 |\n|--------|----------|\n| ≥ 94% | **跳过存储** — 视为完全重复 |\n| < 94% | 仍存储，但记录相似度日志 |\n\n资料来源：[README.md:60-80]()\n\n### 去重实现\n\n```python\nasync def check_duplicate(embedding: list[float]) -> dict | None:\n    \"\"\"\n    Recherche une mémoire similaire via le vecteur pré-calculé (zero-knowledge).\n    Retourne la mémoire duplicata si trouvé, None sinon.\n    \"\"\"\n    # ... API 调用获取相似记忆\n    score_pct = round(dup[\"score\"] * 100)\n    \n    if dup[\"score\"] >= DEDUP_SKIP_THRESHOLD:\n        return [TextContent(type=\"text\", text=(\n            f\"⚠️ Doublon détecté ({score_pct}% similaire) — mémoire non créée.\\n\"\n            f\"→ Existante : {dup['preview']} (ID: {dup['id'][:8]}…)\"\n        ))]\n    else:\n        print(f\"[mcp] Mémoire similaire à {score_pct}% — stockage quand même\")\n        return None\n```\n\n资料来源：[memoraeu_mcp/main.py:110-140]()\n\n### 零知识去重原理\n\n```mermaid\ngraph LR\n    A[明文内容] --> B[Mistral Embed]\n    B --> C[Embedding 向量]\n    C --> D[本地存储加密]\n    C --> E[发送给服务器]\n    \n    F[服务器] --> G[无法解密内容]\n    G --> H[但可比较向量相似度]\n    E --> H\n```\n\n去重机制利用了预计算的 Embedding 向量进行相似度计算，这些向量在本地生成后立即用于重复检测，服务器仅存储加密后的向量数据。\n\n## 加密集成\n\n### 加密流程\n\n在去重和压缩完成后，系统对内容进行加密：\n\n```python\n# 1. 检查重复\nif dup_result:\n    return dup_result\n\n# 2. 加密处理后的内容\nencrypted = encrypt_content(content)\n\n# 3. 发送到 API\npayload = {\n    \"content\": encrypted,\n    \"category\": category,\n    \"tags\": arguments.get(\"tags\", []),\n    \"source\": \"claude_desktop\",\n    \"scope\": \"private\",\n    \"pre_processed\": True,\n}\nif embedding:\n    payload[\"embedding\"] = embedding\n\nmemory = await api_post(\"/memories\", payload)\n```\n\n资料来源：[memoraeu_mcp/main.py:180-220]()\n\n### 加密参数\n\n| 参数 | 说明 | 来源 |\n|------|------|------|\n| 算法 | AES-256-GCM | 客户端加密 |\n| 密钥派生 | PBKDF2-HMAC-SHA256 | 本地派生 |\n| 迭代次数 | 210,000 次 | OWASP 2024 推荐 |\n| 盐值 | `MEMORAEU_SALT` | 服务器生成 |\n| 密文前缀 | `ENCv1:` | 版本标识 |\n\n## 环境配置\n\n### 必需环境变量\n\n| 变量 | 用途 | 获取方式 |\n|------|------|----------|\n| `MEMORAEU_API_KEY` | API 认证 | 仪表板 → 设置 → API 密钥 |\n| `MEMORAEU_SECRET` | 密码 → 加密密钥派生 | 用户账户密码 |\n| `MEMORAEU_SALT` | KDF 盐值 | 仪表板 → 设置 → 加密密钥 |\n| `MEMORAEU_API_URL` | API 端点 | 默认: `https://api.memoraeu.com` |\n| `MISTRAL_API_KEY` | Embedding 和压缩 | [console.mistral.ai](https://console.mistral.ai) |\n\n### Mistral API 作用\n\n> **为什么 MCP 需要 Mistral 密钥？**\n>\n> 零知识意味着服务器永远看不到明文。为了支持语义搜索，Embedding 必须在**加密前**计算——在你的机器上。MCP 直接用明文调用 Mistral，获取向量后加密内容，然后发送两者到服务器。\n\n资料来源：[README.md:40-50]()\n\n## 完整存储决策流程\n\n```mermaid\ngraph TD\n    A[remember 调用] --> B{内容 > 阈值?}\n    B -->|是| C[压缩内容]\n    B -->|否| D[保持原样]\n    C --> E{指定分类?}\n    D --> E\n    E -->|否| F[建议分类]\n    E -->|是| G[使用指定分类]\n    F --> H[生成 Embedding]\n    G --> H\n    H --> I[检查重复]\n    I --> J{相似度 ≥ 94%?}\n    J -->|是| K[返回警告]\n    J -->|否| L[加密内容]\n    L --> M[发送 API]\n    M --> N[返回成功]\n    K --> O[结束]\n    N --> O\n```\n\n## 版本变更\n\n### v0.1.9 (2026-05-12)\n\n- PBKDF2 迭代次数提升至 210,000 次（OWASP 2024 推荐）\n- 引入密文前缀 `ENCv1:` 版本标识\n\n资料来源：[CHANGELOG.md:20-30]()\n\n### v0.1.5 (2026-04-28)\n\n- 初始去重机制实现\n- 向量相似度阈值 0.94 (94%) 正式启用\n- 本地压缩和分类功能上线\n\n## 相关依赖\n\n| 依赖 | 版本 | 用途 |\n|------|------|------|\n| httpx | 0.28.1 | 异步 HTTP 客户端 |\n| starlette | ≥0.40.0,<0.42.0 | Web 框架 |\n| cryptography | ≥42.0.0 | 加密实现 |\n| python-dotenv | 1.0.1 | 环境变量管理 |\n\n资料来源：[requirements.txt:1-10]()\n\n---\n\n<a id='page-configuration'></a>\n\n## 配置与密钥管理\n\n### 相关页面\n\n相关主题：[快速开始](#page-quickstart), [自托管部署](#page-selfhosting)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n- [CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n</details>\n\n# 配置与密钥管理\n\n## 概述\n\nMemoraEU MCP 是一个零知识（Zero-Knowledge）记忆系统，其核心安全机制建立在密钥管理与加密架构之上。本页详细说明 MCP 服务器的配置方式、环境变量的作用、密钥派生流程，以及不同部署模式下的安全考量。\n\n资料来源：[README.md]()\n\n---\n\n## 环境变量总览\n\nMCP 服务器依赖五个核心环境变量，分为三类用途：\n\n| 变量名 | 用途分类 | 说明 |\n|--------|----------|------|\n| `MEMORAEU_API_KEY` | HTTP 认证 | Bearer Token，随每个请求发送 |\n| `MEMORAEU_SECRET` | 密钥派生 | 用户登录密码，用于本地派生加密密钥 |\n| `MEMORAEU_SALT` | 密钥派生 | 服务器生成的 KDF 盐值，账户唯一 |\n| `MEMORAEU_API_URL` | 端点配置 | API 服务器地址 |\n| `MISTRAL_API_KEY` | 嵌入生成 | 本地生成向量嵌入（加密前） |\n\n资料来源：[README.md]()\n\n---\n\n## 密钥派生与加密架构\n\n### 加密流程\n\n```mermaid\ngraph TD\n    A[用户密码 MEMORAEU_SECRET] --> B[PBKDF2-HMAC-SHA256]\n    C[服务器盐值 MEMORAEU_SALT] --> B\n    B --> D[派生密钥 Key]\n    E[明文内容] --> F[本地压缩]\n    F --> G[本地嵌入生成 Mistral]\n    G --> H[AES-256-GCM 加密]\n    D --> H\n    H --> I[ENCv1: 前缀密文]\n    I --> J[上传至服务器]\n```\n\n### 加密参数\n\n根据 CHANGELOG.md v0.1.9 版本更新：\n\n| 参数 | 值 | 说明 |\n|------|-----|------|\n| 算法 | AES-256-GCM | 对称加密，认证加密 |\n| KDF | PBKDF2-HMAC-SHA256 | 密码学密钥派生函数 |\n| 迭代次数 | 210,000 | OWASP 2024 推荐值 |\n| 密文前缀 | `ENCv1:` | 版本标识，便于密钥轮换 |\n| 盐值长度 | 账户唯一 | 服务器生成，Base64 编码 |\n\n资料来源：[CHANGELOG.md]()\n资料来源：[memoraeu_mcp/main.py]()\n\n### 本地处理阶段\n\n在加密发生前，MCP 客户端执行以下明文处理：\n\n1. **内容压缩** — 调用 `compress_locally()` 函数减小体积\n2. **分类建议** — 调用 `suggest_category_locally()` 自动分类\n3. **嵌入生成** — 调用 Mistral Embed API 生成向量\n\n这三个步骤均在加密前执行，确保服务器永远无法访问明文内容。\n\n资料来源：[memoraeu_mcp/main.py:150-180]()\n\n---\n\n## stdio 本地安装配置\n\n本地安装提供完整的零知识保障。所有处理在本地完成。\n\n### 安装命令\n\n```bash\nuvx memoraeu-mcp\n```\n\n### claude_desktop_config.json 配置示例\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"command\": \"uvx\",\n      \"args\": [\"memoraeu-mcp\"],\n      \"env\": {\n        \"MEMORAEU_API_URL\": \"https://api.memoraeu.com\",\n        \"MEMORAEU_API_KEY\": \"meu-sk-...\",\n        \"MEMORAEU_SECRET\": \"your-memoraeu-password\",\n        \"MEMORAEU_SALT\": \"your-kdf-salt\",\n        \"MISTRAL_API_KEY\": \"your-mistral-key\"\n      }\n    }\n  }\n}\n```\n\n### 环境变量获取指南\n\n| 变量 | 获取方式 |\n|------|----------|\n| `MEMORAEU_API_KEY` | 仪表盘 → 设置 → API 密钥 → 创建新密钥 |\n| `MEMORAEU_SECRET` | MemoraEU 账户登录密码 |\n| `MEMORAEU_SALT` | 仪表盘 → 设置 → 加密密钥 → 复制盐值 |\n| `MEMORAEU_API_URL` | 使用 `https://api.memoraeu.com`（托管服务） |\n| `MISTRAL_API_KEY` | [console.mistral.ai](https://console.mistral.ai) 获取 |\n\n资料来源：[README.md]()\n\n---\n\n## SSE 远程模式配置\n\n远程模式下，MCP 通过 Server-Sent Events 连接到 MemoraEU API，无需本地安装。\n\n### 安全说明\n\n> **注意：** 在 SSE 远程模式下，内容**不提供**零知识加密（服务器以明文处理文本）。如需完整的零知识保障，请使用本地 `stdio` 安装模式。\n\n资料来源：[README.md]()\n\n### 配置文件示例\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"type\": \"sse\",\n      \"url\": \"https://api.memoraeu.com/mcp/sse\",\n      \"headers\": {\n        \"Authorization\": \"Bearer meu-sk-...\"\n      }\n    }\n  }\n}\n```\n\n### 部署模式对比\n\n| 特性 | stdio 本地模式 | SSE 远程模式 |\n|------|----------------|--------------|\n| 零知识加密 | ✅ 完整保障 | ❌ 明文处理 |\n| 嵌入本地生成 | ✅ | ❌ |\n| 无需安装 | ❌ | ✅ |\n| 适用场景 | 高安全需求 | 快速接入 |\n\n资料来源：[README.md]()\n\n---\n\n## Mistral API Key 的必要性\n\n### 为什么需要 Mistral Key？\n\n零知识搜索的核心在于：**嵌入必须在加密前生成**。\n\n```mermaid\ngraph LR\n    A[明文内容] --> B[Mistral API<br/>生成嵌入向量]\n    B --> C[本地加密内容]\n    B --> D[加密后嵌入]\n    C --> E[上传密文 + 嵌入]\n    D --> E\n    E --> F[服务器存储<br/>但无法解密]\n```\n\n1. MCP 直接使用明文调用 Mistral Embed API\n2. 获取向量嵌入后，在本地同时加密内容和嵌入\n3. 服务器存储密文 blob 和加密向量\n4. 服务器无法反向解析原始文本\n\n资料来源：[README.md]()\n\n### 无 Mistral Key 时的行为\n\n```mermaid\ngraph TD\n    A[MISTRAL_API_KEY 未配置] --> B{检测到缺失}\n    B --> C[remember/recall 仍可用]\n    B --> D[语义搜索降级]\n    D --> E[服务端关键词搜索替代]\n    C --> F[零知识加密不受影响]\n    E --> G[搜索精度降低]\n```\n\n- `remember` 和 `recall` 工具保持可用\n- 语义搜索切换为服务端关键词匹配\n- AES-256-GCM 加密不受影响\n\n资料来源：[README.md]()\n\n---\n\n## 依赖配置\n\n项目依赖声明于 `requirements.txt`：\n\n```\nmcp>=1.1.0,<1.2.0\nhttpx==0.28.1\npython-dotenv==1.0.1\nstarlette>=0.40.0,<0.42.0\ncryptography>=42.0.0\n```\n\n### 核心依赖说明\n\n| 包名 | 版本约束 | 用途 |\n|------|----------|------|\n| `mcp` | ≥1.1.0, <1.2.0 | MCP 协议实现 |\n| `httpx` | 0.28.1 | 异步 HTTP 客户端 |\n| `python-dotenv` | 1.0.1 | 环境变量加载 |\n| `starlette` | ≥0.40.0, <0.42.0 | ASGI 框架（用于 SSE） |\n| `cryptography` | ≥42.0.0 | AES-256-GCM 加密实现 |\n\n资料来源：[requirements.txt]()\n\n---\n\n## 应用程序内部加密实现\n\n### 加密函数位置\n\n核心加密逻辑位于 `memoraeu_mcp/main.py`，包含以下关键函数：\n\n| 函数名 | 功能 |\n|--------|------|\n| `encrypt_content()` | 使用 AES-256-GCM 加密内容，添加 `ENCv1:` 前缀 |\n| `decrypt_content()` | 解密内容，验证前缀版本 |\n| `get_key()` | 从环境变量派生密钥并缓存 |\n\n### 密钥派生流程\n\n```python\n# PBKDF2 参数（v0.1.9 更新）\nPBKDF2_ITERATIONS = 210000  # OWASP 2024 推荐\nPBKDF2_ALGORITHM = \"sha256\"\nKEY_LENGTH = 32  # AES-256\n```\n\n### 去重与加密流程\n\n```mermaid\ngraph TD\n    A[原始内容] --> B[本地压缩]\n    B --> C[分类处理]\n    C --> D[嵌入生成<br/>Mistral]\n    D --> E{去重检查<br/>相似度 ≥ 0.94?}\n    E -->|是| F[跳过存储<br/>返回警告]\n    E -->|否| G[继续处理]\n    G --> H{相似度 ≥ 0.85?}\n    H -->|是| I[警告但仍存储]\n    H -->|否| J[正常存储]\n    J --> K[本地加密]\n    G --> K\n    K --> L[上传 API<br/>pre_processed=True]\n```\n\n资料来源：[memoraeu_mcp/main.py:180-220]()\n\n---\n\n## API 端点配置\n\n### 服务端点\n\n| 环境 | URL |\n|------|-----|\n| 生产环境 | `https://api.memoraeu.com` |\n| SSE 端点 | `https://api.memoraeu.com/mcp/sse` |\n| 记忆搜索 | `/memories/search` |\n| 记忆创建 | `/memories` |\n| 事实存储 | `/facts` |\n| 分类列表 | `/memories/categories` |\n\n### API 认证头\n\n```json\n{\n  \"Authorization\": \"Bearer {MEMORAEU_API_KEY}\"\n}\n```\n\n支持新版 `meu-sk-xxx` 格式的 API Key。\n\n资料来源：[CHANGELOG.md]()\n资料来源：[README.md]()\n\n---\n\n## 安全最佳实践\n\n### 生产环境建议\n\n| 建议 | 说明 |\n|------|------|\n| 使用 stdio 本地模式 | 确保零知识加密完整 |\n| 定期轮换 `MEMORAEU_SALT` | 通过仪表盘重新生成 |\n| 保护 `MEMORAEU_SECRET` | 不要明文存储在代码库 |\n| 使用环境变量文件 | `.env` 文件配合 `python-dotenv` |\n\n### 敏感信息处理\n\n```bash\n# 推荐的 .env 文件结构\nMEMORAEU_API_URL=https://api.memoraeu.com\nMEMORAEU_API_KEY=meu-sk-xxx\nMEMORAEU_SECRET=your-strong-password\nMEMORAEU_SALT=base64-encoded-salt\nMISTRAL_API_KEY=mistral-api-key\n```\n\n> **警告：** 确保 `.env` 文件加入 `.gitignore`，永不提交到版本控制系统。\n\n---\n\n## 故障排查\n\n| 问题 | 可能原因 | 解决方案 |\n|------|----------|----------|\n| 语义搜索不工作 | 缺少 `MISTRAL_API_KEY` | 添加 Mistral API Key |\n| 加密失败 | `MEMORAEU_SECRET` 或 `MEMORAEU_SALT` 错误 | 检查环境变量配置 |\n| 连接超时 | `MEMORAEU_API_URL` 错误 | 确认使用正确端点 |\n| 认证失败 | `MEMORAEU_API_KEY` 过期或格式错误 | 重新生成 API Key |\n\n---\n\n## 版本历史\n\n| 版本 | 日期 | 密钥相关变更 |\n|------|------|--------------|\n| 0.1.9 | 2026-05-12 | PBKDF2 升级至 210,000 次迭代，添加 `ENCv1:` 前缀 |\n| 0.1.5 | 2026-04-28 | 初始加密实现版本 |\n\n资料来源：[CHANGELOG.md]()\n\n---\n\n<a id='page-selfhosting'></a>\n\n## 自托管部署\n\n### 相关页面\n\n相关主题：[配置与密钥管理](#page-configuration), [项目概述](#page-overview)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n- [CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n</details>\n\n# 自托管部署\n\n## 概述\n\nmemoraeu-mcp 支持两种部署模式：远程 SSE（Server-Sent Events）模式和本地 stdio 模式。这两种模式在安全性和功能上存在显著差异，开发者可根据实际需求选择合适的部署方式。\n\n**核心区别**：远程 SSE 模式下，服务器会处理明文数据，无法提供零知识加密保证；本地 stdio 模式则能在用户本地机器上完成所有加密操作，实现完整的零知识保护。\n\n资料来源：[README.md:1-10]()\n\n## 部署模式对比\n\n| 特性 | 远程 SSE 模式 | 本地 stdio 模式 |\n|------|-------------|----------------|\n| 零知识加密 | ❌ 不支持（服务器处理明文） | ✅ 完全支持 |\n| 数据传输 | 通过 HTTPS 传输明文 | 进程间通信（本地） |\n| 加密时机 | 服务器端加密 | 客户端本地加密 |\n| 配置复杂度 | 较低 | 较高（需配置密钥） |\n| 适用场景 | 快速测试、信任服务器 | 生产环境、高隐私需求 |\n\n资料来源：[README.md:11-15]()\n\n## 环境变量配置\n\nmemoraeu-mcp 使用五个关键环境变量，这些变量服务于三个不同的用途，彼此不可互换：\n\n| 变量名 | 用途 | 获取方式 |\n|--------|------|----------|\n| `MEMORAEU_API_KEY` | HTTP 认证（Bearer token，随每个请求发送） | 仪表板 → 设置 → API 密钥 |\n| `MEMORAEU_SECRET` | 用户 MemoraEU 登录密码，用于本地 PBKDF2 派生加密密钥 | 用户账户密码 |\n| `MEMORAEU_SALT` | 服务器生成的 KDF 盐值，唯一对应用户账户，与 `MEMORAEU_SECRET` 组合生成加密密钥 | 仪表板 → 设置 → 加密密钥 |\n| `MEMORAEU_API_URL` | API 端点地址 | 使用 `https://api.memoraeu.com`（托管服务） |\n| `MISTRAL_API_KEY` | 本地生成嵌入向量（在加密前），用于零知识语义搜索 | [console.mistral.ai](https://console.mistral.ai) |\n\n资料来源：[README.md:32-45]()\n\n## 本地 stdio 模式部署\n\n本地 stdio 模式是实现零知识加密的关键部署方式，所有敏感操作都在本地完成。\n\n### 工作原理\n\n```mermaid\ngraph TD\n    A[用户输入] --> B[本地 MCP 服务器]\n    B --> C{MISTRAL_API_KEY}\n    C -->|生成嵌入| D[加密内容]\n    D --> E[加密的嵌入向量]\n    B --> F[AES-256-GCM 加密]\n    F --> G[发送加密数据到服务器]\n    E --> G\n    G --> H[远程服务器存储]\n    \n    style A fill:#e1f5fe\n    style H fill:#ffebee\n    style D fill:#c8e6c9\n```\n\n### 配置步骤\n\n1. **获取 API 密钥**：登录 MemoraEU 仪表板，获取 `MEMORAEU_API_KEY`\n\n2. **获取加密密钥**：在仪表板的\"加密密钥\"页面获取唯一的 `MEMORAEU_SALT`\n\n3. **设置用户密码**：使用您的 MemoraEU 账户密码作为 `MEMORAEU_SECRET`\n\n4. **获取 Mistral API 密钥**：访问 [console.mistral.ai](https://console.mistral.ai) 获取 `MISTRAL_API_KEY`\n\n5. **编辑 Claude Desktop 配置**：在 `claude_desktop_config.json` 中添加以下配置：\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"command\": \"uvx\",\n      \"args\": [\"memoraeu-mcp\"],\n      \"env\": {\n        \"MEMORAEU_API_URL\": \"https://api.memoraeu.com\",\n        \"MEMORAEU_API_KEY\": \"meu-sk-...\",\n        \"MEMORAEU_SECRET\": \"your-memoraeu-password\",\n        \"MEMORAEU_SALT\": \"your-kdf-salt\",\n        \"MISTRAL_API_KEY\": \"your-mistral-key\"\n      }\n    }\n  }\n}\n```\n\n资料来源：[README.md:22-30]()\n\n### 使用 uvx 快速启动\n\nmemoraeu-mcp 支持通过 `uvx`（UV 包管理器）直接运行，无需手动安装：\n\n```bash\nuvx memoraeu-mcp\n```\n\n所有环境变量需要在启动前设置好，或者通过 `.env` 文件管理。\n\n资料来源：[README.md:22-25]()\n\n## 零知识加密机制\n\nmemoraeu-mcp 采用多层加密策略确保数据安全：\n\n### 加密流程\n\n```mermaid\nsequenceDiagram\n    participant 用户 as 用户应用\n    participant MCP as MCP 服务器\n    participant Mistral as Mistral API\n    participant Server as 远程服务器\n\n    用户->>MCP: 输入明文内容\n    MCP->>Mistral: 发送明文获取嵌入\n    Mistral-->>MCP: 返回嵌入向量\n    MCP->>MCP: PBKDF2-HMAC-SHA256 派生密钥<br/>(100k 迭代)\n    MCP->>MCP: AES-256-GCM 加密内容\n    MCP->>Server: 发送加密内容 + 加密嵌入\n    Server-->>用户: 存储不透明的加密 blob\n```\n\n### 密钥派生参数\n\n| 参数 | 值 |\n|------|-----|\n| 算法 | PBKDF2-HMAC-SHA256 |\n| 迭代次数 | 100,000 次 |\n| 盐值 | 服务器提供的唯一盐（`MEMORAEU_SALT`） |\n| 密文前缀 | `ENCv1:` |\n| 加密算法 | AES-256-GCM |\n\n资料来源：[CHANGELOG.md:15-20]()\n\n## Mistral API 密钥的作用\n\n### 为什么需要 Mistral API 密钥？\n\n零知识意味着服务器永远不会看到用户的明文数据。为了实现语义搜索功能，嵌入向量必须在加密之前计算——即在用户本地机器上完成。\n\n**工作流程**：\n\n1. MCP 使用明文内容直接调用 Mistral API\n2. 获取嵌入向量\n3. 在本地加密内容\n4. 将加密内容和加密嵌入同时发送到服务器\n5. 服务器存储加密 blob 和嵌入向量，但无法还原原始文本\n\n资料来源：[README.md:48-55]()\n\n### 无 Mistral API 密钥时的行为\n\n如果未配置 `MISTRAL_API_KEY`，MCP 仍可继续运行：\n- `remember` 和 `recall` 工具保持可用\n- 语义搜索将降级为基于关键词的服务器端搜索\n- 零知识加密不受影响\n\n资料来源：[README.md:57-59]()\n\n## 系统要求与依赖\n\nmemoraeu-mcp 的部署需要以下依赖环境：\n\n### Python 依赖\n\n| 依赖包 | 版本要求 | 用途 |\n|--------|----------|------|\n| `mcp` | ≥1.1.0, <1.2.0 | MCP 协议实现 |\n| `httpx` | 0.28.1 | HTTP 客户端 |\n| `python-dotenv` | 1.0.1 | 环境变量管理 |\n| `starlette` | ≥0.40.0, <0.42.0 | ASGI 框架 |\n| `cryptography` | ≥42.0.0 | 加密功能 |\n\n资料来源：[requirements.txt:1-5]()\n\n### 运行时环境\n\n- **Python**: 3.9+\n- **包管理器**: UV（推荐）或 pip\n- **网络**: 需要访问 `api.memoraeu.com` 和 `api.mistral.ai`\n\n## 部署检查清单\n\n| 检查项 | 说明 | 优先级 |\n|--------|------|--------|\n| ✅ 创建 MemoraEU 账户 | 注册并获取 API 访问权限 | 必须 |\n| ✅ 获取 API 密钥 | 在仪表板获取 `MEMORAEU_API_KEY` | 必须 |\n| ✅ 获取加密盐值 | 获取唯一的 `MEMORAEU_SALT` | 必须 |\n| ✅ 配置账户密码 | 设置 `MEMORAEU_SECRET` | 必须 |\n| ✅ 获取 Mistral API 密钥 | 用于零知识语义搜索 | 推荐 |\n| ✅ 配置 `claude_desktop_config.json` | 添加 MCP 服务器配置 | 必须 |\n| ✅ 验证加密连接 | 确认锁图标显示 🔒 | 推荐 |\n\n## 安全建议\n\n1. **使用强密码**：作为 `MEMORAEU_SECRET`，使用高强度密码以增强密钥派生质量\n\n2. **保护盐值**：`MEMORAEU_SALT` 与账户绑定，不应共享\n\n3. **Mistral API 密钥安全**：该密钥仅在本地使用，应妥善保管\n\n4. **定期轮换**：定期更新 API 密钥和加密盐值\n\n5. **网络传输**：即使使用 HTTPS，远程 SSE 模式下的数据传输仍为明文，仅加密存储\n\n资料来源：[README.md:11-15]()\n\n## 故障排除\n\n### 常见问题\n\n| 问题 | 可能原因 | 解决方案 |\n|------|----------|----------|\n| 语义搜索不工作 | 缺少 `MISTRAL_API_KEY` | 配置 Mistral API 密钥 |\n| 加密失败 | `MEMORAEU_SECRET` 或 `MEMORAEU_SALT` 错误 | 检查环境变量配置 |\n| 连接超时 | 网络问题或 API 端点错误 | 确认 `MEMORAEU_API_URL` 正确 |\n| 无法启动 | uvx 未安装 | 安装 UV：`pip install uv` |\n\n### 验证部署\n\n启动后，可通过以下方式验证零知识加密是否生效：\n\n1. 检查 `recall` 工具返回的记忆内容是否显示 🔒 图标\n2. 确认 `forget` 工具能正常删除记忆\n3. 验证在未提供 `MEMORAEU_SECRET` 的情况下无法解密数据\n\n资料来源：[memoraeu_mcp/main.py:120-130]()\n\n---\n\n---\n\n## Doramagic 踩坑日志\n\n项目：pquattro/memoraeu-mcp\n\n摘要：发现 7 个潜在踩坑项，其中 0 个为 high/blocking；最高优先级：配置坑 - 可能修改宿主 AI 配置。\n\n## 1. 配置坑 · 可能修改宿主 AI 配置\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主，或安装命令涉及用户配置目录。\n- 对用户的影响：安装可能改变本机 AI 工具行为，用户需要知道写入位置和回滚方法。\n- 建议检查：列出会写入的配置文件、目录和卸载/回滚步骤。\n- 防护动作：涉及宿主配置目录时必须给回滚路径，不能只给安装命令。\n- 证据：capability.host_targets | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | host_targets=mcp_host, claude\n\n## 2. 能力坑 · 能力判断依赖假设\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：README/documentation is current enough for a first validation pass.\n- 对用户的影响：假设不成立时，用户拿不到承诺的能力。\n- 建议检查：将假设转成下游验证清单。\n- 防护动作：假设必须转成验证项；没有验证结果前不能写成事实。\n- 证据：capability.assumptions | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | README/documentation is current enough for a first validation pass.\n\n## 3. 维护坑 · 维护活跃度未知\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：未记录 last_activity_observed。\n- 对用户的影响：新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。\n- 建议检查：补 GitHub 最近 commit、release、issue/PR 响应信号。\n- 防护动作：维护活跃度未知时，推荐强度不能标为高信任。\n- 证据：evidence.maintainer_signals | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | last_activity_observed missing\n\n## 4. 安全/权限坑 · 下游验证发现风险项\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：下游已经要求复核，不能在页面中弱化。\n- 建议检查：进入安全/权限治理复核队列。\n- 防护动作：下游风险存在时必须保持 review/recommendation 降级。\n- 证据：downstream_validation.risk_items | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | no_demo; severity=medium\n\n## 5. 安全/权限坑 · 存在评分风险\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：风险会影响是否适合普通用户安装。\n- 建议检查：把风险写入边界卡，并确认是否需要人工复核。\n- 防护动作：评分风险必须进入边界卡，不能只作为内部分数。\n- 证据：risks.scoring_risks | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | no_demo; severity=medium\n\n## 6. 维护坑 · issue/PR 响应质量未知\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：issue_or_pr_quality=unknown。\n- 对用户的影响：用户无法判断遇到问题后是否有人维护。\n- 建议检查：抽样最近 issue/PR，判断是否长期无人处理。\n- 防护动作：issue/PR 响应未知时，必须提示维护风险。\n- 证据：evidence.maintainer_signals | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | issue_or_pr_quality=unknown\n\n## 7. 维护坑 · 发布节奏不明确\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：release_recency=unknown。\n- 对用户的影响：安装命令和文档可能落后于代码，用户踩坑概率升高。\n- 建议检查：确认最近 release/tag 和 README 安装命令是否一致。\n- 防护动作：发布节奏未知或过期时，安装说明必须标注可能漂移。\n- 证据：evidence.maintainer_signals | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | release_recency=unknown\n\n<!-- canonical_name: pquattro/memoraeu-mcp; human_manual_source: deepwiki_human_wiki -->\n",
      "markdown_key": "memoraeu-mcp",
      "pages": "draft",
      "source_refs": [
        {
          "evidence_id": "github_repo:1215050856",
          "kind": "repo",
          "supports_claim_ids": [
            "claim_identity",
            "claim_distribution",
            "claim_capability"
          ],
          "url": "https://github.com/pquattro/memoraeu-mcp"
        },
        {
          "evidence_id": "art_b715631d1f33478782bb801a9cb243c4",
          "kind": "docs",
          "supports_claim_ids": [
            "claim_identity",
            "claim_distribution",
            "claim_capability"
          ],
          "url": "https://github.com/pquattro/memoraeu-mcp#readme"
        }
      ],
      "summary": "DeepWiki/Human Wiki 完整输出，末尾追加 Discovery Agent 踩坑日志。",
      "title": "memoraeu-mcp 说明书",
      "toc": [
        "https://github.com/pquattro/memoraeu-mcp 项目说明书",
        "目录",
        "项目概述",
        "项目简介",
        "核心设计理念",
        "技术架构",
        "部署模式",
        "核心工具与功能",
        "Doramagic 踩坑日志"
      ]
    }
  },
  "quality_gate": {
    "blocking_gaps": [],
    "category_confidence": "medium",
    "compile_status": "ready_for_review",
    "five_assets_present": true,
    "install_sandbox_verified": true,
    "missing_evidence": [],
    "next_action": "publish to Doramagic.ai project surfaces",
    "prompt_preview_boundary_ok": true,
    "publish_status": "publishable",
    "quick_start_verified": true,
    "repo_clone_verified": true,
    "repo_commit": "5600d79e94ffc31019ff0cc0fd4f59613c31b04d",
    "repo_inspection_error": null,
    "repo_inspection_files": [
      "pyproject.toml",
      "README.md",
      "requirements.txt"
    ],
    "repo_inspection_verified": true,
    "review_reasons": [
      "community_discussion_evidence_below_public_threshold"
    ],
    "tag_count_ok": true,
    "unsupported_claims": []
  },
  "schema_version": "0.1",
  "user_assets": {
    "ai_context_pack": {
      "asset_id": "ai_context_pack",
      "filename": "AI_CONTEXT_PACK.md",
      "markdown": "# memoraeu-mcp - Doramagic AI Context Pack\n\n> 定位：安装前体验与判断资产。它帮助宿主 AI 有一个好的开始，但不代表已经安装、执行或验证目标项目。\n\n## 充分原则\n\n- **充分原则，不是压缩原则**：AI Context Pack 应该充分到让宿主 AI 在开工前理解项目价值、能力边界、使用入口、风险和证据来源；它可以分层组织，但不以最短摘要为目标。\n- **压缩策略**：只压缩噪声和重复内容，不压缩会影响判断和开工质量的上下文。\n\n## 给宿主 AI 的使用方式\n\n你正在读取 Doramagic 为 memoraeu-mcp 编译的 AI Context Pack。请把它当作开工前上下文：帮助用户理解适合谁、能做什么、如何开始、哪些必须安装后验证、风险在哪里。不要声称你已经安装、运行或执行了目标项目。\n\n## Claim 消费规则\n\n- **事实来源**：Repo Evidence + Claim/Evidence Graph；Human Wiki 只提供显著性、术语和叙事结构。\n- **事实最低状态**：`supported`\n- `supported`：可以作为项目事实使用，但回答中必须引用 claim_id 和证据路径。\n- `weak`：只能作为低置信度线索，必须要求用户继续核实。\n- `inferred`：只能用于风险提示或待确认问题，不能包装成项目事实。\n- `unverified`：不得作为事实使用，应明确说证据不足。\n- `contradicted`：必须展示冲突来源，不得替用户强行选择一个版本。\n\n## 它最适合谁\n\n- **正在使用 Claude/Codex/Cursor/Gemini 等宿主 AI 的开发者**：README 或插件配置提到多个宿主 AI。 证据：`README.md` Claim：`clm_0003` supported 0.86\n\n## 它能做什么\n\n- **多宿主安装与分发**（需要安装后验证）：项目包含插件或 marketplace 配置，说明它面向一个或多个 AI 宿主的安装和分发。 证据：`.claude-plugin/marketplace.json` Claim：`clm_0001` supported 0.86\n- **命令行启动或安装流程**（需要安装后验证）：项目文档中存在可执行命令，真实使用需要在本地或宿主环境中运行这些命令。 证据：`README.md` Claim：`clm_0002` supported 0.86\n\n## 怎么开始\n\n- `pip install memoraeu-mcp` 证据：`README.md` Claim：`clm_0004` supported 0.86\n- `git clone https://github.com/pquattro/memoraEu` 证据：`README.md` Claim：`clm_0005` supported 0.86\n\n## 继续前判断卡\n\n- **当前建议**：需要管理员/安全审批\n- **为什么**：继续前可能涉及密钥、账号、外部服务或敏感上下文，建议先经过管理员或安全审批。\n\n### 30 秒判断\n\n- **现在怎么做**：需要管理员/安全审批\n- **最小安全下一步**：先跑 Prompt Preview；若涉及凭证或企业环境，先审批再试装\n- **先别相信**：工具权限边界不能在安装前相信。\n- **继续会触碰**：命令执行、宿主 AI 配置、本地环境或项目文件\n\n### 现在可以相信\n\n- **适合人群线索：正在使用 Claude/Codex/Cursor/Gemini 等宿主 AI 的开发者**（supported）：有 supported claim 或项目证据支撑，但仍不等于真实安装效果。 证据：`README.md` Claim：`clm_0003` supported 0.86\n- **能力存在：多宿主安装与分发**（supported）：可以相信项目包含这类能力线索；是否适合你的具体任务仍要试用或安装后验证。 证据：`.claude-plugin/marketplace.json` Claim：`clm_0001` supported 0.86\n- **能力存在：命令行启动或安装流程**（supported）：可以相信项目包含这类能力线索；是否适合你的具体任务仍要试用或安装后验证。 证据：`README.md` Claim：`clm_0002` supported 0.86\n- **存在 Quick Start / 安装命令线索**（supported）：可以相信项目文档出现过启动或安装入口；不要因此直接在主力环境运行。 证据：`README.md` Claim：`clm_0004` supported 0.86\n\n### 现在还不能相信\n\n- **工具权限边界不能在安装前相信。**（unverified）：MCP/tool 类项目通常会触碰文件、网络、浏览器或外部 API，必须真实检查权限和日志。\n- **真实输出质量不能在安装前相信。**（unverified）：Prompt Preview 只能展示引导方式，不能证明真实项目中的结果质量。\n- **宿主 AI 版本兼容性不能在安装前相信。**（unverified）：Claude、Cursor、Codex、Gemini 等宿主加载规则和版本差异必须在真实环境验证。\n- **不会污染现有宿主 AI 行为，不能直接相信。**（inferred）：Skill、plugin、AGENTS/CLAUDE/GEMINI 指令可能改变宿主 AI 的默认行为。 证据：`.claude-plugin/marketplace.json`\n- **可安全回滚不能默认相信。**（unverified）：除非项目明确提供卸载和恢复说明，否则必须先在隔离环境验证。\n- **真实安装后是否与用户当前宿主 AI 版本兼容？**（unverified）：兼容性只能通过实际宿主环境验证。 证据：`.claude-plugin/marketplace.json`\n- **项目输出质量是否满足用户具体任务？**（unverified）：安装前预览只能展示流程和边界，不能替代真实评测。\n- **安装命令是否需要网络、权限或全局写入？**（unverified）：这影响企业环境和个人环境的安装风险。 证据：`README.md`\n\n### 继续会触碰什么\n\n- **命令执行**：包管理器、网络下载、本地插件目录、项目配置或用户主目录。 原因：运行第一条命令就可能产生环境改动；必须先判断是否值得跑。 证据：`README.md`\n- **宿主 AI 配置**：Claude/Codex/Cursor/Gemini/OpenCode 等宿主的 plugin、Skill 或规则加载配置。 原因：宿主配置会改变 AI 后续工作方式，可能和用户已有规则冲突。 证据：`.claude-plugin/marketplace.json`\n- **本地环境或项目文件**：安装结果、插件缓存、项目配置或本地依赖目录。 原因：安装前无法证明写入范围和回滚方式，需要隔离验证。 证据：`.claude-plugin/marketplace.json`, `README.md`\n- **环境变量 / API Key**：项目入口文档明确出现 API key、token、secret 或账号凭证配置。 原因：如果真实安装需要凭证，应先使用测试凭证并经过权限/合规判断。 证据：`README.md`, `memoraeu_mcp/main.py`, `server.json`, `server.py`\n- **宿主 AI 上下文**：AI Context Pack、Prompt Preview、Skill 路由、风险规则和项目事实。 原因：导入上下文会影响宿主 AI 后续判断，必须避免把未验证项包装成事实。\n\n### 最小安全下一步\n\n- **先跑 Prompt Preview**：用安装前交互式试用判断工作方式是否匹配，不需要授权或改环境。（适用：任何项目都适用，尤其是输出质量未知时。）\n- **只在隔离目录或测试账号试装**：避免安装命令污染主力宿主 AI、真实项目或用户主目录。（适用：存在命令执行、插件配置或本地写入线索时。）\n- **先备份宿主 AI 配置**：Skill、plugin、规则文件可能改变 Claude/Cursor/Codex 的默认行为。（适用：存在插件 manifest、Skill 或宿主规则入口时。）\n- **不要使用真实生产凭证**：环境变量/API key 一旦进入宿主或工具链，可能产生账号和合规风险。（适用：出现 API、TOKEN、KEY、SECRET 等环境线索时。）\n- **安装后只验证一个最小任务**：先验证加载、兼容、输出质量和回滚，再决定是否深用。（适用：准备从试用进入真实工作流时。）\n\n### 退出方式\n\n- **保留安装前状态**：记录原始宿主配置和项目状态，后续才能判断是否可恢复。\n- **准备移除宿主 plugin / Skill / 规则入口**：如果试装后行为异常，可以把宿主 AI 恢复到试装前状态。\n- **记录安装命令和写入路径**：没有明确卸载说明时，至少要知道哪些目录或配置需要手动清理。\n- **准备撤销测试 API key 或 token**：测试凭证泄露或误用时，可以快速止损。\n- **如果没有回滚路径，不进入主力环境**：不可回滚是继续前阻断项，不应靠信任或运气继续。\n\n## 哪些只能预览\n\n- 解释项目适合谁和能做什么\n- 基于项目文档演示典型对话流程\n- 帮助用户判断是否值得安装或继续研究\n\n## 哪些必须安装后验证\n\n- 真实安装 Skill、插件或 CLI\n- 执行脚本、修改本地文件或访问外部服务\n- 验证真实输出质量、性能和兼容性\n\n## 边界与风险判断卡\n\n- **把安装前预览误认为真实运行**：用户可能高估项目已经完成的配置、权限和兼容性验证。 处理方式：明确区分 prompt_preview_can_do 与 runtime_required。 Claim：`clm_0006` inferred 0.45\n- **宿主 AI 插件或 Skill 规则冲突**：新规则可能改变用户现有宿主 AI 的工作方式。 处理方式：安装前先检查插件 manifest 和 Skill 文件，必要时隔离测试。 证据：`.claude-plugin/marketplace.json` Claim：`clm_0007` supported 0.86\n- **命令执行会修改本地环境**：安装命令可能写入用户主目录、宿主插件目录或项目配置。 处理方式：先在隔离环境或测试账号中运行。 证据：`README.md` Claim：`clm_0008` supported 0.86\n- **待确认**：真实安装后是否与用户当前宿主 AI 版本兼容？。原因：兼容性只能通过实际宿主环境验证。\n- **待确认**：项目输出质量是否满足用户具体任务？。原因：安装前预览只能展示流程和边界，不能替代真实评测。\n- **待确认**：安装命令是否需要网络、权限或全局写入？。原因：这影响企业环境和个人环境的安装风险。\n\n## 开工前工作上下文\n\n### 加载顺序\n\n- 先读取 how_to_use.host_ai_instruction，建立安装前判断资产的边界。\n- 读取 claim_graph_summary，确认事实来自 Claim/Evidence Graph，而不是 Human Wiki 叙事。\n- 再读取 intended_users、capabilities 和 quick_start_candidates，判断用户是否匹配。\n- 需要执行具体任务时，优先查 role_skill_index，再查 evidence_index。\n- 遇到真实安装、文件修改、网络访问、性能或兼容性问题时，转入 risk_card 和 boundaries.runtime_required。\n\n### 任务路由\n\n- **多宿主安装与分发**：先说明这是安装后验证能力，再给出安装前检查清单。 边界：必须真实安装或运行后验证。 证据：`.claude-plugin/marketplace.json` Claim：`clm_0001` supported 0.86\n- **命令行启动或安装流程**：先说明这是安装后验证能力，再给出安装前检查清单。 边界：必须真实安装或运行后验证。 证据：`README.md` Claim：`clm_0002` supported 0.86\n\n### 上下文规模\n\n- 文件总数：15\n- 重要文件覆盖：15/15\n- 证据索引条目：15\n- 角色 / Skill 条目：2\n\n### 证据不足时的处理\n\n- **missing_evidence**：说明证据不足，要求用户提供目标文件、README 段落或安装后验证记录；不要补全事实。\n- **out_of_scope_request**：说明该任务超出当前 AI Context Pack 证据范围，并建议用户先查看 Human Manual 或真实安装后验证。\n- **runtime_request**：给出安装前检查清单和命令来源，但不要替用户执行命令或声称已执行。\n- **source_conflict**：同时展示冲突来源，标记为待核实，不要强行选择一个版本。\n\n## Prompt Recipes\n\n### 适配判断\n\n- 目标：判断这个项目是否适合用户当前任务。\n- 预期输出：适配结论、关键理由、证据引用、安装前可预览内容、必须安装后验证内容、下一步建议。\n\n```text\n请基于 memoraeu-mcp 的 AI Context Pack，先问我 3 个必要问题，然后判断它是否适合我的任务。回答必须包含：适合谁、能做什么、不能做什么、是否值得安装、证据来自哪里。所有项目事实必须引用 evidence_refs、source_paths 或 claim_id。\n```\n\n### 安装前体验\n\n- 目标：让用户在安装前感受核心工作流，同时避免把预览包装成真实能力或营销承诺。\n- 预期输出：一段带边界标签的体验剧本、安装后验证清单和谨慎建议；不含真实运行承诺或强营销表述。\n\n```text\n请把 memoraeu-mcp 当作安装前体验资产，而不是已安装工具或真实运行环境。\n\n请严格输出四段：\n1. 先问我 3 个必要问题。\n2. 给出一段“体验剧本”：用 [安装前可预览]、[必须安装后验证]、[证据不足] 三种标签展示它可能如何引导工作流。\n3. 给出安装后验证清单：列出哪些能力只有真实安装、真实宿主加载、真实项目运行后才能确认。\n4. 给出谨慎建议：只能说“值得继续研究/试装”“先补充信息后再判断”或“不建议继续”，不得替项目背书。\n\n硬性边界：\n- 不要声称已经安装、运行、执行测试、修改文件或产生真实结果。\n- 不要写“自动适配”“确保通过”“完美适配”“强烈建议安装”等承诺性表达。\n- 如果描述安装后的工作方式，必须使用“如果安装成功且宿主正确加载 Skill，它可能会……”这种条件句。\n- 体验剧本只能写成“示例台词/假设流程”：使用“可能会询问/可能会建议/可能会展示”，不要写“已写入、已生成、已通过、正在运行、正在生成”。\n- Prompt Preview 不负责给安装命令；如用户准备试装，只能提示先阅读 Quick Start 和 Risk Card，并在隔离环境验证。\n- 所有项目事实必须来自 supported claim、evidence_refs 或 source_paths；inferred/unverified 只能作风险或待确认项。\n\n```\n\n### 角色 / Skill 选择\n\n- 目标：从项目里的角色或 Skill 中挑选最匹配的资产。\n- 预期输出：候选角色或 Skill 列表，每项包含适用场景、证据路径、风险边界和是否需要安装后验证。\n\n```text\n请读取 role_skill_index，根据我的目标任务推荐 3-5 个最相关的角色或 Skill。每个推荐都要说明适用场景、可能输出、风险边界和 evidence_refs。\n```\n\n### 风险预检\n\n- 目标：安装或引入前识别环境、权限、规则冲突和质量风险。\n- 预期输出：环境、权限、依赖、许可、宿主冲突、质量风险和未知项的检查清单。\n\n```text\n请基于 risk_card、boundaries 和 quick_start_candidates，给我一份安装前风险预检清单。不要替我执行命令，只说明我应该检查什么、为什么检查、失败会有什么影响。\n```\n\n### 宿主 AI 开工指令\n\n- 目标：把项目上下文转成一次对话开始前的宿主 AI 指令。\n- 预期输出：一段边界明确、证据引用明确、适合复制给宿主 AI 的开工前指令。\n\n```text\n请基于 memoraeu-mcp 的 AI Context Pack，生成一段我可以粘贴给宿主 AI 的开工前指令。这段指令必须遵守 not_runtime=true，不能声称项目已经安装、运行或产生真实结果。\n```\n\n\n## 角色 / Skill 索引\n\n- 共索引 2 个角色 / Skill / 项目文档条目。\n\n- **memoraeu-mcp**（project_doc）：🇬🇧 English english 🇫🇷 Français français 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`README.md`\n- **Changelog**（project_doc）：All notable changes to memoraeu-mcp are documented here. Toutes les modifications notables sont documentées ici. 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`CHANGELOG.md`\n\n## 证据索引\n\n- 共索引 15 条证据。\n\n- **memoraeu-mcp**（documentation）：🇬🇧 English english 🇫🇷 Français français 证据：`README.md`\n- **Marketplace**（structured_config）：{ \"name\": \"memoraeu\", \"owner\": { \"name\": \"MemoraEU\", \"email\": \"contact@memoraeu.com\", \"url\": \"https://memoraeu.com\" }, \"plugins\": { \"name\": \"memoraeu-mcp\", \"source\": \"./\", \"description\": \"Zero-knowledge persistent memory for Claude — encrypted, semantic search, EU hosted.\", \"version\": \"0.1.7\" } } 证据：`.claude-plugin/marketplace.json`\n- **License**（source_file）：Copyright c 2026 Philippe Quattrociocchi 证据：`LICENSE`\n- **Changelog**（documentation）：All notable changes to memoraeu-mcp are documented here. Toutes les modifications notables sont documentées ici. 证据：`CHANGELOG.md`\n- **Server**（structured_config）：{ \"$schema\": \"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json\", \"name\": \"io.github.pquattro/memoraeu-mcp\", \"title\": \"MemoraEU\", \"description\": \"Zero-knowledge persistent memory for Claude — encrypted, semantic search, EU hosted.\", \"repository\": { \"url\": \"https://github.com/pquattro/memoraeu-mcp.git\", \"source\": \"github\" }, \"version\": \"0.1.2\", \"packages\": { \"registryType\": \"pypi\", \"identifier\": \"memoraeu-mcp\", \"version\": \"0.1.2\", \"runtimeHint\": \"uvx\", \"transport\": { \"type\": \"stdio\" }, \"environmentVariables\": { \"name\": \"MEMORAEU API URL\", \"description\": \"MemoraEU API endpoint default: https://api.memoraeu.com \", \"isRequired\": false, \"isSecret\": false }, { \"name\": \"… 证据：`server.json`\n- **.gitignore**（source_file）：pycache / .pyc .pyo dist/ build/ .egg-info/ .env .env. .db 证据：`.gitignore`\n- **Salt fixe par installation stocké dans .env**（source_file）：\"\"\" MemoraEU — Chiffrement zero-knowledge côté client AES-256-GCM + PBKDF2-HMAC-SHA256 证据：`crypto.py`\n- **Init**（source_file）：\"\"\"memoraeu-mcp — Zero-knowledge MCP server for MemoraEU.\"\"\" version = \"0.1.2\" 证据：`memoraeu_mcp/__init__.py`\n- **M6 — 210 000 itérations recommandation OWASP 2024 pour PBKDF2-SHA256**（source_file）：\"\"\" MemoraEU — Chiffrement zero-knowledge côté client AES-256-GCM + PBKDF2-HMAC-SHA256 证据：`memoraeu_mcp/crypto.py`\n- **Mémorisation automatique**（source_file）：\"\"\" MemoraEU MCP Server Transport : stdio Claude Desktop 证据：`memoraeu_mcp/main.py`\n- **Server**（source_file）：\"\"\"Entry point pour memoraeu-mcp installé via pip/uvx.\"\"\" import asyncio 证据：`memoraeu_mcp/server.py`\n- **Pyproject**（source_file）：build-system requires = \"hatchling\" build-backend = \"hatchling.build\" 证据：`pyproject.toml`\n- **Requirements**（source_file）：mcp =1.1.0, =0.40.0, =42.0.0 证据：`requirements.txt`\n- **Mémorisation automatique**（source_file）：\"\"\" MemoraEU MCP Server Transport : stdio Claude Desktop 证据：`server.py`\n- **Smithery**（source_file）：configSchema: type: object required: - apiKey properties: apiKey: type: string title: \"MemoraEU API Key\" description: \"Your API key from app.memoraeu.com → Settings → API Keys\" x-from: header: \"x-memoraeu-api-key\" x-to: query: \"token\" 证据：`smithery.yaml`\n\n## 宿主 AI 必须遵守的规则\n\n- **把本资产当作开工前上下文，而不是运行环境。**：AI Context Pack 只包含证据化项目理解，不包含目标项目的可执行状态。 证据：`README.md`, `.claude-plugin/marketplace.json`, `LICENSE`\n- **回答用户时区分可预览内容与必须安装后才能验证的内容。**：安装前体验的消费者价值来自降低误装和误判，而不是伪装成真实运行。 证据：`README.md`, `.claude-plugin/marketplace.json`, `LICENSE`\n\n## 用户开工前应该回答的问题\n\n- 你准备在哪个宿主 AI 或本地环境中使用它？\n- 你只是想先体验工作流，还是准备真实安装？\n- 你最在意的是安装成本、输出质量、还是和现有规则的冲突？\n\n## 验收标准\n\n- 所有能力声明都能回指到 evidence_refs 中的文件路径。\n- AI_CONTEXT_PACK.md 没有把预览包装成真实运行。\n- 用户能在 3 分钟内看懂适合谁、能做什么、如何开始和风险边界。\n\n---\n\n## Doramagic Context Augmentation\n\n下面内容用于强化 Repomix/AI Context Pack 主体。Human Manual 只提供阅读骨架；踩坑日志会被转成宿主 AI 必须遵守的工作约束。\n\n## Human Manual 骨架\n\n使用规则：这里只是项目阅读路线和显著性信号，不是事实权威。具体事实仍必须回到 repo evidence / Claim Graph。\n\n宿主 AI 硬性规则：\n- 不得把页标题、章节顺序、摘要或 importance 当作项目事实证据。\n- 解释 Human Manual 骨架时，必须明确说它只是阅读路线/显著性信号。\n- 能力、安装、兼容性、运行状态和风险判断必须引用 repo evidence、source path 或 Claim Graph。\n\n- **项目概述**：importance `high`\n  - source_paths: README.md, memoraeu_mcp/__init__.py\n- **快速开始**：importance `high`\n  - source_paths: README.md, pyproject.toml, requirements.txt\n- **系统架构**：importance `high`\n  - source_paths: memoraeu_mcp/main.py, memoraeu_mcp/server.py, server.py\n- **加密系统**：importance `high`\n  - source_paths: memoraeu_mcp/crypto.py, crypto.py\n- **MCP 工具详解**：importance `high`\n  - source_paths: memoraeu_mcp/main.py, server.json\n- **自动记忆机制**：importance `medium`\n  - source_paths: memoraeu_mcp/main.py\n- **去重与压缩**：importance `medium`\n  - source_paths: memoraeu_mcp/main.py\n- **配置与密钥管理**：importance `high`\n  - source_paths: README.md, memoraeu_mcp/main.py, server.json\n\n## Repo Inspection Evidence / 源码检查证据\n\n- repo_clone_verified: true\n- repo_inspection_verified: true\n- repo_commit: `5600d79e94ffc31019ff0cc0fd4f59613c31b04d`\n- inspected_files: `pyproject.toml`, `README.md`, `requirements.txt`\n\n宿主 AI 硬性规则：\n- 没有 repo_clone_verified=true 时，不得声称已经读过源码。\n- 没有 repo_inspection_verified=true 时，不得把 README/docs/package 文件判断写成事实。\n- 没有 quick_start_verified=true 时，不得声称 Quick Start 已跑通。\n\n## Doramagic Pitfall Constraints / 踩坑约束\n\n这些规则来自 Doramagic 发现、验证或编译过程中的项目专属坑点。宿主 AI 必须把它们当作工作约束，而不是普通说明文字。\n\n### Constraint 1: 可能修改宿主 AI 配置\n\n- Trigger: 项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主，或安装命令涉及用户配置目录。\n- Host AI rule: 列出会写入的配置文件、目录和卸载/回滚步骤。\n- Why it matters: 安装可能改变本机 AI 工具行为，用户需要知道写入位置和回滚方法。\n- Evidence: capability.host_targets | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | host_targets=mcp_host, claude\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 2: 能力判断依赖假设\n\n- Trigger: README/documentation is current enough for a first validation pass.\n- Host AI rule: 将假设转成下游验证清单。\n- Why it matters: 假设不成立时，用户拿不到承诺的能力。\n- Evidence: capability.assumptions | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | README/documentation is current enough for a first validation pass.\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 3: 维护活跃度未知\n\n- Trigger: 未记录 last_activity_observed。\n- Host AI rule: 补 GitHub 最近 commit、release、issue/PR 响应信号。\n- Why it matters: 新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。\n- Evidence: evidence.maintainer_signals | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | last_activity_observed missing\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 4: 下游验证发现风险项\n\n- Trigger: no_demo\n- Host AI rule: 进入安全/权限治理复核队列。\n- Why it matters: 下游已经要求复核，不能在页面中弱化。\n- Evidence: downstream_validation.risk_items | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | no_demo; severity=medium\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 5: 存在评分风险\n\n- Trigger: no_demo\n- Host AI rule: 把风险写入边界卡，并确认是否需要人工复核。\n- Why it matters: 风险会影响是否适合普通用户安装。\n- Evidence: risks.scoring_risks | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | no_demo; severity=medium\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 6: issue/PR 响应质量未知\n\n- Trigger: issue_or_pr_quality=unknown。\n- Host AI rule: 抽样最近 issue/PR，判断是否长期无人处理。\n- Why it matters: 用户无法判断遇到问题后是否有人维护。\n- Evidence: evidence.maintainer_signals | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | issue_or_pr_quality=unknown\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 7: 发布节奏不明确\n\n- Trigger: release_recency=unknown。\n- Host AI rule: 确认最近 release/tag 和 README 安装命令是否一致。\n- Why it matters: 安装命令和文档可能落后于代码，用户踩坑概率升高。\n- Evidence: evidence.maintainer_signals | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | release_recency=unknown\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n",
      "summary": "给宿主 AI 的上下文和工作边界。",
      "title": "AI Context Pack / 带给我的 AI"
    },
    "boundary_risk_card": {
      "asset_id": "boundary_risk_card",
      "filename": "BOUNDARY_RISK_CARD.md",
      "markdown": "# Boundary & Risk Card / 安装前决策卡\n\n项目：pquattro/memoraeu-mcp\n\n## Doramagic 试用结论\n\n当前结论：可以进入发布前推荐检查；首次使用仍应从最小权限、临时目录和可回滚配置开始。\n\n## 用户现在可以做\n\n- 可以先阅读 Human Manual，理解项目目的和主要工作流。\n- 可以复制 Prompt Preview 做安装前体验；这只验证交互感，不代表真实运行。\n- 可以把官方 Quick Start 命令放到隔离环境中验证，不要直接进主力环境。\n\n## 现在不要做\n\n- 不要把 Prompt Preview 当成项目实际运行结果。\n- 不要把 metadata-only validation 当成沙箱安装验证。\n- 不要把未验证能力写成“已支持、已跑通、可放心安装”。\n- 不要在首次试用时交出生产数据、私人文件、真实密钥或主力配置目录。\n\n## 安装前检查\n\n- 宿主 AI 是否匹配：mcp_host, claude\n- 官方安装入口状态：已发现官方入口\n- 是否在临时目录、临时宿主或容器中验证：必须是\n- 是否能回滚配置改动：必须能\n- 是否需要 API Key、网络访问、读写文件或修改宿主配置：未确认前按高风险处理\n- 是否记录了安装命令、实际输出和失败日志：必须记录\n\n## 当前阻塞项\n\n- review_required: community_discussion_evidence_below_public_threshold\n\n## 项目专属踩坑\n\n- 可能修改宿主 AI 配置（medium）：安装可能改变本机 AI 工具行为，用户需要知道写入位置和回滚方法。 建议检查：列出会写入的配置文件、目录和卸载/回滚步骤。\n- 能力判断依赖假设（medium）：假设不成立时，用户拿不到承诺的能力。 建议检查：将假设转成下游验证清单。\n- 维护活跃度未知（medium）：新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。 建议检查：补 GitHub 最近 commit、release、issue/PR 响应信号。\n- 下游验证发现风险项（medium）：下游已经要求复核，不能在页面中弱化。 建议检查：进入安全/权限治理复核队列。\n- 存在评分风险（medium）：风险会影响是否适合普通用户安装。 建议检查：把风险写入边界卡，并确认是否需要人工复核。\n\n## 风险与权限提示\n\n- no_demo: medium\n\n## 证据缺口\n\n- 暂未发现结构化证据缺口。\n",
      "summary": "安装、权限、验证和推荐前风险。",
      "title": "Boundary & Risk Card / 边界与风险卡"
    },
    "human_manual": {
      "asset_id": "human_manual",
      "filename": "HUMAN_MANUAL.md",
      "markdown": "# https://github.com/pquattro/memoraeu-mcp 项目说明书\n\n生成时间：2026-05-14 10:05:53 UTC\n\n## 目录\n\n- [项目概述](#page-overview)\n- [快速开始](#page-quickstart)\n- [系统架构](#page-architecture)\n- [加密系统](#page-encryption)\n- [MCP 工具详解](#page-mcp-tools)\n- [自动记忆机制](#page-auto-memory)\n- [去重与压缩](#page-dedup-compression)\n- [配置与密钥管理](#page-configuration)\n- [自托管部署](#page-selfhosting)\n\n<a id='page-overview'></a>\n\n## 项目概述\n\n### 相关页面\n\n相关主题：[快速开始](#page-quickstart), [系统架构](#page-architecture)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n- [CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n</details>\n\n# 项目概述\n\n## 项目简介\n\n**memoraeu-mcp** 是一个基于 Model Context Protocol (MCP) 的零知识记忆服务器，用于为 AI 助手（如 Claude）提供持久化、加密的记忆能力。该项目使 AI 能够在多个会话之间记住用户偏好、决策、重要事实和技术配置，同时确保数据在传输和存储过程中的隐私安全。资料来源：[README.md]()\n\n## 核心设计理念\n\nmemoraeu-mcp 遵循**零知识（Zero-Knowledge）架构**，核心原则包括：\n\n- **客户端加密**：所有敏感数据在离开用户设备前完成加密，服务器仅存储密文\n- **本地嵌入生成**：使用 Mistral API 在本地生成文本向量嵌入，确保明文不出设备\n- **自动记忆行为**：AI 助手根据工具描述自动执行记忆操作，无需用户手动干预\n\n## 技术架构\n\n### 系统组件\n\n```mermaid\ngraph TD\n    subgraph 客户端本地\n        A[Claude Desktop] --> B[memoraeu-mcp MCP Server]\n        B --> C[加密模块]\n        C --> D[压缩模块]\n        D --> E[嵌入生成 Mistral API]\n    end\n    \n    subgraph 远程服务\n        E --> F[MemoraEU API]\n        F --> G[(加密存储)]\n    end\n    \n    style A fill:#e1f5fe\n    style F fill:#fff3e0\n    style G fill:#ffebee\n```\n\n### 依赖技术栈\n\n| 组件 | 技术选型 | 版本要求 | 用途 |\n|------|----------|----------|------|\n| MCP SDK | `mcp` | ≥1.1.0, <1.2.0 | MCP 协议实现 |\n| HTTP 客户端 | `httpx` | 0.28.1 | API 通信 |\n| Web 框架 | `starlette` | ≥0.40.0, <0.42.0 | SSE 支持 |\n| 加密库 | `cryptography` | ≥42.0.0 | AES-256-GCM 加密 |\n| 配置管理 | `python-dotenv` | 1.0.1 | 环境变量加载 |\n\n资料来源：[requirements.txt]()\n\n## 部署模式\n\nmemoraeu-mcp 支持两种部署模式，适用于不同的安全需求场景：\n\n### 本地 Stdio 模式\n\n该模式提供完整的零知识保证，适合处理高度敏感信息。\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"command\": \"uvx\",\n      \"args\": [\"memoraeu-mcp\"],\n      \"env\": {\n        \"MEMORAEU_API_URL\": \"https://api.memoraeu.com\",\n        \"MEMORAEU_API_KEY\": \"meu-sk-...\",\n        \"MEMORAEU_SECRET\": \"your-memoraeu-password\",\n        \"MEMORAEU_SALT\": \"your-kdf-salt\",\n        \"MISTRAL_API_KEY\": \"your-mistral-key\"\n      }\n    }\n  }\n}\n```\n\n资料来源：[README.md]()\n\n### 远程 SSE 模式\n\n该模式通过 Server-Sent Events 连接到远程服务，适合无本地安装条件的场景。\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"type\": \"sse\",\n      \"url\": \"https://api.memoraeu.com/mcp/sse\",\n      \"headers\": {\n        \"Authorization\": \"Bearer meu-sk-...\"\n      }\n    }\n  }\n}\n```\n\n> **安全提示**：远程 SSE 模式下，内容不以零知识方式处理，服务器会看到明文。资料来源：[README.md]()\n\n## 核心工具与功能\n\n### 记忆工具集\n\n| 工具名称 | 功能描述 | 自动执行 |\n|----------|----------|----------|\n| `remember` | 自动记忆重要信息 | ✅ 会话中检测到关键信息时 |\n| `recall` | 语义搜索记忆库 | ✅ 首条用户消息时 |\n| `forget` | 按 ID 删除记忆 | ❌ 需手动调用 |\n| `list_memories` | 列出最近记忆 | ❌ 需手动调用 |\n| `list_categories` | 返回分类统计 | ❌ 需手动调用 |\n| `remember_fact` | 存储结构化事实 | ❌ 需手动调用 |\n| `recall_facts` | 检索主题相关事实 | ❌ 需手动调用 |\n| `invalidate_fact` | 标记事实过期 | ❌ 需手动调用 |\n\n资料来源：[README.md](), [memoraeu_mcp/main.py]()\n\n### 自动记忆行为\n\nmemoraeu-mcp 设计为无需手动干预即可工作，行为逻辑如下：\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant M as MemoraEU MCP\n    participant API as MemoraEU API\n    \n    Note over U,M: 会话开始\n    U->>M: 首条消息\n    M->>M: recall 自动执行\n    M->>API: 搜索相关记忆\n    API-->>M: 返回结果\n    M-->>U: 注入上下文\n    \n    Note over U,M: 交互过程中\n    U->>M: 表达偏好/决策\n    M->>M: 检测到持久信息\n    M->>M: remember 自动执行\n    M->>API: 存储加密记忆\n    M-->>U: 确认（单行）\n```\n\n**自动执行规则**：\n- `recall` 在每个会话首条消息时自动调用，查询与主题相关的记忆\n- `remember` 在检测到偏好、决策、传记事实或技术配置时自动执行\n- 首次 recall 时自动注入完整系统提示，强化自动记忆规则\n\n资料来源：[README.md]()\n\n## 数据安全机制\n\n### 加密流程\n\n```mermaid\ngraph LR\n    A[明文内容] --> B[Mistral API<br/>生成嵌入]\n    B --> C[AES-256-GCM<br/>加密内容]\n    C --> D[加密内容 + 嵌入<br/>发送到服务器]\n    \n    style A fill:#ffebee\n    style D fill:#e8f5e9\n```\n\n### 密钥派生与加密\n\n| 参数 | 来源 | 用途 |\n|------|------|------|\n| `MEMORAEU_SECRET` | 用户登录密码 | PBKDF2 输入 |\n| `MEMORAEU_SALT` | 服务器生成 | KDF 盐值 |\n| PBKDF2 迭代次数 | 210,000 | OWASP 2024 推荐值 |\n\n加密后的密文使用 `ENCv1:` 前缀标识，格式如下：\n\n```\nENCv1:<base64编码的密文>\n```\n\n资料来源：[CHANGELOG.md](), [memoraeu_mcp/main.py]()\n\n### 去重与压缩\n\n在存储前，系统会执行以下预处理：\n\n1. **本地压缩**：使用 Mistral API 对明文进行压缩\n2. **本地分类**：自动建议或验证分类\n3. **向量相似度检测**：与现有记忆比较相似度\n\n| 相似度阈值 | 处理动作 |\n|------------|----------|\n| ≥ 94% | 跳过存储，提示重复 |\n| < 94% | 正常存储，输出警告 |\n\n资料来源：[README.md](), [memoraeu_mcp/main.py]()\n\n## API 交互\n\n### 内部 API 端点\n\n| 端点 | 方法 | 用途 |\n|------|------|------|\n| `/memories` | GET/POST | 列表/创建记忆 |\n| `/memories/search` | POST | 语义搜索 |\n| `/memories/{id}` | DELETE | 删除记忆 |\n| `/memories/categories` | GET | 获取分类统计 |\n| `/facts` | GET/POST | 结构化事实管理 |\n\n### 资源注入\n\n系统通过 MCP 资源机制提供上下文注入：\n\n- **资源 URI**：`memoraeu://context`\n- **资源名称**：Contexte mémoire MemoraEU\n- **用途**：会话开始时自动加载最近记忆到上下文\n\n资料来源：[memoraeu_mcp/main.py]()\n\n## 版本历史\n\n| 版本 | 日期 | 主要变更 |\n|------|------|----------|\n| 0.1.9 | 2026-05-12 | 新增结构化事实工具、PBKDF2 迭代增至 210k |\n| 0.1.5 | 2026-04-28 | PBKDF2 增强、密文前缀 ENCv1: |\n\n资料来源：[CHANGELOG.md]()\n\n## 应用场景\n\n### 适用场景\n\n- **个人 AI 助手**：Claude Desktop 与用户跨会话共享上下文\n- **开发团队知识库**：记住技术栈偏好、项目配置、代码规范\n- **客户服务会话**：AI 记住用户历史偏好和需求\n\n### 限制与注意事项\n\n- 远程 SSE 模式不具备零知识保证\n- 需要有效的 Mistral API Key 才能启用语义搜索\n- 语义搜索降级为关键词搜索时会话上下文仍加密\n\n## 许可证\n\n本项目采用 **AGPL v3** 开源许可证。资料来源：[CHANGELOG.md]()\n\n---\n\n<a id='page-quickstart'></a>\n\n## 快速开始\n\n### 相关页面\n\n相关主题：[项目概述](#page-overview), [配置与密钥管理](#page-configuration)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n- [server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n</details>\n\n# 快速开始\n\n本页面提供 MemoraEU MCP 服务器的完整快速入门指南，帮助用户在最短时间内完成安装、配置并开始使用零知识记忆系统。\n\n## 概述\n\n**MemoraEU MCP** 是一个基于 Model Context Protocol (MCP) 的零知识记忆服务器。它允许 AI 助手（如 Claude）在会话中自动存储和检索用户的重要信息，同时确保数据在传输和存储过程中始终保持加密状态。\n\n核心特性包括：\n\n- **零知识加密**：使用 AES-256-GCM 和 PBKDF2-HMAC-SHA256（210,000 次迭代）确保服务端无法访问明文内容\n- **本地 Embedding**：使用 Mistral Embed 在本地计算向量嵌入后再加密上传\n- **自动记忆行为**：AI 自动调用 `remember` 和 `recall`，无需用户手动触发\n- **去重压缩**：存储前通过向量相似度检测近重复内容，避免冗余存储\n\n资料来源：[README.md:1-20]()\n\n## 系统架构\n\n```mermaid\ngraph TD\n    subgraph \"客户端 (本地)\"\n        A[Claude / AI Assistant] --> B[MCP Client]\n        B --> C[MemoraEU MCP Server]\n        C --> D[加密模块]\n        D --> E[Mistral Embed]\n        C --> F[压缩模块]\n        C --> G[分类模块]\n    end\n    \n    subgraph \"服务端 (远程)\"\n        H[MemoraEU API] --> I[(加密存储)]\n        I --> J[向量索引]\n    end\n    \n    C -->|加密内容 + Embedding| H\n    E -->|向量| C\n    F -->|压缩后明文| D\n    G -->|分类结果| D\n    \n    style H fill:#ff6b6b,color:#fff\n    style D fill:#4ecdc4,color:#fff\n    style I fill:#ffe66d\n```\n\n## 前置条件\n\n在开始之前，请确保满足以下要求：\n\n| 要求 | 说明 |\n|------|------|\n| Python 版本 | Python 3.10+ |\n| 网络连接 | 需要访问 `api.memoraeu.com` 和 `console.mistral.ai`（可选） |\n| MemoraEU 账户 | 需在 [app.memoraeu.com](https://app.memoraeu.com) 注册 |\n| Mistral API Key | 用于本地 Embedding 生成（可选，但推荐） |\n\n## 安装方式\n\n### 方式一：远程 SSE 模式（即装即用）\n\n适用于不想安装本地服务的用户，通过 SSE 协议直接连接远程服务器。\n\n1. 在客户端配置中添加以下 JSON：\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"type\": \"sse\",\n      \"url\": \"https://api.memoraeu.com/mcp/sse\",\n      \"headers\": {\n        \"Authorization\": \"Bearer meu-sk-YOUR-API-KEY\"\n      }\n    }\n  }\n}\n```\n\n2. 支持的客户端：Claude.ai Web、Cursor、Windsurf 等支持 MCP 的应用\n\n资料来源：[README.md:45-55]()\n\n### 方式二：本地 stdio 模式（完整零知识保证）\n\n适用于需要最高安全级别的用户，所有处理均在本地完成。\n\n#### 步骤 1：获取 API 密钥\n\n1. 访问 [app.memoraeu.com](https://app.memoraeu.com) 创建账户\n2. 进入 **设置 → API 密钥** → 创建新密钥 → 复制 `MEMORAEU_API_KEY`\n3. 进入 **设置 → 加密密钥** → 复制 `MEMORAEU_SALT`\n4. 在 [console.mistral.ai](https://console.mistral.ai) 获取 `MISTRAL_API_KEY`\n\n资料来源：[README.md:35-43]()\n\n#### 步骤 2：配置环境变量\n\n```bash\nexport MEMORAEU_API_URL=\"https://api.memoraeu.com\"\nexport MEMORAEU_API_KEY=\"meu-sk-YOUR-API-KEY\"\nexport MEMORAEU_SECRET=\"your-memoraeu-password\"\nexport MEMORAEU_SALT=\"your-kdf-salt\"\nexport MISTRAL_API_KEY=\"your-mistral-key\"\n```\n\n#### 步骤 3：配置 MCP 客户端\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"command\": \"uvx\",\n      \"args\": [\"memoraeu-mcp\"],\n      \"env\": {\n        \"MEMORAEU_API_URL\": \"https://api.memoraeu.com\",\n        \"MEMORAEU_API_KEY\": \"meu-sk-YOUR-API-KEY\",\n        \"MEMORAEU_SECRET\": \"your-memoraeu-password\",\n        \"MEMORAEU_SALT\": \"your-kdf-salt\",\n        \"MISTRAL_API_KEY\": \"your-mistral-key\"\n      }\n    }\n  }\n}\n```\n\n资料来源：[README.md:20-34]()\n\n## 环境变量详解\n\n| 变量 | 用途 | 获取位置 | 必需 |\n|------|------|----------|------|\n| `MEMORAEU_API_KEY` | HTTP 认证的 Bearer Token | 设置 → API 密钥 | 是 |\n| `MEMORAEU_SECRET` | 账户登录密码，用于 PBKDF2 派生加密密钥 | 您的账户密码 | 是 |\n| `MEMORAEU_SALT` | 服务器为账户生成的唯一 KDF 盐值 | 设置 → 加密密钥 | 是 |\n| `MEMORAEU_API_URL` | API 端点地址 | — | 是 |\n| `MISTRAL_API_KEY` | 本地计算 Embedding（加密前） | console.mistral.ai | 推荐 |\n\n> **注意**：`MEMORAEU_SECRET` 和 `MEMORAEU_SALT` 的组合用于本地生成加密密钥。服务器仅存储密文，无法解密内容。\n\n资料来源：[README.md:35-43]()\n\n## 可用工具\n\n| 工具 | 功能 |\n|------|------|\n| `remember` | 自动记忆用户表达的重要信息（偏好、决策、传记事实、技术配置等） |\n| `recall` | 在会话开始时自动调用，基于语义搜索检索相关记忆 |\n| `forget` | 根据 ID 删除指定记忆 |\n| `list_memories` | 列出最近的记忆，支持按分类筛选 |\n| `list_categories` | 返回按使用频率排序的分类列表 |\n| `remember_fact` | 存储结构化事实（主体/谓词/对象），支持时间有效性 |\n| `recall_facts` | 检索指定主体的当前有效事实 |\n| `invalidate_fact` | 将指定事实标记为过期 |\n\n资料来源：[README.md:56-68]()\n\n### remember_fact 工具参数\n\n```json\n{\n  \"subject\": \"string\",      // 实体名称\n  \"predicate\": \"string\",    // 属性名称\n  \"object\": \"string\",       // 属性值\n  \"scope\": \"private|org\",   // 作用域，默认 private\n  \"valid_from\": \"YYYY-MM-DD\" // 生效日期\n}\n```\n\n资料来源：[server.py:1-50]()\n\n### recall 工具参数\n\n```json\n{\n  \"query\": \"string\",        // 语义搜索查询\n  \"limit\": 3,               // 结果数量限制，默认 3\n  \"category\": \"string\"       // 可选，按分类筛选\n}\n```\n\n资料来源：[memoraeu_mcp/main.py:1-30]()\n\n## 自动行为\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant M as MemoraEU MCP\n    participant A as MemoraEU API\n    \n    rect rgb(240, 248, 255)\n        Note over M: 会话开始\n        U->>M: 第一条消息\n        M->>M: 自动 recall(话题)\n        M->>A: 检索记忆\n        A-->>M: 返回结果\n        M->>U: 展示上下文\n    end\n    \n    rect rgb(255, 250, 240)\n        Note over M,U: 交互过程中\n        U->>M: 表达重要信息\n        M->>M: 检测到持久性信息\n        M->>M: 自动 remember()\n        M->>M: 本地压缩 + 分类\n        M->>M: 本地 Mistral Embed\n        M->>M: AES-256-GCM 加密\n        M->>A: 上传密文 + 向量\n        M->>U: 确认保存（单行）\n    end\n```\n\n### 自动记忆触发条件\n\n以下类型的信息会被自动记忆：\n\n- 用户偏好和习惯\n- 重要决策和结论\n- 个人事实（工作、位置、联系方式等）\n- 技术配置和约束（非敏感信息）\n- 重复出现的模式或约束\n\n以下信息**不会**被记忆：\n\n- 临时信息（当日天气、玩笑、临时计算）\n- 用户明确要求忽略的内容\n\n资料来源：[memoraeu_mcp/main.py:1-50]()\n\n## 去重与压缩\n\n在存储记忆前，系统会执行以下处理流程：\n\n```mermaid\ngraph TD\n    A[新记忆内容] --> B[本地压缩]\n    B --> C[本地分类]\n    C --> D[Mistral Embed]\n    D --> E[向量相似度检测]\n    E --> F{相似度 >= 94%}\n    F -->|是| G[跳过存储]\n    F -->|否| H{94% > 相似度 >= 85%}\n    H -->|是| I[警告并询问]\n    H -->|否| J[AES-256-GCM 加密]\n    J --> K[上传密文 + 向量]\n```\n\n| 相似度 | 处理动作 |\n|--------|----------|\n| ≥ 94% | 完全跳过，视为精确重复 |\n| 85% - 93% | 返回警告，询问用户是否仍要存储 |\n| < 85% | 正常存储 |\n\n资料来源：[README.md:70-80]()\n\n## 安全模型\n\n### 零知识保证\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│                        数据流加密                            │\n├─────────────────────────────────────────────────────────────┤\n│                                                             │\n│  明文内容                                                    │\n│     ↓                                                        │\n│  Mistral Embed (本地计算向量)                                │\n│     ↓                                                        │\n│  AES-256-GCM 加密 (PBKDF2-HMAC-SHA256 派生密钥)             │\n│     ↓                                                        │\n│  [ENCv1:盐值:IV:密文:Tag] 格式                               │\n│     ↓                                                        │\n│  发送给 MemoraEU API                                         │\n│                                                             │\n│  服务器存储：密文 + 向量（两者均无法单独解密原始内容）          │\n│                                                             │\n└─────────────────────────────────────────────────────────────┘\n```\n\n### 两种模式的区别\n\n| 特性 | stdio 本地模式 | SSE 远程模式 |\n|------|----------------|--------------|\n| 零知识保证 | 完整 | 部分（SSE 传输非端到端加密） |\n| 配置复杂度 | 较高 | 低 |\n| 密钥管理 | 本地 | 部分在远程 |\n| 适用场景 | 高安全需求 | 快速试用 |\n\n> **警告**：远程 SSE 模式下，传输内容未经端到端加密。建议仅在 stdio 本地模式下使用完整零知识保证。\n\n资料来源：[README.md:10-15]()\n\n## 依赖项\n\n| 依赖 | 版本 | 用途 |\n|------|------|------|\n| `mcp` | ≥1.1.0, <1.2.0 | Model Context Protocol 框架 |\n| `httpx` | 0.28.1 | HTTP 客户端 |\n| `python-dotenv` | 1.0.1 | 环境变量加载 |\n| `starlette` | ≥0.40.0, <0.42.0 | Web 框架（用于 SSE） |\n| `cryptography` | ≥42.0.0 | 加密实现 |\n\n资料来源：[requirements.txt:1-6]()\n\n## 版本历史\n\n| 版本 | 日期 | 主要变更 |\n|------|------|----------|\n| 0.1.9 | 2026-05-12 | 新增 `remember_fact` 系列工具；PBKDF2 升级至 210,000 次迭代 |\n| 0.1.5 | 2026-04-28 | PBKDF2 迭代次数调整；添加 `ENCv1:` 密文前缀 |\n\n资料来源：[CHANGELOG.md:1-50]()\n\n## 故障排除\n\n### 常见问题\n\n**Q: `MISTRAL_API_KEY` 缺失会怎样？**\n\nA: MCP 服务器仍可正常运行，但语义搜索会降级为服务器端关键词搜索。零知识加密不受影响。\n\n**Q: 如何删除已存储的记忆？**\n\nA: 使用 `forget` 工具并提供记忆 ID，或通过 `list_memories` 查看所有记忆后选择删除。\n\n**Q: 为什么提示\"无法连接\"？**\n\nA: 检查 `MEMORAEU_API_URL` 是否设置为 `https://api.memoraeu.com`，以及网络连接是否正常。\n\n## 下一步\n\n- 阅读 [完整 README](README.md) 了解更多高级配置\n- 查看 [CHANGELOG](CHANGELOG.md) 了解版本更新\n- 配置您的 AI 客户端以开始使用自动记忆功能\n\n---\n\n<a id='page-architecture'></a>\n\n## 系统架构\n\n### 相关页面\n\n相关主题：[项目概述](#page-overview), [加密系统](#page-encryption)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [memoraeu_mcp/server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/server.py)\n- [server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n</details>\n\n# 系统架构\n\n## 概述\n\nMemoraEU MCP 是一个基于 Model Context Protocol (MCP) 的零知识记忆服务架构。该系统作为 MCP 服务器运行，为 AI 助手（如 Claude）提供持久化记忆功能，同时保证用户数据的隐私性和零知识加密特性。 资料来源：[README.md:1]()\n\n系统采用客户端-服务端架构，支持本地安装（stdio 模式）和远程连接（SSE 模式）两种部署方式。核心设计理念是：**在数据离开用户设备之前完成所有可能的处理和加密操作**，确保服务端永远无法访问明文内容。 资料来源：[README.md:40]()\n\n---\n\n## 整体架构图\n\n```mermaid\ngraph TB\n    subgraph 客户端本地[\"客户端本地环境\"]\n        A[Claude / AI 助手] -->|MCP 协议| B[MCP Server]\n        B -->|stdio / SSE| A\n        \n        subgraph 本地处理模块[\"本地处理模块\"]\n            C[内容压缩]\n            D[分类建议]\n            E[Embedding 生成]\n            F[加密处理]\n            G[解压缩/解密]\n        end\n        \n        B --> C\n        B --> D\n        B --> E\n        B --> F\n        B --> G\n    end\n    \n    subgraph 外部服务[\"外部服务\"]\n        H[(Mistral API<br/>Embedding 生成)]\n        I[(MemoraEU Cloud<br/>加密存储)]\n    end\n    \n    F -->|加密内容 + Embedding| I\n    E -->|明文| H\n    H -->|Embedding 向量| B\n    I -->|加密数据| B\n    B -->|解密密文| G\n    \n    style 客户端本地 fill:#e1f5fe\n    style 本地处理模块 fill:#fff3e0\n    style 外部服务 fill:#f3e5f5\n```\n\n---\n\n## 核心组件\n\n### MCP 服务器层\n\nMCP 服务器层是整个架构的核心入口，基于 `mcp>=1.1.0,<1.2.0` SDK 实现。该层负责注册和管理所有工具、资源以及提示模板，并通过 `@app` 装饰器与 MCP 协议进行交互。 资料来源：[requirements.txt:1]()\n\n| 组件 | 功能 | 对应装饰器 |\n|------|------|-----------|\n| 工具注册 | 注册和管理所有 MCP 工具 | `@app.list_tools()` |\n| 资源管理 | 提供 `memoraeu://context` 资源 | `@app.list_resources()` |\n| 提示模板 | 提供系统行为提示 | `@app.list_prompts()` |\n| 工具调用 | 分发和处理工具调用请求 | `@app.call_tool()` |\n\n服务器入口点支持两种启动方式：\n\n```python\n# 方式1: 通过 server.py 模块入口\n# 资料来源: memoraeu_mcp/server.py:1-8\nfrom memoraeu_mcp.main import main\nasyncio.run(main())\n\n# 方式2: 通过 uvx / pip 直接运行\n# uvx memoraeu-mcp\n```\n\n---\n\n### 工具体系\n\n系统定义了 9 个核心工具，分为通用记忆工具和结构化事实工具两类。 资料来源：[memoraeu_mcp/main.py:45-130]()\n\n#### 通用记忆工具\n\n| 工具名称 | 功能描述 | 核心参数 |\n|----------|----------|----------|\n| `remember` | 自动记忆重要信息 | `content`, `category?`, `tags?` |\n| `recall` | 语义搜索记忆 | `query`, `limit?`, `category?` |\n| `forget` | 删除指定记忆 | `memory_id` |\n| `list_memories` | 列出最近记忆 | `category?`, `limit?` |\n| `list_categories` | 获取分类列表 | 无 |\n\n#### 结构化事实工具\n\n| 工具名称 | 功能描述 | 核心参数 |\n|----------|----------|----------|\n| `remember_fact` | 存储结构化事实 | `subject`, `predicate`, `object`, `scope?`, `valid_from?` |\n| `recall_facts` | 检索活跃事实 | `subject`, `predicate?`, `scope?`, `history?` |\n| `invalidate_fact` | 标记事实过期 | `fact_id`, `valid_to?` |\n\n---\n\n## 数据处理流程\n\n### remember 工具执行流程\n\n```mermaid\ngraph TD\n    A[remember 调用] --> B{是否提供 category?}\n    B -->|否| C[获取现有分类]\n    B -->|是| D[使用提供的分类]\n    C --> E[本地压缩内容]\n    D --> E\n    E --> F[本地生成 Embedding<br/>via Mistral]\n    F --> G{检查重复?}\n    G -->|是| H[相似度 >= 94%?]\n    H -->|是| I[跳过存储]\n    H -->|否| J[允许存储]\n    G -->|否| J\n    I --> K[返回提示]\n    J --> L[加密内容]\n    L --> M[发送到 MemoraEU API]\n    M --> N[存储成功]\n    \n    style I fill:#ffcdd2\n    style J fill:#c8e6c9\n```\n\n详细处理步骤： 资料来源：[memoraeu_mcp/main.py:140-175]()\n\n1. **内容压缩**：在加密前对明文进行本地压缩，减少存储和传输大小\n2. **分类建议**：如未指定分类，通过 Mistral API 建议合适分类\n3. **Embedding 生成**：在明文状态下调用 Mistral Embed API 生成向量 资料来源：[README.md:35]()\n4. **重复检测**：使用向量相似度检查（阈值 94%）避免存储重复记忆\n5. **加密处理**：使用 AES-256-GCM + PBKDF2-HMAC-SHA256 (100k 迭代) 加密内容\n6. **API 上传**：将加密内容和 Embedding 向量发送至 MemoraEU 云端\n\n### recall 工具执行流程\n\n```mermaid\ngraph TD\n    A[recall 调用] --> B[构建查询参数]\n    B --> C{本地有 Embedding?}\n    C -->|有 Mistral Key| D[本地生成 query Embedding]\n    C -->|无 Mistral Key| E[使用关键词搜索]\n    D --> F[发送到 MemoraEU API]\n    E --> F\n    F --> G[返回加密结果]\n    G --> H[本地解密内容]\n    H --> I[返回给 Claude]\n    \n    style D fill:#c8e6c9\n    style E fill:#fff3e0\n```\n\n---\n\n## 安全架构\n\n### 零知识加密设计\n\n系统采用多层加密策略，确保服务端永远无法访问用户明文数据。 资料来源：[CHANGELOG.md:2]()\n\n```mermaid\ngraph LR\n    subgraph 密钥派生[\"密钥派生流程\"]\n        A[MEMORAEU_SECRET<br/>用户密码] --> B[PBKDF2-HMAC-SHA256]\n        C[MEMORAEU_SALT<br/>服务器盐值] --> B\n        B --> D[100,000 次迭代]\n        D --> E[加密密钥]\n    end\n    \n    subgraph 加密过程[\"加密过程\"]\n        F[明文内容] --> G[AES-256-GCM]\n        E --> G\n        G --> H[密文 + IV]\n    end\n    \n    style 密钥派生 fill:#e3f2fd\n    style 加密过程 fill:#e8f5e9\n```\n\n### 环境变量与安全配置\n\n| 变量名 | 用途 | 安全性要求 |\n|--------|------|------------|\n| `MEMORAEU_API_KEY` | HTTP Bearer 认证 | 可共享 |\n| `MEMORAEU_SECRET` | PBKDF2 输入，用于派生加密密钥 | **高度敏感** |\n| `MEMORAEU_SALT` | KDF 盐值，唯一对应用户账户 | 可共享 |\n| `MEMORAEU_API_URL` | API 端点 | 配置项 |\n| `MISTRAL_API_KEY` | 本地生成 Embedding | 可共享 |\n\n> **重要**：`MEMORAEU_SECRET` 是用户的 MemoraEU 登录密码，绝对不能泄露或共享。 资料来源：[README.md:25]()\n\n### Mistral Embedding 的零知识保证\n\n系统设计确保 Embedding 生成在本地完成： 资料来源：[README.md:35-40]()\n\n1. 用户提供 `MISTRAL_API_KEY`\n2. MCP 服务器在本地使用明文内容调用 Mistral Embed API\n3. 获取 Embedding 向量后，立即对内容进行加密\n4. 加密后的内容（密文）和 Embedding 向量一起发送到服务端\n5. 服务端存储密文和向量，但**无法反向解密或理解内容含义**\n\n---\n\n## 部署架构\n\n### 本地模式 (stdio)\n\n适用于需要完整零知识保证的场景。配置于 `claude_desktop_config.json`： 资料来源：[README.md:15-30]()\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"command\": \"uvx\",\n      \"args\": [\"memoraeu-mcp\"],\n      \"env\": {\n        \"MEMORAEU_API_URL\": \"https://api.memoraeu.com\",\n        \"MEMORAEU_API_KEY\": \"meu-sk-...\",\n        \"MEMORAEU_SECRET\": \"your-memoraeu-password\",\n        \"MEMORAEU_SALT\": \"your-kdf-salt\",\n        \"MISTRAL_API_KEY\": \"your-mistral-key\"\n      }\n    }\n  }\n}\n```\n\n### 远程模式 (SSE)\n\n适用于快速连接场景，但**不具备零知识保证**： 资料来源：[README.md:40-50]()\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"type\": \"sse\",\n      \"url\": \"https://api.memoraeu.com/mcp/sse\",\n      \"headers\": {\n        \"Authorization\": \"Bearer meu-sk-...\"\n      }\n    }\n  }\n}\n```\n\n> **警告**：SSE 远程模式下，内容不以零知识方式处理，服务端会看到明文。 资料来源：[README.md:40]()\n\n### 部署模式对比\n\n| 特性 | stdio 本地模式 | SSE 远程模式 |\n|------|----------------|--------------|\n| 零知识加密 | ✅ 完整支持 | ❌ 不支持 |\n| Embedding 本地生成 | ✅ 是 | ❌ 否 |\n| 内容加密 | ✅ AES-256-GCM | ❌ 明文传输 |\n| 配置复杂度 | 较高（需多环境变量） | 低（仅需 URL + Key） |\n| 适用场景 | 高隐私需求 | 快速试用 |\n\n---\n\n## 自动行为机制\n\n### 自动记忆工作流\n\n```mermaid\ngraph TD\n    A[用户首次发送消息] --> B[检测消息主题]\n    B --> C[自动调用 recall 工具]\n    C --> D[加载最近记忆<br/>memoraeu://context]\n    D --> E[注入系统提示]\n    E --> F[用户继续对话]\n    \n    G[Claude 检测到重要信息] --> H[自动调用 remember 工具]\n    H --> I[本地处理并加密]\n    I --> J[存储到 MemoraEU]\n    J --> K[发送单行确认]\n    \n    style C fill:#bbdefb\n    style H fill:#c8e6c9\n```\n\n### 重复检测机制\n\n系统在存储前进行向量相似度检查： 资料来源：[memoraeu_mcp/main.py:165-175]()\n\n| 相似度阈值 | 处理动作 |\n|------------|----------|\n| ≥ 94% | 跳过存储，提示用户存在相似记忆 |\n| 70% - 94% | 建议用户是否仍要存储 |\n| < 70% | 正常存储 |\n\n---\n\n## 资源与提示注入\n\n### memoraeu://context 资源\n\n该资源用于在会话开始时自动加载最近记忆： 资料来源：[memoraeu_mcp/main.py:30-40]()\n\n```python\n@app.list_resources()\nasync def list_resources() -> list[Resource]:\n    return [\n        Resource(\n            uri=\"memoraeu://context\",\n            name=\"Contexte mémoire MemoraEU\",\n            description=\"Mémoires récentes injectées automatiquement en début de session\",\n            mimeType=\"text/plain\"\n        )\n    ]\n```\n\n### 系统提示模板\n\n`memoraeu_system` 提示模板定义了自动记忆行为规则： 资料来源：[memoraeu_mcp/main.py:95-115]()\n\n- 检测并记忆用户偏好、决策、传记事实、技术配置\n- 自动调用 `recall` 获取上下文\n- 仅确认存储，不额外说明\n- 限制 token 消耗（默认 3 条结果）\n\n---\n\n## 技术依赖\n\n| 依赖包 | 版本范围 | 用途 |\n|--------|----------|------|\n| `mcp` | ≥1.1.0, <1.2.0 | MCP 协议实现 |\n| `httpx` | 0.28.1 | HTTP 客户端，与 MemoraEU API 通信 |\n| `python-dotenv` | 1.0.1 | 环境变量加载 |\n| `starlette` | ≥0.40.0, <0.42.0 | ASGI 框架（用于 SSE） |\n| `cryptography` | ≥42.0.0 | AES-256-GCM 加密实现 |\n\n资料来源：[requirements.txt:1-5]()\n\n---\n\n## 总结\n\nMemoraEU MCP 的系统架构围绕**零知识保证**和**自动化记忆**两大核心目标设计：\n\n1. **客户端优先处理**：所有敏感操作（压缩、分类、Embedding、加密）均在本地完成\n2. **分层工具设计**：通用记忆和结构化事实工具满足不同场景需求\n3. **灵活的部署模式**：stdio 本地模式提供最高安全级别，SSE 远程模式便于快速接入\n4. **智能化自动化**：系统提示和工具描述驱动 AI 自动执行记忆操作\n\n该架构确保用户数据在整个生命周期中都处于加密状态，同时为 AI 助手提供无缝的记忆增强能力。\n\n---\n\n<a id='page-encryption'></a>\n\n## 加密系统\n\n### 相关页面\n\n相关主题：[系统架构](#page-architecture), [配置与密钥管理](#page-configuration)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [memoraeu_mcp/crypto.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/crypto.py)\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n</details>\n\n# 加密系统\n\n## 概述\n\nMemoraEU-MCP 的加密系统是一个**本地优先的零知识加密实现**，确保用户数据在传输和存储的整个过程中始终处于加密状态。服务器仅存储加密后的数据密文和向量嵌入，无法还原原始明文内容。\n\n核心加密流程遵循以下原则：\n- **端到端加密**：内容在本地设备加密后发送，服务器永远不接触明文\n- **前向安全**：使用 PBKDF2 从用户密码派生出加密密钥\n- **语义可搜索**：在加密前通过 Mistral Embed 生成向量嵌入，实现零知识语义搜索\n\n资料来源：[README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n\n## 架构设计\n\n### 高层数据流\n\n```mermaid\ngraph TD\n    subgraph 本地客户端\n        A[用户输入] --> B[内容压缩]\n        B --> C[Mistral Embed<br/>生成向量]\n        C --> D[AES-256-GCM<br/>加密]\n        D --> E[密文 + Embedding]\n    end\n    \n    subgraph 传输层\n        E --> F[HTTPS/TLS]\n    end\n    \n    subgraph 服务器端\n        F --> G[(Opaque Blob<br/>存储)]\n        G --> H[语义搜索<br/>向量匹配]\n    end\n    \n    subgraph 检索解密\n        G --> I[密文获取]\n        I --> J[AES-256-GCM<br/>解密]\n        J --> K[明文输出]\n    end\n```\n\n### 密钥派生流程\n\n```mermaid\ngraph LR\n    A[MEMORAEU_SECRET<br/>用户密码] --> D[PBKDF2-HMAC-SHA256]\n    B[MEMORAEU_SALT<br/>服务端盐值] --> D\n    C[210,000<br/>迭代次数] --> D\n    D --> E[加密密钥<br/>Derived Key]\n    E --> F[AES-256-GCM<br/>加解密]\n```\n\n## 加密算法详情\n\n### 算法参数\n\n| 参数 | 值 | 说明 |\n|------|-----|------|\n| 对称加密算法 | AES-256-GCM | 认证加密，抵抗篡改攻击 |\n| 密钥派生函数 | PBKDF2-HMAC-SHA256 | OWASP 2024 推荐配置 |\n| 迭代次数 | 210,000 | OWASP 2024 最低建议值 |\n| 密文前缀 | `ENCv1:` | 版本标识，便于未来算法升级 |\n| 盐值来源 | 服务端分配 | 每个用户唯一，`MEMORAEU_SALT` |\n\n资料来源：[CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n\n### 密文格式\n\n加密后的数据包含以下结构：\n\n```\nENCv1:<base64(nonce || ciphertext || tag)>\n```\n\n- `nonce`：随机生成的初始化向量（12字节）\n- `ciphertext`：AES-256-GCM 加密后的密文\n- `tag`：GCM 认证标签（16字节）\n\n资料来源：[memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n## 核心模块\n\n### crypto.py 模块\n\n该模块负责所有加密/解密操作的实现：\n\n| 函数 | 职责 |\n|------|------|\n| `get_key()` | 获取当前派生的加密密钥 |\n| `derive_key(secret, salt)` | 使用 PBKDF2 从密码和盐值派生密钥 |\n| `encrypt_content(plaintext)` | 对传入的明文进行 AES-256-GCM 加密 |\n| `decrypt_content(ciphertext)` | 对密文进行解密并返回明文 |\n| `is_encrypted(text)` | 检查文本是否已加密（检测 `ENCv1:` 前缀） |\n\n资料来源：[memoraeu_mcp/crypto.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/crypto.py)\n\n### 环境变量配置\n\n| 变量名 | 用途 | 必需性 |\n|--------|------|--------|\n| `MEMORAEU_SECRET` | 用户登录密码，用于 PBKDF2 密钥派生 | **必需** |\n| `MEMORAEU_SALT` | 服务端分配的 KDF 盐值 | **必需** |\n| `MEMORAEU_API_KEY` | HTTP 认证 Bearer Token | 必需 |\n| `MEMORAEU_API_URL` | API 端点地址 | 必需 |\n| `MISTRAL_API_KEY` | 本地生成 Embedding | 可选（影响搜索能力） |\n\n资料来源：[README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n\n## 工作流程\n\n### 存储记忆流程\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant MCP as MCP Client\n    participant M as Mistral API\n    participant C as Crypto Module\n    participant S as MemoraEU Server\n\n    U->>MCP: remember(content)\n    MCP->>M: 生成 Embedding\n    M-->>MCP: embedding_vector\n    MCP->>C: encrypt_content(content)\n    C-->>MCP: ENCv1:xxxx\n    MCP->>S: POST /memories<br/>{content: ENCv1:..., embedding: [...]}\n    S-->>MCP: memory_id\n    MCP-->>U: ✅ 已记住\n```\n\n### 检索记忆流程\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant MCP as MCP Client\n    participant C as Crypto Module\n    participant S as MemoraEU Server\n\n    U->>MCP: recall(query)\n    MCP->>S: POST /memories/search<br/>{query: xxx}\n    S-->>MCP: [{content: ENCv1:..., score: 0.95}]\n    MCP->>C: decrypt_content(ENCv1:...)\n    C-->>MCP: 明文内容\n    MCP-->>U: 记忆列表\n```\n\n## 零知识保证\n\n### 服务器可见内容\n\n| 数据项 | 服务器可见性 | 说明 |\n|--------|-------------|------|\n| 用户输入明文 | ❌ 不可见 | 始终在本地处理 |\n| 加密后的内容 | ✅ 可见 | 仅存储密文 |\n| 向量嵌入 | ✅ 可见 | 加密前在本地生成 |\n| 类别/标签 | ⚠️ 部分可见 | 由 MCP 客户端添加后加密 |\n| 加密密钥 | ❌ 不可见 | 密钥从不传输 |\n\n### 语义搜索原理\n\n1. **本地 Embedding 生成**：使用 `MISTRAL_API_KEY` 在本地调用 Mistral Embed API，生成明文内容的向量表示\n2. **加密存储**：将 Embedding 与加密后的内容一起发送到服务器\n3. **向量匹配**：服务器基于 Embedding 进行语义相似度计算\n4. **本地解密**：匹配结果返回后，在本地使用 `decrypt_content()` 解密\n\n资料来源：[README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n\n## 安全特性\n\n### 认证加密（AES-GCM）\n\n使用 Galois/Counter Mode (GCM) 模式提供：\n- **机密性**：使用 AES-256 位密钥加密\n- **完整性**：GCM 标签检测密文篡改\n- **认证**：防止选择密文攻击\n\n### 密钥派生加固\n\nPBKDF2 参数配置：\n\n| 参数 | 值 | 安全性说明 |\n|------|-----|----------|\n| 迭代次数 | 210,000 | OWASP 2024 建议的最低值 |\n| 输出长度 | 256 位 | 匹配 AES-256 密钥长度 |\n| 伪随机函数 | HMAC-SHA256 | 行业标准 |\n\n### 盐值管理\n\n- 每个用户分配唯一的 `MEMORAEU_SALT`\n- 盐值由服务端生成，确保不可预测性\n- 防止彩虹表攻击和预计算攻击\n\n## 依赖项\n\n核心加密库依赖：\n\n```\ncryptography>=42.0.0\n```\n\n该库提供：\n- `cryptography.hazmat.primitives.ciphers.aead.AESGCM`\n- `cryptography.hazmat.primitives.kdf.pbkdf2.PBKDF2HMAC`\n- `cryptography.hazmat.backends.default_backend()`\n\n资料来源：[requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n\n## 版本演进\n\n| 版本 | 更新内容 |\n|------|----------|\n| 0.1.5 | PBKDF2 升级至 210,000 次迭代 |\n| 0.1.5 | 引入 `ENCv1:` 密文前缀 |\n| 0.1.0 | 初始 AES-256-GCM 实现 |\n\n资料来源：[CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n\n## 最佳实践\n\n1. **使用强密码**：`MEMORAEU_SECRET` 应使用高熵密码\n2. **保护盐值**：虽然盐值可公开，但应与密码分开存储\n3. **定期轮换**：未来版本应支持密钥轮换机制\n4. **本地 Mistral 密钥**：确保 `MISTRAL_API_KEY` 不泄露，确保端到端零知识\n\n---\n\n<a id='page-mcp-tools'></a>\n\n## MCP 工具详解\n\n### 相关页面\n\n相关主题：[自动记忆机制](#page-auto-memory), [项目概述](#page-overview)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n</details>\n\n# MCP 工具详解\n\n## 概述\n\nMemoraEU MCP 是一个基于 Model Context Protocol (MCP) 的记忆服务器实现，旨在为 AI 助手提供持久化的上下文记忆能力。该项目允许 Claude 等大语言模型自动记忆用户偏好、决策和重要信息，并在后续对话中自动检索相关内容。\n\n核心功能包括：\n\n- **自动记忆**：AI 自动检测并存储重要信息，无需用户手动触发\n- **零知识加密**：所有数据在本地加密后再发送至服务器\n- **语义搜索**：支持基于向量相似度的语义检索\n- **结构化事实**：存储带有时间有效性的三元组事实\n- **自动去重**：防止存储重复或相似的记忆\n\n资料来源：[README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n\n## 架构概览\n\n```mermaid\ngraph TD\n    subgraph \"客户端本地\"\n        A[\"用户输入\"] --> B[\"Claude / AI 模型\"]\n        B --> C[\"MCP Client\"]\n        C --> D[\"记忆处理模块\"]\n        D --> E[\"本地加密模块\"]\n        E --> F[\"Mistral Embedding\"]\n    end\n    \n    subgraph \"数据传输\"\n        F --> G[\"加密内容 + Embedding\"]\n        G --> H[\"MemoraEU API\"]\n    end\n    \n    subgraph \"服务端存储\"\n        H --> I[\"向量数据库<br/>存储 embedding\"]\n        H --> J[\"加密Blob存储<br/>存储密文\"]\n    end\n    \n    D --> K[\"压缩模块\"]\n    D --> L[\"分类模块\"]\n    D --> M[\"去重检测模块\"]\n```\n\n资料来源：[memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n## 工具分类\n\nMCP 服务器提供 8 个核心工具，分为三大类别：\n\n| 类别 | 工具 | 功能描述 |\n|------|------|----------|\n| **记忆工具** | `remember` | 自动记忆重要信息 |\n| | `recall` | 语义搜索记忆 |\n| | `forget` | 删除指定记忆 |\n| | `list_memories` | 列出最近的记忆 |\n| | `list_categories` | 列出分类统计 |\n| **事实工具** | `remember_fact` | 存储结构化事实 |\n| | `recall_facts` | 检索结构化事实 |\n| | `invalidate_fact` | 标记事实过期 |\n\n资料来源：[memoraeu_mcp/main.py:70-170](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n## 记忆工具详解\n\n### remember\n\n`remember` 是核心的记忆存储工具，设计为 AI 自动调用，无需用户请求。\n\n#### 功能描述\n\n自动检测并存储用户表达的重要信息，包括偏好、决策、传记事实和技术配置。\n\n#### 参数定义\n\n```json\n{\n  \"type\": \"object\",\n  \"properties\": {\n    \"content\": {\n      \"type\": \"string\",\n      \"description\": \"要记忆的内容\"\n    },\n    \"category\": {\n      \"type\": \"string\",\n      \"description\": \"分类名称（可选，自动推断）\"\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"description\": \"标签数组（可选）\"\n    }\n  },\n  \"required\": [\"content\"]\n}\n```\n\n#### 处理流程\n\n```mermaid\ngraph TD\n    A[\"remember 调用\"] --> B[\"本地压缩内容\"]\n    B --> C[\"自动分类（如未指定）\"]\n    C --> D[\"生成/获取 Embedding\"]\n    D --> E{\"去重检测\"}\n    E -.\"≥94% 相似<br/>跳过存储\"--> F[\"返回去重警告\"]\n    E -.\"<94% 相似<br/>继续存储\"--> G[\"本地加密\"]\n    G --> H[\"POST /memories\"]\n    H --> I[\"返回记忆ID\"]\n```\n\n#### 关键特性\n\n| 特性 | 说明 |\n|------|------|\n| 自动压缩 | 使用 `compress_locally()` 在加密前压缩内容 |\n| 自动分类 | 未指定分类时调用 `suggest_category_locally()` |\n| 去重检测 | 与现有记忆比较向量相似度 |\n| 零知识加密 | 加密后发送至服务器 |\n\n资料来源：[memoraeu_mcp/main.py:120-160](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n### recall\n\n`recall` 是语义搜索工具，用于检索已存储的记忆。\n\n#### 功能描述\n\n在首次用户消息时自动调用，使用语义理解而非关键词匹配进行搜索。\n\n#### 参数定义\n\n```json\n{\n  \"type\": \"object\",\n  \"properties\": {\n    \"query\": {\n      \"type\": \"string\",\n      \"description\": \"搜索查询（使用消息主题）\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"default\": 3,\n      \"description\": \"返回结果数量上限\"\n    },\n    \"category\": {\n      \"type\": \"string\",\n      \"description\": \"按分类过滤（可选）\"\n    }\n  },\n  \"required\": [\"query\"]\n}\n```\n\n#### 特殊行为\n\n```mermaid\ngraph TD\n    A[\"首次 recall\"] --> B{\"_first_recall 标志?\"}\n    B -.->|\"是\"| C[\"注入系统提示词\"]\n    B -.->|\"是\"| D[\"加载会话上下文\"]\n    C --> E[\"POST /memories/search\"]\n    D --> E\n    E --> F[\"解密结果内容\"]\n    F --> G[\"返回格式化结果\"]\n    \n    H[\"非首次 recall\"] --> E\n```\n\n#### 返回格式\n\n```\n🔍 N mémoire(s) :\n\n• [分类] 记忆内容预览... (ID: xxxxxxxx)\n  标签: tag1, tag2 | 相关度: 0.95\n```\n\n资料来源：[memoraeu_mcp/main.py:160-200](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n### forget\n\n删除指定 ID 的记忆。\n\n#### 参数定义\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `memory_id` | string | 是 | 要删除的记忆 ID |\n\n#### 返回值\n\n| 结果 | 返回内容 |\n|------|----------|\n| 成功 | `🗑️ Supprimée.` |\n| 未找到 | `Introuvable.` |\n| 错误 | `❌ Erreur : {错误信息}` |\n\n资料来源：[memoraeu_mcp/main.py:200-210](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n### list_memories\n\n列出最近的记忆列表。\n\n#### 参数定义\n\n| 参数 | 类型 | 默认值 | 说明 |\n|------|------|--------|------|\n| `category` | string | — | 按分类过滤（可选） |\n| `limit` | integer | 20 | 返回数量上限 |\n\n#### 返回格式\n\n```\n📋 N mémoire(s) :\n\n• [分类名称] 内容预览... (ID: xxxxxxxx)\n• [分类名称] 内容预览... (ID: xxxxxxxx)\n```\n\n资料来源：[memoraeu_mcp/main.py:210-230](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n### list_categories\n\n返回所有已存在的分类，按使用频率排序。\n\n#### 参数定义\n\n无参数。\n\n#### 返回格式\n\n```\n📂 Catégories :\n\n• 工作偏好 (15)\n• 技术配置 (8)\n• 个人信息 (3)\n```\n\n资料来源：[memoraeu_mcp/main.py:230-245](https://github.com/pquattro/memoraeu-mcp/blob/main/moraeu_mcp/main.py)\n\n## 事实工具详解\n\n结构化事实存储采用主语-谓语-宾语（SPO）三元组模型，支持时间有效性。\n\n### remember_fact\n\n存储结构化事实，支持时间范围定义。\n\n#### 数据模型\n\n```mermaid\ngraph LR\n    S[\"subject<br/>主语\"] --> P[\"predicate<br/>谓语\"]\n    P --> O[\"object<br/>宾语\"]\n    \n    S -.->|\"valid_from<br/>开始时间\"| T[\"时间范围\"]\n    P -.->|\"valid_to<br/>结束时间\"| T\n```\n\n#### 参数定义\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `subject` | string | 是 | 实体/主语 |\n| `predicate` | string | 是 | 属性/谓语 |\n| `object` | string | 是 | 值/宾语（加密存储） |\n| `scope` | string | 否 | `private` 或 `org`（默认 `private`） |\n| `valid_from` | string | 否 | 开始日期 YYYY-MM-DD |\n| `valid_to` | string | 否 | 结束日期 YYYY-MM-DD |\n\n#### 返回格式\n\n```\n✅ Fait mémorisé 🔒 (remplace xxxxxxxx)\n  主语 → 谓语\n  Depuis: 2024-01-01 | ID: xxxxxxxx\n```\n\n#### 过期替换机制\n\n当存储与已有事实相同主语和谓语的新事实时，系统自动：\n1. 将旧事实标记为 `superseded`\n2. 新事实的 `supersedes` 字段记录旧事实 ID\n\n资料来源：[server.py:150-180](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n\n### recall_facts\n\n检索指定主语的结构化事实。\n\n#### 参数定义\n\n| 参数 | 类型 | 默认值 | 说明 |\n|------|------|--------|------|\n| `subject` | string | 是 | 要查询的实体 |\n| `predicate` | string | 否 | 过滤特定谓语 |\n| `scope` | string | `private` | 范围：`private` 或 `org` |\n| `history` | boolean | `false` | 是否包含过期事实 |\n\n#### 返回格式\n\n```\n📊 N fait(s) pour '主语' :\n\n• 谓语: 宾语值\n  [2024-01-01 → 2024-06-15 (expiré)] | ID: xxxxxxxx\n• 谓语: 宾语值\n  [2024-06-15 → aujourd'hui] | ID: xxxxxxxx\n```\n\n资料来源：[server.py:180-210](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n\n### invalidate_fact\n\n标记事实为过期（不再真实）。\n\n#### 参数定义\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `fact_id` | string | 是 | 要过期的事实 ID |\n| `valid_to` | string | 否 | 结束日期 YYYY-MM-DD（默认今天） |\n\n#### 使用场景\n\n- 用户更正之前提供的信息\n- 临时状态变更（如 \"出差中\" → 恢复）\n- 计划性失效（如活动结束）\n\n资料来源：[server.py:210-220](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n\n## 自动记忆行为\n\n系统设计了完整的自动记忆工作流，AI 模型根据工具描述自动执行。\n\n### 工作流程图\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant C as Claude\n    participant MCP as MCP Server\n    participant API as MemoraEU API\n    \n    U->>C: 第一条消息\n    C->>C: 检测话题\n    C->>MCP: recall(query=话题)\n    MCP->>API: POST /memories/search\n    API-->>MCP: 记忆结果\n    MCP-->>C: 格式化结果 + 系统提示词\n    C->>C: 处理用户请求\n    \n    Note over C: 用户表达重要信息\n    C->>MCP: remember(content=...)\n    MCP->>MCP: 压缩 → 分类 → 去重检测\n    MCP->>MCP: 加密内容\n    MCP->>API: POST /memories\n    API-->>MCP: 记忆ID\n    MCP-->>C: ✅ 已记忆\n    C->>U: 简洁确认\n```\n\n### 自动触发规则\n\n| 场景 | 触发条件 | 示例 |\n|------|----------|------|\n| 偏好表达 | 用户说 \"我喜欢...\"、\"我通常...\" | \"我更喜欢在上午工作\" |\n| 决策声明 | 用户做出明确选择 | \"我们决定用 React\" |\n| 传记事实 | 用户介绍自己 | \"我是后端工程师\" |\n| 技术配置 | 用户指定环境或工具 | \"我的项目用 Poetry\" |\n| 约束条件 | 用户说明限制 | \"不能超过 2 周\" |\n\n### 不应记忆的内容\n\n- 日常闲聊（天气、问候）\n- 临时性信息（今日菜单）\n- 一次性计算结果\n- 用户明确要求遗忘的内容\n\n### 系统提示词注入\n\n首次调用 `recall` 时，系统自动注入完整的行为规范：\n\n```markdown\n## 记忆范围\n- 用户偏好和习惯\n- 重要决策和结论\n- 反复出现的信息或约束\n\n## 自动记忆原则\n当用户表达以下内容时，立即调用 remember 工具：\n- 偏好、决策、传记事实、技术配置\n- 或持久性约束\n\n## 规则\n- 不记忆一般信息或临时性内容\n- 用户要求\"遗忘\"时使用 forget\n- 记忆确认仅需一行\n- 优化 tokens：recall 默认限制 3 条结果\n```\n\n资料来源：[memoraeu_mcp/main.py:30-60](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n## 去重与压缩机制\n\n### 去重检测流程\n\n```mermaid\ngraph TD\n    A[\"新记忆内容\"] --> B[\"计算向量 Embedding\"]\n    B --> C[\"与所有现有记忆比较\"]\n    C --> D{\"相似度阈值\"}\n    \n    D -.->|\">94%\"| E[\"跳过存储<br/>返回去重警告\"]\n    D -.->|\"75%-94%\"| F[\"存储但打印警告\"]\n    D -.->|\"<75%\"| G[\"正常存储\"]\n    \n    E --> H[\"⚠️ Doublon détecté (N% similaire)\"]\n    H --> I[\"显示相似记忆预览\"]\n```\n\n### 相似度阈值表\n\n| 相似度 | 行为 |\n|--------|------|\n| ≥ 94% | 完全跳过，不创建新记忆 |\n| 75% - 94% | 存储新记忆，打印警告日志 |\n| < 75% | 正常存储流程 |\n\n### 本地压缩\n\n在加密前，内容会经过本地压缩处理：\n\n```python\ncontent = await compress_locally(raw_content)\n```\n\n压缩目的：\n1. 减少加密和传输的数据量\n2. 降低 Mistral API 调用成本\n3. 保持记忆简洁\n\n资料来源：[memoraeu_mcp/main.py:130-140](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n## 配置与部署\n\n### stdio 模式（推荐）\n\n适用于需要完整零知识保证的场景。\n\n#### 配置示例\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"command\": \"uvx\",\n      \"args\": [\"memoraeu-mcp\"],\n      \"env\": {\n        \"MEMORAEU_API_URL\": \"https://api.memoraeu.com\",\n        \"MEMORAEU_API_KEY\": \"meu-sk-...\",\n        \"MEMORAEU_SECRET\": \"your-memoraeu-password\",\n        \"MEMORAEU_SALT\": \"your-kdf-salt\",\n        \"MISTRAL_API_KEY\": \"your-mistral-key\"\n      }\n    }\n  }\n}\n```\n\n### SSE 远程模式\n\n适用于快速连接，但不具备零知识保证。\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"type\": \"sse\",\n      \"url\": \"https://api.memoraeu.com/mcp/sse\",\n      \"headers\": {\n        \"Authorization\": \"Bearer meu-sk-...\"\n      }\n    }\n  }\n}\n```\n\n### 环境变量说明\n\n| 变量 | 用途 | 获取方式 |\n|------|------|----------|\n| `MEMORAEU_API_KEY` | HTTP 认证 Bearer Token | 设置 → API Keys |\n| `MEMORAEU_SECRET` | 账户密码（PBKDF2 输入） | 账户密码 |\n| `MEMORAEU_SALT` | KDF 盐值 | 设置 → 加密 Keys |\n| `MEMORAEU_API_URL` | API 端点 | 默认 `https://api.memoraeu.com` |\n| `MISTRAL_API_KEY` | 本地生成 embedding | Mistral Console |\n\n资料来源：[README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n\n## 安全模型\n\n### 零知识加密架构\n\n```mermaid\ngraph LR\n    subgraph \"本地客户端\"\n        A[\"明文内容\"] --> B[\"PBKDF2 密钥派生\"]\n        C[\"SECRET + SALT\"] --> B\n        B --> D[\"AES-256-GCM 加密\"]\n        A --> D\n        D --> E[\"加密 Blob\"]\n    end\n    \n    subgraph \"传输 & 存储\"\n        E --> F[\"HTTPS 传输\"]\n        F --> G[\"服务器存储<br/>（无法解密）\"]\n    end\n    \n    subgraph \"搜索\"\n        H[\"明文\"] --> I[\"Mistral Embedding\"]\n        I --> J[\"向量搜索\"]\n        G --> J\n    end\n```\n\n### 密钥派生参数\n\n| 参数 | 值 |\n|------|------|\n| 算法 | PBKDF2-HMAC-SHA256 |\n| 迭代次数 | 100,000 |\n| 输出密钥长度 | 256 位 |\n\n### Mistral Embedding 的必要性\n\n由于向量搜索需要比较语义相似度，embedding 必须从明文生成：\n\n1. 客户端调用 Mistral API 获取明文 embedding\n2. 内容加密后与 embedding 一起发送\n3. 服务器仅存储加密 blob 和向量\n4. 服务器无法反推明文内容\n\n**无 MISTRAL_API_KEY 时**：搜索降级为服务器端关键词匹配，不影响加密功能。\n\n资料来源：[CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n\n## 依赖项\n\n| 依赖 | 版本 | 用途 |\n|------|------|------|\n| `mcp` | ≥1.1.0, <1.2.0 | MCP 协议实现 |\n| `httpx` | 0.28.1 | HTTP 客户端 |\n| `python-dotenv` | 1.0.1 | 环境变量加载 |\n| `starlette` | ≥0.40.0, <0.42.0 | ASGI 框架 |\n| `cryptography` | ≥42.0.0 | 加密实现 |\n\n资料来源：[requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n\n## 资源与提示词\n\n### 资源\n\n| URI | 名称 | 说明 |\n|-----|------|------|\n| `memoraeu://context` | 会话上下文 | 自动加载最近记忆 |\n\n### 提示词\n\n| 名称 | 用途 |\n|------|------|\n| `memoraeu_system` | 完整的自动记忆行为规范 |\n\n调用方式：\n\n```python\n@app.list_prompts()\nasync def list_prompts() -> list[Prompt]:\n    return [\n        Prompt(\n            name=\"memoraeu_system\",\n            description=\"系统记忆行为规范\",\n            arguments=[]\n        )\n    ]\n```\n\n资料来源：[memoraeu_mcp/main.py:60-80](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n\n---\n\n<a id='page-auto-memory'></a>\n\n## 自动记忆机制\n\n### 相关页面\n\n相关主题：[MCP 工具详解](#page-mcp-tools), [去重与压缩](#page-dedup-compression)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n</details>\n\n# 自动记忆机制\n\nMemoraEU MCP 服务器的核心功能是一套**自动记忆机制**（Auto-memory），它使 AI 能够主动学习、存储和检索用户信息，无需用户手动干预。该机制通过 MCP 工具定义、系统提示注入和上下文资源加载三种方式协同工作。\n\n---\n\n## 概述\n\n自动记忆机制的设计目标是让 AI 在对话过程中自动识别并记住重要的用户信息，包括：\n\n| 信息类型 | 示例 |\n|---------|------|\n| 用户偏好 | \"我更喜欢 TypeScript\" |\n| 决策记录 | \"我们决定用 PostgreSQL\" |\n| 传记事实 | \"我住在上海\" |\n| 技术约束 | \"项目要求 Python 3.10+\" |\n\n资料来源：[README.md:1-30]()\n\n### 核心工作流\n\n```mermaid\ngraph TD\n    A[用户发送消息] --> B{首次会话?}\n    B -->|是| C[自动调用 recall]\n    B -->|否| D[检测记忆内容]\n    C --> E[加载 memoraeu://context]\n    E --> F[注入系统提示]\n    F --> G[返回记忆结果]\n    D --> H{检测到重要信息?}\n    H -->|是| I[自动调用 remember]\n    H -->|否| J[正常处理消息]\n    I --> K[去重检查]\n    K --> L{相似度 ≥94%?}\n    L -->|是| M[跳过存储]\n    L -->|否| N[本地处理]\n    N --> O[加密并发送]\n    M --> P[返回警告]\n    O --> Q[返回确认]\n```\n\n---\n\n## 三大自动行为\n\n### 1. 自动召回（Automatic Recall）\n\n**触发时机**：每个会话的第一条用户消息\n\n**执行流程**：\n1. 检测用户消息的主题\n2. 使用该主题作为查询词调用 `recall` 工具\n3. 通过 `memoraeu://context` 资源加载最近的记忆\n4. 将记忆内容注入到会话上下文\n\n```mermaid\ngraph LR\n    A[第一条用户消息] --> B[提取主题]\n    B --> C[recall 工具]\n    C --> D[memoraeu://context]\n    D --> E[上下文注入]\n```\n\n资料来源：[README.md:45-50]()\n\n### 2. 自动记忆（Automatic Remember）\n\n**触发时机**：当 AI 检测到以下类型的信息时\n\n| 类型 | 判断标准 |\n|------|----------|\n| 偏好 | 用户表达的个人喜好或选择倾向 |\n| 决策 | 涉及项目、方案或技术选型的决定 |\n| 传记事实 | 关于用户身份、背景的信息 |\n| 技术约束 | 配置、凭证（非敏感）、技术栈信息 |\n\n**执行特点**：\n- 无需用户请求，AI 主动调用 `remember` 工具\n- 记忆后仅返回一行简短确认\n- 不会频繁确认打扰用户\n\n资料来源：[README.md:51-55]()\n\n### 3. 系统提示注入（System Prompt Injection）\n\n**触发时机**：首次调用 `recall` 工具时\n\n**注入内容**：完整的自动记忆行为规范，定义于 `SYSTEM_PROMPT_TEXT` 常量中\n\n**注入方式**：作为用户角色消息注入到 Claude 上下文，强化后续会话中的自动记忆规则\n\n```python\nSYSTEM_PROMPT_TEXT = \"\"\"\n## Objectif\nMémoriser automatiquement les informations importantes de l'utilisateur...\n\n## Rappel automatique\nDès le premier message de l'utilisateur, utilise recall avec le sujet détecté comme query...\n\n## Règles\n- Ne mémorise pas les informations générales ou éphémères\n- Si l'utilisateur dit \"oublie ça\", utilise forget\n- Confirme discrètement les mémorisations\n- Optimisation tokens : limite recall à 3 résultats\n\"\"\"\n```\n\n资料来源：[memoraeu_mcp/main.py:1-50]()\n\n---\n\n## 本地预处理流程\n\n自动记忆机制在数据发送到服务器之前执行完整的本地处理，确保**零知识（Zero-Knowledge）**保障：\n\n```mermaid\ngraph TD\n    A[原始内容] --> B[本地压缩]\n    A --> C[本地分类]\n    A --> D[本地嵌入]\n    B --> E{去重检查}\n    D --> E\n    E -->|≥94%相似| F[跳过存储]\n    E -->|<94%相似| G[加密内容]\n    G --> H[发送到API]\n    H --> I[返回确认]\n```\n\n### 处理步骤详解\n\n| 步骤 | 操作 | 说明 |\n|------|------|------|\n| 1 | 压缩 | 使用 Mistral API 在明文状态下压缩内容，减少 token 消耗 |\n| 2 | 分类 | 如果未指定类别，自动建议合适的分类 |\n| 3 | 嵌入 | 使用 Mistral Embed 从明文生成向量，用于语义搜索 |\n| 4 | 去重 | 使用向量相似度检查（阈值 94%），避免重复存储 |\n| 5 | 加密 | 使用 AES-256-GCM 加密内容后发送 |\n| 6 | 存储 | API 存储加密内容和向量，但不包含明文 |\n\n资料来源：[memoraeu_mcp/main.py:200-260]()\n\n### 零知识保障\n\n**关键设计**：嵌入向量在加密之前生成\n\n```\n用户明文 → Mistral Embed API → 向量 → 加密 → 发送到服务器\n                              ↑\n                       本地执行，保证服务器无法看到明文\n```\n\n资料来源：[README.md:75-85]()\n\n---\n\n## 工具定义\n\n### 核心记忆工具\n\n| 工具名 | 功能 | 关键参数 |\n|--------|------|----------|\n| `remember` | 自动记忆重要信息 | `content`（必需）、`category`、`tags` |\n| `recall` | 语义搜索记忆 | `query`（必需）、`limit`（默认3）、`category` |\n| `forget` | 删除指定记忆 | `memory_id`（必需） |\n| `list_memories` | 列出最近记忆 | `limit`（默认20）、`category` |\n| `list_categories` | 获取分类列表 | 无 |\n\n### 结构化事实工具\n\n| 工具名 | 功能 | 关键参数 |\n|--------|------|----------|\n| `remember_fact` | 存储结构化事实 | `subject`（必需）、`predicate`（必需）、`object`（必需） |\n| `recall_facts` | 检索活动事实 | `subject`（必需）、`predicate`、`history` |\n| `invalidate_fact` | 标记事实过期 | `fact_id`（必需）、`valid_to` |\n\n资料来源：[server.py:50-150]()\n\n---\n\n## 去重与压缩机制\n\n### 向量相似度阈值\n\n| 相似度 | 处理动作 |\n|--------|----------|\n| ≥ 94% | 记忆被忽略，提示用户为重复内容 |\n| < 94% | 正常存储（可能打印警告日志） |\n\n```python\nDEDUP_SKIP_THRESHOLD = 0.94  # 94% 相似度阈值\n```\n\n资料来源：[memoraeu_mcp/main.py:230-245]()\n\n### 去重检查流程\n\n```mermaid\ngraph TD\n    A[新内容] --> B[生成本地嵌入]\n    B --> C[API 搜索相似向量]\n    C --> D{最高相似度?}\n    D -->|≥94%| E[返回重复警告]\n    D -->|<94%| F{≥70%| \n    F -->|否| G[存储新记忆]\n    F -->|是| H[存储并记录警告]\n```\n\n---\n\n## 配置要求\n\n### 环境变量\n\n| 变量名 | 用途 | 获取方式 |\n|--------|------|----------|\n| `MEMORAEU_API_KEY` | HTTP 认证令牌 | Dashboard → Settings → API Keys |\n| `MEMORAEU_SECRET` | 登录密码，用于派生加密密钥 | 用户账户密码 |\n| `MEMORAEU_SALT` | KDF 盐值，服务器生成 | Dashboard → Settings → Encryption Keys |\n| `MEMORAEU_API_URL` | API 端点 | 托管服务使用 `https://api.memoraeu.com` |\n| `MISTRAL_API_KEY` | 本地嵌入生成（可选但推荐） | console.mistral.ai |\n\n### Mistral API Key 的必要性\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│  为什么需要 Mistral API Key？                               │\n├─────────────────────────────────────────────────────────────┤\n│  零知识搜索 = 服务器无法看到你的明文                          │\n│                                                             │\n│  语义搜索需要向量 → 向量必须在本地生成 → 需要 Mistral Embed  │\n└─────────────────────────────────────────────────────────────┘\n```\n\n**无 Mistral Key 时**：搜索降级为服务器端关键词搜索，加密不受影响。\n\n资料来源：[README.md:70-85]()\n\n---\n\n## 安全特性\n\n### 加密方案\n\n| 参数 | 值 |\n|------|-----|\n| 算法 | AES-256-GCM |\n| 密钥派生 | PBKDF2-HMAC-SHA256 |\n| 迭代次数 | 210,000（OWASP 2024 推荐） |\n| 密文前缀 | `ENCv1:` |\n\n资料来源：[CHANGELOG.md:15-20]()\n\n### 密钥管理\n\n```python\ndef get_key() -> bytes | None:\n    \"\"\"从环境变量派生加密密钥\"\"\"\n    secret = os.environ.get(\"MEMORAEU_SECRET\")\n    salt = os.environ.get(\"MEMORAEU_SALT\")\n    if not secret or not salt:\n        return None\n    return PBKDF2(secret, salt, iterations=210000)\n```\n\n---\n\n## 会话上下文资源\n\nMCP 服务器通过 `memoraeu://context` 资源提供会话上下文：\n\n```python\n@app.list_resources()\nasync def list_resources() -> list[Resource]:\n    return [\n        Resource(\n            uri=\"memoraeu://context\",\n            name=\"Contexte mémoire MemoraEU\",\n            description=\"Mémoires récentes injectées automatiquement...\",\n            mimeType=\"text/plain\"\n        )\n    ]\n\n@app.read_resource()\nasync def read_resource(uri: str) -> list[ResourceContents]:\n    if uri == \"memoraeu://context\":\n        context = await load_session_context()\n        return [TextResourceContents(uri=uri, text=context)]\n```\n\n资料来源：[memoraeu_mcp/main.py:80-100]()\n\n---\n\n## 行为规则总结\n\n| 规则 | 说明 |\n|------|------|\n| 不记忆 | 通用信息、临时信息（天气、笑话、一次性计算） |\n| 响应确认 | 仅一行，简洁低调 |\n| Token 优化 | 默认限制 3 条记忆结果 |\n| 遗忘请求 | 用户说\"忘记\"时立即调用 `forget` |\n\n```mermaid\ngraph TD\n    A[用户消息] --> B{信息类型?}\n    B -->|偏好/决策/传记/技术约束| C[自动 remember]\n    B -->|通用/临时| D[正常处理]\n    C --> E{重复检查}\n    E -->|≥94%| F[返回警告]\n    E -->|<94%| G[存储]\n    D --> H[无记忆]\n```\n\n资料来源：[memoraeu_mcp/main.py:30-45]()\n\n---\n\n## 版本变更记录\n\n| 版本 | 变更内容 |\n|------|----------|\n| 0.1.9 | 新增 `remember_fact`、`recall_facts`、`invalidate_fact` 结构化事实工具；PBKDF2 迭代次数提升至 210,000 |\n| 0.1.5 | 初始版本，包含基础 `remember`、`recall`、`forget` 工具和自动行为 |\n\n资料来源：[CHANGELOG.md:1-35]()\n\n---\n\n<a id='page-dedup-compression'></a>\n\n## 去重与压缩\n\n### 相关页面\n\n相关主题：[自动记忆机制](#page-auto-memory), [加密系统](#page-encryption)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n</details>\n\n# 去重与压缩\n\n## 概述\n\nmemoraeu-mcp 实现了客户端去重与压缩机制，在数据加密前对内容进行处理。这一设计确保了：\n\n1. **存储效率** — 避免存储重复或冗余的记忆\n2. **零知识保证** — 所有处理均在加密前本地完成，服务器无法访问明文\n\n资料来源：[README.md:1-50]()\n\n## 工作流程\n\n### 整体数据流\n\n```mermaid\ngraph TD\n    A[用户输入内容] --> B[本地压缩]\n    B --> C[本地分类建议]\n    C --> D[生成 Embedding]\n    D --> E[重复检测]\n    E --> F{是否重复?}\n    F -->|是| G[跳过存储]\n    F -->|否| H[加密内容]\n    H --> I[发送到 API]\n    G --> J[返回警告]\n    I --> K[存储成功]\n    \n    L[Mistral API] -.->|压缩/分类| B\n    L -.->|Embedding| D\n```\n\n### 记忆存储流程\n\n在 `remember` 工具调用时，系统按以下顺序执行：\n\n| 步骤 | 操作 | 执行位置 | 依赖 |\n|------|------|----------|------|\n| 1 | 内容压缩 | 本地 | Mistral Chat |\n| 2 | 分类建议 | 本地 | Mistral Chat |\n| 3 | 生成 Embedding | 本地 | Mistral Embed |\n| 4 | 重复检测 | 本地 | 向量相似度 |\n| 5 | 内容加密 | 本地 | PBKDF2 + AES-256-GCM |\n| 6 | 发送存储 | 远程 | MemoraEU API |\n\n资料来源：[memoraeu_mcp/main.py:150-200]()\n\n## 压缩机制\n\n### 压缩阈值\n\n系统使用 `COMPRESSION_THRESHOLD` 变量控制压缩触发条件。当内容长度超过此阈值时才进行压缩处理。\n\n```python\nif len(content) <= COMPRESSION_THRESHOLD:\n    return content\n```\n\n资料来源：[memoraeu_mcp/main.py:1-50]()\n\n### 压缩实现\n\n压缩功能由 `compress_locally()` 函数实现：\n\n```python\nasync def compress_locally(content: str) -> str:\n    \"\"\"\n    Résume ce texte en 1-3 phrases concises, en français, \n    en gardant l'essentiel. Réponds uniquement avec le résumé.\n    \"\"\"\n    prompt = (\n        \"Résume ce texte en 1-3 phrases concises, en français, \"\n        \"en gardant l'essentiel. Réponds uniquement avec le résumé, \"\n        \"sans introduction ni conclusion.\\n\\n\"\n        f\"{content}\"\n    )\n    compressed = await _mistral_chat(prompt)\n    if compressed and len(compressed) < len(content):\n        print(f\"[mcp] Compression: {len(content)} → {len(compressed)} chars\")\n        return compressed\n    return content\n```\n\n资料来源：[memoraeu_mcp/main.py:50-80]()\n\n### 压缩特点\n\n| 特性 | 说明 |\n|------|------|\n| 触发条件 | 内容长度 > `COMPRESSION_THRESHOLD` |\n| 压缩方式 | Mistral Chat API 生成 1-3 句法式摘要 |\n| 语言 | 使用法语（与系统语言一致） |\n| 降级策略 | 若压缩后更长，保留原内容 |\n| 加密时机 | 压缩后立即加密，服务器不可见 |\n\n## 分类建议机制\n\n### 本地分类函数\n\n```python\nasync def suggest_category_locally(content: str, existing: list[str]) -> str:\n    \"\"\"Suggère une catégorie pour le contenu en clair.\"\"\"\n    existing_str = \", \".join(existing) if existing else \"aucune\"\n    prompt = (\n        f\"Catégories existantes : {existing_str}\\n\\n\"\n        f\"Texte : {content[:500]}\\n\\n\"\n        \"Quelle catégorie courte (1-2 mots, en français, minuscules) \"\n        \"correspond le mieux ? Utilise une existante si pertinent, \"\n        \"sinon crée-en une. Réponds uniquement avec la catégorie.\"\n    )\n    cat = await _mistral_chat(prompt)\n    if cat:\n        return cat.lower().strip().strip('\"').strip(\"'\")[:30]\n    return \"personnel\"\n```\n\n资料来源：[memoraeu_mcp/main.py:80-110]()\n\n### 分类处理流程\n\n```mermaid\ngraph TD\n    A[新内容] --> B[获取已有分类列表]\n    B --> C[调用 Mistral Chat]\n    C --> D{返回有效分类?}\n    D -->|是| E[规范化分类名]\n    D -->|否| F[返回默认分类: personnel]\n    E --> G[限制长度 30 字符]\n    G --> H[返回分类]\n```\n\n### 分类默认值\n\n| 情况 | 行为 |\n|------|------|\n| 用户指定分类 | 使用用户提供的分类 |\n| 未指定且有现有分类 | 调用 Mistral 建议分类 |\n| 未指定且无现有分类 | 返回默认分类 `personnel` |\n\n## 去重检测机制\n\n### 重复检测阈值\n\n| 相似度 | 处理行为 |\n|--------|----------|\n| ≥ 94% | **跳过存储** — 视为完全重复 |\n| < 94% | 仍存储，但记录相似度日志 |\n\n资料来源：[README.md:60-80]()\n\n### 去重实现\n\n```python\nasync def check_duplicate(embedding: list[float]) -> dict | None:\n    \"\"\"\n    Recherche une mémoire similaire via le vecteur pré-calculé (zero-knowledge).\n    Retourne la mémoire duplicata si trouvé, None sinon.\n    \"\"\"\n    # ... API 调用获取相似记忆\n    score_pct = round(dup[\"score\"] * 100)\n    \n    if dup[\"score\"] >= DEDUP_SKIP_THRESHOLD:\n        return [TextContent(type=\"text\", text=(\n            f\"⚠️ Doublon détecté ({score_pct}% similaire) — mémoire non créée.\\n\"\n            f\"→ Existante : {dup['preview']} (ID: {dup['id'][:8]}…)\"\n        ))]\n    else:\n        print(f\"[mcp] Mémoire similaire à {score_pct}% — stockage quand même\")\n        return None\n```\n\n资料来源：[memoraeu_mcp/main.py:110-140]()\n\n### 零知识去重原理\n\n```mermaid\ngraph LR\n    A[明文内容] --> B[Mistral Embed]\n    B --> C[Embedding 向量]\n    C --> D[本地存储加密]\n    C --> E[发送给服务器]\n    \n    F[服务器] --> G[无法解密内容]\n    G --> H[但可比较向量相似度]\n    E --> H\n```\n\n去重机制利用了预计算的 Embedding 向量进行相似度计算，这些向量在本地生成后立即用于重复检测，服务器仅存储加密后的向量数据。\n\n## 加密集成\n\n### 加密流程\n\n在去重和压缩完成后，系统对内容进行加密：\n\n```python\n# 1. 检查重复\nif dup_result:\n    return dup_result\n\n# 2. 加密处理后的内容\nencrypted = encrypt_content(content)\n\n# 3. 发送到 API\npayload = {\n    \"content\": encrypted,\n    \"category\": category,\n    \"tags\": arguments.get(\"tags\", []),\n    \"source\": \"claude_desktop\",\n    \"scope\": \"private\",\n    \"pre_processed\": True,\n}\nif embedding:\n    payload[\"embedding\"] = embedding\n\nmemory = await api_post(\"/memories\", payload)\n```\n\n资料来源：[memoraeu_mcp/main.py:180-220]()\n\n### 加密参数\n\n| 参数 | 说明 | 来源 |\n|------|------|------|\n| 算法 | AES-256-GCM | 客户端加密 |\n| 密钥派生 | PBKDF2-HMAC-SHA256 | 本地派生 |\n| 迭代次数 | 210,000 次 | OWASP 2024 推荐 |\n| 盐值 | `MEMORAEU_SALT` | 服务器生成 |\n| 密文前缀 | `ENCv1:` | 版本标识 |\n\n## 环境配置\n\n### 必需环境变量\n\n| 变量 | 用途 | 获取方式 |\n|------|------|----------|\n| `MEMORAEU_API_KEY` | API 认证 | 仪表板 → 设置 → API 密钥 |\n| `MEMORAEU_SECRET` | 密码 → 加密密钥派生 | 用户账户密码 |\n| `MEMORAEU_SALT` | KDF 盐值 | 仪表板 → 设置 → 加密密钥 |\n| `MEMORAEU_API_URL` | API 端点 | 默认: `https://api.memoraeu.com` |\n| `MISTRAL_API_KEY` | Embedding 和压缩 | [console.mistral.ai](https://console.mistral.ai) |\n\n### Mistral API 作用\n\n> **为什么 MCP 需要 Mistral 密钥？**\n>\n> 零知识意味着服务器永远看不到明文。为了支持语义搜索，Embedding 必须在**加密前**计算——在你的机器上。MCP 直接用明文调用 Mistral，获取向量后加密内容，然后发送两者到服务器。\n\n资料来源：[README.md:40-50]()\n\n## 完整存储决策流程\n\n```mermaid\ngraph TD\n    A[remember 调用] --> B{内容 > 阈值?}\n    B -->|是| C[压缩内容]\n    B -->|否| D[保持原样]\n    C --> E{指定分类?}\n    D --> E\n    E -->|否| F[建议分类]\n    E -->|是| G[使用指定分类]\n    F --> H[生成 Embedding]\n    G --> H\n    H --> I[检查重复]\n    I --> J{相似度 ≥ 94%?}\n    J -->|是| K[返回警告]\n    J -->|否| L[加密内容]\n    L --> M[发送 API]\n    M --> N[返回成功]\n    K --> O[结束]\n    N --> O\n```\n\n## 版本变更\n\n### v0.1.9 (2026-05-12)\n\n- PBKDF2 迭代次数提升至 210,000 次（OWASP 2024 推荐）\n- 引入密文前缀 `ENCv1:` 版本标识\n\n资料来源：[CHANGELOG.md:20-30]()\n\n### v0.1.5 (2026-04-28)\n\n- 初始去重机制实现\n- 向量相似度阈值 0.94 (94%) 正式启用\n- 本地压缩和分类功能上线\n\n## 相关依赖\n\n| 依赖 | 版本 | 用途 |\n|------|------|------|\n| httpx | 0.28.1 | 异步 HTTP 客户端 |\n| starlette | ≥0.40.0,<0.42.0 | Web 框架 |\n| cryptography | ≥42.0.0 | 加密实现 |\n| python-dotenv | 1.0.1 | 环境变量管理 |\n\n资料来源：[requirements.txt:1-10]()\n\n---\n\n<a id='page-configuration'></a>\n\n## 配置与密钥管理\n\n### 相关页面\n\n相关主题：[快速开始](#page-quickstart), [自托管部署](#page-selfhosting)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n- [CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n</details>\n\n# 配置与密钥管理\n\n## 概述\n\nMemoraEU MCP 是一个零知识（Zero-Knowledge）记忆系统，其核心安全机制建立在密钥管理与加密架构之上。本页详细说明 MCP 服务器的配置方式、环境变量的作用、密钥派生流程，以及不同部署模式下的安全考量。\n\n资料来源：[README.md]()\n\n---\n\n## 环境变量总览\n\nMCP 服务器依赖五个核心环境变量，分为三类用途：\n\n| 变量名 | 用途分类 | 说明 |\n|--------|----------|------|\n| `MEMORAEU_API_KEY` | HTTP 认证 | Bearer Token，随每个请求发送 |\n| `MEMORAEU_SECRET` | 密钥派生 | 用户登录密码，用于本地派生加密密钥 |\n| `MEMORAEU_SALT` | 密钥派生 | 服务器生成的 KDF 盐值，账户唯一 |\n| `MEMORAEU_API_URL` | 端点配置 | API 服务器地址 |\n| `MISTRAL_API_KEY` | 嵌入生成 | 本地生成向量嵌入（加密前） |\n\n资料来源：[README.md]()\n\n---\n\n## 密钥派生与加密架构\n\n### 加密流程\n\n```mermaid\ngraph TD\n    A[用户密码 MEMORAEU_SECRET] --> B[PBKDF2-HMAC-SHA256]\n    C[服务器盐值 MEMORAEU_SALT] --> B\n    B --> D[派生密钥 Key]\n    E[明文内容] --> F[本地压缩]\n    F --> G[本地嵌入生成 Mistral]\n    G --> H[AES-256-GCM 加密]\n    D --> H\n    H --> I[ENCv1: 前缀密文]\n    I --> J[上传至服务器]\n```\n\n### 加密参数\n\n根据 CHANGELOG.md v0.1.9 版本更新：\n\n| 参数 | 值 | 说明 |\n|------|-----|------|\n| 算法 | AES-256-GCM | 对称加密，认证加密 |\n| KDF | PBKDF2-HMAC-SHA256 | 密码学密钥派生函数 |\n| 迭代次数 | 210,000 | OWASP 2024 推荐值 |\n| 密文前缀 | `ENCv1:` | 版本标识，便于密钥轮换 |\n| 盐值长度 | 账户唯一 | 服务器生成，Base64 编码 |\n\n资料来源：[CHANGELOG.md]()\n资料来源：[memoraeu_mcp/main.py]()\n\n### 本地处理阶段\n\n在加密发生前，MCP 客户端执行以下明文处理：\n\n1. **内容压缩** — 调用 `compress_locally()` 函数减小体积\n2. **分类建议** — 调用 `suggest_category_locally()` 自动分类\n3. **嵌入生成** — 调用 Mistral Embed API 生成向量\n\n这三个步骤均在加密前执行，确保服务器永远无法访问明文内容。\n\n资料来源：[memoraeu_mcp/main.py:150-180]()\n\n---\n\n## stdio 本地安装配置\n\n本地安装提供完整的零知识保障。所有处理在本地完成。\n\n### 安装命令\n\n```bash\nuvx memoraeu-mcp\n```\n\n### claude_desktop_config.json 配置示例\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"command\": \"uvx\",\n      \"args\": [\"memoraeu-mcp\"],\n      \"env\": {\n        \"MEMORAEU_API_URL\": \"https://api.memoraeu.com\",\n        \"MEMORAEU_API_KEY\": \"meu-sk-...\",\n        \"MEMORAEU_SECRET\": \"your-memoraeu-password\",\n        \"MEMORAEU_SALT\": \"your-kdf-salt\",\n        \"MISTRAL_API_KEY\": \"your-mistral-key\"\n      }\n    }\n  }\n}\n```\n\n### 环境变量获取指南\n\n| 变量 | 获取方式 |\n|------|----------|\n| `MEMORAEU_API_KEY` | 仪表盘 → 设置 → API 密钥 → 创建新密钥 |\n| `MEMORAEU_SECRET` | MemoraEU 账户登录密码 |\n| `MEMORAEU_SALT` | 仪表盘 → 设置 → 加密密钥 → 复制盐值 |\n| `MEMORAEU_API_URL` | 使用 `https://api.memoraeu.com`（托管服务） |\n| `MISTRAL_API_KEY` | [console.mistral.ai](https://console.mistral.ai) 获取 |\n\n资料来源：[README.md]()\n\n---\n\n## SSE 远程模式配置\n\n远程模式下，MCP 通过 Server-Sent Events 连接到 MemoraEU API，无需本地安装。\n\n### 安全说明\n\n> **注意：** 在 SSE 远程模式下，内容**不提供**零知识加密（服务器以明文处理文本）。如需完整的零知识保障，请使用本地 `stdio` 安装模式。\n\n资料来源：[README.md]()\n\n### 配置文件示例\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"type\": \"sse\",\n      \"url\": \"https://api.memoraeu.com/mcp/sse\",\n      \"headers\": {\n        \"Authorization\": \"Bearer meu-sk-...\"\n      }\n    }\n  }\n}\n```\n\n### 部署模式对比\n\n| 特性 | stdio 本地模式 | SSE 远程模式 |\n|------|----------------|--------------|\n| 零知识加密 | ✅ 完整保障 | ❌ 明文处理 |\n| 嵌入本地生成 | ✅ | ❌ |\n| 无需安装 | ❌ | ✅ |\n| 适用场景 | 高安全需求 | 快速接入 |\n\n资料来源：[README.md]()\n\n---\n\n## Mistral API Key 的必要性\n\n### 为什么需要 Mistral Key？\n\n零知识搜索的核心在于：**嵌入必须在加密前生成**。\n\n```mermaid\ngraph LR\n    A[明文内容] --> B[Mistral API<br/>生成嵌入向量]\n    B --> C[本地加密内容]\n    B --> D[加密后嵌入]\n    C --> E[上传密文 + 嵌入]\n    D --> E\n    E --> F[服务器存储<br/>但无法解密]\n```\n\n1. MCP 直接使用明文调用 Mistral Embed API\n2. 获取向量嵌入后，在本地同时加密内容和嵌入\n3. 服务器存储密文 blob 和加密向量\n4. 服务器无法反向解析原始文本\n\n资料来源：[README.md]()\n\n### 无 Mistral Key 时的行为\n\n```mermaid\ngraph TD\n    A[MISTRAL_API_KEY 未配置] --> B{检测到缺失}\n    B --> C[remember/recall 仍可用]\n    B --> D[语义搜索降级]\n    D --> E[服务端关键词搜索替代]\n    C --> F[零知识加密不受影响]\n    E --> G[搜索精度降低]\n```\n\n- `remember` 和 `recall` 工具保持可用\n- 语义搜索切换为服务端关键词匹配\n- AES-256-GCM 加密不受影响\n\n资料来源：[README.md]()\n\n---\n\n## 依赖配置\n\n项目依赖声明于 `requirements.txt`：\n\n```\nmcp>=1.1.0,<1.2.0\nhttpx==0.28.1\npython-dotenv==1.0.1\nstarlette>=0.40.0,<0.42.0\ncryptography>=42.0.0\n```\n\n### 核心依赖说明\n\n| 包名 | 版本约束 | 用途 |\n|------|----------|------|\n| `mcp` | ≥1.1.0, <1.2.0 | MCP 协议实现 |\n| `httpx` | 0.28.1 | 异步 HTTP 客户端 |\n| `python-dotenv` | 1.0.1 | 环境变量加载 |\n| `starlette` | ≥0.40.0, <0.42.0 | ASGI 框架（用于 SSE） |\n| `cryptography` | ≥42.0.0 | AES-256-GCM 加密实现 |\n\n资料来源：[requirements.txt]()\n\n---\n\n## 应用程序内部加密实现\n\n### 加密函数位置\n\n核心加密逻辑位于 `memoraeu_mcp/main.py`，包含以下关键函数：\n\n| 函数名 | 功能 |\n|--------|------|\n| `encrypt_content()` | 使用 AES-256-GCM 加密内容，添加 `ENCv1:` 前缀 |\n| `decrypt_content()` | 解密内容，验证前缀版本 |\n| `get_key()` | 从环境变量派生密钥并缓存 |\n\n### 密钥派生流程\n\n```python\n# PBKDF2 参数（v0.1.9 更新）\nPBKDF2_ITERATIONS = 210000  # OWASP 2024 推荐\nPBKDF2_ALGORITHM = \"sha256\"\nKEY_LENGTH = 32  # AES-256\n```\n\n### 去重与加密流程\n\n```mermaid\ngraph TD\n    A[原始内容] --> B[本地压缩]\n    B --> C[分类处理]\n    C --> D[嵌入生成<br/>Mistral]\n    D --> E{去重检查<br/>相似度 ≥ 0.94?}\n    E -->|是| F[跳过存储<br/>返回警告]\n    E -->|否| G[继续处理]\n    G --> H{相似度 ≥ 0.85?}\n    H -->|是| I[警告但仍存储]\n    H -->|否| J[正常存储]\n    J --> K[本地加密]\n    G --> K\n    K --> L[上传 API<br/>pre_processed=True]\n```\n\n资料来源：[memoraeu_mcp/main.py:180-220]()\n\n---\n\n## API 端点配置\n\n### 服务端点\n\n| 环境 | URL |\n|------|-----|\n| 生产环境 | `https://api.memoraeu.com` |\n| SSE 端点 | `https://api.memoraeu.com/mcp/sse` |\n| 记忆搜索 | `/memories/search` |\n| 记忆创建 | `/memories` |\n| 事实存储 | `/facts` |\n| 分类列表 | `/memories/categories` |\n\n### API 认证头\n\n```json\n{\n  \"Authorization\": \"Bearer {MEMORAEU_API_KEY}\"\n}\n```\n\n支持新版 `meu-sk-xxx` 格式的 API Key。\n\n资料来源：[CHANGELOG.md]()\n资料来源：[README.md]()\n\n---\n\n## 安全最佳实践\n\n### 生产环境建议\n\n| 建议 | 说明 |\n|------|------|\n| 使用 stdio 本地模式 | 确保零知识加密完整 |\n| 定期轮换 `MEMORAEU_SALT` | 通过仪表盘重新生成 |\n| 保护 `MEMORAEU_SECRET` | 不要明文存储在代码库 |\n| 使用环境变量文件 | `.env` 文件配合 `python-dotenv` |\n\n### 敏感信息处理\n\n```bash\n# 推荐的 .env 文件结构\nMEMORAEU_API_URL=https://api.memoraeu.com\nMEMORAEU_API_KEY=meu-sk-xxx\nMEMORAEU_SECRET=your-strong-password\nMEMORAEU_SALT=base64-encoded-salt\nMISTRAL_API_KEY=mistral-api-key\n```\n\n> **警告：** 确保 `.env` 文件加入 `.gitignore`，永不提交到版本控制系统。\n\n---\n\n## 故障排查\n\n| 问题 | 可能原因 | 解决方案 |\n|------|----------|----------|\n| 语义搜索不工作 | 缺少 `MISTRAL_API_KEY` | 添加 Mistral API Key |\n| 加密失败 | `MEMORAEU_SECRET` 或 `MEMORAEU_SALT` 错误 | 检查环境变量配置 |\n| 连接超时 | `MEMORAEU_API_URL` 错误 | 确认使用正确端点 |\n| 认证失败 | `MEMORAEU_API_KEY` 过期或格式错误 | 重新生成 API Key |\n\n---\n\n## 版本历史\n\n| 版本 | 日期 | 密钥相关变更 |\n|------|------|--------------|\n| 0.1.9 | 2026-05-12 | PBKDF2 升级至 210,000 次迭代，添加 `ENCv1:` 前缀 |\n| 0.1.5 | 2026-04-28 | 初始加密实现版本 |\n\n资料来源：[CHANGELOG.md]()\n\n---\n\n<a id='page-selfhosting'></a>\n\n## 自托管部署\n\n### 相关页面\n\n相关主题：[配置与密钥管理](#page-configuration), [项目概述](#page-overview)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [README.md](https://github.com/pquattro/memoraeu-mcp/blob/main/README.md)\n- [memoraeu_mcp/main.py](https://github.com/pquattro/memoraeu-mcp/blob/main/memoraeu_mcp/main.py)\n- [server.py](https://github.com/pquattro/memoraeu-mcp/blob/main/server.py)\n- [requirements.txt](https://github.com/pquattro/memoraeu-mcp/blob/main/requirements.txt)\n- [CHANGELOG.md](https://github.com/pquattro/memoraeu-mcp/blob/main/CHANGELOG.md)\n</details>\n\n# 自托管部署\n\n## 概述\n\nmemoraeu-mcp 支持两种部署模式：远程 SSE（Server-Sent Events）模式和本地 stdio 模式。这两种模式在安全性和功能上存在显著差异，开发者可根据实际需求选择合适的部署方式。\n\n**核心区别**：远程 SSE 模式下，服务器会处理明文数据，无法提供零知识加密保证；本地 stdio 模式则能在用户本地机器上完成所有加密操作，实现完整的零知识保护。\n\n资料来源：[README.md:1-10]()\n\n## 部署模式对比\n\n| 特性 | 远程 SSE 模式 | 本地 stdio 模式 |\n|------|-------------|----------------|\n| 零知识加密 | ❌ 不支持（服务器处理明文） | ✅ 完全支持 |\n| 数据传输 | 通过 HTTPS 传输明文 | 进程间通信（本地） |\n| 加密时机 | 服务器端加密 | 客户端本地加密 |\n| 配置复杂度 | 较低 | 较高（需配置密钥） |\n| 适用场景 | 快速测试、信任服务器 | 生产环境、高隐私需求 |\n\n资料来源：[README.md:11-15]()\n\n## 环境变量配置\n\nmemoraeu-mcp 使用五个关键环境变量，这些变量服务于三个不同的用途，彼此不可互换：\n\n| 变量名 | 用途 | 获取方式 |\n|--------|------|----------|\n| `MEMORAEU_API_KEY` | HTTP 认证（Bearer token，随每个请求发送） | 仪表板 → 设置 → API 密钥 |\n| `MEMORAEU_SECRET` | 用户 MemoraEU 登录密码，用于本地 PBKDF2 派生加密密钥 | 用户账户密码 |\n| `MEMORAEU_SALT` | 服务器生成的 KDF 盐值，唯一对应用户账户，与 `MEMORAEU_SECRET` 组合生成加密密钥 | 仪表板 → 设置 → 加密密钥 |\n| `MEMORAEU_API_URL` | API 端点地址 | 使用 `https://api.memoraeu.com`（托管服务） |\n| `MISTRAL_API_KEY` | 本地生成嵌入向量（在加密前），用于零知识语义搜索 | [console.mistral.ai](https://console.mistral.ai) |\n\n资料来源：[README.md:32-45]()\n\n## 本地 stdio 模式部署\n\n本地 stdio 模式是实现零知识加密的关键部署方式，所有敏感操作都在本地完成。\n\n### 工作原理\n\n```mermaid\ngraph TD\n    A[用户输入] --> B[本地 MCP 服务器]\n    B --> C{MISTRAL_API_KEY}\n    C -->|生成嵌入| D[加密内容]\n    D --> E[加密的嵌入向量]\n    B --> F[AES-256-GCM 加密]\n    F --> G[发送加密数据到服务器]\n    E --> G\n    G --> H[远程服务器存储]\n    \n    style A fill:#e1f5fe\n    style H fill:#ffebee\n    style D fill:#c8e6c9\n```\n\n### 配置步骤\n\n1. **获取 API 密钥**：登录 MemoraEU 仪表板，获取 `MEMORAEU_API_KEY`\n\n2. **获取加密密钥**：在仪表板的\"加密密钥\"页面获取唯一的 `MEMORAEU_SALT`\n\n3. **设置用户密码**：使用您的 MemoraEU 账户密码作为 `MEMORAEU_SECRET`\n\n4. **获取 Mistral API 密钥**：访问 [console.mistral.ai](https://console.mistral.ai) 获取 `MISTRAL_API_KEY`\n\n5. **编辑 Claude Desktop 配置**：在 `claude_desktop_config.json` 中添加以下配置：\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"command\": \"uvx\",\n      \"args\": [\"memoraeu-mcp\"],\n      \"env\": {\n        \"MEMORAEU_API_URL\": \"https://api.memoraeu.com\",\n        \"MEMORAEU_API_KEY\": \"meu-sk-...\",\n        \"MEMORAEU_SECRET\": \"your-memoraeu-password\",\n        \"MEMORAEU_SALT\": \"your-kdf-salt\",\n        \"MISTRAL_API_KEY\": \"your-mistral-key\"\n      }\n    }\n  }\n}\n```\n\n资料来源：[README.md:22-30]()\n\n### 使用 uvx 快速启动\n\nmemoraeu-mcp 支持通过 `uvx`（UV 包管理器）直接运行，无需手动安装：\n\n```bash\nuvx memoraeu-mcp\n```\n\n所有环境变量需要在启动前设置好，或者通过 `.env` 文件管理。\n\n资料来源：[README.md:22-25]()\n\n## 零知识加密机制\n\nmemoraeu-mcp 采用多层加密策略确保数据安全：\n\n### 加密流程\n\n```mermaid\nsequenceDiagram\n    participant 用户 as 用户应用\n    participant MCP as MCP 服务器\n    participant Mistral as Mistral API\n    participant Server as 远程服务器\n\n    用户->>MCP: 输入明文内容\n    MCP->>Mistral: 发送明文获取嵌入\n    Mistral-->>MCP: 返回嵌入向量\n    MCP->>MCP: PBKDF2-HMAC-SHA256 派生密钥<br/>(100k 迭代)\n    MCP->>MCP: AES-256-GCM 加密内容\n    MCP->>Server: 发送加密内容 + 加密嵌入\n    Server-->>用户: 存储不透明的加密 blob\n```\n\n### 密钥派生参数\n\n| 参数 | 值 |\n|------|-----|\n| 算法 | PBKDF2-HMAC-SHA256 |\n| 迭代次数 | 100,000 次 |\n| 盐值 | 服务器提供的唯一盐（`MEMORAEU_SALT`） |\n| 密文前缀 | `ENCv1:` |\n| 加密算法 | AES-256-GCM |\n\n资料来源：[CHANGELOG.md:15-20]()\n\n## Mistral API 密钥的作用\n\n### 为什么需要 Mistral API 密钥？\n\n零知识意味着服务器永远不会看到用户的明文数据。为了实现语义搜索功能，嵌入向量必须在加密之前计算——即在用户本地机器上完成。\n\n**工作流程**：\n\n1. MCP 使用明文内容直接调用 Mistral API\n2. 获取嵌入向量\n3. 在本地加密内容\n4. 将加密内容和加密嵌入同时发送到服务器\n5. 服务器存储加密 blob 和嵌入向量，但无法还原原始文本\n\n资料来源：[README.md:48-55]()\n\n### 无 Mistral API 密钥时的行为\n\n如果未配置 `MISTRAL_API_KEY`，MCP 仍可继续运行：\n- `remember` 和 `recall` 工具保持可用\n- 语义搜索将降级为基于关键词的服务器端搜索\n- 零知识加密不受影响\n\n资料来源：[README.md:57-59]()\n\n## 系统要求与依赖\n\nmemoraeu-mcp 的部署需要以下依赖环境：\n\n### Python 依赖\n\n| 依赖包 | 版本要求 | 用途 |\n|--------|----------|------|\n| `mcp` | ≥1.1.0, <1.2.0 | MCP 协议实现 |\n| `httpx` | 0.28.1 | HTTP 客户端 |\n| `python-dotenv` | 1.0.1 | 环境变量管理 |\n| `starlette` | ≥0.40.0, <0.42.0 | ASGI 框架 |\n| `cryptography` | ≥42.0.0 | 加密功能 |\n\n资料来源：[requirements.txt:1-5]()\n\n### 运行时环境\n\n- **Python**: 3.9+\n- **包管理器**: UV（推荐）或 pip\n- **网络**: 需要访问 `api.memoraeu.com` 和 `api.mistral.ai`\n\n## 部署检查清单\n\n| 检查项 | 说明 | 优先级 |\n|--------|------|--------|\n| ✅ 创建 MemoraEU 账户 | 注册并获取 API 访问权限 | 必须 |\n| ✅ 获取 API 密钥 | 在仪表板获取 `MEMORAEU_API_KEY` | 必须 |\n| ✅ 获取加密盐值 | 获取唯一的 `MEMORAEU_SALT` | 必须 |\n| ✅ 配置账户密码 | 设置 `MEMORAEU_SECRET` | 必须 |\n| ✅ 获取 Mistral API 密钥 | 用于零知识语义搜索 | 推荐 |\n| ✅ 配置 `claude_desktop_config.json` | 添加 MCP 服务器配置 | 必须 |\n| ✅ 验证加密连接 | 确认锁图标显示 🔒 | 推荐 |\n\n## 安全建议\n\n1. **使用强密码**：作为 `MEMORAEU_SECRET`，使用高强度密码以增强密钥派生质量\n\n2. **保护盐值**：`MEMORAEU_SALT` 与账户绑定，不应共享\n\n3. **Mistral API 密钥安全**：该密钥仅在本地使用，应妥善保管\n\n4. **定期轮换**：定期更新 API 密钥和加密盐值\n\n5. **网络传输**：即使使用 HTTPS，远程 SSE 模式下的数据传输仍为明文，仅加密存储\n\n资料来源：[README.md:11-15]()\n\n## 故障排除\n\n### 常见问题\n\n| 问题 | 可能原因 | 解决方案 |\n|------|----------|----------|\n| 语义搜索不工作 | 缺少 `MISTRAL_API_KEY` | 配置 Mistral API 密钥 |\n| 加密失败 | `MEMORAEU_SECRET` 或 `MEMORAEU_SALT` 错误 | 检查环境变量配置 |\n| 连接超时 | 网络问题或 API 端点错误 | 确认 `MEMORAEU_API_URL` 正确 |\n| 无法启动 | uvx 未安装 | 安装 UV：`pip install uv` |\n\n### 验证部署\n\n启动后，可通过以下方式验证零知识加密是否生效：\n\n1. 检查 `recall` 工具返回的记忆内容是否显示 🔒 图标\n2. 确认 `forget` 工具能正常删除记忆\n3. 验证在未提供 `MEMORAEU_SECRET` 的情况下无法解密数据\n\n资料来源：[memoraeu_mcp/main.py:120-130]()\n\n---\n\n---\n\n## Doramagic 踩坑日志\n\n项目：pquattro/memoraeu-mcp\n\n摘要：发现 7 个潜在踩坑项，其中 0 个为 high/blocking；最高优先级：配置坑 - 可能修改宿主 AI 配置。\n\n## 1. 配置坑 · 可能修改宿主 AI 配置\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主，或安装命令涉及用户配置目录。\n- 对用户的影响：安装可能改变本机 AI 工具行为，用户需要知道写入位置和回滚方法。\n- 建议检查：列出会写入的配置文件、目录和卸载/回滚步骤。\n- 防护动作：涉及宿主配置目录时必须给回滚路径，不能只给安装命令。\n- 证据：capability.host_targets | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | host_targets=mcp_host, claude\n\n## 2. 能力坑 · 能力判断依赖假设\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：README/documentation is current enough for a first validation pass.\n- 对用户的影响：假设不成立时，用户拿不到承诺的能力。\n- 建议检查：将假设转成下游验证清单。\n- 防护动作：假设必须转成验证项；没有验证结果前不能写成事实。\n- 证据：capability.assumptions | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | README/documentation is current enough for a first validation pass.\n\n## 3. 维护坑 · 维护活跃度未知\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：未记录 last_activity_observed。\n- 对用户的影响：新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。\n- 建议检查：补 GitHub 最近 commit、release、issue/PR 响应信号。\n- 防护动作：维护活跃度未知时，推荐强度不能标为高信任。\n- 证据：evidence.maintainer_signals | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | last_activity_observed missing\n\n## 4. 安全/权限坑 · 下游验证发现风险项\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：下游已经要求复核，不能在页面中弱化。\n- 建议检查：进入安全/权限治理复核队列。\n- 防护动作：下游风险存在时必须保持 review/recommendation 降级。\n- 证据：downstream_validation.risk_items | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | no_demo; severity=medium\n\n## 5. 安全/权限坑 · 存在评分风险\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：风险会影响是否适合普通用户安装。\n- 建议检查：把风险写入边界卡，并确认是否需要人工复核。\n- 防护动作：评分风险必须进入边界卡，不能只作为内部分数。\n- 证据：risks.scoring_risks | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | no_demo; severity=medium\n\n## 6. 维护坑 · issue/PR 响应质量未知\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：issue_or_pr_quality=unknown。\n- 对用户的影响：用户无法判断遇到问题后是否有人维护。\n- 建议检查：抽样最近 issue/PR，判断是否长期无人处理。\n- 防护动作：issue/PR 响应未知时，必须提示维护风险。\n- 证据：evidence.maintainer_signals | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | issue_or_pr_quality=unknown\n\n## 7. 维护坑 · 发布节奏不明确\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：release_recency=unknown。\n- 对用户的影响：安装命令和文档可能落后于代码，用户踩坑概率升高。\n- 建议检查：确认最近 release/tag 和 README 安装命令是否一致。\n- 防护动作：发布节奏未知或过期时，安装说明必须标注可能漂移。\n- 证据：evidence.maintainer_signals | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | release_recency=unknown\n\n<!-- canonical_name: pquattro/memoraeu-mcp; human_manual_source: deepwiki_human_wiki -->\n",
      "summary": "DeepWiki/Human Wiki 完整输出，末尾追加 Discovery Agent 踩坑日志。",
      "title": "Human Manual / 人类版说明书"
    },
    "pitfall_log": {
      "asset_id": "pitfall_log",
      "filename": "PITFALL_LOG.md",
      "markdown": "# Pitfall Log / 踩坑日志\n\n项目：pquattro/memoraeu-mcp\n\n摘要：发现 7 个潜在踩坑项，其中 0 个为 high/blocking；最高优先级：配置坑 - 可能修改宿主 AI 配置。\n\n## 1. 配置坑 · 可能修改宿主 AI 配置\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主，或安装命令涉及用户配置目录。\n- 对用户的影响：安装可能改变本机 AI 工具行为，用户需要知道写入位置和回滚方法。\n- 建议检查：列出会写入的配置文件、目录和卸载/回滚步骤。\n- 防护动作：涉及宿主配置目录时必须给回滚路径，不能只给安装命令。\n- 证据：capability.host_targets | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | host_targets=mcp_host, claude\n\n## 2. 能力坑 · 能力判断依赖假设\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：README/documentation is current enough for a first validation pass.\n- 对用户的影响：假设不成立时，用户拿不到承诺的能力。\n- 建议检查：将假设转成下游验证清单。\n- 防护动作：假设必须转成验证项；没有验证结果前不能写成事实。\n- 证据：capability.assumptions | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | README/documentation is current enough for a first validation pass.\n\n## 3. 维护坑 · 维护活跃度未知\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：未记录 last_activity_observed。\n- 对用户的影响：新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。\n- 建议检查：补 GitHub 最近 commit、release、issue/PR 响应信号。\n- 防护动作：维护活跃度未知时，推荐强度不能标为高信任。\n- 证据：evidence.maintainer_signals | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | last_activity_observed missing\n\n## 4. 安全/权限坑 · 下游验证发现风险项\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：下游已经要求复核，不能在页面中弱化。\n- 建议检查：进入安全/权限治理复核队列。\n- 防护动作：下游风险存在时必须保持 review/recommendation 降级。\n- 证据：downstream_validation.risk_items | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | no_demo; severity=medium\n\n## 5. 安全/权限坑 · 存在评分风险\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：风险会影响是否适合普通用户安装。\n- 建议检查：把风险写入边界卡，并确认是否需要人工复核。\n- 防护动作：评分风险必须进入边界卡，不能只作为内部分数。\n- 证据：risks.scoring_risks | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | no_demo; severity=medium\n\n## 6. 维护坑 · issue/PR 响应质量未知\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：issue_or_pr_quality=unknown。\n- 对用户的影响：用户无法判断遇到问题后是否有人维护。\n- 建议检查：抽样最近 issue/PR，判断是否长期无人处理。\n- 防护动作：issue/PR 响应未知时，必须提示维护风险。\n- 证据：evidence.maintainer_signals | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | issue_or_pr_quality=unknown\n\n## 7. 维护坑 · 发布节奏不明确\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：release_recency=unknown。\n- 对用户的影响：安装命令和文档可能落后于代码，用户踩坑概率升高。\n- 建议检查：确认最近 release/tag 和 README 安装命令是否一致。\n- 防护动作：发布节奏未知或过期时，安装说明必须标注可能漂移。\n- 证据：evidence.maintainer_signals | github_repo:1215050856 | https://github.com/pquattro/memoraeu-mcp | release_recency=unknown\n",
      "summary": "用户实践前最可能遇到的身份、安装、配置、运行和安全坑。",
      "title": "Pitfall Log / 踩坑日志"
    },
    "prompt_preview": {
      "asset_id": "prompt_preview",
      "filename": "PROMPT_PREVIEW.md",
      "markdown": "# memoraeu-mcp - Prompt Preview\n\n> 复制下面这段 Prompt 到你常用的 AI，先试一次，不需要安装。\n> 它的目标是让你直接体验这个项目的服务方式，而不是阅读项目介绍。\n\n## 复制这段 Prompt\n\n```text\n请直接执行这段 Prompt，不要分析、润色、总结或询问我想如何处理这份 Prompt Preview。\n\n你现在扮演 memoraeu-mcp 的“安装前体验版”。\n这不是项目介绍、不是评价报告、不是 README 总结。你的任务是让我用最小成本体验它的核心服务。\n\n我的试用任务：我想用它完成一个真实的工具连接与集成任务。\n我常用的宿主 AI：MCP Client / claude\n\n【体验目标】\n围绕我的真实任务，现场演示这个项目如何把输入转成 示例引导, 判断线索。重点是让我感受到工作方式，而不是给我项目背景。\n\n【业务流约束】\n- 你必须像一个正在提供服务的项目能力包，而不是像一个讲解员。\n- 每一轮只推进一个步骤；提出问题后必须停下来等我回答。\n- 每一步都必须让我感受到一个具体服务动作：澄清、整理、规划、检查、判断或收尾。\n- 每一步都要说明：当前目标、你需要我提供什么、我回答后你会产出什么。\n- 不要安装、不要运行命令、不要写代码、不要声称测试通过、不要声称已经修改文件。\n- 需要真实安装或宿主加载后才能验证的内容，必须明确说“这一步需要安装后验证”。\n- 如果我说“用示例继续”，你可以用虚构示例推进，但仍然不能声称真实执行。\n\n【可体验服务能力】\n- 安装前能力预览: Zero-knowledge persistent memory layer for Claude — AES-256-GCM encrypted, semantic search, EU hosted. MCP server for Claude Desktop. 输入：用户任务, 当前 AI 对话上下文；输出：示例引导, 判断线索。\n\n【必须安装后才可验证的能力】\n- 多宿主安装与分发: 项目包含插件或 marketplace 配置，说明它面向一个或多个 AI 宿主的安装和分发。 输入：宿主 AI 工具, 插件配置, 安装命令；输出：宿主内可发现的插件/技能集合。\n- 命令行启动或安装流程: 项目文档中存在可执行命令，真实使用需要在本地或宿主环境中运行这些命令。 输入：终端环境, 包管理器, 项目依赖；输出：安装结果, 列表/更新/运行结果。\n\n【核心服务流】\n请严格按这个顺序带我体验。不要一次性输出完整流程：\n1. page-overview：项目概述。围绕“项目概述”模拟一次用户任务，不展示安装或运行结果。\n2. page-quickstart：快速开始。围绕“快速开始”模拟一次用户任务，不展示安装或运行结果。\n3. page-architecture：系统架构。围绕“系统架构”模拟一次用户任务，不展示安装或运行结果。\n4. page-encryption：加密系统。围绕“加密系统”模拟一次用户任务，不展示安装或运行结果。\n5. page-mcp-tools：MCP 工具详解。围绕“MCP 工具详解”模拟一次用户任务，不展示安装或运行结果。\n\n【核心能力体验剧本】\n每一步都必须按“输入 -> 服务动作 -> 中间产物”执行。不要只说流程名：\n1. page-overview\n输入：用户提供的“项目概述”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n2. page-quickstart\n输入：用户提供的“快速开始”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n3. page-architecture\n输入：用户提供的“系统架构”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n4. page-encryption\n输入：用户提供的“加密系统”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n5. page-mcp-tools\n输入：用户提供的“MCP 工具详解”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n【项目服务规则】\n这些规则决定你如何服务用户。不要解释规则本身，而要在每一步执行时遵守：\n- 先确认用户任务、输入材料和成功标准，再模拟项目能力。\n- 每一步都必须形成可检查的小产物，并等待用户确认后再继续。\n- 凡是需要安装、调用工具或访问外部服务的能力，都必须标记为安装后验证。\n\n【每一步的服务约束】\n- Step 1 / page-overview：Step 1 必须围绕“项目概述”形成一个小中间产物，并等待用户确认。\n- Step 2 / page-quickstart：Step 2 必须围绕“快速开始”形成一个小中间产物，并等待用户确认。\n- Step 3 / page-architecture：Step 3 必须围绕“系统架构”形成一个小中间产物，并等待用户确认。\n- Step 4 / page-encryption：Step 4 必须围绕“加密系统”形成一个小中间产物，并等待用户确认。\n- Step 5 / page-mcp-tools：Step 5 必须围绕“MCP 工具详解”形成一个小中间产物，并等待用户确认。\n\n【边界与风险】\n- 不要声称已经安装、运行、调用 API、读写本地文件或完成真实任务。\n- 安装前预览只能展示工作方式，不能证明兼容性、性能或输出质量。\n- 涉及安装、插件加载、工具调用或外部服务的能力必须安装后验证。\n\n【可追溯依据】\n这些路径只用于你内部校验或在我追问“依据是什么”时简要引用。不要在首次回复主动展开：\n- https://github.com/pquattro/memoraeu-mcp\n- https://github.com/pquattro/memoraeu-mcp#readme\n- README.md\n- memoraeu_mcp/__init__.py\n- pyproject.toml\n- requirements.txt\n- memoraeu_mcp/main.py\n- memoraeu_mcp/server.py\n- server.py\n- memoraeu_mcp/crypto.py\n- crypto.py\n- server.json\n\n【首次问题规则】\n- 首次三问必须先确认用户目标、成功标准和边界，不要提前进入工具、安装或实现细节。\n- 如果后续需要技术条件、文件路径或运行环境，必须等用户确认目标后再追问。\n\n首次回复必须只输出下面 4 个部分：\n1. 体验开始：用 1 句话说明你将带我体验 memoraeu-mcp 的核心服务。\n2. 当前步骤：明确进入 Step 1，并说明这一步要解决什么。\n3. 你会如何服务我：说明你会先改变我完成任务的哪个动作。\n4. 只问我 3 个问题，然后停下等待回答。\n\n首次回复禁止输出：后续完整流程、证据清单、安装命令、项目评价、营销文案、已经安装或运行的说法。\n\nStep 1 / brainstorming 的二轮协议：\n- 我回答首次三问后，你仍然停留在 Step 1 / brainstorming，不要进入 Step 2。\n- 第二次回复必须产出 6 个部分：澄清后的任务定义、成功标准、边界条件、\n  2-3 个可选方案、每个方案的权衡、推荐方案。\n- 第二次回复最后必须问我是否确认推荐方案；只有我明确确认后，才能进入下一步。\n- 第二次回复禁止输出 git worktree、代码计划、测试文件、命令或真实执行结果。\n\n后续对话规则：\n- 我回答后，你先完成当前步骤的中间产物并等待确认；只有我确认后，才能进入下一步。\n- 每一步都要生成一个小的中间产物，例如澄清后的目标、计划草案、测试意图、验证清单或继续/停止判断。\n- 所有演示都写成“我会建议/我会引导/这一步会形成”，不要写成已经真实执行。\n- 不要声称已经测试通过、文件已修改、命令已运行或结果已产生。\n- 如果某个能力必须安装后验证，请直接说“这一步需要安装后验证”。\n- 如果证据不足，请明确说“证据不足”，不要补事实。\n```\n",
      "summary": "不安装项目也能感受能力节奏的安全试用 Prompt。",
      "title": "Prompt Preview / 安装前试用 Prompt"
    },
    "quick_start": {
      "asset_id": "quick_start",
      "filename": "QUICK_START.md",
      "markdown": "# Quick Start / 官方入口\n\n项目：pquattro/memoraeu-mcp\n\n## 官方安装入口\n\n### Python / pip · 官方安装入口\n\n```bash\npip install memoraeu-mcp\n```\n\n来源：https://github.com/pquattro/memoraeu-mcp#readme\n\n## 来源\n\n- repo: https://github.com/pquattro/memoraeu-mcp\n- docs: https://github.com/pquattro/memoraeu-mcp#readme\n",
      "summary": "从项目官方 README 或安装文档提取的开工入口。",
      "title": "Quick Start / 官方入口"
    }
  },
  "validation_id": "dval_017644bf19ad4842aff2692e2be4439b"
}
