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)

Related MCP server: mcp-recall-md

Установка

Установка только для CPU — рекомендуется для macOS (любой Mac, Apple Silicon или Intel) и Linux/Windows без видеокарты NVIDIA. Экономит около 5 ГБ бинарных файлов CUDA. На macOS графический процессор Apple (MPS) по-прежнему автоматически обнаруживается и используется через встроенный бэкенд MPS в PyTorch — метка «CPU» относится только к отсутствию CUDA, а не к вычислительному устройству во время выполнения.

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

Установка CUDA — только для Linux/Windows с выделенной видеокартой NVIDIA. Не применимо к macOS (NVIDIA CUDA не поддерживается на Mac).

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

Обновление

uv tool upgrade semantic-search

Режимы сервера

stdio MCP (для каждой сессии Claude Code)

Запускает один процесс на каждую сессию Claude Code. Просто, но каждая сессия загружает свою копию модели объемом ~400 МБ–1 ГБ.

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-over-HTTP по адресу /mcp плюс REST по адресам /search, /duplicates, /health, /reindex. Все сессии 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'

Плагин Claude Code

Этот репозиторий также поставляется как плагин для маркетплейса Claude Code с командами для настройки, поиска и исследований.

Установка

claude plugin marketplace add bborbe/semantic-search
claude plugin install semantic-search

Обновление

claude plugin marketplace update semantic-search
claude plugin update semantic-search@semantic-search

Быстрый старт

# One-shot interactive setup: installs the binary, writes the launchd/systemd
# unit, registers the MCP server in your Claude config.
/semantic-search:configure

# Search indexed markdown
/semantic-search:search kubernetes deployment

# Multi-step research across results
/semantic-search:research kafka backup strategy

Команды

Команда

Описание

/semantic-search:configure

Установить semantic-search-http как службу launchd (macOS) или systemd-user (Linux) и зарегистрировать MCP-сервер в Claude Code

/semantic-search:search <query> [top_k]

Семантический поиск через запущенный MCP-сервер

/semantic-search:research <topic>

Многоэтапное исследование — поиск, категоризация, чтение основных источников, синтез

Запуск в фоновом режиме

Для использования в производственных целях запускайте 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 — разовые команды search и duplicates.

Конфигурация

Переменные окружения

Переменная

Описание

По умолчанию

CONTENT_PATH

Директория для индексации (через запятую для нескольких)

./content

LOG_LEVEL

Уровень логирования (DEBUG, INFO, WARNING, ERROR)

INFO

Несколько директорий

Индексируйте несколько директорий, разделяя пути запятыми:

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

Все директории индексируются вместе и ищутся как единый индекс.

Как это работает

При первом запуске загружается небольшая модель эмбеддингов (~90 МБ) и индексируются ваши файлы Markdown (<1 с для типичных хранилищ). Индекс автоматически обновляется при изменении файлов через отслеживание файловой системы.

Индексируемый контент

Каждый файл 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.

Available Tools

3 tools
check_duplicatesA

Find notes that are potential duplicates of the given file.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesPath to the file (absolute or relative to content directory)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose behavioral details beyond the basic 'Find' action—such as how duplicates are determined, whether the operation is read-only, or any side effects. The burden falls on the description, which is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words, making it highly concise and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, output schema present), the description conveys the main purpose adequately. However, it lacks guidance on when to use vs alternatives, which is somewhat a gap but not critical for such a straightforward tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single parameter, so the schema fully describes file_path. The description adds no extra semantic meaning beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Find') and resource ('notes that are potential duplicates of the given file'), clearly distinguishing it from sibling tools like search_related and get_content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for checking duplicates but does not explicitly state when to use this tool versus alternatives, nor any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_contentB

Fetch the content of a file from the indexed vault.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile path (absolute or relative to an indexed root)
queryNoSearch string to find the best-matching line (only used when snippet=True)
snippetNoIf True, return a snippet around the best-matching line instead of the full file
context_linesNoNumber of lines before and after the match to include (default 20)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the primary action but does not disclose edge cases (e.g., file not found, path resolution), or behavior around optional parameters like snippet and query despite their existence in the schema. This leaves significant behavioral aspects undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tightly worded sentence that immediately conveys the core purpose. There is no fluff or redundancy, and the information is front-loaded. For the tool's purpose, this length is appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has moderate complexity with optional snippet/query parameters and an output schema, and the schema covers parameter semantics. However, the description is thin on operational context, such as how path resolution works or when to use snippet mode. While not incomplete for basic selection, the description itself needed to provide more contextual glue; the schema partially compensates, but gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so a baseline of 3 is appropriate. The description itself does not add any parameter semantics beyond the schema, but the schema already documents each parameter (path, query, snippet, context_lines) clearly. The description neither enhances nor detracts from what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action ('Fetch the content of a file') and the resource ('indexed vault'), using a specific verb and resource. It distinguishes itself from sibling tools 'search_related' and 'check_duplicates' by focusing on direct content retrieval rather than search or duplication checks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention related tools or any exclusionary conditions (e.g., 'use search_related instead when looking for related content'). The intended usage is only implicitly derived from the tool's name and action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.1.0
    • First observedcheck_duplicates
    • First observedget_content
    • First observedsearch_related

TDQS

A4/5.0

Scored across 3 tools

Disambiguation5/5

Each tool serves a distinct purpose: semantic search, duplicate detection, and content retrieval. There is no overlap or ambiguity between them.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (search_related, check_duplicates, get_content) using snake_case. The naming is predictable and readable.

Tool Count5/5

Three tools is an appropriate, focused set for a semantic search server. Each tool earns its place and the scope is well-defined.

Completeness5/5

The server covers the core needs of semantic search: finding related notes, detecting duplicates, and retrieving content. There are no missing operations that would hinder its stated purpose.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

Appeared in Searches