npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@moabpro/le1-mcp

v0.1.1

Published

MCP server for the LE1 exchange public API — sites, pages, blocks, accruals, users, reports and tools. Auth via X-Api-Key.

Readme

@moabpro/le1-mcp

MCP-сервер (Model Context Protocol) для публичного API биржи LE1. Позволяет управлять биржей человеческим языком из Claude Code, Claude Desktop, Cursor и любого другого MCP-клиента: смотреть сайты, страницы, блоки, начисления и пользователей, строить финансовые отчёты, запускать инструменты биржи и следить за их выполнением.

Сервер — тонкая обёртка над REST API /api/v1 (интерактивная документация — Scalar на {LE1_API_URL}/api-docs). Работает по stdio, ничего не хранит локально, все данные ходят напрямую между MCP-клиентом и API биржи.

Требования

  • Node.js ≥ 20 (используется встроенный fetch);
  • персональный API-ключ биржи (см. ниже).

Авторизация

Используется тот же ключ, что и у публичного REST API — заголовок X-Api-Key.

Где взять ключ: веб-интерфейс биржи → клик на свой email в шапке → диалог «API-ключ» → «Сгенерировать». Ключи доступны только администраторам (роль buyer); пользователь без ключа доступа к API не имеет. Ключ передаётся серверу через переменную окружения LE1_API_KEY.

⚠️ Ключ даёт полный админ-доступ к бирже, включая запуск инструментов, меняющих данные. Храните его как пароль, не коммитьте в репозитории. Отозвать ключ можно в том же диалоге («Удалить» или «Сгенерировать новый» — старый перестаёт работать сразу).

Установка

Claude Code

Глобально для всех проектов и сессий (--scope user, рекомендуется):

claude mcp add --scope user le1 -e LE1_API_KEY=ВАШ_КЛЮЧ -- npx -y @moabpro/le1-mcp

Без --scope user сервер добавится только для текущей папки (scope local). Проверка: claude mcp listle1 … ✔ Connected. Удаление: claude mcp remove --scope user le1.

Разрешить инструменты без запросов подтверждения

По умолчанию Claude Code спрашивает разрешение на каждый вызов инструмента. Чтобы разрешить все инструменты le1 сразу, добавьте "mcp__le1" в permissions.allow файла ~/.claude/settings.json (Windows: C:\Users\<ИМЯ>\.claude\settings.json):

{
  "permissions": {
    "allow": [
      "mcp__le1"
    ]
  }
}

Если файл уже существует — не заменяйте его целиком, а допишите "mcp__le1" в существующий массив allow. Изменение подхватится в новой сессии.

Точечный вариант — разрешить только чтение, а запуск инструментов биржи оставить под подтверждение: вместо "mcp__le1" перечислите конкретные инструменты ("mcp__le1__le1_list_sites", "mcp__le1__le1_list_accruals", …) — тогда le1_run_tool и прочие будут по-прежнему требовать подтверждения.

Claude Desktop / Cursor / прочие MCP-клиенты

В конфиг MCP-серверов (для Claude Desktop — claude_desktop_config.json):

{
  "mcpServers": {
    "le1": {
      "command": "npx",
      "args": ["-y", "@moabpro/le1-mcp"],
      "env": { "LE1_API_KEY": "ВАШ_КЛЮЧ" }
    }
  }
}

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

| Переменная | Обязательна | Описание | |---|---|---| | LE1_API_KEY | да | Персональный API-ключ (диалог «API-ключ» в профиле) | | LE1_API_URL | нет | Базовый URL API. По умолчанию https://cpa-goods.ru:5050 |

Соглашения

  • Все идентификаторы (id, siteId, userId…) — строки MongoDB ObjectId (24 hex-символа, например 63d7e6ed7f256430f748313e).
  • Списки пагинированы: page (с 1), pageSize (1–500, по умолчанию 50); ответ — { items, totalCount, page, pageSize }.
  • Даты передаются строкой YYYY-MM-DD.
  • Ответы — JSON «как есть» из API; ошибки — человекочитаемый текст на русском (isError: true), включая подсказку при неверном ключе (401).

Инструменты

Служебные

| Инструмент | Что делает | |---|---| | le1_me | Проверка ключа: возвращает email и роль владельца. Первый вызов при проблемах с доступом |

Данные (только чтение)

