Markdown知识搜索工具

MemoryExchange是一个.NET工具,通过模型上下文协议(MCP)使Markdown知识文件可被GitHub Copilot或任何MCP兼容客户端搜索。

  • by MoaidHathot
  • C#
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 MoaidHathot/MemoryExchange

使用说明

内存交换

A.NET工具,使markdown知识文件(如Cline风格的“内存库”)可由GitHub Copilot(或任何兼容MCP的客户端)通过以下方式搜索 模型上下文协议(MCP).

它将markdown文件预处理为语义分块、向量嵌入的文档,并通过MCP服务器提供这些文档,该服务器具有搜索、检索文件和诊断索引健康状况的工具。

特性

  • 默认情况下完全本地 --SQLite+ONNX(all-MiniLM-L6-v2)嵌入,无云依赖
  • Azure提供商 可用——Azure AI搜索+Azure OpenAI用于云规模部署
  • 混合搜索 --FTS5 BM25关键字搜索+余弦向量相似度,通过互序融合(RRF)合并
  • 领域感知增强 --与用户当前文件域匹配的块被增强(1.3倍)
  • 指令增强 — .instructions.md 文件获得额外优先级(1.2x)
  • 头部感知组块 --markdown由具有面包屑上下文的标题分隔;代码块保持原子性
  • 零安装通过 dotnet dnx --直接运行 dotnet dnx --yes MemoryExchange
  • 也可作为安装。NET全局工具 — dotnet tool install -g MemoryExchange

快速开始

配置您的MCP客户端

将服务器添加到MCP客户端配置中(例如VS代码 mcp.json、克莱恩等):

选项A:通过 dotnet dnx (推荐--不需要安装,.NET 10+)

{
  "servers": {
    "memory-exchange": {
      "type": "stdio",
      "command": "dotnet",
      "args": [
        "dnx",
        "--yes",
        "MemoryExchange",
        "--source-path", "/path/to/your/memory-exchange",
        "--provider", "local",
        "--build-index"
      ]
    }
  }
}

选项B:a。NET全局工具

dotnet tool install -g MemoryExchange
{
  "servers": {
    "memory-exchange": {
      "type": "stdio",
      "command": "memory-exchange",
      "args": [
        "--source-path", "/path/to/your/memory-exchange",
        "--provider", "local",
        "--build-index"
      ]
    }
  }
}

选项C:环境变量

{
  "servers": {
    "memory-exchange": {
      "type": "stdio",
      "command": "dotnet",
      "args": [
        "dnx",
        "--yes",
        "MemoryExchange",
        "--build-index"
      ],
      "env": {
        "MEMORYEXCHANGE_SOURCEPATH": "/path/to/your/memory-exchange",
        "MEMORYEXCHANGE_PROVIDER": "local"
      }
    }
  }
}

选项D:来源

{
  "servers": {
    "memory-exchange": {
      "type": "stdio",
      "command": "dotnet",
      "args": [
        "run",
        "--project", "/path/to/MemoryExchange/src/MemoryExchange.McpServer",
        "--",
        "--source-path", "/path/to/your/memory-exchange",
        "--provider", "local",
        "--build-index"
      ]
    }
  }
}

随着 --build-index,服务器在启动时对源目录进行索引(增量——只有更改的文件才会被重新处理),然后开始接受MCP连接。不需要单独的索引器步骤。

或者,使用 --watch 而不是 --build-index 在服务器运行时自动更新索引。监视器在启动时构建索引,然后监视文件更改(创建、编辑、删除、重命名),根据需要触发增量重新索引。

独立索引器

您还可以使用CLI索引器单独索引:

dotnet run --project src/MemoryExchange.Indexer -- \
  --source /path/to/your/memory-exchange \
  --provider local \
  --database-path /path/to/memoryexchange.db
标志 描述
--source, -s (必填) 包含markdown文件的源目录的路径
--provider, -p local (默认)或 azure
--database-path SQLite数据库文件路径(默认为 memory_exchange.db 在源目录中)
--model-path 自定义ONNX模型文件路径(本地提供程序)
--index-name 逻辑索引名称(默认值: memory-exchange)
--force, -f 强制完全重新索引,忽略缓存状态
--exclude 要从索引中排除的全局模式(可以多次指定)
--watch, -w 索引后,注意文件更改并增量重新索引(运行到Ctrl+C)

配置

配置加载了以下优先级(最高获胜):

  1. appsettings.json
  2. 环境变量(MEMORYEXCHANGE_ 前缀)
  3. CLI参数

环境变量

变量 映射到
MEMORYEXCHANGE_SOURCEPATH 源目录路径
MEMORYEXCHANGE_PROVIDER local 或 azure
MEMORYEXCHANGE_INDEXNAME 搜索索引名称
MEMORYEXCHANGE_DATABASEPATH SQLite数据库路径(默认为 memory_exchange.db 在源目录中)
MEMORYEXCHANGE_MODELPATH ONNX模型文件路径
MEMORYEXCHANGE_BUILDINDEX 设置为 true 建立创业指数
MEMORYEXCHANGE_WATCH 设置为 true 启用文件监视模式
MEMORYEXCHANGE_DEBUG 设置为 true 启用仅调试工具(例如。 get_index_status)
MEMORYEXCHANGE_AZURE_SEARCH_ENDPOINT Azure AI搜索端点
MEMORYEXCHANGE_AZURE_SEARCH_APIKEY Azure AI搜索API密钥
MEMORYEXCHANGE_AZURE_OPENAI_ENDPOINT Azure OpenAI端点
MEMORYEXCHANGE_AZURE_OPENAI_APIKEY Azure OpenAI API密钥
MEMORYEXCHANGE_AZURE_OPENAI_DEPLOYMENT Azure OpenAI嵌入部署名称

