使用说明
MCP内存服务器-Supabase
用于 模型上下文协议(MCP) 由Supabase和pgvector支持进行语义搜索。
为什么?
- 拥有你的AI记忆 --你的知识图谱存储在你自己的Supabase数据库中,而不是其他人的服务器上
- 内置语义搜索 --pgvector支持基于相似性的检索,而不仅仅是关键字匹配
- 适用于任何MCP客户端 --Claude桌面、打字思维、光标等
- 免费层友好 --Supabase的免费版非常适合个人使用
- 云原生 --带自动备份的托管Postgres,无需自托管
- 可组合 --用作独立服务器或您自己的MCP服务器中的库
快速开始
1.创建一个Supabase项目
首选 网站 supabase.com 并创建一个新项目。
2.拿到钥匙
在项目控制面板中,转到 设置→ API:
- 项目Url:
https://<project-ref>.supabase.co - service_role密钥: ⚠️ 保守这个秘密!用于服务器端操作。
3.运行架构
首选 SQL编辑器 在您的Supabase仪表板中,运行以下内容 supabase/schema.sql.
这将创建:
entities,observations,以及relations表格- 行级安全(RLS)策略
- 矢量相似性搜索索引(HNSW)
- 全文搜索索引
- 语义搜索的辅助功能
4.安装并运行
# Run directly with npx
SUPABASE_URL=https://your-project.supabase.co \
SUPABASE_KEY=your-service-role-key \
npx @kaspnilsson/mcp-memory-supabase
# Or install globally
npm install -g @kaspnilsson/mcp-memory-supabase
SUPABASE_URL=https://your-project.supabase.co \
SUPABASE_KEY=your-service-role-key \
mcp-memory-supabase
配置
环境变量
| 变量 | 必填 | 描述 |
|---|---|---|
SUPABASE_URL |
是 | 您的Supabase项目URL |
SUPABASE_KEY |
是 | 服务角色密钥(不是匿名密钥) |
EMBEDDING_API_KEY |
嵌入没有 | API键(启用语义搜索) |
EMBEDDING_API_URL |
否 | 自定义嵌入API端点(默认值:OpenRouter) |
EMBEDDING_MODEL |
否 | 型号名称(默认值: openai/text-embedding-3-small) |
LOG_LEVEL |
否 | 日志级别: debug, info, warn, error (默认值: info) |
语义搜索
随着 EMBEDDING_API_KEY 设置, search_nodes 使用向量相似性搜索进行语义匹配。没有它,搜索就会退回到不区分大小写的文本匹配。
默认设置使用 开放路由 对于嵌入,但您可以指向任何与OpenAI兼容的嵌入API。
MCP客户端配置
添加到MCP客户端配置中:
克劳德桌面版 (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@kaspnilsson/mcp-memory-supabase"],
"env": {
"SUPABASE_URL": "https://<project-ref>.supabase.co",
"SUPABASE_KEY": "<service-role-key>",
"EMBEDDING_API_KEY": "<your-embedding-api-key>"
}
}
}
}
打字思维 --使用具有相同配置的MCP设置UI。
工具
| 工具 | 说明 |
|---|---|
create_entities |
创建具有观察结果的实体 |
create_relations |
在实体之间创建关系 |
add_observations |
向现有实体添加观察结果 |
delete_entities |
按名称删除实体 |
delete_observations |
删除具体观察结果 |
delete_relations |
删除特定关系 |
read_graph |
阅读整个知识图谱 |
search_nodes |
按查询(语义或文本)搜索实体 |
open_nodes |
按名称获取特定实体(不区分大小写) |
数据模型
┌─────────────┐ ┌───────────────┐
│ Entity │────<│ Observation │
│ │ │ │
│ name │ │ content │
│ entityType │ │ entity_id │
│ embedding │ └───────────────┘
└─────────────┘
│
│ ┌───────────────┐
└────<│ Relation │
│ │
│ from_entity_id│
│ to_entity_id │
│ relation_type │
└───────────────┘
- 实体 是知识图中的节点(人、项目、概念等)
- 观察 实体是否附有事实/注释
- 关系 使用类型化关系连接实体
用作图书馆
此程序包导出可组合的API,用于构建自定义MCP服务器:
import { createMemoryServer } from "@kaspnilsson/mcp-memory-supabase";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
// Create server with custom options
const { server, manager } = createMemoryServer({
supabaseUrl: process.env.SUPABASE_URL,
supabaseKey: process.env.SUPABASE_KEY,
embeddingApiKey: process.env.EMBEDDING_API_KEY,
serverName: "my-custom-memory-server",
serverVersion: "1.0.0",
// Custom logger (any object with debug/info/warn/error methods)
logger: {
debug: (msg, data) => console.debug(msg, data),
info: (msg, data) => console.info(msg, data),
warn: (msg, data) => console.warn(msg, data),
error: (msg, data) => console.error(msg, data),
},
});
// Optionally add your own tools
server.tool("my_custom_tool", { /* schema */ }, async (args) => {
// Use manager to interact with the knowledge graph
const graph = await manager.searchNodes(args.query);
return { content: [{ type: "text", text: JSON.stringify(graph) }] };
});
// Connect
await server.connect(new StdioServerTransport());
导入路径
| 进口 | 出口 |
|---|---|
@kaspnilsson/mcp-memory-supabase |
createMemoryServer() |
@kaspnilsson/mcp-memory-supabase/manager |
KnowledgeGraphManager 班级 |
@kaspnilsson/mcp-memory-supabase/types |
Entity, Relation, KnowledgeGraph, Logger等等。 |
故障排除
启用RLS后结果为空
确保从以下位置运行RLS策略 schema.sql服务角色密钥绕过RLS,但Supabase要求存在策略。
矢量搜索不起作用
- 确保
vector扩展已在Supabase中启用 - 检查一下
EMBEDDING_API_KEY设置正确 - 验证是否正在生成嵌入:
SELECT name, embedding IS NOT NULL AS has_embedding FROM entities LIMIT 10;
使用匿名密钥而不是service_role
如果使用anon密钥,则需要更严格的RLS策略。service_role密钥完全绕过RLS。
开发中
# Install dependencies
npm install
# Build
npm run build
# Run tests
npm test
# Lint
npm run lint
许可证
麻省理工学院© 卡斯珀 尼尔森