mcpField
K
Khwan

Khwan

远程服务
khwan.ai记忆与知识09 周前更新

关于 Khwan

Khwan 是供 Claude Code、Claude Desktop 等 MCP 客户端使用的持久记忆服务。它将存储的对话提炼为事实和经验,供后续会话检索或用于为子 Agent 提供上下文。

主要功能

  1. 01检索事实与提炼经验
  2. 02保存持久事实和偏好
  3. 03准备与记录记忆的流程
  4. 04查看记忆并列出核心
  5. 05隔离的核心与子记忆
  6. 06回填 Claude Code 对话记录

适用场景

  1. 01用相关记忆为新会话提供上下文
  2. 02为子 Agent 提供精简任务背景
  3. 03保存决策供后续会话使用
  4. 04导入现有 Claude Code 对话记录

MCP 相关

Khwan 通过本地运行的 MCP 服务提供记忆工具,并连接 Khwan 服务。客户端可检索或保存事实、执行准备与记录流程,以及查看记忆空间。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://mcp.khwan.ai/mcp/{core}/{user}
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
pypikhwan-mcp0.3.12

工具

详细介绍

khwan-mcp

可跨会话持久保存的记忆。 一个 MCP 服务,可将 Khwan ——纯 AI 记忆层——接入 Claude Code、Claude Desktop 或任何 MCP 客户端。

Khwan 绝不会运行你的模型。模型就是客户端。 它的工作是持久保存并提炼重要信息,存入一个大脑,供你在之后的会话中回忆,或用来为子 Agent 提供初始信息——一组精简且有界的事实,而不是重放对话记录。一个账户可以容纳多个相互隔离的核心(大脑),并且在付费方案中,还可为每位最终用户提供一个隔离的子脑。

读取或写入路径都不会产生推理调用费用:khwan_recall 和 khwan_remember 都不会触发推理。Khwan 确实会按计划运行自己的一个模型——每晚进行一次处理,将存储的对话轮次提炼为长期经验。一次真实的生产运行处理了 8 个大脑和 245 条已存储对话轮次,提炼出 11 条经验,费用为 $0.0094。 这笔费用由 Khwan 承担,不会转嫁给你;这正是它与每轮都进行压缩、构建图谱或整合的记忆层之间的全部区别。

它如何节省令牌(以及不会节省的地方)

坦诚说明其机制——MCP 会为宿主的上下文增加内容,无法替代宿主已经发送的对话记录。因此:

  • 在同一个活跃会话中,它不会节省令牌。 Claude Code 会缓存不断增长的历史记录(缓存读取费用约为普通费用的 0.1 倍),因此每轮重新注入记忆只会增加消耗。不要在这里这样做。
  • 跨会话和子 Agent 时,它能节省令牌。 缓存几分钟后就会失效;会话也会结束。Khwan 会持久保存提炼出的事实,让下一次运行以较低成本回忆这些信息——无需冷启动重放旧对话记录,也能重新检索已从上下文中滚出的事实。

节省令牌的模式:只注入一次,记住持久事实(见下文),而不是在使用缓存的宿主上每轮都运行完整流程。在不使用缓存的宿主上运行自定义 Agent时,完整的 prepare → record 流程仍然很有用,因为用提炼后的记忆替代历史记录,可以直接限制每轮的成本。

安装

pip install khwan-mcp          # or: uvx khwan-mcp

连接到 Claude Code

claude mcp add khwan --scope project \
  -e KHWAN_CORE=default \
  -- khwan-mcp

--scope project 会将 .mcp.json 写入仓库,让设置随项目一起保存。注意该命令中没有包含密钥。

避免将密钥存入仓库

claude mcp add -e KHWAN_API_KEY=… 会将明文值写入 .mcp.json——这个文件的用途正是提交到仓库。有两种方法可以避免这一点,第二种方法适用于所有环境:

Shell 环境变量。 完全不在配置中设置 KHWAN_API_KEY,而是在启动 claude 的 shell 中导出该变量。服务会继承它。

export KHWAN_API_KEY=kwk_live_xxx

