hw-connector API

Model Context Protocol · hw-cloud

MCP облака

ИИ-помощник — Claude, Cursor и другие MCP-клиенты — смотрит и мониторит рабочие места аккаунта, разбирает тревоги и управляет агентами на кассах: тот же API облака, тот же ключ, ответы на обычном языке.

Адрес: https://cloud.hw-connector.ru/mcpВход: OAuth через кабинет или ключ Bearer hwk_…

Что можно спросить

  • «Какие кассы сейчас не на связи и давно ли?»
  • «Где скоро закончится ФН? Отсортируй по дням.»
  • «Что случилось на кассе в фойе за сегодня?»
  • «Сколько чеков пробила каждая точка в этом месяце?»
  • «Сделай X-отчёт на кассе 42» — помощник вызовет call_agent, клиент попросит подтверждение.

Подключение

Достаточно адреса https://cloud.hw-connector.ru/mcp: клиент сам откроет вход в кабинет hw-connector.ru (OAuth 2.1), вы выберете права — только чтение или полный доступ (команды кассам, чеки) — и разрешите. Отключить приложение — кабинет → «Облако» → «Подключённые приложения». Клиентам без входа OAuth — ключ API аккаунта hwk_… в заголовке (лучше «только чтение»).

claude.ai и Claude Desktop

Настройки → Коннекторы → «Добавить свой коннектор» → адрес https://cloud.hw-connector.ru/mcp → «Подключить»: откроется вход в кабинет. Одинаково в браузере и в Claude Desktop.

Старый способ для Claude Desktop — мост mcp-remote с ключом в claude_desktop_config.json:

claude_desktop_config.json
{
  "mcpServers": {
    "hw-cloud": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://cloud.hw-connector.ru/mcp",
        "--header",
        "Authorization: Bearer hwk_…"
      ]
    }
  }
}

Claude Code

shell
claude mcp add --transport http hw-cloud https://cloud.hw-connector.ru/mcp
# затем в Claude Code: /mcp → hw-cloud → Authenticate (вход в кабинете)

# или ключом API, без входа:
claude mcp add --transport http hw-cloud https://cloud.hw-connector.ru/mcp --header "Authorization: Bearer hwk_…"

Cursor

Адрес без ключа — Cursor предложит войти; с ключом — добавьте "headers": {"Authorization": "Bearer hwk_…"}.

.cursor/mcp.json
{
  "mcpServers": {
    "hw-cloud": {
      "url": "https://cloud.hw-connector.ru/mcp"
    }
  }
}

VS Code

.vscode/mcp.json
{
  "servers": {
    "hw-cloud": {
      "type": "http",
      "url": "https://cloud.hw-connector.ru/mcp",
      "headers": {
        "Authorization": "Bearer hwk_…"
      }
    }
  }
}

Другие клиенты и проверка

