Skip to main content
Glama

baselinker-mcp

CI License: MIT Node

MCP-сервер, который предоставляет весь BaseLinker API — заказы, счета, возвраты, курьеров, CRM, склады, товары — LLM-клиенту, такому как Claude Code, Claude Desktop или Cursor.

  • Полный. Все 179 документированных методов API, ни один не заглушен.

  • Только чтение, пока вы не скажете иначе. 92 метода записи остаются невидимыми, пока вы не включите их; при выключенной записи каждый инструмент сообщает readOnlyHint: true.

  • Локально или удалённо. stdio для клиента на вашей машине или Streamable HTTP с OAuth 2.1 (Keycloak) для общего эндпоинта в интернете.

"How many orders came in yesterday that aren't paid yet?"
"Which catalog products dropped below 5 in stock this week?"
"Pull the courier label for order 1234567 and tell me the tracking number."

Содержание

Related MCP server: TextQL MCP Server

Быстрый старт

Требования: Node.js 20 или новее, а также токен BaseLinker API из панели BaseLinker в разделе Аккаунт и прочее → Мой аккаунт → API.

git clone https://github.com/PiotrRaszkowski/baselinker-mcp.git
cd baselinker-mcp
npm install
npm run build
cp .env.example .env     # paste your token into BASELINKER_API_TOKEN

Токен также может быть взят прямо из окружения, которое имеет приоритет над .env. .env читается из корня пакета, поэтому сервер запускается корректно независимо от того, из какой директории его запускает ваш MCP-клиент.

Подключение клиента

Claude Code

claude mcp add baselinker -e BASELINKER_API_TOKEN=your-token -- node /path/to/baselinker-mcp/dist/index.js

Claude Desktop, Cursor или любая конфигурация mcpServers

{
  "mcpServers": {
    "baselinker": {
      "command": "node",
      "args": ["/path/to/baselinker-mcp/dist/index.js"],
      "env": { "BASELINKER_API_TOKEN": "your-token" }
    }
  }
}

Для общего эндпоинта, доступного из claude.ai, см. Удалённое развёртывание.

Инструменты

179 отдельных инструментов перегрузили бы контекст модели и её способность выбирать между ними, поэтому методы сгруппированы так, как их группирует сам BaseLinker: десять инструментов, по одному на категорию API. Каждый принимает имя method и объект parameters, а описание каждого инструмента перечисляет принимаемые им методы с их параметрами и подсказками по пагинации.

Количества ниже — это read + write; методы записи появляются только при BASELINKER_ALLOW_WRITES=true.

Tool

Scope

Methods

baselinker_orders

Заказы, статусы, платежи, журнал, корзины PickPack

15 + 22

baselinker_invoices

Счета, файлы счетов, серии нумерации, чеки

6 + 6

baselinker_returns

Возвраты заказов, статусы, причины, платежи, журнал

8 + 13

baselinker_courier

Курьеры, посылки, этикетки, протоколы, документы

11 + 4

baselinker_crm

Клиенты и статусы CRM

5 + 6

baselinker_inventory

Каталоги, склады, локации, категории, производители, поставщики, плательщики, теги

18 + 24

baselinker_products

Списки товаров, данные, остатки, цены, логи

5 + 5

baselinker_documents

Складские документы, заказы на закупку, отгрузки фулфилмента

10 + 9

baselinker_connect

Интеграции Base Connect и кредит контрагента

3 + 2

baselinker_external_storage

Внешние хранилища (магазины, оптовики)

6 + 1

87 + 92

Параметры проверяются по Zod-схеме для каждого метода до отправки, поэтому некорректный вызов возвращается как понятная ошибка, а не код ошибки BaseLinker. Неизвестные ключи передаются без изменений — BaseLinker добавляет параметры без предупреждения, и сервер не ломается, когда это происходит.

Методы записи

Отключены по умолчанию. Чтобы включить:

BASELINKER_ALLOW_WRITES=true

