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: code-graph-mcp

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

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

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

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

Maintenance

Maintainers
Response time
2wRelease cycle
2Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

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/LENA-EE/simple_mcp'

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