开始使用指南故障排查

Guide

故障排查

当 OAuth、MCP discovery 或 recall 未按预期工作时,使用 symptom、cause、action 和 safety 指引。

不写入 memory 也能验证连接

下面每条故障排查路径都会以 verification 步骤结束。先从读取开始:它可以在不改变任何内容的情况下证明 credential 和 transport。

curl -s -o /dev/null -w '%{http_code}\n' \
  -H 'X-API-Key: <your-assigned-api-key>' \
  'https://xmemo.dev/v1/memories/search?query=connection%20check&limit=1'

读取 status code

Status 可以区分 credential 问题和空的 memory store。

200 — authorized; an empty results array just means nothing matched.
401 — the credential is missing or not valid.
403 — the credential is valid but lacks the required scope.

客户端连接错误

当 AI 客户端或运行器无法连接 MCP 服务器时,在轮换 Token 之前,请先排查传输协议协商与主机路由问题。

  • 通过直接向 /health 发起 GET 请求或向 /mcp 发起 OPTIONS 请求验证服务器健康状态。
  • 检查传输兼容性:托管客户端使用 Streamable HTTP (/mcp);本地 CLI 工具使用 stdio。
  • 确保企业代理或防火墙允许流式 SSE 响应,避免数据分块被截断。
curl -I -s 'https://xmemo.dev/mcp'

认证失败

认证失败区分了凭据缺失(401 Unauthorized)与权限不足或跨租户边界违规(403 Forbidden)。

  • OAuth 客户端:通过宿主应用重新连接并授予 memory:read 与 memory:write 权限。
  • Direct MCP 客户端:验证进程环境中是否配置了 XMEMO_KEY,且未在 git 中泄露密钥。
  • 403 Forbidden:确认 Token 属于当前激活的租户与 project scope。
curl -s -o /dev/null -w '%{http_code}\n' \
  -H 'Authorization: Bearer <your-token>' \
  'https://xmemo.dev/v1/memories/search?query=auth%20check&limit=1'

召回结果为空

召回返回零条结果通常表示 scope 范围或查询条件不匹配,而非服务引擎故障。当无匹配数据时,读取请求会正常返回 200 OK。

  • Project scope 不匹配:确认查询的 agent 与存储 memory 处于相同的 project 边界下。
  • Agent 实例边界:按 XMEMO_AGENT_INSTANCE_ID 过滤的 Direct 客户端无法读取其它实例标识下保存的数据。
  • 状态检查:在 Memory Console 中验证 memory 是否已提交且状态为 active,而非软删除或已废弃。
curl -s -H 'Authorization: Bearer <your-token>' \
  'https://xmemo.dev/v1/memories/search?query=test&limit=5&scope=project:demo'

写锁超时

来自多个运行器的并发写入或并行的工具调用可能会触发共享 memory path 上的写锁争用。

  • 当写入请求返回写锁争用时,在客户端实现带有随机抖动的指数退避重试策略。
  • 在重试写入时附带客户端幂等键(idempotency key),防止生成重复的 memory 记录。
  • 对于高频写入工作流,使用任务队列或批量 API 对 memory 变更操作进行排队处理。
curl -s -X POST 'https://xmemo.dev/v1/memories' \
  -H 'Authorization: Bearer <your-token>' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: <generate-a-uuid-v4>' \
  -d '{"content":"Durable convention fact","path":"projects/demo/conventions"}'

FAQ / 故障排查

先查看 AI assistant 用户的答案,再使用 developer 和 integrator 的答案处理连接及运营细节。每个答案都包含 action 步骤和 safety 边界。

AI assistant 用户

