Skip to main content
Glama
lovec-tech

lovec-mcp

Official
by lovec-tech
README.md
# lovec-mcp

Локальный MCP-сервер поверх детектора промпт-инъекций [lovec.tech](https://lovec.tech).
Даёт агентам (Claude Desktop, Claude Code, любой MCP-клиент) тул `check_prompt_injection` —
проверка недоверенного текста (веб-страница, документ, результат тула, письмо) перед тем,
как отдать его в другую LLM.

Работает **только с вашим собственным ключом** — сервер сам ничего не хранит и не логирует,
но проверяемый текст уходит в API [lovec.tech](https://lovec.tech) для анализа. Это тонкий
клиент поверх уже существующего API-ключа/баланса с сайта.

## Установка

Из PyPI:

```bash
pip install lovec-mcp
# или без установки, через uv:
uvx lovec-mcp
```

Из исходников:

```bash
cd lovec-mcp
python3 -m venv .venv
./.venv/bin/pip install -e .
```

Ключ выпускается на [lovec.tech](https://lovec.tech)

## Быстрая проверка руками

```bash
export LOVEC_KEY=aig_...
./.venv/bin/python server.py
```

```bash
export LOVEC_KEY=aig_...
./.venv/bin/python -c "
import asyncio, server
print(asyncio.run(server.check_prompt_injection('тестовый текст')))
"
```

## Подключение к MCP-клиенту

Claude Desktop (`claude_desktop_config.json`) или Claude Code (`.mcp.json`) — один и тот же формат:

```json
{
  "mcpServers": {
    "lovec": {
      "command": "uvx",
      "args": ["lovec-mcp"],
      "env": { "LOVEC_KEY": "aig_..." }
    }
  }
}
```

Если ставили из исходников — вместо `uvx` укажите интерпретатор venv и путь к `server.py`:

```json
{
  "mcpServers": {
    "lovec": {
      "command": "/absolute/path/to/lovec-mcp/.venv/bin/python",
      "args": ["/absolute/path/to/lovec-mcp/server.py"],
      "env": { "LOVEC_KEY": "aig_..." }
    }
  }
}
```

## Скан корпуса и отчёт

Тул проверяет одну строку за вызов. Для целого корпуса (RAG, база документов) так не выйдет:
каждый вердикт садится в контекст агента, а API отвечает от секунд до минут. Поэтому цикл
вынесен в CLI `lovec-scan`, а агент читает готовую сводку.

```bash
export LOVEC_KEY=aig_...
lovec-scan ./docs --dry-run          # сколько будет запросов (= списаний), ничего не отправляет
lovec-scan ./docs --out lovec-scan-out
```

Разбивает длинные документы на чанки ≤5000 символов, ходит в API конкурентно, пишет
`results.jsonl` построчно — прогон **резюмируемый**, повторный запуск дочитывает остаток.
Упавшие чанки считаются пробелом в покрытии, а не чистым результатом; на `402` (кончился
баланс) скан останавливается и помечает сводку как неполную.

На выходе `summary.json`: покрытие, доля флагов с 95% ДИ Уилсона по документам (не по чанкам —
чанки одного документа не независимы), гистограмма баллов, топ флагов с цитатами.

Дальше в MCP-клиенте вызываете prompt **`injection_scan_report`** — он подставляет сводку и
правила отчёта: не называть корпус чистым (ноль флагов — это верхняя граница, а не справка о
здоровье), не считать precision/recall на неразмеченном корпусе, показывать пробелы покрытия,
подавать флаги как очередь на разбор. Цитаты из корпуса помечены как недоверенные данные.

| Флаг | Зачем |
|---|---|
| `--jsonl FILE` | читать документы из JSONL `{id, text}` вместо файлов |
| `--ext` | какие расширения читать (по умолчанию `.txt,.md,.markdown,.rst`) |
| `--workers` | конкурентность, по умолчанию 4 |
| `--threshold F` | флажить по `score >= F` вместо вендорского `is_injection` |
| `--limit N` | взять не больше N документов |

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

| Переменная | По умолчанию | Зачем |
|---|---|---|
| `LOVEC_KEY` | — (обязательна) | ключ с lovec.tech |
| `LOVEC_BASE` | `https://lovec.tech` | другой хост API |
| `LOVEC_TIMEOUT` | `60` | потолок ожидания одного вызова, секунды |


<!-- mcp-name: io.github.lovec-tech/lovec-mcp -->

TDQS

A4.7/5.0

Scored across 1 tool

Disambiguation5/5

There is only one tool, so there is no possibility of confusion or misselection. The description also clearly scopes what the tool does and does not do, which removes boundary ambiguity.

Naming Consistency5/5

The tool name check_prompt_injection follows a clear verb_noun pattern and is immediately understandable. With a single tool, there is no inconsistent naming across a set to worry about.

Tool Count3/5

A single tool is at the low end of a useful MCP surface and feels thin as a tool set. However, for a narrowly scoped prompt-injection detection service, one focused tool can be acceptable.

Completeness4/5

For the stated purpose of checking untrusted text for prompt-injection risk, the core operation is fully covered and returns actionable output. Minor gaps such as batch checking or usage/balance lookup exist, but agents can work around them by calling the tool repeatedly.

Maintenance

ActivityMaintained
ResponsivenessNo issues