Context7
Up-to-date docs for AI agents
제작자가 쓴 설명(영어 원문)
Durable AI memory: recall distilled facts in a later session or subagent, and remember new ones.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
KHWAN_API_KEY, KHWAN_CORE, KHWAN_USER, KHWAN_BASE_URL비밀로 표시된 값은 내 계정의 열쇠예요. 절대 다른 사람과 공유하거나 채팅에 붙여 넣지 마세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
웹, 데스크톱, 모바일의 Claude에서 쓸 수 있어요:
https://mcp.khwan.ai/mcp/{core}/{user}주소에 나만 아는 {…} 부분(예: 내 계정)이 있어서, 복사한 뒤 직접 채워 주세요.
Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"khwan": {
"command": "uvx",
"args": [
"khwan-mcp"
],
"env": {
"KHWAN_API_KEY": "your-value",
"KHWAN_CORE": "your-value",
"KHWAN_USER": "your-value",
"KHWAN_BASE_URL": "your-value"
}
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add --transport http khwan 'https://mcp.khwan.ai/mcp/{core}/{user}'claude mcp add khwan --env KHWAN_API_KEY=your-value --env KHWAN_CORE=your-value --env KHWAN_USER=your-value --env KHWAN_BASE_URL=your-value -- uvx khwan-mcp실행하기 전에 빈 값을 채워 주세요.
주소에 나만 아는 {…} 부분(예: 내 계정)이 있어서, 복사한 뒤 직접 채워 주세요.
프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"khwan": {
"url": "https://mcp.khwan.ai/mcp/{core}/{user}"
}
}
}프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"khwan": {
"command": "uvx",
"args": [
"khwan-mcp"
],
"env": {
"KHWAN_API_KEY": "your-value",
"KHWAN_CORE": "your-value",
"KHWAN_USER": "your-value",
"KHWAN_BASE_URL": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
주소에 나만 아는 {…} 부분(예: 내 계정)이 있어서, 복사한 뒤 직접 채워 주세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"khwan": {
"type": "http",
"url": "https://mcp.khwan.ai/mcp/{core}/{user}"
}
}
}프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"khwan": {
"type": "stdio",
"command": "uvx",
"args": [
"khwan-mcp"
],
"env": {
"KHWAN_API_KEY": "your-value",
"KHWAN_CORE": "your-value",
"KHWAN_USER": "your-value",
"KHWAN_BASE_URL": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요:
https://mcp.khwan.ai/mcp/{core}/{user}주소에 나만 아는 {…} 부분(예: 내 계정)이 있어서, 복사한 뒤 직접 채워 주세요.
메뉴 이름은 요금제나 시기에 따라 조금 다를 수 있어요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
KHWAN_CORE envKHWAN_USER envKHWAN_BASE_URL env이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
아직 이 서버의 도구 목록을 읽지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 6일 점검
레지스트리 이름이 도메인 khwan.ai 기준으로 확인되었어요(레지스트리가 도메인 소유를 확인해요)
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
주소에 내 계정 값이 필요해서 대신 점검할 수 없어요
주소에 내 계정 값이 필요해서 대신 점검할 수 없어요
아직 점검하지 않았어요. 엔드포인트를 점검할 때 도구 목록을 읽어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
입력해야 할 값: KHWAN_API_KEY
둘 다 가능해요. 내 컴퓨터에 설치해도 되고, 클라우드 버전에 연결해도 돼요.
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.3.12)은 2개월 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. URL로 연결되기 때문에, 원격 MCP 서버를 지원하는 앱(예: 개발자 모드의 ChatGPT)에서도 쓸 수 있어요.
같은 카테고리에는: Context7, Codebase Memory, Exa
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
Up-to-date docs for AI agents
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
Durable memory that survives the session. An MCP server that plugs Khwan — a pure AI-memory layer — into Claude Code, Claude Desktop, or any MCP client.
Khwan never runs *your* model. The client is the model. Its job is to persist and distil what matters into a brain you can recall in a later session or seed a subagent with — a compact, bounded set of facts instead of a replayed transcript. One account can hold many isolated cores (brains), and — on paid plans — an isolated sub-brain per end-user.
Nothing on the read or write path costs you an inference call: khwan_recall and khwan_remember make none. Khwan does run one model of its own, on a schedule — a nightly pass that distils stored turns into standing lessons. A real production run was 8 brains and 245 stored turns distilled into 11 lessons, for $0.0094. That pass is Khwan's cost, not yours, and it is the whole difference from memory layers that compress, graph, or consolidate on every turn.
Be honest about the mechanism — an MCP adds to a host's context, it cannot replace the transcript the host already sends. So:
The token-smart pattern: seed once, remember durable facts (below), rather than running the full loop on every turn of a caching host. The full prepare → record loop still shines in a custom agent on a non-caching host, where replacing history with distilled memory bounds per-turn cost directly.
pip install khwan-mcp # or: uvx khwan-mcp
claude mcp add khwan --scope project \
-e KHWAN_CORE=default \ -- khwan-mcp
--scope project writes .mcp.json into the repo, so the setting travels with the project. Note what is not in that command: the key.
claude mcp add -e KHWAN_API_KEY=… writes the literal value into .mcp.json — a file whose whole point is being committed. Two ways to avoid that, and the second is the one that works everywhere:
Shell environment. Leave KHWAN_API_KEY out of the config entirely and export it in the shell that launches claude. The server inherits it.
export KHWAN_API_KEY=kwk_live_xxx
A launcher (works in the desktop app too). A desktop app is started from a dock or menu, not a login shell, so it inherits none of your shell exports and the approach above silently yields no key. Read it from a file instead:
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
Then point the config at the launcher and keep only non-secret settings inline:
claude mcp add khwan --scope project \
-e KHWAN_CORE=acme -e KHWAN_USER=Web \ -- ~/.khwan/khwan-mcp
.mcp.json is now safe to commit, and every new repo costs two lines instead of a pasted key. Anyone else on the team writes their own ~/.khwan/env.
Memory is only useful if the right project's memory comes back. Two axes, and both give complete isolation:
| selected by | free | paid | |
|---|---|---|---|
| core | KHWAN_CORE | 1 — default only | 5 (starter) → 25 (pro) |
| sub-brain | KHWAN_USER | 3 | unlimited |
A sub-brain is a full separate brain, not a filter: account::@web shares nothing with account::@api. So the two axes multiply, and a free account already holds four isolated brains — the core on its own, plus three sub-brains:
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
Which means one-brain-per-project works on the free plan, for up to four projects — and it needs no `KHWAN_CORE` at all:
# in ~/code/web
claude mcp add khwan --scope project -e KHWAN_USER=web -- ~/.khwan/khwan-mcp
claude mcp add khwan --scope project -e KHWAN_USER=api -- ~/.khwan/khwan-mcp
Named cores are the paid axis. Reach for one when four brains stop being enough, or when you want them grouped per client rather than per repository:
# in ~/code/acme-web
claude mcp add khwan --scope project -e KHWAN_CORE=acme -e KHWAN_USER=Web -- ~/.khwan/khwan-mcp
claude mcp add khwan --scope project -e KHWAN_CORE=acme -e KHWAN_USER=Api -- ~/.khwan/khwan-mcp
Two things to know before you point KHWAN_CORE anywhere. A core must exist first — an unknown slug answers 404, not "created it for you" — and they are created in the dashboard. On the free plan there is nothing to point at: the cap of one is spent on default, so creating a named core answers 402. Leave KHWAN_CORE unset there and use KHWAN_USER. Sub-brains, by contrast, are created on first write.
On a caching host like Claude Code, prefer seed + remember over the per-turn loop:
"Call
khwan_recall(query=" ")and use the returnedseed_textas
context."
"That's a standing decision — call
khwan_remember(fact="…")."
Reinforce it in your project's CLAUDE.md, e.g.:
- At the start of a task, call `khwan_recall` to seed relevant memory.
khwan_remember.
Seeding a subagent is where the win is clearest — hand it a bounded brief instead of the whole transcript:
"Recall deploy memory with
khwan_recall(query="deploy runbook"), then spawn a
subagent whose brief is that
seed_textplus the task."
Claude Desktop and Claude Code keep separate MCP configuration — a server added to one is invisible to the other, and claude mcp add does not touch this file. Add to claude_desktop_config.json:
{
"mcpServers": { "khwan": { "command": "/Users/you/.khwan/khwan-mcp", "env": { "KHWAN_CORE": "acme", "KHWAN_USER": "Web" } } } }
Use an absolute path: a desktop app does not get your shell's PATH either, so a bare khwan-mcp may not resolve. One core is selected for the whole app — there is no per-project switch here, so choose a broad one.
| Var | Required | Purpose |
|---|---|---|
KHWAN_API_KEY | yes | Your key from the Khwan dashboard (kwk_live_…). |
KHWAN_CORE | no | Select a named core. Paid plans only — free has just default. |
KHWAN_USER | no | A separate brain inside the core — 3 on free, unlimited on paid. |
KHWAN_BASE_URL | no | Override the API base — e.g. http://127.0.0.1:8010 for a local engine. |
| Tool | When |
|---|---|
khwan_recall(query, limit=3) | seed a session/subagent — synthesised lessons + up to 3 relevant facts, as seed_text. |
khwan_remember(fact) | persist a durable fact/preference for future sessions. |
khwan_prepare(input) | full loop, before answering — memory context + a turn_token. |
khwan_record(turn_token, answer) | full loop, after answering — persists the turn so Khwan learns. |
khwan_memory(limit=20) | inspect what the brain currently remembers. |
khwan_cores() | list the isolated cores on the account. |
khwan_recall / khwan_remember are the token-smart pair for a caching host; khwan_prepare / khwan_record are the full loop for custom agents (pass the exact turn_token from prepare back into record).
khwan_recall returns at most three facts — that ceiling is the server's, so limit can lower it but not raise it — plus any lessons synthesis has distilled from many past turns. Lessons lead the seed_text: a rule earned over months outranks a single turn that happens to sit nearby in the index.
Retrieval applies a relevance floor, so an empty `facts` is an answer: the brain has nothing close to this question. Read it as "not known here" rather than as a failure, and do not fill the gap by leaning on whichever fact was nearest.
The floor is deliberately loose, because a memory wrongly dropped is invisible while a memory wrongly kept is not. Expect a returned fact to be *plausibly* related, not certainly relevant — read it before relying on it.
A new brain knows nothing, so its first weeks of recall are thin — while the answers are often already sitting in the host's own transcripts, unread. examples/backfill/ replays Claude Code transcripts into a brain: deterministic, no model calls, dry-run by default.
python3 examples/backfill/backfill_claude_code.py --map cores.json
The tools above are called *when Claude decides to*. For deterministic memory — no reliance on the model — use the hook preset in examples/claude-code-hooks/: a UserPromptSubmit hook injects memory on every prompt and a Stop hook records every answer.
⚠️ On a caching host this is the *thorough* option, not the *cheap* one — it
adds per-turn tokens. Prefer it when recall reliability matters more than token
cost (or on a non-caching client); otherwise use
khwan_recallat session
start.
github.com/khwanlabs/khwan-mcp — this server runs on your machine, with your key, reading what you type. Read it before you install it.
MIT — © Khwan Labs. See LICENSE.