面向不自行配置 connection、而是通过 AI assistant 使用 XMemo 的用户的日常答案。

  1. 为什么我的 AI assistant 不记得我之前告诉它的事情?

    现象
    我保存了重要偏好或细节,但在后续对话中,AI assistant 像从未见过它一样。
    原因
    Assistant 可能连接到了不同的 XMemo account、project 或 device context,或者原始 memory 没有保存成功。
    操作:
    让 assistant 保存一条小型、非敏感的测试细节,然后打开 Memory Console,检查它是否出现在你使用的 account 和 project 下。
    验证
    用同一个 assistant 开启新对话并询问这条测试细节;完成后删除测试条目。
    安全:
    使用虚构的测试细节;不要使用他人的私人信息。
  2. 为什么我的 AI assistant 把不同的 project 或对话混在一起?

    现象
    一个 project 的细节出现在另一个 project 中,或者 assistant 回答时仿佛两段对话属于同一处。
    原因
    Assistant 可能使用了与保存 memory 时不同的 project 或 account context。
    操作:
    在 assistant 中选择预期的 XMemo account 和 project,必要时重新连接,然后用清楚标记的测试细节重试。
    验证
    在 Memory Console 中检查 memory 的 project 和 source,然后确认无关 project 无法看到这条测试细节。
    安全:
    不要为了让信息出现而在 project 之间移动私人信息。
  3. 怎样才能让我的 AI assistant 完全忘记某件事?

    现象
    我想删除一条 memory,并需要知道它是否已经消失。
    原因
    查看、可恢复移除、永久删除和导出 memory 是不同的 account 操作。
    操作:
    打开 Memory Console,找到这条 memory 并使用 delete 或 forget 控件;如果找不到控件,请带上 memory reference 联系 Support。
    验证
    再次搜索这条 memory,确认 Memory Console 显示的状态;检查任何 export 只包含你的 account 数据。
    安全:
    只删除预期的 memory,绝不要在 Support 消息中包含私人内容。
  4. 我更换了电脑或 AI assistant,XMemo 还会记得我吗?

    现象
    更换设备、重启 assistant 或切换 host 后,我的旧 memory 似乎与新 memory 分开了。
    原因
    新的 assistant connection 可能把设备或 assistant 标识为新 source,或者它登录了不同的 account。
    操作:
    在想要使用的 assistant 中重新连接 XMemo,登录同一个 account,并在应用提供该选项时保持 connection 的 device label 稳定。
    验证
    保存一条虚构的测试细节,在同一个 assistant 中开启新对话,确认它出现且 account 没有改变。
    安全:
    在共享电脑上保存任何个人信息前,先检查 account。
  5. 为什么我的 AI assistant 把同一件事保存了两次?

    现象
    retry 或 reconnect 后,我看到两条看起来相同的 memory。
    原因
    第一次保存可能已经成功,只是 assistant 没有显示结果;重复请求又创建了一份副本。
    操作:
    打开 Memory Console,比较两条记录,确认日期和 source 后只移除重复项。
    验证
    让 assistant 保存一条清楚标记的新测试细节一次,确认只出现一条新记录。
    安全:
    在确认要保留的副本前,不要删除所有匹配的 memory。
  6. 为什么我的 AI assistant 给了太多或太少的历史上下文?

    现象
    Assistant 提起无关细节、遗漏需要的决策,或给出信息过载的回答。
    原因
    请求覆盖了过宽的主题或时间范围,或者 assistant 试图使用超过当前对话需要的已保存上下文。
    操作:
    要求更窄的主题、project 或时间范围,并告诉 assistant 最重要的决策或细节。
    验证
    将回答与请求的主题比较,继续前从对话中移除无关细节。
    安全:
    不要为了填满对话而要求 assistant 暴露无关的私人 memory。
  7. 我断开了 XMemo,怎样确认旧 assistant 无法再使用它?

    现象
    我从 assistant 中移除了 connection,但不确定它是否仍能访问我的 memory。
    原因
    从应用中移除 connection 可能不会取消 account 的 connection permission。
    操作:
    打开 XMemo account 的 connected-app 或 security controls,撤销旧 assistant connection,只重新连接你信任的对象。
    验证
    只有在安全的情况下才尝试旧 connection,并确认它被拒绝后再使用新 connection。
    安全:
    只撤销预期移除的 connection,不要分享 account 登录详情。
  8. 为什么我的 AI assistant 不能再使用 XMemo?

    现象
    XMemo 以前在 assistant 中可用,但 memory 操作不再出现,或 assistant 说无法使用它们。
    原因
    Assistant 可能需要刷新 XMemo connection,或者登录了不同的 account。
    操作:
    打开 assistant 的 connected-app settings,断开并重新连接 XMemo,然后开启新对话。
    验证
    让 assistant 显示 XMemo 是否已连接,然后先进行无害的读取,再保存任何内容。
    安全:
    绝不要把 secret account details 或私人 memory 粘贴到 chat 或 Support 请求中。
  9. 我应该在 AI assistant 中使用哪个 XMemo connection?

    现象
    我不确定哪个 XMemo 页面或 connection 应该放进 assistant 的设置。
    原因
    引导设置页面和 assistant connection 用途不同,hosted 与 self-managed setup 的边界也不同。
    操作:
    对于 hosted service,从 https://xmemo.dev/product/docs 开始,并按照页面为你的 assistant 显示的 connection link 操作;如果组织提供了不同的 setup page,请询问 Support。
    验证
    保存个人细节前,确认页面使用的是预期的 XMemo account 和 hosted service。
    安全:
    不要使用本地开发地址,也不要把私人 credential 粘贴到公共 chat。
  10. 如果我的 AI assistant 仍无法连接 XMemo,该怎么办?

    现象
    我重试了 connection 步骤,但 assistant 仍然无法使用 XMemo。
    原因
    问题可能属于 assistant 应用、我的 account,或 public instructions 无法检查的过期 connection。
    操作:
    联系 Support,提供 assistant 名称、大致时间和所见情况的简短描述;只包含已脱敏的细节。
    验证
    确认这份报告无需发送私人 memory 或 account secret 也能复现。
    安全:
    绝不要发送登录详情、一次性代码、cookies 或私人 memory 文本。

