内存引擎MCP服务器
弃用:使用 项目背景.
高性能MCP(模型上下文协议)服务器,提供具有语义和关键字搜索功能的长期内存存储。
特性
- 快速语义搜索:用途
fastembed随着BAAI/bge-small-en-v1.5用于快速启动和低内存使用 - 混合搜索:使用交互排名融合(RRF)将关键字(FTS5)和向量搜索相结合
- 持久化存储:基于SQLite的存储
sqlite-vec扩展 - 200毫秒以下的查询:将模型嵌入内存中,以实现快速响应时间
- MCP本地:暴露
save_memory和query_memory作为原生MCP工具
安装
# Clone the repository
git clone
cd agentmemory
# Install dependencies with uv
uv sync
# Or install globally
uv pip install -e .用法
运行服务器
# Run directly
agentmemory
# Or with uv
uv run agentmemoryMCP配置
添加到您的MCP客户端配置中(例如。, mcp.json):
{
"mcpServers": {
"memory": {
"command": "uv",
"args": ["run", "agentmemory"],
"cwd": "/path/to/agentmemory"
}
}
}或者使用已安装的脚本:
{
"mcpServers": {
"memory": {
"command": "agentmemory"
}
}
}MCP工具
save_memory
将内存保存到长期存储中。
论据:
category(string):内存的类别(例如,“架构”、“首选项”、“bug_fix”)topic(string):简短的描述性标题content(字符串):详细的记忆/决策文本
退货:
{
"status": "success",
"doc_id": 123,
"topic": "Example Topic",
"category": "architecture"
}query_memory
使用语义和关键字搜索查询内存。
论据:
query(string):自然语言搜索字符串top_k(整数,可选):要返回的结果数(默认值:3)
退货:
[
{
"id": 123,
"category": "architecture",
"topic": "Example Topic",
"content": "Detailed content...",
"timestamp": "2024-02-04 13:22:00",
"last_verified": "2024-02-04 13:22:00",
"score": 0.8542
}
]注: last_verified 表示上次确认内存准确的时间。使用 verify_memory 以更新此时间戳。
delete_memory
按ID删除内存。
论据:
doc_id(integer):要删除的内存的ID
退货:
{
"status": "success",
"message": "Memory 123 deleted"
}update_memory
按ID更新内存。
论据:
doc_id(整数):要更新的内存的IDcategory(字符串,可选):新类别topic(字符串,可选):新主题content(字符串,可选):新内容
退货:
{
"status": "success",
"doc_id": 123,
"topic": "Updated Topic",
"category": "updated_category",
"message": "Memory updated"
}verify_memory
通过更新内存将其标记为已验证 last_verified 时间戳到现在。
在以下情况下使用此功能:
- 你已经确认记忆仍然准确
- 您已根据当前代码检查了信息
- 你想防止陈旧数据产生幻觉
论据:
doc_id(整数):要验证的内存的ID
退货:
{
"status": "success",
"doc_id": 123,
"message": "Memory verified and timestamp updated"
}注: 这有助于追踪记忆的新鲜度。回忆与旧 last_verified 应谨慎对待时间戳。
MCP资源
memory://usage-guidelines
为使用内存系统的AI代理提供全面的使用指南。
通过MCP客户端访问:
content = await client.read_resource("memory://usage-guidelines")
print(content[0].text)包含:
- 何时保存记忆(应该做和不应该做)
- 如何构建记忆(类别、主题、内容)
- 如何有效查询
- 最佳实践和常见模式
- 搜索特性和功能
- 隐私和安全考虑
注: AI代理可以读取此资源,以了解如何有效地使用内存系统。这些指南有助于确保记忆得到一致保存,并可以高效检索。
例子
保存技术决策
代理人: “我将记录下,我们决定使用SQLite是因为它的简单性和本地持久性。”
save_memory(
category="architecture",
topic="Database Choice",
content="We chose SQLite with sqlite-vec for local vector storage. This avoids external dependencies and keeps data within the project git root."
)检索项目上下文
代理人: “让我检查一下我们之前关于技术栈的决定。”
query_memory(query="tech stack decisions")
# Returns: [Database Choice, Python version requirements, etc.]防止数据过时
代理人: “我刚刚验证了Python版本要求仍然是3.12。”
verify_memory(doc_id=123)建筑
技术栈
- 框架:FastMCP(Python MCP库)
- 嵌入:禁食(
BAAI/bge-small-en-v1.5,384昏暗) - 数据库:SQLite
sqlite-vec和FTS5扩展 - 沟通:基于标准输入的JSON-RPC
数据流
- 保存:内容→ 嵌入→ SQLite(docs+docs_fts+docs_vec)
- 查询:查询→ 嵌入→ 并行FTS5+矢量搜索→ RRF融合→ 排名结果
数据库模式
-- Main documents table
CREATE TABLE docs (
id INTEGER PRIMARY KEY,
category TEXT,
topic TEXT,
content TEXT,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
last_verified DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Full-text search index
CREATE VIRTUAL TABLE docs_fts USING fts5(
category, topic, content,
content='docs',
content_rowid='id'
);
-- Vector search index
CREATE VIRTUAL TABLE docs_vec USING vec0(
id INTEGER PRIMARY KEY,
embedding float[384]
);存储位置
数据库存储在 .ctxhub/memory.sqlite 在git根目录中(如果不在git仓库中,则在当前工作目录中)。这允许内存随项目一起移动,同时对版本控制保持隐藏。
演出
- 第一个查询:~500ms(模型初始化+查询)
- 后续查询:\<200ms(模型保存在内存中)
- 嵌入模型大小〜133MB(BAAI/bge-small-en-v1.5)
- 内存使用:约200MB基本+型号
发展
项目结构
agentmemory/
├── src/
│ └── agentmemory/
│ ├── __init__.py
│ └── server.py # MCP server implementation
├── pyproject.toml # Project configuration
└── .agent-memory/
└── db.sqlite # Persistent database (in git root)测试
该项目包括一个全面的测试套件。
# Quick start: runs main tests and offers to start server
./quickstart.sh
# Run specific tests manually
uv run python tests/test_server.py
uv run python tests/test_freshness.py
uv run python tests/test_updates.pyMCP检查员
您还可以使用MCP检查器交互式测试工具:
npx @modelcontextprotocol/inspector uv run agentmemory许可证
GPLv3