Пока отключены, методы записи не перечислены ни в одном enum method инструмента и не могут быть вызваны. Включение активирует все 92 сразу — создание, обновление и удаление заказов, товаров, остатков, цен, счетов, отгрузок, возвратов и складских документов. Некоторые из них удаляют записи; некоторые отправляют реальные курьерские отправки, которые стоят реальных денег. Нет раздельного включения по методам, поэтому включайте запись только для клиента, которому доверяете, и рассмотрите возможность запуска второго экземпляра только для чтения для всего остального.

Поведение, о котором стоит знать

Ограничение частоты запросов. BaseLinker разрешает 100 запросов в минуту. Клиентский ограничитель со скользящим окном обеспечивает это — лишние вызовы ждут своей очереди, а не падают.

Пагинация. Ответы списков ограничены (обычно 100 позиций для заказов, счетов и возвратов; 1000 для товаров каталога). Описание каждого метода содержит конкретную подсказку, например getOrders требует date_confirmed_from, установленный в date_confirmed последнего возвращённого заказа плюс одна секунда, а getInventoryProductsList принимает page с отсчётом от 1.

Скачивание файлов. getLabel, getProtocol, getCourierDocument, getInvoiceFile, getInventoryDocumentFile и getInventoryFulfillmentDeliveryLabels возвращают файл как встроенный ресурс MCP с реальным MIME-типом. Передайте дополнительный параметр save_to_path — обрабатывается локально, никогда не отправляется на BaseLinker — чтобы вместо этого декодировать его на диск и получить { saved_to, extension, bytes }. Это имеет смысл только через stdio, где сервер работает на вашей собственной машине; через HTTP это отклоняется с поясняющей ошибкой.

Удалённое развёртывание (HTTP + OAuth)

С --transport http сервер работает на Streamable HTTP и действует как OAuth 2.0 Resource Server (RFC 9728): он публикует метаданные защищённого ресурса, отвечает на неаутентифицированные вызовы 401 с WWW-Authenticate-запросом и проверяет каждый токен доступа как RS256 JWT против JWKS реалма Keycloak. Клиенты обнаруживают реалм из этих метаданных и регистрируются через Dynamic Client Registration, поэтому ни идентификатор клиента, ни секрет не настраиваются ни на одной стороне.

node dist/index.js --transport http --host 0.0.0.0 --port 8000 --path /mcp

Path

Auth

Purpose

POST /mcp

Bearer

MCP Streamable HTTP, без состояния — новый сервер на каждый запрос

GET / DELETE /mcp

Bearer

405; режим без состояния не имеет потоков, инициируемых сервером

/.well-known/oauth-protected-resource[/mcp]

public

метаданные ресурса RFC 9728

/healthz

public

Проверка живости

HTTP-транспорт отказывается запускаться без реалма аутентификации, если вы явно не откажетесь с BASELINKER_MCP_AUTH_DISABLED=true. Это намеренно: при включённой записи неаутентифицированный эндпоинт отдаёт интернету ваш аккаунт BaseLinker.

deploy/ содержит полное руководство — настройка реалма Keycloak, защищённый сервис Compose с метками Traefik, фрагменты обратного прокси для Caddy и nginx, команды проверки и модель угроз. Краткая версия:

docker build -t baselinker-mcp:0.2.0 .
docker run -d --name baselinker-mcp -p 8000:8000 \
  -e BASELINKER_API_TOKEN=your-token \
  -e BASELINKER_MCP_AUTH_REALM_URL=https://keycloak.example.com/realms/myrealm \
  -e BASELINKER_MCP_AUTH_BASE_URL=https://mcp.example.com \
  baselinker-mcp:0.2.0

Затем подключите к нему клиента:

claude mcp add --transport http baselinker https://mcp.example.com/mcp

В claude.ai это Settings → Connectors → Add custom connector, URL https://mcp.example.com/mcp, с пустыми Client ID и Client Secret.

