Skip to main content
Glama

Memory MCP

为 AI 助手提供持久化语义记忆与知识图谱能力的 MCP 服务器

A Model Context Protocol server providing persistent semantic memory and knowledge graph capabilities for AI assistants

License: MIT Node.js Version PostgreSQL MCP Protocol


🎯 Why This Project?

AI 助手(如 Claude、ChatGPT)在对话结束后会"失忆"。本项目通过 MCP (Model Context Protocol) 为 AI 提供:

  • 跨会话记忆:用户偏好、历史对话、学习到的事实都能持久保存

  • 语义检索:不是简单的关键词匹配,而是理解"意思相近"的内容

  • 知识图谱:构建实体之间的关系网络,支持复杂推理

用户: "我之前说过喜欢什么编程语言?"
AI:   [调用 memory_search] → 找到 3 个月前的对话记录
      "您提到过喜欢 Rust 的内存安全特性,以及 Python 的简洁语法。"

✨ 核心特性

🧠 语义记忆系统

特性

说明

向量嵌入

使用阿里云 DashScope text-embedding-v3 模型,1024 维向量

HNSW 索引

pgvector 的高性能近似最近邻搜索,毫秒级响应

混合检索

向量相似度 (70%) + 关键词匹配 (30%) 加权融合

记忆衰减

基于访问频率和时间的自动权重调整,防止信息过载

LRU 缓存

嵌入向量缓存(最大 1000 条),减少 80%+ API 调用

版本历史

完整的变更审计日志,支持回溯

记忆衰减算法

权重 = 置信度 × 时间衰减 × 访问加成
     = confidence × 0.9^(天数/30) × (1 + min(访问次数×0.05, 0.5))

🕸️ 知识图谱引擎

特性

说明

实体管理

创建带类型和观察记录的实体节点

关系追踪

定义实体间的有向关系(如 uses, depends_on

双向关系

自动创建反向关系(A uses BB is_used_by A

传递推理

递归查询多跳关系路径(A→B→C→D)

语义搜索

基于向量相似度搜索实体

Mermaid 导出

生成可视化图谱代码

支持的反向关系映射

uses ↔ is_used_by
depends_on ↔ is_dependency_of
contains ↔ is_contained_in
calls ↔ is_called_by
owns ↔ is_owned_by
creates ↔ is_created_by
manages ↔ is_managed_by

🏗️ 系统架构

┌────────────────────────────────────────────────────────────────┐
│                MCP Client (Claude Desktop / Windsurf)          │
└───────────────────────────┬────────────────────────────────────┘
                            │ JSON-RPC 2.0 over stdio
┌───────────────────────────▼────────────────────────────────────┐
│                      Memory MCP                         │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │                    Tool Dispatcher                       │  │
│  │   memory_*  →  memoryService    graph_*  →  graphService │  │
│  └──────────────────────────────────────────────────────────┘  │
│                              │                                 │
│  ┌─────────────┐  ┌─────────▼─────────┐  ┌─────────────────┐   │
│  │   Memory    │  │    Embedding      │  │     Graph       │   │
│  │   Service   │  │    Service        │  │     Service     │   │
│  │             │  │  ┌─────────────┐  │  │                 │   │
│  │ • create    │  │  │ LRU Cache   │  │  │ • entities      │   │
│  │ • search    │  │  │ (1000 max)  │  │  │ • relations     │   │
│  │ • update    │  │  └──────┬──────┘  │  │ • transitive    │   │
│  │ • delete    │  │         │         │  │ • mermaid       │   │
│  │ • hybrid    │  │         ▼         │  │                 │   │
│  └──────┬──────┘  │  Aliyun DashScope │  └────────┬────────┘   │
│         │         │  text-embedding-v3│           │            │
│         │         └─────────┬─────────┘           │            │
│         └───────────────────┼─────────────────────┘            │
│                             │                                  │
└─────────────────────────────┼──────────────────────────────────┘
                              │
┌─────────────────────────────▼───────────────────────────────────┐
│                   PostgreSQL 14+ with pgvector                  │
│  ┌────────────┐  ┌────────────┐  ┌───────────┐  ┌────────────┐  │
│  │  memories  │  │  entities  │  │ relations │  │  history   │  │
│  │            │  │            │  │           │  │            │  │
│  │ • HNSW idx │  │ • HNSW idx │  │ • FK refs │  │ • triggers │  │
│  │ • GIN tags │  │ • UNIQUE   │  │ • UNIQUE  │  │ • audit    │  │
│  └────────────┘  └────────────┘  └───────────┘  └────────────┘  │
└─────────────────────────────────────────────────────────────────┘

🚀 快速开始

环境要求

  • Node.js >= 18.0.0

  • PostgreSQL >= 14 + pgvector 扩展

  • 阿里云 DashScope API Key(用于生成嵌入向量)

安装步骤

# 1. 克隆仓库
git clone https://github.com/YOUR_USERNAME/mcp-memory.git
cd mcp-memory

# 2. 安装依赖
npm install

# 3. 配置环境变量
cp .env.sample .env
# 编辑 .env 填入数据库连接和 API Key

# 4. 初始化数据库
psql -c "CREATE DATABASE mcp_memory;"
psql -d mcp_memory -f migrations/init.sql

# 5. 启动服务
npm start

MCP 客户端配置

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "memory": {
      "command": "node",
      "args": ["C:/path/to/mcp-memory/src/server.js"],
      "env": {
        "DATABASE_URL": "postgresql://user:pass@localhost:5432/mcp_memory",
        "DASHSCOPE_API_KEY": "sk-your-api-key"
      }
    }
  }
}

