Package Exports
- @openaisdk/billing-mcp
- @openaisdk/billing-mcp/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@openaisdk/billing-mcp) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
@openaisdk/billing-mcp (billing-catalog MCP)
MCP‑сервер по stdio для работы с каталогом Billing Platform через REST API: проекты, планы, цены, фичи и привязки фич к планам (plan-features). Подходит для Cursor, Claude Desktop и любых клиентов с поддержкой MCP.
Пакет в репозитории: packages/billing-catalog-mcp
Имя на npm: @openaisdk/billing-mcp
Бинарь: billing-catalog-mcp
Контекст и цель
В multi-tenant billing у tenant есть один или несколько projects. У каждого project свой каталог: plans, prices, features, entitlements (через подписки). Этот MCP не заменяет Admin UI и не обслуживает checkout — он даёт агентам и разработчикам программный доступ к каталогу того project, к которому привязан integration key.
Зачем использовать MCP: настройка демо-каталога, сценарии в IDE с ИИ, скриптоподобные операции без написания отдельного HTTP-клиента.
Аудитория
- Разработчики платформы и интеграторы, у которых уже есть доступ к Billing API.
- Команды, которые подключают MCP в Cursor/другом клиенте для работы с планами и ценами.
Термины
| Термин | Значение |
|---|---|
| Tenant | Изолированный арендатор платформы; определяется на стороне API по ключу. |
| Project | Продукт/линейка внутри tenant; у него свой каталог. projectId — UUID. |
| Plan | Тарифный план (код уникален в рамках project). |
| Price | Цена для плана (интервал month / year, сумма в минорных единицах). |
| Feature | Возможность или лимит (boolean / limit). |
| Plan-feature | Привязка фичи к плану с флагом и/или лимитом. |
| Project-scoped API key | Ключ M2M из Admin UI → Интеграция; даёт доступ только к данным своего project (см. ADR-010). |
Scope: что делает сервер
Реализовано в коде:
- Чтение списка projects tenant’а (в рамках прав ключа).
- CRUD plans и prices для выбранного
projectId. - Список/создание features, список/создание plan-features.
- Вспомогательные инструменты для локальной разработки и пилотов: сброс каталога проекта (через dev-эндпоинт API), сид MegaRetro, идемпотентное обновление фич/лимитов MegaRetro.
Не входит в scope пакета:
- Подписки, инвойсы, customer accounts, checkout, webhooks (для этого — Billing API/SDK/Admin UI).
- Обход аутентификации без ключа: модель только Bearer project-scoped key (см. ниже).
Предпосылки
- Развёрнутый Billing API (локально или удалённо).
- Project-scoped integration key (
BILLING_API_KEY): создаётся в Admin UI → Интеграция или выдаётся послеpnpm db:seedв консоли (локальная разработка). - UUID project — в аргументах инструментов (
projectId) или в переменнойBILLING_PROJECT_ID(тот же договор, что у@openaisdk/billing-sdk).
Auth (ADR-010): Authorization: Bearer <BILLING_API_KEY>. Если задан BILLING_HTTP_X_TENANT_ID, в запросы добавляется заголовок x-tenant-id (как в OpenAPI/SDK). Tenant/project по-прежнему резолвятся из ключа на стороне API.
Установка
Из npm (потребители вне монорепозитория)
pnpm add -g @openaisdk/billing-mcp@latest
# или без глобальной установки — см. npx нижеИз монорепозитория saas-billing
pnpm install
pnpm --filter @openaisdk/billing-mcp run buildЗапуск собранного сервера:
node packages/billing-catalog-mcp/dist/index.jsЛокальная отладка без сборки:
pnpm --filter @openaisdk/billing-mcp run devПеременные окружения
Сервер подгружает .env из текущей рабочей директории процесса (dotenv/config). В Cursor обычно задают env в конфиге MCP или cwd на корень проекта, где лежит .env.
| Переменная | Обязательно | Описание |
|---|---|---|
BILLING_API_KEY |
Да | Project-scoped integration key (Bearer). Без него процесс завершится при старте. |
BILLING_API_URL |
Нет | Base URL Billing API без завершающего /. По умолчанию http://127.0.0.1:4001. |
BILLING_PROJECT_ID |
Нет | UUID проекта: подставляется, если в аргументе инструмента не передан projectId. |
BILLING_HTTP_X_TENANT_ID |
Нет | UUID tenant → заголовок x-tenant-id (согласовано с SDK / OpenAPI). |
Устаревший алиас: BILLING_API_BASE_URL (используется только если BILLING_API_URL пуст).
Безопасность: не коммитьте ключи. Для CI используйте секреты окружения.
Источник истины по именам — .env.example в каталоге пакета и @openaisdk/billing-sdk (те же четыре переменные).
Подключение MCP-клиента (пример Cursor)
Файл настроек: .cursor/mcp.json (или аналог в вашем клиенте).
Вариант A: npx (после публикации пакета)
{
"mcpServers": {
"billing-catalog": {
"command": "npx",
"args": ["-y", "@openaisdk/billing-mcp@latest"],
"env": {
"BILLING_API_URL": "http://127.0.0.1:4001",
"BILLING_API_KEY": "<project-scoped-key>",
"BILLING_PROJECT_ID": "<project-uuid>",
"BILLING_HTTP_X_TENANT_ID": "<tenant-uuid>"
}
}
}
}Вариант B: сборка из клонированного репозитория
{
"mcpServers": {
"billing-catalog": {
"command": "node",
"args": ["packages/billing-catalog-mcp/dist/index.js"],
"cwd": "${workspaceFolder}",
"env": {
"BILLING_API_URL": "http://127.0.0.1:4001",
"BILLING_API_KEY": "<из вывода pnpm db:seed или Admin UI>",
"BILLING_PROJECT_ID": "<из seed / Admin UI>",
"BILLING_HTTP_X_TENANT_ID": "<из seed / Admin UI>"
}
}
}
}После изменения конфигурации перезапустите MCP в клиенте (в Cursor: Settings → MCP → Restart).
Локальный быстрый старт credentials: pnpm db:seed — в консоли появятся в том числе project UUID и API key; подставьте их в env и используйте UUID как projectId в инструментах.
Дополнительно по нескольким MCP-серверам репозитория: docs/mcp-integration-guide.md.
Инструменты (tools)
Ответы приходят как JSON-текст в content MCP. При ошибке HTTP или валидации клиент получит сообщение с префиксом Error: ....
Проекты
| Tool | Назначение |
|---|---|
billing_list_projects |
GET /v1/projects — проекты tenant’а, доступные ключу. Аргументов нет. |
Планы
| Tool | Назначение |
|---|---|
billing_list_plans |
Список планов. Нужен projectId. |
billing_get_plan |
План по ID: projectId, planId. |
billing_create_plan |
Создание: projectId, code, name; опционально description, isPublic, isActive, sortOrder. |
billing_update_plan |
PATCH: projectId, planId; поля плана кроме code. |
Цены
| Tool | Назначение |
|---|---|
billing_list_prices |
Список цен проекта. |
billing_get_price |
Цена по ID: projectId, priceId. |
billing_create_price |
Создание: projectId, code, amountMinor, interval (month | year). Нужен planId или planCode. Опционально: currency (по умолчанию RUB), intervalCount, trialDays, isActive. |
billing_update_price |
PATCH: projectId, priceId. Поля: code, amountMinor, currency, interval, intervalCount, trialDays, isActive. План сменить нельзя. |
Фичи и plan-features
| Tool | Назначение |
|---|---|
billing_list_features |
Список фич проекта. |
billing_create_feature |
Создать фичу: projectId, code, name, kind (boolean | limit). |
billing_list_plan_features |
Привязки фич к плану. Нужны projectId и planId или planCode. |
billing_create_plan_feature |
Привязать фичу к плану: projectId, featureId, плюс planId или planCode. Для лимитов: limitValue (для безлимита — null в JSON аргумента); для boolean — enabled. |
Разработка и сиды MegaRetro
| Tool | Назначение |
|---|---|
billing_reset_project_catalog |
POST /v1/dev/projects/:projectId/reset-catalog — жёсткий сброс каталога и связанных billing-сущностей проекта. На стороне API действует DevOnlyGuard: в production недоступно. Не удаляет customer accounts и сам project. |
billing_reset_and_seed_megaretro_catalog |
Сброс проекта (как выше), затем полный сид каталога MegaRetro (планы, цены, trial, фичи, add-on и т.д. по внутреннему канону репозитория). |
billing_upsert_megaretro_features_and_limits |
Без сброса: идемпотентно создаёт недостающие фичи и привязки для планов free/team/business/enterprise. |
Инструменты с «MegaRetro» в названии заточены под пилотный каталог первого consumer’а; для других продуктов используйте обычные CRUD-инструменты.
Сводка планов, цен, фич и привязок из сида (Markdown): docs/megaretro-catalog-seed.md.
Ошибки и ограничения
- Нет ключа: при старте — ошибка с текстом про
BILLING_API_KEY. - HTTP-ошибки API: возвращаются как
Error: HTTP <status>: <body>. - Dev reset: эндпоинт
/v1/dev/...отключён в production-сборке API; не рассчитывайте на сброс в бою. - Суммы:
amountMinor— в минорных единицах (копейки для RUB). planCode: резолвится через список планов проекта; при опечатке будет ошибка «план не найден».
Верификация (чеклист)
- Billing API доступен по
BILLING_API_URL(или дефолт localhost). -
BILLING_API_KEY— действующий project-scoped key; при необходимости заданыBILLING_PROJECT_ID/BILLING_HTTP_X_TENANT_ID. - Вызов
billing_list_projectsвозвращает JSON со списком проектов. - Вызов
billing_list_plansс правильнымprojectIdвозвращает планы (или пустой массив). - После изменения
mcp.jsonMCP перезапущен.
Ссылки
- MCP Integration Guide — обзор MCP в репозитории и auth после ADR-010.
- ADR-010: Project-scoped Integration Auth.
- Consumer integration guide — M2M-интеграция приложений (шире, чем MCP).
- Публичные контракты API: docs/api/public-api-v1.md, docs/api/admin-api.md (актуальные пути уточняйте по OpenAPI/Swagger вашего стенда).
Лицензия
MIT (см. package.json).