Одна вещь, которую стоит прояснить перед публикацией: токен BaseLinker общий. Каждый, кто может войти в реалм, работает с одним и тем же аккаунтом BaseLinker. Остальные границы — см. SECURITY.md.

Справочник по конфигурации

Всё настраивается через переменные окружения; .env в корне пакета загружается автоматически.

Всегда

Variable

Default

Purpose

BASELINKER_API_TOKEN

Обязательно. Токен BaseLinker API

BASELINKER_ALLOW_WRITES

false

true открывает все 92 метода записи

Транспорт

CLI-флаги имеют приоритет над этими.

Variable

Flag

Default

Purpose

BASELINKER_MCP_TRANSPORT

--transport

stdio

stdio или http

BASELINKER_MCP_HOST

--host

0.0.0.0

Адрес привязки, только HTTP

BASELINKER_MCP_PORT

--port

8000

Порт привязки, только HTTP

BASELINKER_MCP_PATH

--path

/mcp

Путь эндпоинта, только HTTP

OAuth — требуется при транспорте http

Variable

Default

Purpose

BASELINKER_MCP_AUTH_REALM_URL

Реалм Keycloak, выдающий токены, например https://keycloak.example.com/realms/myrealm

BASELINKER_MCP_AUTH_BASE_URL

Публичный URL этого сервера; вместе с путём образует идентификатор ресурса OAuth

BASELINKER_MCP_AUTH_AUDIENCE

unset

Аудитория(и), которую должен нести токен. Требуется маппер аудитории в Keycloak; unset пропускает проверку

BASELINKER_MCP_AUTH_REQUIRED_SCOPES

openid

Области, которые должен нести каждый токен. openid гарантирует claim sub

BASELINKER_MCP_AUTH_DISABLED

false

true запускает HTTP без аутентификации. Никогда на публичном адресе

BASELINKER_MCP_ALLOWED_HOSTS

unset

Защита от DNS-rebinding: принимаемые заголовки Host. Избыточно за прокси с маршрутизацией по хостам

BASELINKER_MCP_ALLOWED_ORIGINS

unset

Защита от DNS-rebinding: принимаемые заголовки Origin

Списки принимают запятые или пробелы.

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

Симптом

Причина

Missing BASELINKER_API_TOKEN

Нет токена в окружении или в .env в корне пакета

BaseLinker API error [ERROR_AUTH_TOKEN]

Токен отклонён BaseLinker — перегенерируйте его в панели

Метод записи «unknown»

BASELINKER_ALLOW_WRITES не true

Вызовы замедляются под нагрузкой

Ограничитель частоты выдерживает вас до 100 запросов/минуту. Работает как задумано

HTTP transport requires BASELINKER_MCP_AUTH_REALM_URL

Задайте реалм и базовый URL, либо откажитесь с BASELINKER_MCP_AUTH_DISABLED

401 no applicable key found in the JSON Web Key Set

Токен не был подписан настроенным реалмом

403 insufficient_scope

Токену не хватает openid

Больше случаев, специфичных для OAuth, — в deploy/README.md.

Разработка

npm run dev         # run from sources (tsx), stdio transport
npm run start:http  # built server, HTTP transport
npm test            # unit tests — fully offline, no live API calls
npm run check       # format check + typecheck + tests, what CI runs
npm run smoke       # manual smoke test against the live API (uses .env)
npm run inspect     # MCP Inspector against the built server

CONTRIBUTING.md описывает, как устроен реестр инструментов и на что обращать внимание при добавлении метода.

Лицензия

MIT. Не аффилирован с BaseLinker и не одобрен им.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Manage your Savanto store from your AI: catalog, content, prompts, and analytics, by chat.

  • Manage your Jumpseller store with AI. Products, orders, customers, and more.

  • Stop re-explaining yourself to Agents. Give it the right context, right when needed.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/PiotrRaszkowski/baselinker-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server