Developer 与 integrator

面向集成 XMemo 的人员,涵盖 connection、account boundary、client 和运营问题的答案。

  1. OAuth 失败,或者同意窗口无法完成。

    现象
    Client 显示 401、OAuth 浏览器没有打开,或者同意后返回 client 却没有可用 connection。
    原因
    Hosted grant 可能已过期,浏览器交接可能被阻止,或者 client 使用了旧的 server registration。
    操作:
    在 host app 中退出 XMemo MCP server,重新连接 hosted MCP URL,并再次批准 memory:read 和 memory:write。
    验证
    重新连接直到 client 报告 active authorization,然后先执行无害的 recall,再写入 memory。
    安全:
    不要仅为绕过过期 OAuth session 就在 OAuth client 中改用 XMEMO_KEY。
  2. 请求返回 403 Forbidden。

    现象
    Server 可访问且 credential 已识别,但请求的 project、tool 或 memory 操作被拒绝。
    原因
    Grant 缺少所需 scope,account 不在选定的 project boundary 内,或 resource 属于其他 tenant。
    操作:
    检查选定的 account 和 project,重新连接 OAuth 或请求预期 scope,然后不改变 resource 地重试相同操作。
    验证
    确认预期 project 中的只读请求成功后,再重试 write 或 delete 操作。
    安全:
    不要扩大 scope,也不要复制其他用户的 token 来消除 403。
  3. MCP server 已连接,但没有出现 tool。

    现象
    Host 显示 server 已连接,但 tools/list 为空,或 model 的 tool picker 中缺少 XMemo tools。
    原因
    Client 尚未刷新 discovery,使用了错误的 MCP profile,或连接到了过期的 URL 或 registration。
    操作:
    重新连接 server,确认 client 使用受支持的 MCP profile,然后再次运行 tool discovery,再考虑修改 credential。
    验证
    开始写入或 marketplace 演示前,确认至少出现 remember、recall 和 search_memory。
    安全:
    不要把 bearer token 粘贴到截图、Support ticket 或 marketplace review note 中。
  4. 直接 MCP client 提示 token 缺失。

    现象
    Direct client 报告 XMEMO_KEY 未设置、为空或不可用,尽管我已经在机器某处添加了变量。
    原因
    Client process 没有继承环境变量,变量被添加到了另一个 shell,或者 config 需要 secret-store reference。
    操作:
    在本地 environment 或 secret store 中设置 XMEMO_KEY,重启 client;需要 attribution 时保持 XMEMO_AGENT_INSTANCE_ID 稳定。
    验证
    只检查变量存在的 metadata,重启 client 并确认无害的 authenticated recall;绝不要打印 token value。
    安全:
    把真实 token 放在已提交到 git 的 config 文件之外;公共示例只应引用环境变量。
  5. Agent instance ID 每次重启都会改变。

    现象
    同一个本地 runner 在重启或 redeploy 后看起来像多个 agent,recall 也分散到了不同 instance。
    原因
    XMEMO_AGENT_INSTANCE_ID 在 process 启动时生成,而不是持久化在 runner 的本地 secret 或 environment configuration 中。
    操作:
    为每个 runner 生成一个非机密 instance label,将它持久化在 git 之外,并在每次 direct MCP connection 中发送。
    验证
    重启 runner 两次,确认 source attribution 中的 instance label 相同且没有暴露 credential。
    安全:
    Instance label 是 attribution metadata,不是 authorization credential;account 和 token boundary 仍决定访问。
  6. Recall 返回空 memory。

    现象
    Recall 或 search 成功,但用户保存 context 后仍没有相关 record。
    原因
    读取和写入使用了不同的 account、project、scope、agent boundary 或 memory type,或者测试 record 从未提交。
    操作:
    创建一条 synthetic test memory,在 Memory Console 中确认 path 和 memory type,再从相同 account 或 tenant boundary 重试 recall。
    验证
    用相同 project 和 scope 读回新建的 synthetic record,然后通过预期 delete path 移除它。
    安全:
    使用 synthetic review data;不要把 private customer memory 用作 marketplace demo。
  7. Recall 或 write 使用了错误的 project scope。

    现象
    Record 在一个 project 中可见,在另一个 project 中不可见,或 write 出现在 operator 未预期的 project 下。
    原因
    Client 复用了其他 environment 的 project identifier,省略了 project boundary,或保留了过期的 account session。
    操作:
    明确选择预期的 account 和 project,刷新 client context,再用 synthetic record 重复操作。
    验证
    在 Memory Console 中确认 record 的 project 和 source attribution,再确认无关 project 无法读取它。
    安全:
    绝不要通过授予更宽 token 或在 project 之间复制 data 来解决 scope mismatch。
  8. 同一条 memory 被保存了两次。

    现象
    Retry 或 reconnect 产生了 duplicate record,而不是一条 durable memory。
    原因
    Client 在 timeout 后没有 idempotency boundary 就 retry,或者 capture flow 在确认第一次响应前就写入。
    操作:
    先检查现有 record 和 source attribution,再使用 client retry policy 或稳定的 idempotency key 后重新写入。
    验证
    重复一次相同的 controlled capture,确认只有一条新 record 和一次 readback,而不是两条新 record。
    安全:
    确认目标 record 和 account scope 前,不要批量删除匹配的 memory。
  9. Recall context 太大或太小。

    现象
    Agent 收到无关 context、遗漏所需 decision,或超过 host 有用的 context budget。
    原因
    Query 过宽,缺少 scope 或 time window,或者 caller 请求了不适合任务的 result limit。
    操作:
    按 project、agent、time 或 topic boundary 缩小 query,并在扩大 limit 前先请求小而相关的 set。
    验证
    将返回的 context 与目标问题对比,确认每条包含的 record 都已授权且有用。
    安全:
    不要为了填满 context window 而扩大 scope 或导出无关 memory。
  10. 如何删除或导出 memory?

    现象
    Operator 需要移除 record、确认 forget action,或获取 account-scoped export。
    原因
    Delete、recoverable forget、permanent delete 和 export 是不同的 workflow,具有不同的 confirmation 和 recovery semantics。
    操作:
    先使用 Memory Console 或 account workflow;如果没有 self-service path,请联系 Support,让请求保持在 account scope 内。
    验证
    Forget 或 delete 后按 record reference 搜索,确认预期的 recoverable 或 permanent state;验证 export 只包含 account scope。
    安全:
    Export 和 Support bundle 必须排除 token hash、API key、session secret、provider credential 及无关 tenant data。
  11. 断开 client 后如何撤销 access?

    现象
    Client 已在本地移除,但 operator 需要使其 OAuth grant 失效或轮换 direct credential。
    原因
    断开 client config 不一定会撤销 server-side grant,也不一定会轮换 direct token。
    操作:
    打开 account security 或 connected-client controls,撤销指定的 OAuth grant;如果 direct credential 已暴露或不再可信,则轮换它。
    验证
    用旧 connection 重试 authenticated read,确认被拒绝后,再只通过预期的 consent 或 secret-store path 重新连接。
    安全:
    只撤销预期的 client 或 grant;排查 access 时不要公开旧 token、OAuth code 或 session details。
  12. XMemo 是 GA、certified,还是已列入 marketplace?

    现象
    Listing 或 document 询问一个可用 configuration 是否证明 GA、certification 或 marketplace approval。
    原因
    Configuration support、OAuth readiness、pilot evidence 和 marketplace approval 是不同的声明。
    操作:
    除非存在具体的 marketplace approval 或 certification artifact,否则将 public wording 视为 beta/config-supported。
    验证
    发布 status claim 前,检查 canonical client capability matrix 和指定的 approval artifact。
    安全:
    不要仅凭可用 configuration 声称 GA、certified、stable 或 listed。
  13. 我应该使用哪个 URL?

    现象
    Hosted user 不确定应该遵循 public quickstart、MCP endpoint,还是 self-hosted developer instructions。
    原因
    Hosted onboarding 与 self-hosted 或 legacy deployment path 使用不同的 URL、credential 和 data boundary。
    操作:
    Hosted user 应在 MCP client 中使用 https://xmemo.dev/mcp,在 guided setup 中从 https://xmemo.dev/product/docs 开始。
    验证
    连接前确认 host URL、authentication mode 和 account boundary 与预期的 hosted 或 self-hosted deployment 一致。
    安全:
    不要把 localhost、Supabase、Docker 或 self-hosted Python instructions 作为 public hosted user 的第一条路径。
  14. Memory 出现在错误的 agent 或 device 下。

    现象
    Client update 或 restart 后,memory 被归因到另一个 runner,或在设备之间看起来分裂。
    原因
    Client 更改了非机密 agent 或 instance headers,或者多个 runner 共用了同一 credential。
    操作:
    检查非机密 agent/device headers 或 client profile,然后持久化本地 instance ID,而不是重新生成它。
    验证
    从预期 runner 写入一条 synthetic record,确认 reconnect 后 source attribution 仍然稳定。
    安全:
    Attribution label 有助于检查 source,但不是 security boundary;访问仍由 account credential 决定。
  15. 按步骤操作后仍然无法连接。

    现象
    重试 client-specific OAuth 或 direct-secret path 后,connection 仍不可用。
    原因
    剩余问题可能是 client-specific、account-specific,或由 local docs 无法检查的过期 registration 或 environment boundary 引起。
    操作:
    向 Support 提供 client 名称、config path、大致 timestamp,以及 client 使用 OAuth 还是 XMEMO_KEY。
    验证
    确认 Support report 包含可复现的 symptom 和脱敏 metadata,然后等待 account-scoped diagnosis。
    安全:
    只分享脱敏 diagnostic;绝不要发送 bearer token、OAuth code、cookie 或 customer memory content。

来源: FAQ / 故障排查