Windsurf (mcp_config.json):

{
  "mcpServers": {
    "memory": {
      "command": "node",
      "args": ["src/server.js"],
      "cwd": "C:/path/to/mcp-memory",
      "env": {
        "DATABASE_URL": "postgresql://user:pass@localhost:5432/mcp_memory",
        "DASHSCOPE_API_KEY": "sk-your-api-key"
      }
    }
  }
}

🛠️ 工具详解

记忆操作 (Memory Tools)

memory_create - 创建记忆

{
  "type": "preference",
  "content": { "topic": "编程语言", "preference": "喜欢 Rust 和 Python" },
  "source": "user_message",
  "tags": ["programming", "preferences"],
  "confidence": 0.95
}

参数

类型

必填

说明

type

string

记忆类型:fact, preference, conversation, task

content

object

记忆内容(JSONB 存储,支持任意结构)

source

string

来源:user_message, system_inference, external_api

tags

string[]

标签数组,用于过滤

confidence

number

置信度 0.0-1.0,影响检索权重

{
  "query": "用户喜欢什么编程语言",
  "type": "preference",
  "tags": ["programming"],
  "limit": 5
}

工作原理

  1. 将查询文本转换为 1024 维向量

  2. 使用 HNSW 索引计算余弦相似度

  3. 按相似度排序返回结果

  4. 异步更新访问统计(access_count, last_accessed_at

memory_update - 更新记忆

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "content": { "updated": true },
  "confidence": 0.8
}

特性:内容变更时自动重新生成嵌入向量

memory_list - 列出记忆

{
  "type": "fact",
  "tags": ["important"],
  "limit": 20
}

memory_delete - 删除记忆

{
  "id": "550e8400-e29b-41d4-a716-446655440000"
}

注意:删除操作会记录到 memory_history


知识图谱操作 (Graph Tools)

graph_create_entities - 创建实体

{
  "entities": [
    {
      "name": "Memory MCP",
      "entityType": "Project",
      "observations": [
        "使用 PostgreSQL + pgvector",
        "支持语义搜索",
        "MIT 开源协议"
      ]
    },
    {
      "name": "pgvector",
      "entityType": "Technology",
      "observations": ["PostgreSQL 向量扩展", "支持 HNSW 索引"]
    }
  ]
}

特性

  • 自动为实体生成嵌入向量(批量处理)

  • 同名实体会合并观察记录(UPSERT)

graph_create_relations - 创建关系

{
  "relations": [
    {
      "from": "Memory MCP",
      "to": "pgvector",
      "relationType": "uses"
    }
  ]
}

自动双向关系:创建 A uses B 时自动创建 B is_used_by A

graph_add_observations - 添加观察

{
  "observations": [
    {
      "entityName": "Memory MCP",
      "contents": ["新增混合检索功能", "支持 Mermaid 导出"]
    }
  ]
}

graph_search_nodes - 搜索实体

{
  "query": "向量数据库",
  "semantic": true,
  "limit": 10
}

参数

说明

semantic: false

关键词匹配(名称、类型、观察记录)

semantic: true

向量相似度搜索

graph_open_nodes - 打开指定实体

{
  "names": ["Memory MCP", "pgvector"]
}

返回实体详情及其所有关联关系

graph_read - 读取完整图谱

返回所有实体和关系,适合小规模图谱

graph_delete_* - 删除操作

  • graph_delete_entities: 删除实体(级联删除关系)

  • graph_delete_relations: 删除指定关系

  • graph_delete_observations: 删除实体的特定观察记录


📊 数据库设计

表结构

memories - 语义记忆表

列名

类型

说明

id

UUID

主键,自动生成

