Skip to main content
Glama
bborbe

Semantic Search MCP

by bborbe

语义搜索

对 Markdown 文件进行语义搜索。通过含义而非仅仅关键词查找相关笔记。在创建新笔记前检测重复内容。

支持两种服务器传输方式:

  • stdio MCP — 用于 Claude Code 集成(每个会话一个进程)

  • HTTP — 在一个端口上同时提供 MCP-over-HTTP 和 REST 服务;所有客户端共享一个预热进程

功能

  • 使用 sentence-transformers 进行语义搜索

  • 重复/相似笔记检测

  • 通过文件监视器自动更新索引

  • 支持多目录

  • 内联标签提取 (#tag-name)

安装

仅 CPU 安装 — 推荐用于 macOS(任何 Mac,Apple Silicon 或 Intel)以及 没有 NVIDIA GPU 的 Linux/Windows。可节省约 5GB 的 CUDA 二进制文件。在 macOS 上,Apple GPU (MPS) 仍会通过 PyTorch 内置的 MPS 后端自动检测并使用 —— “CPU” 标签仅指没有 CUDA,而非运行时不使用计算设备。

uv tool install --index https://download.pytorch.org/whl/cpu \
  git+https://github.com/bborbe/semantic-search

CUDA 安装 — 仅适用于 带有专用 NVIDIA GPU 的 Linux/Windows。不适用于 macOS(Mac 不支持 NVIDIA CUDA)。

uv tool install git+https://github.com/bborbe/semantic-search

升级

uv tool upgrade semantic-search

服务器模式

stdio MCP (每个会话的 Claude Code)

每个 Claude Code 会话启动一个进程。简单,但每个会话都会加载其自己的约 400 MB–1 GB 的模型副本。

claude mcp add -s project semantic-search \
  --env CONTENT_PATH=/path/to/vault \
  -- \
  uvx --from git+https://github.com/bborbe/semantic-search semantic-search-mcp

可用工具:

  • search_related(query, top_k=5) — 查找语义相关的笔记

  • check_duplicates(file_path) — 检测重复/相似的笔记

HTTP (所有客户端共享)

单个长期运行的进程在 /mcp 提供 MCP-over-HTTP,并在 /search/duplicates/health/reindex 提供 REST 服务。所有 Claude Code 会话和 REST 客户端共享一个预热索引器。

CONTENT_PATH=/path/to/vault semantic-search-http --host 127.0.0.1 --port 8321

通过 MCP 配置将 Claude Code 指向它:

{
  "mcpServers": {
    "semantic-search": {
      "type": "http",
      "url": "http://127.0.0.1:8321/mcp"
    }
  }
}

REST 端点:

端点

方法

描述

/mcp

POST

MCP-over-HTTP (Claude Code)

/search?q=...&top_k=5

GET

语义搜索

/duplicates?file=...&threshold=0.85

GET

查找重复笔记

/health

GET

带有索引统计信息的健康检查

/reindex

GET/POST

强制重建索引

查询示例:

# Search
curl 'http://127.0.0.1:8321/search?q=kubernetes+deployment'

# Find duplicates
curl 'http://127.0.0.1:8321/duplicates?file=notes/my-note.md'

# Health check
curl 'http://127.0.0.1:8321/health'

后台运行

对于生产环境的使用,请将 semantic-search-http 作为后台服务运行,以便每个 Claude Code 会话(以及任何 REST 客户端)共享一个预热进程。

平台

指南

macOS (launchd)

docs/launchd-service.md

Linux (systemd)

docs/systemd-user-service.md

快速示例 (macOS):

launchctl load ~/Library/LaunchAgents/com.github.bborbe.semantic-search-http.plist

快速示例 (Linux):

systemctl --user enable --now semantic-search-http.service

CLI 命令

无需运行服务器的一次性命令:

# Search
CONTENT_PATH=/path/to/vault semantic-search search "kubernetes deployment"

# Find duplicates
CONTENT_PATH=/path/to/vault semantic-search duplicates path/to/note.md

二进制文件

二进制文件

用途

semantic-search-http

组合式 HTTP 服务器 — MCP 在 /mcp + REST 端点。运行一次,跨客户端共享。

semantic-search-mcp

stdio MCP 服务器 — 每个 Claude Code 会话一个。在未设置 HTTP 服务时使用。

semantic-search

仅 CLI — searchduplicates 一次性命令。

配置

环境变量

变量

描述

默认值

CONTENT_PATH

要索引的目录(多个目录用逗号分隔)

./content

LOG_LEVEL

日志级别 (DEBUG, INFO, WARNING, ERROR)

INFO

多目录

通过用逗号分隔路径来索引多个目录:

CONTENT_PATH=/path/to/vault1,/path/to/vault2,/path/to/docs

所有目录会被一起索引,并作为一个统一的索引进行搜索。

工作原理

首次运行时会下载一个小型嵌入模型(约 90MB)并索引您的 Markdown 文件(典型知识库耗时 <1s)。当文件通过文件系统监视器发生更改时,索引会自动更新。

索引内容

每个 Markdown 文件都使用加权组件进行索引:

组件

权重

备注

文件名

3x

Frontmatter title

3x

Frontmatter tags

2x

与内联标签合并

Frontmatter aliases

2x

内联标签 (#tag)

2x

从正文中提取

第一个 H1 标题

2x

正文内容

1x

前 500 个单词

开发

# Clone
git clone https://github.com/bborbe/semantic-search
cd semantic-search

# Install dev dependencies
make install

# Run checks
make check

# Run tests
make test

许可证

BSD 2-Clause License — 参见 LICENSE

A
license - permissive license
-
quality - not tested
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Appeared in Searches

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/bborbe/semantic-search'

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