Любой MCP-клиент со Streamable HTTP: с входом OAuth 2.1 (метаданные — https://cloud.hw-connector.ru/.well-known/oauth-authorization-server, регистрация клиента сама — RFC 7591, PKCE S256) или с заголовком ключа (можно и X-Api-Key). Сервер без состояния: POST с JSON-RPC, ответ — JSON. Проверка без клиента:

curl
curl https://cloud.hw-connector.ru/mcp -H 'Authorization: Bearer hwk_…' -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_summary","arguments":{}}}'

Инструменты

Тонкие обёртки над API облака: те же проверки аккаунта, ошибки и журнал. Чтение помечено readOnlyHint; call_agent и create_receipt — destructiveHint: клиент спросит подтверждение. Ошибка — результат с isError: true и кодом облака (DEVICE_NOT_FOUND, NOT_CONNECTED, DEVICE_DISABLED…).

Сводка аккаунта#

get_summary
Только чтение

Состояние парка одним запросом: сколько касс всего, на связи, не на связи и выключено; версии агента; открытые тревоги по кодам и сколько критичных; запросы к агентам за сутки и сколько неудачных. Начните с него.

Без аргументов.

Кассы аккаунта#

list_devices
Только чтение

Список касс (рабочих мест с HW agent): номер, название от агента и своё (label), версия агента, на связи ли сейчас, когда была на связи, выключена ли, сколько открытых тревог.

Аргументы
  • onlineboolean
    true — только на связи, false — только не на связи
  • qstring
    Часть названия, своего названия или номера установки
  • limitinteger
    Сколько вернуть (1–1000, по умолчанию 100)
  • offsetinteger
    Сколько пропустить

Карточка кассы#

get_device
Только чтение

Всё о кассе: на связи ли, версия агента, ОС, последние значения метрик за 7 дней (смена, ФН, ОФД, принтеры), открытые тревоги и последние события.

Аргументы
  • device_idintegerобязательный
    Номер кассы из list_devices
  • eventsinteger
    Сколько последних событий (1–500, по умолчанию 20)

Переименовать или выключить кассу#

update_device
Меняет запись в облаке

Своё название кассы (агент его не затирает; пустая строка — снова как у агента) и выключатель: выключенной кассе облако не передаёт команды, запросы к агенту и чеки. Меняет только запись в облаке, не кассу.

Аргументы
  • device_idintegerобязательный
    Номер кассы
  • labelstring
    Своё название
  • disabledboolean
    true — выключить, false — включить

Тревоги касс#

list_alerts
Только чтение

Тревоги: FN_EXPIRING (ФН скоро закончится), OFD_BACKLOG (документы не уходят в ОФД), SHIFT_EXPIRED (смена больше 24 ч), REGISTER_UNAVAILABLE (ККТ не отвечает), DEVICE_OFFLINE (касса пропала). Открываются и закрываются сами; по умолчанию — только открытые.

Аргументы
  • openboolean
    true — только открытые (по умолчанию), false — и закрытые
  • device_idinteger
    Только эта касса
  • codestring
    Только этот код
  • severitystring
    WARNING или CRITICAL

События касс#

list_events
Только чтение

События касс аккаунта, свежие сверху: operation.failed (неудачная операция с кодом ошибки), printer (состояние принтера), power (питание), register.unavailable (ККТ не отвечает).

Аргументы
  • device_idinteger
    Только эта касса
  • typestring
    Тип события
  • sincestring
    Не раньше этого времени, ISO 8601
  • limitinteger
    Сколько вернуть (1–1000, по умолчанию 50)
  • offsetinteger
    Сколько пропустить

Метрика по кассам#

get_latest_metric
Только чтение

Последнее значение одной метрики на каждой кассе за 7 дней: fn.days_left (дней до конца ФН), ofd.not_sent (не передано в ОФД), ofd.oldest_hours, shift.open, shift.expired, register.ok, agent.up, devices.active.

Аргументы
  • namestringобязательный
    Имя метрики, например fn.days_left
  • device_idinteger
    Только эта касса

Журнал запросов к агентам#

list_requests
Только чтение

Запросы к API агентов через облако (call_agent, прокси, команды): касса, метод, путь, код ответа, ошибка облака (NOT_CONNECTED, TIMEOUT…), время. Тела не хранятся.

Аргументы
  • device_idinteger
    Только эта касса
  • failedboolean
    Только неудачные
  • limitinteger
    Сколько вернуть (по умолчанию 50)
  • offsetinteger
    Сколько пропустить

Запрос к API агента на кассе#

call_agent
Операция на кассе

Выполнить запрос к API HW agent на кассе (как локально на http://localhost:7790): например GET /api/v1/devices — устройства, GET /api/v1/registers/1/shift — смена, POST /api/v1/registers/1/reports/x — X-отчёт. Операции (POST) реально выполняются на кассе: печать, чеки, оплата — только по прямой просьбе пользователя и с idempotency_key (повтор с тем же ключом не выполнит операцию дважды). Настройка устройств (/api/v1/setup) недоступна. Описание API агента — https://hw-connector.ru/docs/api/agent/

Аргументы
  • device_idintegerобязательный
    Номер кассы
  • methodstringобязательный
    Метод HTTP
    значения: GET POST PUT DELETE PATCH
  • pathstringобязательный
    Путь в API агента со строкой запроса, /api/v1/...
  • bodyobject
    Тело JSON
  • idempotency_keystring
    Ключ идемпотентности операции

Пробить чек через облако#

create_receipt
Операция на кассе

Чек на кассе аккаунта с очередью: касса не на связи — чек ждёт и уйдёт, когда она появится. receipt — как в API агента (type, items, payments…). Тот же idempotency_key вернёт тот же чек, второй раз не пробьёт. Настоящий фискальный чек — только по прямой просьбе пользователя.

Аргументы
  • idempotency_keystringобязательный
    Ключ идемпотентности, например номер заказа
  • receiptobjectобязательный
    Чек: type, items, payments…
  • device_idinteger
    Касса; нет — любая на связи
  • registerinteger
    Номер ККТ на кассе (по умолчанию 1)
  • callback_urlstring
    Куда прислать итог (вебхук)

Чек#

get_receipt
Только чтение

Чек, отправленный через облако: статус (QUEUED, SENDING, DONE, FAILED, UNKNOWN, EXPIRED), ФД, ФП, ссылка на чек, ошибка.

Аргументы
  • receipt_idintegerобязательный
    Номер чека

Последние чеки#

list_receipts
Только чтение

Чеки через облако, свежие сверху; idempotency_key — найти чек по своему ключу.

Аргументы
  • device_idinteger
    Только эта касса
  • idempotency_keystring
    Ключ идемпотентности
  • limitinteger
    Сколько (по умолчанию 20)

Учёт чеков за месяц#

receipts_stats
Только чтение

Сколько чеков и на какую сумму пробила каждая касса за месяц, тариф и пробный лимит.

Аргументы
  • monthstring
    Месяц ГГГГ-ММ; нет — текущий

Промпты

  • check_fleet — Проверить парк касс: Сводка, тревоги и что требует внимания — без операций на кассах

Безопасность

  • Права «только чтение» (вход или ключ) — помощнику видны только инструменты чтения: call_agent, create_receipt и update_device недоступны (KEY_READ_ONLY). Для наблюдения за парком этого достаточно.
  • Полный доступ — ко всем кассам аккаунта. call_agent и create_receipt выполняют настоящие операции: печать, фискальный чек, оплата на терминале. Не включайте в клиенте автоподтверждение этих инструментов.
  • Настройку устройств (/api/v1/setup) облако не передаёт. Кассу можно выключить (update_device / PATCH /api/v1/devices/{id}) — помощник и интеграции не смогут ей ничего отправить; на самой кассе команды из облака выключаются в настройках агента.
  • Каждый запрос к агентам — в журнале (list_requests, GET /api/v1/requests). Лимит — 600 вызовов в минуту на аккаунт. Ключ отзывается, приложение отключается в кабинете сразу.
  • Вход OAuth: токен доступа живёт час, токен обновления — 30 дней и меняется при каждом обновлении; повтор старого токена или кода отключает приложение. В облаке хранятся только хеши токенов.