type

TEXT

记忆类型

content

JSONB

结构化内容

source

TEXT

来源标识

embedding

vector(1024)

嵌入向量

tags

TEXT[]

标签数组

confidence

FLOAT

置信度

access_count

INT

访问次数

last_accessed_at

TIMESTAMPTZ

最后访问时间

created_at

TIMESTAMPTZ

创建时间

updated_at

TIMESTAMPTZ

更新时间

entities - 实体表

列名

类型

说明

id

UUID

主键

name

TEXT

实体名称(唯一)

entity_type

TEXT

实体类型

observations

TEXT[]

观察记录数组

embedding

vector(1024)

可选,用于语义搜索

relations - 关系表

列名

类型

说明

id

UUID

主键

from_entity

TEXT

源实体(外键)

to_entity

TEXT

目标实体(外键)

relation_type

TEXT

关系类型

memory_history - 历史记录表

列名

类型

说明

memory_id

UUID

关联的记忆 ID

content

JSONB

变更时的内容快照

change_type

TEXT

create / update / delete

previous_confidence

FLOAT

变更前置信度

new_confidence

FLOAT

变更后置信度

索引策略

索引

类型

用途

idx_memories_embedding

HNSW

向量相似度搜索

idx_memories_tags

GIN

标签数组包含查询

idx_memories_type

B-tree

类型过滤

idx_entities_embedding

HNSW (条件)

实体语义搜索

idx_relations_from/to

B-tree

关系查询

触发器与函数

名称

类型

说明

update_memories_updated_at

Trigger

自动更新 updated_at

memory_history_trigger

Trigger

自动记录变更历史

calculate_memory_weight()

Function

计算记忆衰减权重

update_memory_access()

Function

更新访问统计

log_memory_change()

Function

记录变更历史


⚙️ 配置参考

环境变量

变量

必填

默认值

说明

DATABASE_URL

-

PostgreSQL 连接字符串

DASHSCOPE_API_KEY

-

阿里云 DashScope API Key

DASHSCOPE_API_URL

https://dashscope.aliyuncs.com/...

嵌入 API 端点

EMBEDDINGS_MODEL

text-embedding-v3

嵌入模型

EMBEDDINGS_DIMENSIONS

1024

向量维度

DB_MAX_POOL_SIZE

20

数据库连接池大小

DB_IDLE_TIMEOUT

30000

空闲连接超时 (ms)

SEARCH_DEFAULT_LIMIT

10

默认搜索结果数

MCP_DEBUG_LOG_PATH

memory-debug.log

调试日志路径

示例 .env

# 数据库
DATABASE_URL=postgresql://postgres:password@localhost:5432/mcp_memory

# 阿里云 DashScope
DASHSCOPE_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx

# 可选配置
DB_MAX_POOL_SIZE=10
SEARCH_DEFAULT_LIMIT=20

🔧 开发指南

# 开发模式(自动重载)
npm run dev

# 查看调试日志
Get-Content memory-debug.log -Wait  # PowerShell
tail -f memory-debug.log            # Linux/Mac

# 初始化数据库
npm run db:init

项目结构

mcp-memory/
├── src/
│   ├── server.js          # MCP 服务入口,JSON-RPC 处理
│   ├── config.js          # 配置加载
│   ├── db/
│   │   ├── index.js       # 数据库导出
│   │   └── pool.js        # 连接池管理
│   ├── services/
│   │   ├── memory.js      # 记忆服务(CRUD + 搜索)
│   │   ├── graph.js       # 知识图谱服务
│   │   └── embedding.js   # 嵌入生成 + LRU 缓存
│   ├── tools/
│   │   └── definitions.js # MCP 工具定义
│   └── utils/
│       ├── logger.js      # 日志工具
│       └── response.js    # JSON-RPC 响应格式化
├── migrations/
│   └── init.sql           # 数据库初始化脚本(幂等)
├── docs/
│   └── ROADMAP.md         # 开发路线图
├── .env.sample            # 环境变量模板
└── package.json

📈 性能优化

本项目已实现以下优化(详见 ROADMAP.md):

优化项

效果

嵌入缓存

相同文本重复查询时,API 调用减少 80%+

HNSW 索引

向量搜索从 O(n) 降至 O(log n)

混合检索

召回率提升,避免纯语义搜索的遗漏

批量嵌入

创建多个实体时,单次 API 调用

异步访问统计

不阻塞搜索响应


📜 许可证

本项目采用 MIT License 开源。


🙏 致谢


🤝 贡献

欢迎提交 Issue 和 Pull Request!

-
security - not tested
A
license - permissive license
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Calvin-Francis/memory-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server