Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Веб-интерфейс для просмотра и вызова MCP-инструментов с чат-агентом, планировщиком и оркестрацией цепочек вызовов.
# Установка зависимостей
npm install
# Настройка окружения
cp .env.example .env
# Отредактировать CHAT_API_KEY в .env
# Запуск
npm start
# → http://localhost:3000# Только локальные инструменты
npm test
# Все тесты (локальные + внешние)
npm run test:all
# Только E2E-тест оркестрации
npm run test:orchsrc/
├── api/ # REST-роуты (tools, scheduler, admin)
├── mcp/
│ ├── tools/ # Локальные инструменты + registry
│ ├── server.js # MCP-сервер (SSE transport)
│ └── client-manager.js # Подключение к внешним MCP-серверам
├── public/ # Фронтенд (app.js, chat.js, styles.css, index.html)
├── scheduler/ # Планировщик (reminder + periodic)
└── shared/ # Config, Logger, AppContextЧат-агент умеет выполнять цепочки из нескольких инструментов, где LLM сама решает, какой инструмент вызвать следующим, на основе результатов предыдущих шагов.
Запрос пользователя:
Получи пользователя #1, сохрани его имя в заметку,
создай напоминание через 2 секунды о заметке, и покажи сводку задач.Ожидаемая цепочка вызовов:
┌─────────────────────────────────────────────────┐
│ Шаг 1: get_user(userId: 1) │
│ → "Leanne Graham, Gwenborough" │
├─────────────────────────────────────────────────┤
│ Шаг 2: save_note(title: "Leanne Graham", │
│ content: "Пользователь #1") │
│ → "Заметка сохранена: notes/Leanne Graham.md" │
├─────────────────────────────────────────────────┤
│ Шаг 3: create_reminder(message: "Напомни о │
│ заметке Leanne Graham", delaySeconds:2)│
│ → "Напоминание создано через 2 сек" │
├─────────────────────────────────────────────────┤
│ Шаг 4: get_summary() │
│ → "Всего заметок: 5, задач в scheduler: 2..." │
├─────────────────────────────────────────────────┤
│ Ответ LLM: "Готово. Пользователь Leanne Graham │
│ сохранён, напоминание создано. Вот сводка..." │
└─────────────────────────────────────────────────┘Механизм:
get_user через TOOL_CALLsave_noteВетвление: LLM может принимать разные решения на основе данных:
Параллельные вызовы: Если LLM возвращает несколько TOOL_CALL на одной строке, они выполняются через Promise.all.
Отложенные задачи: create_reminder c callback.messages — планировщик запускает LLM-цепочку через N секунд и пушит результат через SSE.
| Тип | Назначение |
|---|---|
tool_step | Промежуточный шаг цепочки (real-time обновление UI) |
tool_chain_result | Результат цепочки от планировщика (scheduler callback) |
TOOL_CALL: {"tool": "имя_инструмента", "arguments": {}}\n — параллельное выполнениеsrc/mcp/tools/*.js)PORT=3000 # Порт сервера
LOG_LEVEL=info # Уровень логирования
MCP_EXTERNAL_ENABLED=true # Включить внешние MCP-серверы
MCP_EXTERNAL_SERVERS=... # Список серверов (id,command,args;...)
CHAT_API_KEY=sk-... # API-ключ DeepSeek
CHAT_MODEL=deepseek-chat # Модель для чата~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.