多上下文记忆服务器

Mnemos是一个自托管的多上下文记忆服务器,用于将文档组织成隔离的集合,通过内容哈希消除冗余处理,并支持完全离线运行。

  • by Tanush1912
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 Tanush1912/mnemos-mcp

使用说明

🧠 Mnemos

面向开发人员的自托管多上下文内存服务器

Mnemos是一个与MCP兼容的知识服务器,可以将您的文档堆变成一个多上下文存储系统。它将文档组织成独立的集合,消除了内容哈希的冗余处理,并使用Postgres+pgvector和Ollama完全离线运行。

特性

  • 多上下文集合:按项目隔离你的记忆(例如。, react-docs, rust-book, company-internal)使用不区分大小写的搜索过滤。
  • 确定性再摄取:SHA-256内容哈希保证幂等操作——跳过未更改的文件并在差异上自动重新分块。
  • 增强的终端用户界面:使用全屏搜索界面、结果导航和详细的块检查模块探索您的上下文。
  • 递归网站爬行:使用基于路径的过滤(例如,仅抓取)摄取整个文档站点 /learn 上 react.dev).
  • 稳定的局部嵌入:针对Ollama进行了优化,具有持久连接、自动转轮回退和负载节流功能。
  • 块状物质量控制:自动噪声过滤(最小长度阈值+字母数字验证)确保高质量检索。
  • 100%私人:完全离线。你的上下文永远不会离开你的本地机器。

快速开始

先决条件

  • Docker&Docker编写
  • Python 3.11+
  • 奥拉玛 (用于本地嵌入)

1.安装Ollama并拉动嵌入模型

brew install ollama

ollama serve

ollama pull nomic-embed-text

2.启动数据库

cd docker
docker-compose up -d

3.安装依赖项

python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

4.启动服务器

# Option A: Start via CLI (recommended)
python cli/mnemos.py server

# Option B: Run API directly (development)
uvicorn src.main:app --reload

5.添加文档

python cli/mnemos.py add ./docs/my-document.pdf --collection my-project

# Or crawl a site
python cli/mnemos.py ingest https://react.dev/learn --path-filter /learn --collection react

6.搜索

python cli/mnemos.py search "how to use useEffect"

CLI命令

命令 描述 标志
mnemos add <path> 添加文档或目录 -c <collection>, -r (递归)
mnemos ingest <url> 获取URL或抓取网站 -c <collection>, --path-filter
mnemos search <query> 搜索相关上下文 -c <collection>, -k <limit>
mnemos list 列出所有文件 -c <collection>, -n <limit>
mnemos export <file> 将知识库备份到JSON -c <collection>
mnemos delete <id> 删除文档 -f (力)
mnemos server 启动API服务器 --host, --port

API终点

REST API

Mnemos为文档管理和操作提供了一个标准的REST API。

方法 端点 描述
POST /api/documents 上传文档
GET /api/documents 列出所有文件
GET /api/collections 列出所有独特的收藏
GET /api/documents/export 块的完整JSON备份
DELETE /api/documents/{id} 删除文档
POST /api/search 向量相似性搜索
POST /api/ingest/url 获取单个URL
POST /api/ingest/site 抓取文档网站
GET /api/health 健康和统计检查

MCP端点

Mnemos通过模型上下文协议(MCP)公开其检索功能,允许AI代理将其作为外部上下文提供者进行查询。从MCP客户端的角度来看,Mnemos被设计为无状态;所有持久性都存在于服务器端。

方法 端点 描述
GET /mcp/tools 列出可用的MCP工具
POST /mcp/call 执行MCP工具

MCP集成

克劳德桌面版

添加到您的Claude桌面配置(~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "mnemos": {
      "command": "curl",
      "args": ["-X", "POST", "http://localhost:8000/mcp/call", "-H", "Content-Type: application/json", "-d"]
    }
  }
}

可用的MCP工具

  • 搜索文本:在知识库中搜索相关上下文
  • list_文档:列出知识库中的所有文档
  • get_document_info:获取文档的详细信息

配置

环境变量(.env):

变量 默认值 描述
DATABASE_URL postgresql+asyncpg://... Postgres连接字符串
EMBEDDING_PROVIDER ollama ollama (本地首次默认)或 openai
EMBEDDING_MODEL nomic-embed-text Ollama嵌入模型
OLLAMA_BASE_URL http://127.0.0.1:11434 Ollama API网址
CHUNK_SIZE 300 每个块的目标字符数
CHUNK_OVERLAP 40 块之间的重叠

建筑

graph TD
    User([User CLI / App]) --> API[FastAPI Server]
    API --> DB[(PostgreSQL + pgvector)]
    API --> Ollama[Ollama Local Embeddings]
    
    subgraph Ingestion Pipeline
        API --> Parser[Document Parser]
        Parser --> Chunker[Text Chunker]
        Chunker --> HashCheck[SHA-256 Content Hash]
        HashCheck --> Embedding[Vector Generation]
    end
    
    subgraph Retrieval
        API --> Search[Vector Search]
        Search --> Context[Context Assembler]
    end

设计原则

  • 默认情况下,本地优先:所有繁重的工作(矢量/搜索)都发生在您的硬件上。
  • 确定性摄入:SHA-256哈希确保幂等性和安全重新运行。
  • 显式上下文隔离:多收集支持可防止跨项目上下文污染。
  • 可检查的检索:相似性得分和块元数据被公开以建立信任。
  • 零供应商锁定:基于标准的技术栈(Postgres、MCP、REST)。

支持的嵌入模型

型号 尺寸 备注
nomic-embed-text 768 默认,平衡良好
mxbai-embed-large 1024 更高质量
all-minilm 384 更快、更小

安全态势

  • 仅限本地:默认情况下,Mnemos绑定到 0.0.0.0 但不包括认证。它用于本地使用或安全隧道后面。
  • 无外部通话:所有矢量生成和检索都在本地进行。遥测或文档数据不会发送到外部服务器。
  • SQLi预防:对所有数据库交互使用SQLAlchemy ORM和参数化查询。

非目标

  • 云主机:Mnemos不是为多租户云SaaS而设计的。
  • 高级LLM编排:它侧重于提供上下文,而不是成为一个完整的RAG代理。
  • 浏览器自动化:摄入是通过CLI或URL爬虫进行的,而不是GUI自动化工具。

发展

black src/ cli/

pytest tests/