claudememkeep——共享MCP内存服务器
Claude Code和Claude.ai的共享内存层。这两个接口都连接到同一个MCP服务器,实时读写项目上下文、决策和会话历史。
它的作用
- 克劳德代码 通过MCP工具和(可选)生命周期挂钩连接
- Claude.ai 通过连接器连接
- 对同一PostgreSQL数据库进行读/写操作
- 在所有存储的上下文中进行全文搜索
- 通过Claude Code钩子自动捕获会话
架构:服务器vs.钩子
此回购包含 两个独立的部分 部署方式不同:
┌─────────────────────────────────────────────────────────┐
│ MCP Server (Docker) │
│ server/app.py + PostgreSQL database │
│ Runs once, centrally, serves everyone │
│ │
│ Claude.ai ──Connector──> /mcp ──> 6 tools ──> DB │
│ Claude Code ──MCP─────> /mcp ──> 6 tools ──> DB │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ Hooks (local per machine) │
│ hooks/*.py — run by Claude Code locally │
│ Each machine running Claude Code needs its own │
│ copy of these files + configuration │
│ │
│ SessionStart → registers session, syncs MEMORY.md │
│ SessionEnd → saves structured session summary │
│ PreCompact → archives user messages before compact │
└─────────────────────────────────────────────────────────┘服务器 (server/, sql/)是Claude Code和Claude.ai之间的共享桥梁。它被打包到Docker镜像中,并通过onramp、普通Docker或您喜欢的任何方式部署一次。Claude.ai(通过连接器)和Claude Code(通过MCP)都连接到它并共享同一个数据库。对服务器代码的更改需要重建容器(make update-service claude-connector).
钩子 (hooks/)是在安装了Claude Code的每台机器上本地运行的客户端脚本。它们自动化了上下文捕获——同步MEMORY.md、保存会话摘要、在压缩之前归档转录本。服务器可以在不同的机器上为多个Claude Code实例提供服务,但每台机器都需要在中配置的钩子的本地副本 ~/.claude/settings.json.
你什么时候需要更新什么?
| 更改为… | 该怎么办 |
|---|---|
server/ 或 sql/ | 重建并重新启动容器 |
hooks/ | git pull 在每台运行克劳德代码的机器上 |
docker-compose.yml 或入口匝道配置 | make restart 入口匝道 |
先决条件
- 事故 使用Traefik的部署框架
- Docker和Docker Compose
- 已安装Claude Code CLI
入口匝道注意事项: 此应用程序是为在onramp框架内运行而构建的,该框架处理Traefik路由、环境脚手架和服务生命周期。Onramp还会为您安装Docker和Compose,所以如果您使用的是Onramp,这些不是单独的先决条件。也就是说,服务器只是一个Docker Compose堆栈——如果你更愿意独立运行它,可以分叉并根据你的设置调整Compose文件。
安装
步骤1:通过Onramp部署
cd /apps/onramp
make enable-service claude-connector
make restart这将:
- 将服务YAML符号链接到
services-enabled/ - 自动生成安全值
CLAUDE_CONNECTOR_AUTH_TOKEN和CLAUDE_CONNECTOR_DB_PASSWORD - 创建PostgreSQL数据目录
- 构建并启动MCP服务器及其数据库
步骤2:验证部署
curl https://claude-connector.YOUR_DOMAIN/health
# Should return: {"status":"healthy"}步骤3:设置您的机密文件
令牌是在步骤1中自动生成的。创建一个钩子将获取的secrets文件:
# Get your token
grep CLAUDE_CONNECTOR_AUTH_TOKEN /apps/onramp/services-enabled/claude-connector.env
# Create ~/.claude/.secrets (gitignored, one-time setup per machine)
cat > ~/.claude/.secrets /dev/null; python3 /path/to/claudememkeep/hooks/session-start.py'",
"timeout": 10
}
]
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"command": "bash -c 'source ~/.claude/.secrets 2>/dev/null; python3 /path/to/claudememkeep/hooks/session-end.py'",
"timeout": 30
}
]
}
],
"PreCompact": [
{
"hooks": [
{
"type": "command",
"command": "bash -c 'source ~/.claude/.secrets 2>/dev/null; python3 /path/to/claudememkeep/hooks/pre-compact.py'",
"timeout": 30
}
]
}
]
}
}替换 /path/to/claudememkeep 与此repo所在的实际路径。从以下位置读取令牌 ~/.claude/.secrets 您在步骤3中创建的文件中没有秘密。
步骤6:连接Claude.ai(可选)
- 首选 Claude.ai > 设置 > 连接器 > 添加自定义连接器
- 姓名:
claude-connector(或你喜欢的任何东西) - 网址:
https://claude-connector.YOUR_DOMAIN/mcp - 将OAuth客户端ID和密钥留空
- 根据需要在对话中启用连接器
关于身份验证的注意事项: 服务器当前运行authless,因为Claude.ai的OAuth 自定义MCP服务器的实现已中断 (人类学/克劳德编码#5826). A.HybridAuthProvider具有完整的OAuth+静态承载令牌支持server/app.py--取消注释auth =当Anthropic修复他们的客户时。 Claude Code继续发送其承载令牌,该令牌被无害地忽略了。
MCP工具
连接后,这些工具可用:
| 工具 | 说明 |
|---|---|
save_context | 存储一段上下文(决策、注释、代码更改或上下文) |
search_context | 对所有存储的工件进行全文搜索 |
get_project_summary | 概述:最近的决策、会议、工件计数 |
log_decision | 用推理记录决策的快速方法 |
get_recent_activity | 过去N小时的一切 |
log_session | 注册或更新会话记录 |
配置
环境变量
所有配置都在 /apps/onramp/services-enabled/claude-connector.env:
| 变量 | 目的 | 默认值 |
|---|---|---|
CLAUDE_CONNECTOR_AUTH_TOKEN | MCP身份验证的承载令牌 | 自动生成 |
CLAUDE_CONNECTOR_DB_PASSWORD | PostgreSQL密码 | 自动生成 |
CLAUDE_CONNECTOR_DB_USER | PostgreSQL用户 | claude_connector |
CLAUDE_CONNECTOR_DB_NAME | 数据库名称 | claude_connector |
CLAUDE_CONNECTOR_HOST_NAME | Traefik的子域名 | claude-connector |
钩子环境变量
这些来源于 ~/.claude/.secrets (见步骤3):
| 变量 | 目的 | 默认值 |
|---|---|---|
MCP_AUTH_TOKEN | 身份验证令牌(与上述相同) | 无(必需) |
MCP_SERVER_URL | 服务器基本URL | https://claude-connector.example.com |
以(权力)否决 MCP_SERVER_URL 在 ~/.claude/.secrets 如果您的域名与默认域名不同。
本地开发
# Start local dev stack (MCP server + PostgreSQL)
docker compose up --build
# Health check
curl http://localhost:8081/health
# Test a tool call
curl -X POST http://localhost:8081/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer dev-token" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_project_summary",
"arguments": {"project": "default"}
}
}'本地开发堆栈使用 dev-token 作为身份验证令牌,并映射到端口8081。
建筑
看 架构:服务器vs.钩子 在顶部查看完整图片。
