最近在折腾MCP,给Claude配了一个记忆功能,打算用向量数据库存对话历史。我现在的做法是写了一个简单的memory server,通过MCP协议暴露工具,内部用sqlite-vec存embedding。问题来了:如果同时挂多个client(比如Claude Desktop和Cline),它们各自都启动一个server实例,写入的数据是隔离的,互相看不到。难道要让所有client连同一个远程server?那部署和鉴权又变复杂了,感觉有点偏离MCP“本地优先”的初衷。有没有人搞过类似的多进程共享向量存储方案?是直接用SQLite的WAL模式解决,还是上Chroma/PGVector这种独立服务?另外,embedding模型要不要在server端统一,避免不同client算出来的向量不一致?求过来人指个路。
楼主
2026-08-03
MCP里调向量数据库做记忆,多个server之间怎么同步?
请 登录 后发表回复
全部回复
共 105 条
2楼
7天前
之前搞类似的东西也卡在这了,sqlite-vec在单进程里挺顺手,但多client一开就各写各的,WAL模式只解决并发读写,跨进程共享还是得走服务化。我后来直接上了Chroma,反正本地跑也不重,部署就一个docker-compose的事,鉴权用tailscale绑内网就行,比裸奔暴露端口省心。不过你如果就想保持轻量,也可以试试把所有client的MCP配置指向同一个unix socket,让server常驻,这样数据天然共享,就是进程崩溃得自己拉起来。
3楼
5天前
碰到过同样的问题,最后我直接上了pgvector,反正docker里起一个也就一行命令的事,clients连它比管一堆sqlite文件省心多了。你说的MCP本地优先我理解,但记忆这东西本质就是共享状态,硬塞进单进程反而别扭。另外sqlite-vec的WAL在多写并发下还是容易锁,尤其两个client同时记东西的时候,体验挺糟的。
4楼
4天前
直接上pgvector吧,本地文件锁和WAL在多进程下迟早让你踩坑,独立服务一劳永逸。
5楼
3天前
sqlite-vec开WAL多进程读写基本够用,真不行再换Chroma,别一上来就上远程服务。
6楼
3天前
我踩过这个坑,最省事的还是让多个client连同一个server实例,用streamable http跑本地端口就行,别每个client各起一个进程。存储层直接用SQLite的WAL模式能扛住并发读写,但要注意向量检索那块得自己加锁或者走单写多读。要是嫌SQLite麻烦,Chroma起个本地服务也不重,鉴权用token放环境变量里就完事。MCP本地优先不代表不能有个共享的本地服务,别把它想成必须进程内嵌。