# Samotpravil MCP (npm · samotpravil-mcp)

MCP server for Samotpravil API — docs, typed tools, Python SDK parity, safety flags.

- Trust score: 71/100 (medium)
- Change this week: +26
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `samotpravil-mcp`: 71/100 (this document), [markdown](https://verifymcp.io/servers/dkanster-samotpravil-mcp/samotpravil-mcp.md), [page](https://verifymcp.io/servers/dkanster-samotpravil-mcp/samotpravil-mcp)

## Channel facts

- Registry: `npm`
- Package: `samotpravil-mcp`
- Version: `1.8.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 86/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 71/100
  - Repository check failed: the declared repository URL redirects; it must resolve directly.
  - Cryptographically verified build provenance (signed, bound to dkanster/samotpravil-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 21 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 67/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (fair).
  - Tool/resource definitions use about 6071 tokens (~50/item across 121 items; 58 tools + 63 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 89/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 68% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add dkanster-samotpravil-mcp -- npx -y samotpravil-mcp
```

### Codex

```bash
codex mcp add dkanster-samotpravil-mcp -- npx -y samotpravil-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dkanster-samotpravil-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "samotpravil-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add dkanster-samotpravil-mcp --command npx --arg -y --arg samotpravil-mcp
```

### Hermes

```yaml
mcp_servers:
  dkanster-samotpravil-mcp:
    command: "npx"
    args: ["-y", "samotpravil-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "dkanster-samotpravil-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "samotpravil-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 71, +51)

- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security improvement] Install scripts: unverified → pass
- [security improvement] Provenance: unverified → pass
- [security] The attested source repository moved: dkanster/samotpravil-mcp
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Security disclosure: fail → unverified
- [functional improvement] Stability: unverified → 0.23
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Schema quality: unverified → fair
- [functional improvement] License: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional] Licence: MIT

### 2026-07-31 (score 20, −7)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 27, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 45)

First indexed and scored.

## MCP tools (58)

### `get_overview` (~17 tokens)

Обзор API СамОтправил.

### `list_endpoints` (~43 tokens)

Список методов API.

Input parameters:

- `category` (string): Фильтр по категории (частичное совпадение)
- `limit` (integer): Максимум результатов

### `search_docs` (~46 tokens)

Поиск по документации API.

Input parameters:

- `limit` (integer): Максимум результатов
- `query` (string, required): Поисковый запрос: метод, путь, ключевое слово

### `get_endpoint` (~36 tokens)

Документация по методу API.

Input parameters:

- `name_or_path` (string, required): Название метода или часть URL, например smtp_send

### `api_request` (~110 tokens)

Generic HTTP к api.samotpravil.ru (safety flags, dry_run). Отключается через SAMOTPRAVIL_ALLOW_GENERIC_API=0.

Input parameters:

- `body`: JSON-тело запроса
- `dry_run` (boolean): Показать запрос без отправки на API
- `method` (string, required): HTTP-метод
- `path` (string, required): Путь API, например /api/v1/smtp_send
- `query` (object): Query-параметры

### `send_email` (~165 tokens)

POST /api/v1/smtp_send

Input parameters:

- `check_local_stop_list` (boolean)
- `dry_run` (boolean): Показать запрос без отправки на API
- `email_from` (string, required): Отправитель: Имя <email@domain.ru>
- `email_to` (string, required): Email получателя
- `message_text` (string): HTML-тело письма (если нет template_id)
- `params` (object): Переменные для подстановки
- `subject` (string, required): Тема письма
- `template_id` (integer): ID шаблона Mailganer
- `track_click` (boolean)
- `track_domain` (string)
- `track_open` (boolean)
- `x_track_id` (string)

### `send_mail_v2` (~114 tokens)

POST /api/v2/mail/send

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `email_from` (string, required)
- `email_to` (string, required)
- `message_text` (string)
- `params` (object)
- `subject` (string, required)
- `template_id` (integer)
- `track_click` (boolean)
- `track_domain` (string)
- `track_open` (boolean)
- `x_track_id` (string)

### `get_delivery_status` (~65 tokens)

GET /api/v2/issue/status по x_track_id

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `message_id` (string): Message-ID системы
- `x_track_id` (string): X-Track-ID отправки

### `get_package_status` (~48 tokens)

GET /api/v2/package/status

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `issuen` (string, required): Номер выпуска / пакета

### `search_stop_list` (~50 tokens)

Поиск email в стоп-листах

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `email` (string, required): Email для поиска в стоп-листах

### `add_stop_list_email` (~81 tokens)

Добавить email в стоп-лист

Input parameters:

- `domain` (string): Домен отправителя (как в Python SDK: info@domain)
- `dry_run` (boolean): Показать запрос без отправки на API
- `email` (string, required): Email в стоп-листе
- `mail_from` (string): Email отправителя (mail_from)

### `remove_stop_list_email` (~82 tokens)

Удалить email из стоп-листа

Input parameters:

- `domain` (string): Домен отправителя (как в Python SDK: info@domain)
- `dry_run` (boolean): Показать запрос без отправки на API
- `email` (string, required): Email в стоп-листе
- `mail_from` (string): Email отправителя (mail_from)

### `validate_email` (~48 tokens)

POST /api/v2/emails/validate/

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `email` (string, required): Email для валидации

### `list_allowed_domains` (~36 tokens)

GET /api/v2/blist/domains

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API

### `send_package` (~173 tokens)

POST /api/v1/add_json_package — массовая отправка (Python SDK parity)

Input parameters:

- `check_global_stop_list` (boolean)
- `check_local_stop_list` (boolean)
- `dry_run` (boolean): Показать запрос без отправки на API
- `email_from` (string, required)
- `headers` (object)
- `html_prettify` (boolean)
- `is_moderate` (boolean)
- `message_text` (string, required)
- `message_text_amp` (string)
- `name_from` (string, required)
- `subject` (string, required)
- `track_click` (boolean)
- `track_domain` (string)
- `track_open` (boolean)
- `users` (array, required): Список получателей; каждый объект должен содержать emailto

### `send_package_xml` (~57 tokens)

GET /api/v1/add_package — XML-пакет по URL (Python SDK parity)

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `url` (string, required): URL XML-пакета

### `stop_package` (~49 tokens)

GET /api/v1/package_stop — остановить пакет (Python SDK parity)

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `package_id` (string, required)

### `get_ext_status` (~63 tokens)

GET /api/v2/issue/ext_status — полная история статусов (Python SDK parity)

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `message_id` (string)
- `x_track_id` (string)

### `get_statistics` (~92 tokens)

GET /api/v2/issue/statistics (Python SDK parity)

Input parameters:

- `cursor_next` (integer): Пагинация
- `date_from` (string, required): Дата YYYY-MM-DD
- `date_to` (string, required): Дата YYYY-MM-DD
- `dry_run` (boolean): Показать запрос без отправки на API
- `limit` (integer): Лимит объектов (default 100)

### `get_non_delivery_by_date` (~97 tokens)

GET /api/v2/blist/report/non-delivery (Python SDK parity)

Input parameters:

- `cursor_next` (integer): Пагинация
- `date_from` (string, required): Дата YYYY-MM-DD
- `date_to` (string, required): Дата YYYY-MM-DD
- `dry_run` (boolean): Показать запрос без отправки на API
- `limit` (integer): Лимит объектов (default 100)

### `get_non_delivery_by_issue` (~65 tokens)

GET /api/v2/issue/report/non-delivery (Python SDK parity)

Input parameters:

- `cursor_next` (integer)
- `dry_run` (boolean): Показать запрос без отправки на API
- `issuen` (required)
- `limit` (integer)

### `get_fbl_report_by_date` (~97 tokens)

GET /api/v2/blist/report/fbl (Python SDK parity)

Input parameters:

- `cursor_next` (integer): Пагинация
- `date_from` (string, required): Дата YYYY-MM-DD
- `date_to` (string, required): Дата YYYY-MM-DD
- `dry_run` (boolean): Показать запрос без отправки на API
- `limit` (integer): Лимит объектов (default 100)

### `get_fbl_report_by_issue` (~65 tokens)

GET /api/v2/issue/report/fbl (Python SDK parity)

Input parameters:

- `cursor_next` (integer)
- `dry_run` (boolean): Показать запрос без отправки на API
- `issuen` (required)
- `limit` (integer)

### `get_unsubscribe_by_date` (~103 tokens)

GET /api/v2/blist/report/unsubscribe (Python SDK parity)

Input parameters:

- `cursor_next` (integer): Пагинация
- `date_from` (string, required): Дата YYYY-MM-DD
- `date_to` (string, required): Дата YYYY-MM-DD
- `dry_run` (boolean): Показать запрос без отправки на API
- `limit` (integer): Лимит объектов (default 100)
- `order` (string)

### `get_unsubscribe_by_issue` (~71 tokens)

GET /api/v2/issue/report/unsubscribe (Python SDK parity)

Input parameters:

- `cursor_next` (integer)
- `dry_run` (boolean): Показать запрос без отправки на API
- `issuen` (required)
- `limit` (integer)
- `order` (string)

### `get_issue_stat` (~52 tokens)

GET /api/v1/get_issue_stat (Python SDK parity)

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `ids` (array, required): ID пакетов из send_package

### `stop_list_unsubscribe` (~68 tokens)

GET /api/v2/stop-list/unsubscribe (Python SDK parity)

Input parameters:

- `cursor_next` (integer): Пагинация
- `dry_run` (boolean): Показать запрос без отправки на API
- `limit` (integer): Лимит (default 50)

### `stop_list_fbl` (~68 tokens)

GET /api/v2/stop-list/fbl (Python SDK parity)

Input parameters:

- `cursor_next` (integer): Пагинация
- `dry_run` (boolean): Показать запрос без отправки на API
- `limit` (integer): Лимит (default 50)

### `stop_list_failed` (~67 tokens)

GET /api/v2/stop-list/failed (Python SDK parity)

Input parameters:

- `cursor_next` (integer): Пагинация
- `dry_run` (boolean): Показать запрос без отправки на API
- `limit` (integer): Лимит (default 50)

### `stop_list_export_create` (~47 tokens)

POST /api/v2/stop-list/export — создать задачу экспорта (Python SDK parity)

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API

### `stop_list_export_tasks` (~53 tokens)

GET /api/v2/stop-list/export — список задач экспорта (Python SDK parity)

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `status` (string)

### `stop_list_export_download` (~59 tokens)

GET /api/v2/stop-list/export/{token} (Python SDK parity)

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `token` (string, required): Имя файла из stop_list_export_create

### `stop_list_export_delete` (~51 tokens)

DELETE /api/v2/stop-list/export/{token} (Python SDK parity)

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `token` (string, required)

### `domain_add` (~47 tokens)

POST /api/v2/blist/domains/add (Python SDK parity)

Input parameters:

- `domain` (string, required)
- `dry_run` (boolean): Показать запрос без отправки на API

### `domain_remove` (~47 tokens)

POST /api/v2/blist/domains/remove (Python SDK parity)

Input parameters:

- `domain` (string, required)
- `dry_run` (boolean): Показать запрос без отправки на API

### `domain_check_verification` (~50 tokens)

POST /api/v2/blist/domains/verify (Python SDK parity)

Input parameters:

- `domain` (string, required)
- `dry_run` (boolean): Показать запрос без отправки на API

### `get_blist` (~48 tokens)

GET /api/v2/blist — WhiteLabel (Python SDK parity)

Input parameters:

- `blist_id` (required)
- `dry_run` (boolean): Показать запрос без отправки на API

### `create_blist` (~98 tokens)

POST /api/v2/blist/create — WhiteLabel (Python SDK parity)

Input parameters:

- `check_stop_list` (boolean)
- `dry_run` (boolean): Показать запрос без отправки на API
- `name` (string, required)
- `web_hook_send_accepted_delivered` (boolean)
- `webhook_active` (boolean)
- `webhook_send_xml_failed_global` (boolean)
- `webhook_url` (string)

### `update_blist` (~112 tokens)

POST /api/v2/blist/update — WhiteLabel (Python SDK parity)

Input parameters:

- `active` (boolean)
- `blist_id` (required)
- `check_stop_list` (boolean)
- `dry_run` (boolean): Показать запрос без отправки на API
- `name` (string)
- `web_hook_send_accepted_delivered` (boolean)
- `webhook_active` (boolean)
- `webhook_send_xml_failed_global` (boolean)
- `webhook_url` (string)

### `get_ip_info` (~40 tokens)

GET /api/v2/ip — WhiteLabel (Python SDK parity)

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API

### `get_authkey` (~41 tokens)

GET /api/v2/authkey — WhiteLabel (Python SDK parity)

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API

### `create_authkey` (~67 tokens)

POST /api/v2/authkey/create — WhiteLabel (Python SDK parity)

Input parameters:

- `allowed_ips` (array)
- `blist_id` (integer, required)
- `check_ips` (boolean)
- `dry_run` (boolean): Показать запрос без отправки на API

### `api_get_v2_stop_list_export_token` (~48 tokens)

GET /api/v2/stop-list/export/:token — Скачать стоп-лист

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API

### `api_delete_v2_stop_list_export_token` (~49 tokens)

DELETE /api/v2/stop-list/export/:token — Удалить задачу

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API

### `api_post_v2_email_check` (~112 tokens)

POST /api/v2/email/check — Проверить верстку

Input parameters:

- `body`: Поле тела (пример: "HTML content")
- `checks`: Поле тела (пример: [{"category":"missingAltText"},{"category":"missingImageLink"},{"category":"missingCopyLink"},{"category":"overageImageWeight","limit":500},{"category":"unreachableWebLink"},{"cate…
- `dry_run` (boolean): Показать запрос без отправки на API

### `api_post_v2_emails_clean` (~62 tokens)

POST /api/v2/emails/clean/ — Стандартизация

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `email`: Поле тела (пример: "example@mail,ru")

### `api_post_v2_emails_activity` (~59 tokens)

POST /api/v2/emails/activity/ — Активность

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `email`: Поле тела (пример: "example@mail.ru")

### `api_get_v2_tickets` (~42 tokens)

GET /api/v2/tickets — Список обращений

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API

### `api_get_v2_tickets_id` (~47 tokens)

GET /api/v2/tickets/:id/ — Отдельное обращение

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API

### `api_post_v2_tickets` (~96 tokens)

POST /api/v2/tickets — Создать обращение

Input parameters:

- `client_email`: Поле тела (пример: "superivan@gmail.com")
- `client_name`: Поле тела (пример: "Иван")
- `dry_run` (boolean): Показать запрос без отправки на API
- `message`: Поле тела (пример: "")
- `subject`: Поле тела (пример: "")

### `api_post_v2_tickets_ip` (~117 tokens)

POST /api/v2/tickets — Создать обращение на выделенный IP

Input parameters:

- `cooment`: Поле тела (пример: "")
- `dry_run` (boolean): Показать запрос без отправки на API
- `region`: Поле тела (пример: "ru")
- `speed`: Поле тела (пример: "standard")
- `subject`: Поле тела (пример: "Заявка на выделенный IP")
- `type`: Поле тела (пример: "standard")

### `api_post_v2_tickets_id` (~101 tokens)

POST /api/v2/tickets/:id/ — Обновить обращение

Input parameters:

- `client_email`: Поле тела (пример: "superivan@gmail.com")
- `client_name`: Поле тела (пример: "Иван")
- `dry_run` (boolean): Показать запрос без отправки на API
- `message`: Поле тела (пример: "")
- `subject`: Поле тела (пример: "")

### `api_get_v1_get_smtp_issue_stat` (~90 tokens)

GET /api/v1/get_smtp_issue_stat — Сводный отчет за сутки v1

Input parameters:

- `date` (string): Query-параметр (пример: 2024-01-28)
- `dry_run` (boolean): Показать запрос без отправки на API
- `key` (string): Query-параметр (пример: XXX)

### `api_get_v1_get_fbl_report` (~89 tokens)

GET /api/v1/get_fbl_report — Отчёт о пожаловавшихся v1

Input parameters:

- `date` (string): Query-параметр (пример: 2023-04-15)
- `dry_run` (boolean): Показать запрос без отправки на API
- `key` (string): Query-параметр (пример: XXX)

### `api_get_v1_get_stop_report` (~87 tokens)

GET /api/v1/get_stop_report — Отчёт о недоставках v1

Input parameters:

- `date` (string): Query-параметр (пример: 2023-06-21)
- `dry_run` (boolean): Показать запрос без отправки на API
- `key` (string): Query-параметр (пример: XXX)

### `api_get_v1_package_report` (~81 tokens)

GET /api/v1/package_report — Недоставки пакетной отправки v1

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `id` (string): Query-параметр (пример: 12345)
- `key` (string): Query-параметр (пример: XXX)

### `api_get_v1_package_report_fbl` (~85 tokens)

GET /api/v1/package_report_fbl — Жалобы пакетной отправки v1

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `key` (string): Query-параметр (пример: XXX)
- `pack_id` (string): Query-параметр (пример: 12345)

### `api_get_v1_package_status` (~80 tokens)

GET /api/v1/package_status — Статус отправки v1

Input parameters:

- `dry_run` (boolean): Показать запрос без отправки на API
- `key` (string): Query-параметр (пример: XXX)
- `pack_id` (string): Query-параметр (пример: 12345)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/dkanster-samotpravil-mcp/samotpravil-mcp#diagnostics

## Score history

- 2026-08-03: 71
- 2026-08-02: 71
- 2026-08-01: 20
- 2026-07-31: 20
- 2026-07-30: 27
- 2026-07-28: 45
- 2026-07-27: 45

## Links

- npm package: https://www.npmjs.com/package/samotpravil-mcp
- Socket report: https://socket.dev/npm/package/samotpravil-mcp
- Changelog RSS feed: https://verifymcp.io/servers/dkanster-samotpravil-mcp/samotpravil-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/dkanster-samotpravil-mcp/samotpravil-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/dkanster-samotpravil-mcp/samotpravil-mcp
