使用说明
开放式存储器
一个大脑,每个AI。一个MCP服务器,通过单一的开放协议,让任何AI工具(Copilot、Claude、Codex、Cursor、ChatGPT)访问您的个人知识库。
你的记忆就像普通的标记文件一样。 QMD 索引并搜索它们(BM25+向量嵌入)。开放内存将所有内容封装在任何客户端都可以连接的MCP服务器中。没有数据库。没有SaaS。档案是真理的源泉。
graph LR
Copilot -->|MCP| OM[open-memory<br/>stdio or SSE]
Claude_Code[Claude Code] -->|MCP| OM
Cursor -->|MCP| OM
Codex -->|MCP| OM
ChatGPT -->|MCP| OM
OM -->|QMD| FS[memory/*.md<br/>MEMORY.md<br/>notes/*.md]
style OM fill:#2d333b,stroke:#539bf5,color:#adbac7
style FS fill:#2d333b,stroke:#57ab5a,color:#adbac7
传输:本地(stdio)或远程(SSE通过尾标尺/隧道)
为什么
每个AI工具都有自己的内存仓。副驾驶不知道你跟克劳德说了什么。Cursor不记得Codex学到了什么。每次切换工具时,你都要重新解释上下文。
开放内存修复了这个问题:一个markdown文件目录,一个搜索索引,一个MCP服务器。任何使用MCP的工具都能获得您的完整上下文。
成本: $0. 自托管,无外部服务。
快速开始
先决条件
- Node.js 20+
- QMD (搜索/索引引擎)
安装QMD
# Using bun (fastest)
bun install -g qmd
# Or npm
npm install -g qmd
设置您的内存
如果你正在重新开始:
mkdir -p ~/memory/memory
echo "# My Knowledge Base" > ~/memory/MEMORY.md
echo "# $(date +%Y-%m-%d)" > ~/memory/memory/$(date +%Y-%m-%d).md
如果你已经在使用OpenClaw,你的内存在 ~/.openclaw/ (MEMORY.md+内存/*.md)。在那里打开记忆。
使用QMD为您的文件建立索引
# Create a collection pointing to your memory directory
qmd collection add ~/memory --name my-memory --mask "**/*.md"
# Generate vector embeddings (needed for semantic search)
# Requires OPENAI_API_KEY or a local embedding model
qmd embed
QMD支持多个嵌入提供程序。看 QMD文件 用于配置。
安装并运行开放式内存
# Clone
git clone https://github.com/DanWahlin/open-memory.git
cd open-memory
# Install & build
npm install
npm run build
# Configure (optional)
cp .env.example .env
# Edit .env to set QMD_BIN path, MEMORY_DIR, auth token, etc.
# Run (HTTP/SSE mode for remote clients)
npm start
# Or run in stdio mode (for local clients)
npm run start:stdio
连接AI工具
GitHub Copilot 命令行工具
最快的连接方式。跑 copilot 在您的终端中,然后:
/mcp add
填写互动表格:
| 字段 | 值 |
|---|---|
| 服务器名称 | open-memory |
| 服务器类型 | STDIO (按相应的数字) |
| 命令 | node /path/to/open-memory/dist/stdio.js |
| 环境变量 | {"QMD_BIN": "/path/to/qmd", "MEMORY_DIR": "/path/to/your/memory"} |
| 工具 | * |
按 Ctrl+S 为了拯救。服务器立即可用,无需重新启动。
您还可以直接在以下位置编辑配置文件 ~/.copilot/mcp-config.json:
{
"mcpServers": {
"open-memory": {
"type": "local",
"command": "node",
"args": ["/path/to/open-memory/dist/stdio.js"],
"env": {
"QMD_BIN": "/path/to/qmd",
"MEMORY_DIR": "/path/to/your/memory"
},
"tools": ["*"]
}
}
}
使用管理您的服务器 /mcp show, /mcp edit open-memory,或 /mcp delete open-memory.
对于远程访问(SSE),请使用类型 "http" 或 "sse" 使用您的服务器URL。
克劳德代码
claude mcp add open-memory -- node /path/to/open-memory/dist/stdio.js
或者添加到您的MCP配置中:
{
"mcpServers": {
"open-memory": {
"command": "node",
"args": ["/path/to/open-memory/dist/stdio.js"],
"env": {
"QMD_BIN": "/path/to/qmd",
"MEMORY_DIR": "/path/to/your/memory"
}
}
}
}
光标
添加到光标MCP设置(设置>MCP服务器):
{
"mcpServers": {
"open-memory": {
"command": "node",
"args": ["/path/to/open-memory/dist/stdio.js"],
"env": {
"QMD_BIN": "/path/to/qmd",
"MEMORY_DIR": "/path/to/your/memory"
}
}
}
}
Codex CLI
添加 ~/.codex/config.toml:
[mcp_servers.open-memory]
command = 'node'
args = ['/path/to/open-memory/dist/stdio.js']
[mcp_servers.open-memory.env]
QMD_BIN = '/path/to/qmd'
MEMORY_DIR = '/path/to/your/memory'
VS代码(副驾驶聊天)
添加 .vscode/mcp.json 在您的工作区(或 ~/.vscode/mcp.json 全球):
{
"servers": {
"open-memory": {
"command": "node",
"args": ["/path/to/open-memory/dist/stdio.js"],
"env": {
"QMD_BIN": "/path/to/qmd",
"MEMORY_DIR": "/path/to/your/memory"
}
}
}
}
远程访问(SSE模式)
使用内存文件在计算机上运行HTTP服务器:
OPEN_MEMORY_TOKEN=your-secret-token npm start
从任何支持SSE或HTTP传输的MCP客户端连接:
URL: http://<your-server>:3838/sse
Auth: Bearer your-secret-token
对于GitHub Copilot CLI远程访问,请使用 /mcp add 与类型 HTTP 或 SSE 并粘贴URL。
在Tailscale上,使用您的Tailscale IP。在互联网上,将其放在HTTPS的反向代理后面。
工具
开放内存公开了7个MCP工具:
| 工具 | 说明 |
|---|---|
search_memory |
跨知识库的语义、关键字或混合搜索 |
read_memory |
按路径读取特定内存文件 |
write_memory |
附加到今天的每日笔记(或特定文件) |
list_memories |
列出目录中的内存文件 |
browse_recent |
预览最近的每日笔记 |
get_document |
按路径或QMD docid获取任何索引文档 |
memory_status |
显示索引运行状况、集合和文档计数 |
配置
所有配置均通过环境变量(或 .env 文件):
| 变量 | 默认值 | 描述 |
|---|---|---|
QMD_BIN |
qmd |
QMD二进制文件的路径 |
MEMORY_DIR |
~/.openclaw |
内存文件的根目录 |
DAILY_NOTES_DIR |
memory |
日常笔记子目录(MEMORY_DIR内) |
MAIN_MEMORY_FILE |
MEMORY.md |
主存储器文件名 |
QMD_COLLECTION |
(空) | 要搜索的QMD集合(空=全部) |
PORT |
3838 |
HTTP服务器端口(SSE模式) |
OPEN_MEMORY_TOKEN |
(空) | 身份验证的承载令牌(空=无身份验证) |
QMD设置指南
QMD是开放式内存背后的搜索引擎。它对markdown文件进行索引,并提供BM25(关键字)、向量(语义)和混合搜索。
集合
QMD将文件组织成集合。为你的记忆创建一个:
# Index a directory of markdown files
qmd collection add ~/my-notes --name notes --mask "**/*.md"
# List your collections
qmd collection list
# Re-index after adding files
qmd update
嵌入
对于语义搜索,QMD需要向量嵌入:
# Set your API key (OpenAI, or compatible provider)
export OPENAI_API_KEY=sk-...
# Generate embeddings
qmd embed
# Check status
qmd status
搜索模式
# Keyword search (fast, exact matching)
qmd search "project decisions"
# Semantic search (finds conceptually related content)
qmd vsearch "what did we decide about the architecture"
# Hybrid (best quality, combines both + reranking via local LLM)
qmd query "why did we choose Postgres over MongoDB"
建筑
graph TB
Client[MCP Client<br/>Copilot · Claude · Cursor · Codex]
Client -->|MCP Protocol<br/>stdio or SSE| Server
subgraph Server[open-memory server]
search_memory -->|vsearch / search / query| QMD
read_memory --> FS_read[fs.readFileSync]
write_memory --> FS_append[fs.appendFileSync]
get_document -->|get| QMD
list_memories --> FS_readdir[fs.readdirSync]
browse_recent --> FS_readdir
memory_status -->|status| QMD
end
Server --> FileSystem
subgraph FileSystem[File System]
MEMORY[MEMORY.md<br/>curated long-term knowledge]
Daily[memory/YYYY-MM-DD.md<br/>daily notes]
Other[*.md<br/>any indexed markdown]
end
style Client fill:#2d333b,stroke:#539bf5,color:#adbac7
style Server fill:#1c2128,stroke:#539bf5,color:#adbac7
style FileSystem fill:#1c2128,stroke:#57ab5a,color:#adbac7
关键设计决策:
- 文件是真相的来源,而不是数据库
- QMD处理所有索引和搜索(BM25+向量)
- 无需外部服务
- 两种传输模式:stdio(本地)和SSE(远程)
- 通过承载令牌进行远程访问的身份验证
码头工人
FROM node:20-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY dist/ dist/
RUN npm install -g qmd
ENV QMD_BIN=qmd
EXPOSE 3838
CMD ["node", "dist/server.js"]
装载内存目录:
docker run -v ~/memory:/memory -e MEMORY_DIR=/memory -p 3838:3838 open-memory
许可证
麻省理工学院