启动器(桌面应用也适用)。 桌面应用由程序坞或菜单启动,而不是由登录 shell 启动,因此不会继承 shell 中导出的变量;上面的方法会静默地导致密钥缺失。改为从文件读取:

mkdir -p ~/.khwan && chmod 700 ~/.khwan
printf 'KHWAN_API_KEY=kwk_live_xxx\n' > ~/.khwan/env && chmod 600 ~/.khwan/env

cat > ~/.khwan/khwan-mcp <<'SH'
#!/bin/sh
set -a
[ -f "$HOME/.khwan/env" ] && . "$HOME/.khwan/env"
set +a
exec khwan-mcp "$@"
SH
chmod 700 ~/.khwan/khwan-mcp

然后将配置指向启动器,并仅将非机密设置内联:

claude mcp add khwan --scope project \
  -e KHWAN_CORE=acme -e KHWAN_USER=Web \
  -- ~/.khwan/khwan-mcp

现在可以安全地提交 .mcp.json,而每个新仓库只需两行设置,无需粘贴密钥。团队中的其他人只需编写自己的 ~/.khwan/env。

每个项目一个大脑

只有在能取回正确项目的记忆时,记忆才有用。有两个维度,而且 两者都能实现完全隔离:

选择方式免费付费
核心KHWAN_CORE1 个——仅 default5 个(starter)→ 25 个(pro)
子大脑KHWAN_USER3 个不限

子大脑是完全独立的大脑,不是筛选器:account::@web 与 account::@api 之间毫无共享。因此两个维度相乘,免费账户 已经拥有四个相互隔离的大脑——核心本身一个,外加三个 子大脑:

account              default core, no KHWAN_USER      brain 1
account::@web        KHWAN_USER=web                   brain 2
account::@api        KHWAN_USER=api                   brain 3
account::@docs       KHWAN_USER=docs                  brain 4

这意味着,免费方案就能实现每个项目一个大脑,最多支持四个 项目——而且完全不需要设置 KHWAN_CORE:

# in ~/code/web
claude mcp add khwan --scope project -e KHWAN_USER=web -- ~/.khwan/khwan-mcp
# in ~/code/api
claude mcp add khwan --scope project -e KHWAN_USER=api -- ~/.khwan/khwan-mcp

命名核心属于付费维度。当四个大脑不够用,或者你希望按客户而非 代码仓库对它们分组时,就可以使用命名核心:

# in ~/code/acme-web
claude mcp add khwan --scope project -e KHWAN_CORE=acme -e KHWAN_USER=Web -- ~/.khwan/khwan-mcp
# in ~/code/acme-api
claude mcp add khwan --scope project -e KHWAN_CORE=acme -e KHWAN_USER=Api -- ~/.khwan/khwan-mcp

设置 KHWAN_CORE 之前,有两点需要了解。核心必须先存在 ——未知的 slug 会返回 404,而不是“自动为你创建”,并且核心 需要在控制面板中创建。免费方案没有可供选择的核心:唯一名额 已被 default 占用,因此创建命名核心会返回 402。在免费方案中, 请将 KHWAN_CORE 留空并使用 KHWAN_USER。相比之下,子大脑会在 首次写入时创建。

推荐模式(节省令牌)

在 Claude Code 这类带缓存的宿主中,优先使用注入 + 记忆, 而不是每轮都循环调用:

  1. 注入:在会话或子 Agent 开始时:

    “调用 khwan_recall(query="<the task>"),并将返回的 seed_text 作为 上下文使用。”

  2. 记忆:在持久事实出现时记下来:

    “这是一项长期决策——调用 khwan_remember(fact="…")。”

可以在项目的 CLAUDE.md 中强调这一点,例如:

- At the start of a task, call `khwan_recall` to seed relevant memory.
- When a durable decision/preference/fact emerges, call `khwan_remember`.
- Don't call prepare/record every turn — it adds tokens without saving them here.

为子 Agent 注入上下文最能体现这种做法的优势——交给它一份范围明确的简报, 而不是整段对话记录:

