Skip to main content
Glama
LENA-EE
by LENA-EE

MCP DROSPR Server

MCP-сервер для анализа Perl кода с помощью Perl::Critic.

Проект следует AI Engineering Standard (AES) v1.2, уровень AES-L2. См. PROJECT_CONSTITUTION.md и CLAUDE.md.

Инструменты

perlcritic_analyze

Анализирует Perl код и возвращает структурированный отчёт.

Параметры:

Параметр

Тип

Описание

code

string

ОБЯЗАТЕЛЬНО - Perl код для анализа

filename

string

Имя файла (для отчёта)

severity

int

Уровень строгости 1-5 (по умолчанию 1)

Пример использования:

{
  "method": "tools/call",
  "params": {
    "name": "perlcritic_analyze",
    "arguments": {
      "code": "use strict;\nopen FILE, 'test.txt';",
      "severity": 1
    }
  }
}

lookup_symbol

Найти где определена функция или метод в Perl-проекте.

{"method": "tools/call", "params": {"name": "lookup_symbol", "arguments": {"name": "process_billing"}}}

Доступен только если загружен PPI-индекс (POST /index/upload).

get_file_structure

Карта файла: все функции с номерами строк, импорты, глобальные переменные.

{"method": "tools/call", "params": {"name": "get_file_structure", "arguments": {"filepath": "Finance/Billing.pm"}}}

get_callers

Найти все места где реально вызывается функция (только фактические вызовы, не комментарии).

{"method": "tools/call", "params": {"name": "get_callers", "arguments": {"name": "process_billing"}}}

index_status

Информация об индексе: дата обновления, количество файлов.

{"method": "tools/call", "params": {"name": "index_status", "arguments": {}}}

check_before_push

Проверяет список Perl-файлов перед git push. Severity 4-5 блокирует пуш, severity 3 — предупреждение, 1-2 — игнорируется.

{
  "method": "tools/call",
  "params": {
    "name": "check_before_push",
    "arguments": {
      "files": [{"filename": "Billing.pm", "code": "open(FILE, $path);"}],
      "block_severity": 4
    }
  }
}

Используется pre-push git хуком. Возвращает allow_push: true/false.


Related MCP server: mcp-lint-tools

Pre-push git хук — "Husky для Perl"

Автоматически проверяет Perl-файлы перед отправкой в Bitbucket.

Подключение (одна команда)

./setup.sh

Что происходит при git push

git push
  → .githooks/pre-push срабатывает локально
  → читает изменённые .pl/.pm файлы
  → отправляет на MCP-сервер
  → severity 4-5 → ❌ пуш заблокирован
  → severity 3   → ⚠ предупреждение, пуш идёт
  → чисто        → ✅ пуш проходит молча

Настройка адреса сервера

Поменяй MCP_URL в .githooks/pre-push:

MCP_URL="http://192.168.1.106:8000"  # адрес виртуалки банка

Требования на машине разработчика

  • bash, curl, python3 — стандарт, ничего дополнительно ставить не нужно

  • Perl::Critic не нужен — работает в Docker на сервере


PPI-индекс — загрузка

Индекс собирается через TeamCity и загружается на сервер:

# На TeamCity-агенте (или вручную для теста):
perl tools/build_index.pl /path/to/perl/project | gzip > index.json.gz

curl -X POST http://<host>:8000/index/upload \
     -H "Authorization: Bearer $MCP_INDEX_TOKEN" \
     -H "Content-Encoding: gzip" \
     --data-binary @index.json.gz

Требует переменную окружения MCP_INDEX_TOKEN на сервере (см. раздел Запуск).


⚠️ Важно: Почему только code параметр

MCP всегда работает удалённо! Сервер запущен в Docker на другом компьютере.

┌─────────────────┐         ┌─────────────────┐
│   Компьютер      │         │   MCP Сервер    │
│   разработчика  │   HTTP   │   (Docker)      │
│                 │  ──────> │                 │
│   Файл:         │          │   Нет доступа   │
│   C:\project\    │          │   к файловой    │
│   script.pl     │          │   системе!      │
└─────────────────┘          └─────────────────┘

Проблема:

  • LLM получает путь C:\project\script.pl

  • LLM "эмулирует" чтение файла

  • Запускает MCP с target: "C:\project\script.pl"

  • MCP не видит этот файл! Он на другом компьютере.

Решение: LLM должен:

  1. Прочитать файл реально

  2. Отправить содержимое через параметр code

Правильный флоу для LLM:

Пользователь: "Проверь C:\project\script.pl"
     ↓
LLM: Читаю файл C:\project\script.pl...
     ↓
LLM: Отправляю в MCP:
     {
       "code": "use strict;\nuse warnings;\n...",
       "filename": "script.pl"
     }

Настройка LLM (Kiloterm/Cline)

Добавь в system prompt:

ПРОВЕРКА PERL КОДА:
1. Всегда читай файл ПОЛНОСТЬЮ перед анализом
2. Используй ТОЛЬКО параметр 'code' для perlcritic_analyze
3. НИКОГДА не используй параметр 'target' - он не работает для удалённого MCP

Запуск

Docker (рекомендуется)

docker pull lenchik8/simple_mcp:latest

docker run -d --name mcp-drospr \
  -p 8000:8000 \
  -e MCP_INDEX_TOKEN=your_secret_token \
  -v mcp_data:/app/data \
  lenchik8/simple_mcp:latest

-v mcp_data:/app/data — сохраняет index.db между перезапусками контейнера.

Локальная сборка

docker build -t mcp-drospr .
docker run -p 8000:8000 -e MCP_INDEX_TOKEN=your_secret_token mcp-drospr

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

pip install -e .
python server.py

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

Переменная

Обязательна

Описание

MCP_INDEX_TOKEN

Для /index/upload

Bearer-токен для загрузки PPI-индекса

Структура проекта

mcp-drospr/
├── server.py                  # FastAPI, SSE, JSON-RPC, роутинг тулов
├── tools/
│   ├── perlcritic.py          # Perl::Critic анализ
│   ├── index_store.py         # SQLite хранилище PPI-индекса
│   └── build_index.pl         # Perl-скрипт сборки индекса (запускается на TeamCity)
├── data/
│   └── index.db               # SQLite индекс (создаётся после первой загрузки)
├── docs/
│   └── teamcity_setup.md      # Инструкция для TeamCity-администратора
├── Dockerfile
└── pyproject.toml

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

{
  "mcpServers": {
    "DROSPR_JARVIS": {
      "url": "http://<IP>:8000",
      "transport": "sse"
    }
  }
}

Docker Hub

https://hub.docker.com/r/lenchik8/simple_mcp

GitHub

https://github.com/LENA-EE/simple_mcp


Примеры промптов для анализа Perl кода

Простой анализ файла

Проверь этот Perl файл на ошибки:
/path/to/script.pl

Анализ с мягким уровнем (только критичные ошибки)

Проверь код, но покажи только серьёзные проблемы (severity 4-5)

Анализ кода (отправка кода напрямую)

Проверь этот Perl код:
use strict;
...

Анализ проекта

Проанализируй каждый .pl файл в папке /src/

Ограничения удалённого MCP

  • Анализ директорий возможен только если они доступны внутри контейнера

  • Для полного аудита проекта - отправляй код файлов по одному

Related MCP Connectors

Related MCP Servers