| Инструмент | Параметры | Что делает | |---|---|---| | le1_list_sites | search?, status?, userId?, userEmail?, page?, pageSize? | Сайты-доноры. search — подстрока URL/email владельца; status — например Working (в работе), Added, Deleted, Declined, BuyingStopped; userEmail — точный email владельца без учёта регистра | | le1_get_site | id | Полная карточка сайта: статусы, трафик, цены блоков, расходы, счётчики | | le1_list_site_pages | siteId, search?, page?, pageSize? | Страницы сайта: URL, title, HTTP-статус, глубина, индексация, установлен ли код | | le1_list_blocks | siteId?, pageId?, status?, search?, page?, pageSize? | Рекламные блоки (размещения). Активные размещения — только с status=Active, иначе в выборке будут и снятые. Статусы: Active, Inactive, AwaitingModeration, BlockedPermanently | | le1_get_block | id | Карточка блока: анкор, URL акцептора, цена, видимость, проект | | le1_list_accruals | dateFrom, dateTo, siteId?, userId?, page?, pageSize? | Начисления — записи ежедневных проверок блоков. Одна запись = один блок за один день; priceдневная ставка блока в ₽ (начисление за день = price, сумма за период = сумма price по записям). Диапазон дат обязателен, максимум 62 дня | | le1_list_users | role?, search?, page?, pageSize? | Пользователи: buyer — админы, seller — вебмастера. Без паролей и ключей | | le1_get_user | id | Карточка пользователя: email, статус, Telegram, способ выплаты, комментарий |

Справочники

| Инструмент | Что делает | |---|---| | le1_list_templates | Шаблоны рекламных блоков (метаданные) | | le1_get_template (id) | Шаблон с содержимым: HTML (DotLiquid), CSS, JS | | le1_list_gray_topics | Серые тематики (категория + маркер) для модерации площадок |

Отчёты

| Инструмент | Параметры | Что делает | |---|---|---| | le1_report_dates | — | Месяцы, за которые есть данные. Поле id → параметр dateId отчётов | | le1_report | type, dateId, date?, acceptorId?, ownerId?, anchor?, url?, donorDomain?, donorPage?, page?, pageSize? | Финансовые отчёты в JSON (см. типы ниже) | | le1_report_file | type | Легаси-отчёты файлом: yandexMetrikaLight, yandexMetrikaFull, monthlyMoney{ url } на скачивание |

Типы le1_report:

  • baseDays — суммы по каждому дню месяца (оплата бирже/вебмастерам, количество ссылок и сайтов);
  • baseMonth — агрегаты по вебмастерам за весь месяц;
  • owner — по вебмастерам за конкретный день (обязателен date);
  • link — по каждой ссылке за день (обязателен date; строк могут быть тысячи — используйте page/pageSize);
  • site — по сайтам за день (обязателен date).

Типовой сценарий: le1_report_dates → взять свежий idle1_report с нужным типом.

Инструменты биржи (меняют данные!)

| Инструмент | Что делает | |---|---| | le1_list_tools | Каталог фоновых инструментов с описанием позиционных параметров. Вызывать перед первым запуском | | le1_run_tool (toolName, parameters?) | Запуск инструмента. Возвращает taskId. Одновременно работает только один инструмент (глобальная блокировка) | | le1_tool_status (toolName, after?) | Статус (idle / running / completed / failed / cancelled) и инкрементальный лог: передавайте index последнего сообщения в after | | le1_cancel_tool (toolName) | Отмена выполняющегося инструмента | | le1_validate_change_prices (sheetUrl) | Сводка изменений цен по прайсу Google Sheets — без применения. Обязательный шаг перед changePrices | | le1_validate_remove_blocks (acceptorUrl) | Сколько активных блоков будет снято режимом byAcceptor. Обязательный шаг перед removeBlocks |

Доступные инструменты (актуальный список и параметры — в le1_list_tools): поиск релевантных страниц, поиск кода на сайтах, диагностика блоков, рассылка вебмастерам, смена цен, массовые фиксации, снятие ссылок, сканирование сайта.

Примеры запросов к Claude

  • «Покажи все сайты вебмастера [email protected] и сколько на них активных блоков»
  • «Сколько мы начислили по сайту X за июль? Разбей по дням»
  • «Сравни отчёт по вебмастерам за 1 и 15 число прошлого месяца»
  • «Проверь прайс https://docs.google.com/spreadsheets/… и скажи, что изменится, но цены не меняй»
  • «Запусти сканирование сайта example.com и следи за ходом, пока не закончится»

Устранение неполадок

| Симптом | Причина / решение | |---|---| | Не задан LE1_API_KEY | Переменная окружения не дошла до сервера — проверьте конфиг MCP-клиента | | ✗ API-ключ не принят (401) | Ключ неверен или отозван — сгенерируйте новый в профиле | | ✗ Доступ запрещён (403) | Ключ принадлежит пользователю без роли buyer | | Долгие ответы отчётов | Тяжёлые отчёты (особенно le1_report_file) генерируются на сервере — это нормально |

Разработка

Исходники — в репозитории биржи LE1, папка le1-mcp/ (TypeScript, сборка tsc).

npm install
npm run build
LE1_API_URL=http://localhost:5211 LE1_API_KEY=... node dist/index.js

npm publish собирает автоматически (prepublishOnly).

Версии

  • 0.1.1 — исправлена семантика price в начислениях: это дневная ставка, а не месячная (старое описание заставляло агентов занижать суммы в ~30 раз).
  • 0.1.0 — первый релиз: 21 инструмент (данные, справочники, отчёты, запуск инструментов биржи).