“使用 khwan_recall(query="deploy runbook") 检索部署记忆,然后启动一个 子 Agent,将该 seed_text 与任务作为简报。”

连接到 Claude Desktop

Claude Desktop 和 Claude Code 使用彼此独立的 MCP 配置——添加到其中一个的服务 不会对另一个可见,而且 claude mcp add 不会修改此文件。将配置添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "khwan": {
      "command": "/Users/you/.khwan/khwan-mcp",
      "env": {
        "KHWAN_CORE": "acme",
        "KHWAN_USER": "Web"
      }
    }
  }
}

请使用绝对路径:桌面应用也无法访问 shell 的 PATH,因此单独写 khwan-mcp 可能无法解析。整个应用只能选择一个核心——这里没有按项目切换的 选项,因此请选择一个通用核心。

配置(环境变量)

变量必填用途
KHWAN_API_KEY是你从 Khwan 控制面板获取的密钥(kwk_live_…)。
KHWAN_CORE否选择一个命名核心。仅限付费方案——免费方案只有 default。
KHWAN_USER否核心内的独立大脑——免费方案有 3 个,付费方案不限。
KHWAN_BASE_URL否覆盖 API 基础地址——例如,本地引擎可使用 http://127.0.0.1:8010。

工具

工具使用时机
khwan_recall(query, limit=3)为会话/子 Agent 注入上下文 — 合成的 lessons + 最多 3 条相关事实,作为 seed_text。
khwan_remember(fact)持久化可供未来会话使用的长期事实/偏好。
khwan_prepare(input)完整流程,回答之前调用 — 记忆上下文 + 一个 turn_token。
khwan_record(turn_token, answer)完整流程,回答之后调用 — 持久化本轮对话,让 Khwan 从中学习。
khwan_memory(limit=20)查看大脑当前记住的内容。
khwan_cores()列出账户上的隔离核心。

khwan_recall / khwan_remember 是适用于缓存型主机、节省 token 的工具组合; khwan_prepare / khwan_record 是适用于自定义 Agent 的完整流程(将 prepare 返回的 确切 turn_token 传回 record)。

返回的内容,以及空答案的含义

khwan_recall 最多返回 三条事实 — 这是服务端设定的上限,因此 limit 可以降低上限, 但不能提高上限 — 另外还会返回从许多过往轮次中提炼出的 lessons。lessons 会排在 seed_text 前面:积累数月得出的规则,比索引中恰好位于附近的单轮对话更重要。

检索会应用相关性阈值,因此 facts 为空也是一种答案:大脑中没有与这个问题足够接近的内容。 应将其理解为“这里没有相关认知”,而不是一次失败;不要依赖恰好最接近的事实来填补空缺。

这个阈值有意设得较宽松,因为错误丢弃的记忆无从察觉,而错误保留的记忆则不会。返回的事实 可能与问题有关联,但不一定确实相关 — 依赖它之前请先阅读。

用已有工作为大脑填充记忆

新大脑一无所知,因此最初几周的检索结果很少 — 而答案往往早已存在于主机自身尚未读取的对话记录中。 examples/backfill/ 会将 Claude Code 对话记录重新导入大脑:结果确定,无模型调用,默认试运行。

python3 examples/backfill/backfill_claude_code.py --map cores.json

始终启用的记忆(Claude Code hooks)

上述工具仅在 Claude 决定调用时才会运行。若要实现确定性记忆 — 不依赖模型 — 请使用 examples/claude-code-hooks/ 中的 hook 预设:UserPromptSubmit hook 会在每次提示词提交时注入记忆,Stop hook 会记录每个答案。

⚠️ 在缓存型主机上,这是全面的方案,而不是省钱的方案 — 它会在每轮增加 token 开销。若记忆检索的可靠性比 token 成本更重要(或使用非缓存客户端),请优先选择此方案; 否则请在会话开始时使用 khwan_recall。

源码

github.com/khwanlabs/khwan-mcp — 此 服务在你的机器上运行,使用你的密钥,并读取你输入的内容。安装前请先阅读源码。

许可证

MIT — © Khwan Labs。参见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。