上下文桥mcp
一个本地MCP服务器,在Claude Chat、Code和Cowork之间桥接Claude会话上下文。使用一个命令将结构化事实、决策和消息历史保存到SQLite。立即在任何Claude工具中恢复完整上下文。以JSON格式导出和导入。使用TypeScript构建。
______________________________________________________________________
问题
Claude Chat、Claude Code和Claude Cowork都有自己的记忆。在它们之间切换,你的背景就消失了——你又回到了重新解释你的任务、你的决定、你的当前状态。每一次。
上下文桥mcp 通过两个命令解决了这个问题:一个用于保存,一个用于恢复。现在进入第2阶段——将上下文导出为JSON,共享并导入到任何地方。
______________________________________________________________________
运作原理
Claude Chat ──┐
Claude Code ──┼──► save_context ──► SQLite (~/.context-bridge/contexts.db)
Claude Cowork ─┘ │
│
Claude Chat ──┐ │
Claude Code ──┼──► load_context ◄────────┘
Claude Cowork ─┘ │
│
export_contexts ─┼──► context.json (by ID or all)
import_contexts ◄┘◄── context.json一个本地MCP服务器。一个SQLite数据库。这三个工具都可以读写同一个存储。导出和导入为JSON,以实现可移植性和团队共享。
______________________________________________________________________
特性
- 在一个命令中保存上下文 --Claude在保存之前自动提取结构化事实、决策、未决问题、实体和标签
- 立即恢复 --按ID加载、标题搜索、标记或只抓取最新内容
- 宣布装载 --当加载上下文时,Claude会明显地宣布它,这样你就总是知道恢复了什么
- 浏览您的历史记录 --使用筛选器列出所有已保存的上下文
- 删除上下文 --通过UUID删除特定上下文或一次全部擦除
- 默认情况下仅附加 --无意外覆盖,保留完整历史记录
- 导出为JSON --按ID导出单个上下文,或一次导出所有内容 *(第二阶段)*
- 从JSON导入 --从JSON文件导入上下文;安全合并,从不覆盖现有记录 *(第二阶段)*
- 适用于所有Claude工具 --聊天(自然语言)、代码和协作(直接工具调用)
______________________________________________________________________
安装
先决条件
- Node.js 18+
- Claude Desktop(用于聊天+协作集成)
- 克劳德代码CLI
1.克隆和构建
git clone https://github.com/kandarp-bhatt19/context-bridge-mcp.git
cd context-bridge-mcp
npm install
npm run build2.用克劳德代码注册
claude mcp add context-bridge node /absolute/path/to/context-bridge-mcp/dist/index.js3.在Claude Desktop注册(聊天+合作)
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"context-bridge": {
"command": "node",
"args": ["/absolute/path/to/context-bridge-mcp/dist/index.js"]
}
}
}保存后重新启动Claude Desktop。
4.验证
claude mcp list
# context-bridge node /path/to/dist/index.js______________________________________________________________________
工具
save_context
将当前会话上下文保存到SQLite。Claude在持久化之前会自动提取事实和标签。
输入:
| 字段 | 类型 | 描述 | ||
|---|---|---|---|---|
title | string | 此上下文的人类可读名称 | ||
username | string | 用户标识符 | ||
source_tool | 字符串 | "chat" | "code" | "cowork" |
facts | object | 自动提取:任务、决策、未决问题、实体 | ||
tags | string\[\] | 自动生成的主题标签 | ||
messages | array | 最后10条消息如下 {role, content} 成对 |
始终创建新记录,从不覆盖。返回已保存的 id.
______________________________________________________________________
load_context
检索已保存的上下文并在对话中声明它。
输入(需要一个):
| 字段 | 类型 | 描述 |
|---|---|---|
id | 弦? | 精确的UUID查找 |
title | 弦? | 模糊标题搜索 |
tag | 弦? | 按标签筛选 |
latest | 布尔值? | 加载最近保存的上下文 |
加载后,克劳德宣布:
📂 Loaded context: "Auth Flow Refactor"
Saved from: code on 2026-03-10 14:32
Current task: Refactoring JWT auth middleware to support refresh tokens
Key decisions: Use Redis for token blacklist, keep existing cookie strategy
Open questions: Should refresh tokens be single-use or sliding window?
Entities in play: AuthMiddleware, TokenService, RedisClient, /api/auth/refresh
--- Last messages ---
User: Let's move the token validation logic out of the route handler...
Assistant: Good call. We can extract it into a validateToken() helper...______________________________________________________________________
list_contexts
返回一个可浏览的已保存上下文列表,按最新上下文排序。
输入(全部可选):
| 字段 | 类型 | 描述 | ||
|---|---|---|---|---|
tag | 弦? | 按标签筛选 | ||
source_tool | 弦? | 筛选条件 "chat" | "code" | "cowork" |
limit | 号码? | 默认值20 |
输出示例:
ID Title Tool Tags Saved
──────── ───────────────────────── ──────── ────────────────────── ─────────────────
a1b2c3d4 Auth Flow Refactor code auth, jwt, redis 2026-03-10 14:32
e5f6g7h8 Sprint Planning Session chat planning, sprint, q2 2026-03-09 10:15
i9j0k1l2 Mobile Push Notifications cowork flutter, fcm, mobile 2026-03-08 16:44______________________________________________________________________
remove_context
从数据库中删除已保存的上下文。
两种模式:
| 模式 | 描述 |
|---|---|
| 按UUID | 按精确值删除单个上下文记录 id |
| 全部删除 | 擦除整个上下文表 |
示例:
# Remove a specific context
remove context with id a1b2c3d4-...
# Remove all saved contexts
remove all contexts⚠️ 删除所有内容是不可逆的。第一阶段没有软删除。
______________________________________________________________________
export_contexts *(第二阶段)*
将一个或所有保存的上下文导出到JSON文件。
两种模式:
| 模式 | 描述 |
|---|---|
| 按ID | 按其确切UUID导出单个上下文记录 |
| 全部导出 | 导出商店中的所有上下文 |
输入:
| 字段 | 类型 | 描述 |
|---|---|---|
id | 弦? | 要导出的上下文的UUID。省略导出所有内容。 |
outputPath | 弦? | 输出JSON的文件路径。默认为 ./context-export.json |
输出格式:
[
{
"id": "a1b2c3d4-...",
"title": "Auth Flow Refactor",
"username": "kandarp",
"source_tool": "code",
"tags": ["auth", "jwt", "redis"],
"facts": {
"current_task": "Refactoring JWT auth middleware...",
"key_decisions": ["Use Redis for token blacklist"],
"open_questions": ["Single-use or sliding refresh tokens?"],
"entities": ["AuthMiddleware", "TokenService", "RedisClient"]
},
"last_messages": [
{ "role": "user", "content": "Let's move the token validation..." },
{ "role": "assistant", "content": "Good call. We can extract it..." }
],
"created_at": "2026-03-10T14:32:00.000Z",
"updated_at": "2026-03-10T14:32:00.000Z"
}
]示例:
# Export a single context by ID
export context a1b2c3d4-...
# Export all contexts
export all contexts
# Export all to a specific path
export all contexts to /tmp/team-contexts.json______________________________________________________________________
import_contexts *(第二阶段)*
将JSON文件中的上下文导入本地SQLite存储。
行为:
- 读取由生成的JSON文件
export_contexts - 将导入的记录合并到现有存储中
- 从不覆盖 --如果上下文相同
id已存在,将跳过 - 返回导入与跳过的记录数量的摘要
输入:
| 字段 | 类型 | 描述 |
|---|---|---|
inputPath | string | 要导入的JSON文件的路径 |
示例:
# Import from a file
import contexts from /tmp/team-contexts.json
# Import contexts shared by a teammate
import_contexts inputPath "/Users/kandarp/Downloads/sprint-contexts.json"输出示例:
✅ Import complete
Imported: 3 contexts
Skipped: 1 (already exists)
Total in file: 4ℹ️ 进口总是安全的。现有上下文永远不会被修改或删除。
______________________________________________________________________
使用示例
Claude Chat(自然语言)
# Save
"save this context as Auth Flow Refactor"
# Load
"load my last context"
"load context titled Auth Flow"
"load context with tag flutter"
# List
"list my saved contexts"
"list contexts from code"
# Remove
"remove context a1b2c3d4"
"remove all my saved contexts"
# Export (Phase 2)
"export context a1b2c3d4"
"export all my contexts"
"export all contexts to /tmp/team-contexts.json"
# Import (Phase 2)
"import contexts from /tmp/team-contexts.json"Claude Code/Cowork(直接工具调用)
# Save
save_context with title "Sprint Planning" source_tool "code"
# Load latest
load_context latest
# Load by title
load_context title "Auth Flow"
# List all
list_contexts
# List filtered
list_contexts tag "flutter"
list_contexts source_tool "cowork"
# Remove one
remove_context id "a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# Remove all
remove_context all
# Export one by ID (Phase 2)
export_contexts id "a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# Export all (Phase 2)
export_contexts
# Export all to a specific path (Phase 2)
export_contexts outputPath "/tmp/team-contexts.json"
# Import from file (Phase 2)
import_contexts inputPath "/tmp/team-contexts.json"______________________________________________________________________
典型工作流程
单一开发人员——切换工具
脚本: 您正在深入Claude Code会话中重构您的身份验证服务。您需要切换到Claude Chat进行快速的设计讨论,然后回到代码。
# 1. In Claude Code — save before switching
save_context with title "Auth Refactor — token validation extracted"
# 2. Switch to Claude Chat — pick up where you left off
"load my last context"
# Claude announces: task, decisions, open questions, last messages
# 3. Have your discussion in Chat, then save again
"save this context as Auth Refactor — post design discussion"
# 4. Back in Claude Code — restore the updated context
load_context title "Auth Refactor — post design"
# Full context restored, carry on团队分享——将背景传递给队友 *(第二阶段)*
脚本: 你已经完成了建筑调查。队友需要准确地从你所在的位置开始。
# 1. Export your current context
export_contexts outputPath "./auth-refactor-handoff.json"
# 2. Share the file (Slack, email, drop in the repo — any way you like)
# 3. Teammate imports on their machine
import_contexts inputPath "./auth-refactor-handoff.json"
# 4. Teammate loads it in their Claude tool of choice
load_context title "Auth Refactor"
# Full context announced — decisions, open questions, message history intact______________________________________________________________________
存储
- 地点:
~/.context-bridge/contexts.db - 发动机: SQLite(通过
better-sqlite3) - 自动创建 首次运行时--无需设置
- 加的 --每次保存都会创建一条新记录
模式
CREATE TABLE IF NOT EXISTS contexts (
id TEXT PRIMARY KEY,
title TEXT NOT NULL,
username TEXT NOT NULL,
source_tool TEXT NOT NULL,
tags TEXT NOT NULL, -- JSON array
facts TEXT NOT NULL, -- JSON object
last_messages TEXT NOT NULL, -- JSON array of {role, content}
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL
);______________________________________________________________________
配置
编辑 src/config.ts 自定义:
export const config = {
dbPath: path.join(os.homedir(), '.context-bridge', 'contexts.db'),
messageCount: 10, // number of last messages to capture
defaultUsername: 'your-username',
};______________________________________________________________________
路线图
| 阶段 | 状态 | 功能 |
|---|---|---|
| 第一阶段 | ✅ 完成 | SQLite,4个工具(save, load, list, remove),自动提取,加载时宣布 |
| 第2阶段 | ✅ 完成 | 按ID或全部导出JSON(export_contexts),JSON导入合并(import_contexts) |
| 第三期 | 🔜 计划 | Supabase/Postgres适配器、多设备同步、团队共享 |
______________________________________________________________________
故障排除
MCP未显示在克劳德代码中
claude mcp list # verify it's registered
claude mcp get context-bridge # check tools are exposed
npm run build # rebuild if you made changes“未知技能”错误 不使用 / 斜线语法。按自然语言或直接工具名称调用工具——不是 /save_context.
找不到数据库 这 ~/.context-bridge/ 目录和 contexts.db 文件在第一次调用工具时自动创建。无需手动设置。
路径错误 在MCP配置中始终使用绝对路径,而不是相对路径。
导入跳过所有记录 如果导入时跳过所有记录,则上下文已存在于您的存储中(通过UUID匹配)。使用 list_contexts 以验证。