MCP服务器CLI参数

--source-path, --provider, --index-name, --database-path, --model-path, --build-index, --watch, --debug, --exclude, --azure-search-endpoint, --azure-search-key, --azure-openai-endpoint, --azure-openai-key, --azure-openai-deployment

--build-index --如果存在,MCP服务器在启动时会在接受连接之前运行增量索引。这消除了单独运行Indexer CLI的需要。需要 --source-path 待设定。

--watch --监控源目录中markdown文件的更改,并自动触发增量重新索引。暗示 --build-index 启动时(如果索引不存在,则构建索引,然后监视更改)。当 --watch 处于活动状态,单独 --build-index 标志是多余的。需要 --source-path 待设定。

--debug --启用仅调试MCP工具(例如。 get_index_status).如果没有此标志,这些工具将不会注册,并且对AI代理不可见。

--exclude --可选的glob模式,用于从索引中排除文件/目录。可以多次指定(例如。, --exclude "**/archive/**" --exclude "**/drafts/**").这 personal/ 无论此设置如何,目录始终被排除在外。

--database-path --如果省略,则默认为 memory_exchange.db 里面 --source-path 目录。

MCP工具

服务器公开了以下工具:

search_memory_bank

参数 类型 必填 说明
query string 是 要搜索什么(例如“缓存是如何工作的”、“部署架构”)
currentFilePath string no 用户正在编辑的文件--启用域感知增强
topK int no 结果数,1-10(默认值:5)

get_memory_file

从内存交换中检索特定markdown文件的完整内容。当搜索结果引用文件并且代理需要完整的上下文时很有用。

参数 类型 必填 说明
filePath string yes markdown文件的相对路径(例如“architecture/database.md”)

get_index_status (仅调试)

返回有关内存交换索引的诊断信息。使用此功能在搜索之前验证索引是否已填充,或诊断原因 search_memory_bank 不返回任何结果。

没有参数。返回源路径、提供程序、索引名称、块计数、文件计数和上次索引时间。当索引为空时,它包括可操作的故障排除提示。

此工具仅在服务器使用启动时注册 --debug 旗帜(或 MEMORYEXCHANGE_DEBUG=true).没有它,AI代理将看不到这个工具。

启动诊断

当MCP服务器启动时,它会将诊断信息打印到stderr,包括配置的提供程序、源路径、索引名称、监视/构建索引模式以及在源目录中找到的markdown文件的数量。此输出在MCP客户端的服务器日志中可见,可用于确认服务器配置正确。

建筑

src/
  MemoryExchange.Core/          Core abstractions, chunking, search orchestrator
  MemoryExchange.Azure/         Azure AI Search + Azure OpenAI provider
  MemoryExchange.Local/         SQLite + ONNX provider (default)
  MemoryExchange.Indexing/      Shared indexing pipeline (FileScanner + IndexingPipeline)
  MemoryExchange.Indexer/       CLI indexer tool
  MemoryExchange.McpServer/     MCP stdio server (supports --build-index)
tests/
  MemoryExchange.Indexer.LocalRunner/   Development test harness

提供者摘要

  • IEmbeddingService --从文本生成向量嵌入
  • ISearchService --读取端:混合搜索(关键字+向量)
  • ISearchIndex --写入端:追加/删除块

搜索管道

  1. 查询通过以下方式嵌入 IEmbeddingService
  2. ISearchService 运行FTS5 BM25+向量余弦相似度,通过RRF合并(k=60)
  3. SearchOrchestrator 应用域增强(1.3倍)和指令增强(1.2倍)
  4. 结果以2倍的倍数被超额提取,重新排序并修剪为 topK

本地提供商详细信息

  • 型号: all-MiniLM-L6-v2 (384昏暗,L2标准化)
  • 标记器: 自定义 WordPieceTokenizer 内置30k vocab
  • 储存: 带WAL模式的SQLite,FTS5虚拟表,嵌入为BLOB
  • 矢量搜索: 纯C#余弦相似度(归一化向量上的点积)

从源头构建

要求。NET 9.0 SDK。

1.下载ONNX型号

已发布的NuGet包捆绑了模型,但从源代码构建时需要手动下载。使用附带的脚本获取 all-MiniLM-L6-v2 来自HuggingFace的嵌入模型(约90 MB):

# Windows (PowerShell)
.\scripts\download-model.ps1
# Linux / macOS
./scripts/download-model.sh

这将模型放置在 src/MemoryExchange.Local/Models/all-MiniLM-L6-v2.onnx。如果需要,可以将自定义输出路径作为参数传递。

2.建造

dotnet build MemoryExchange.slnx

许可证

麻省理工学院 -版权所有(c)2026 Moaid Hathot