baselinker-mcp
baselinker-mcp
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.jsClaude 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 |
| Заказы, статусы, платежи, журнал, корзины PickPack | 15 + 22 |
| Счета, файлы счетов, серии нумерации, чеки | 6 + 6 |
| Возвраты заказов, статусы, причины, платежи, журнал | 8 + 13 |
| Курьеры, посылки, этикетки, протоколы, документы | 11 + 4 |
| Клиенты и статусы CRM | 5 + 6 |
| Каталоги, склады, локации, категории, производители, поставщики, плательщики, теги | 18 + 24 |
| Списки товаров, данные, остатки, цены, логи | 5 + 5 |
| Складские документы, заказы на закупку, отгрузки фулфилмента | 10 + 9 |
| Интеграции Base Connect и кредит контрагента | 3 + 2 |
| Внешние хранилища (магазины, оптовики) | 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 /mcpPath | Auth | Purpose |
| Bearer | MCP Streamable HTTP, без состояния — новый сервер на каждый запрос |
| Bearer |
|
| public | метаданные ресурса RFC 9728 |
| 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 |
|
|
|
Транспорт
CLI-флаги имеют приоритет над этими.
Variable | Flag | Default | Purpose |
|
|
|
|
|
|
| Адрес привязки, только HTTP |
|
|
| Порт привязки, только HTTP |
|
|
| Путь эндпоинта, только HTTP |
OAuth — требуется при транспорте http
Variable | Default | Purpose |
| — | Реалм Keycloak, выдающий токены, например |
| — | Публичный URL этого сервера; вместе с путём образует идентификатор ресурса OAuth |
| unset | Аудитория(и), которую должен нести токен. Требуется маппер аудитории в Keycloak; unset пропускает проверку |
|
| Области, которые должен нести каждый токен. |
|
|
|
| unset | Защита от DNS-rebinding: принимаемые заголовки |
| unset | Защита от DNS-rebinding: принимаемые заголовки |
Списки принимают запятые или пробелы.
Устранение неполадок
Симптом | Причина |
| Нет токена в окружении или в |
| Токен отклонён BaseLinker — перегенерируйте его в панели |
Метод записи «unknown» |
|
Вызовы замедляются под нагрузкой | Ограничитель частоты выдерживает вас до 100 запросов/минуту. Работает как задумано |
| Задайте реалм и базовый URL, либо откажитесь с |
| Токен не был подписан настроенным реалмом |
| Токену не хватает |
Больше случаев, специфичных для 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 serverCONTRIBUTING.md описывает, как устроен реестр инструментов и на что обращать внимание при добавлении метода.
Лицензия
MIT. Не аффилирован с BaseLinker и не одобрен им.
This server cannot be installed
Maintenance
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
- FlicenseNot gradedqualityDmaintenanceEnables interaction with the Hostinger Ecommerce API to retrieve product information and update product descriptions through the Model Context Protocol.
- AlicenseNot gradedqualityCmaintenanceTranslates natural language to SQL/GraphQL queries and executes them, enabling AI agents to interact with databases through the Model Context Protocol.1Apache 2.0
- AlicenseBqualityDmaintenanceEnables natural language control of Teamleader Focus CRM, invoicing, and project management through the Model Context Protocol.4253MIT
- AlicenseAqualityDmaintenanceEnables interaction with FastSpring e-commerce platform for managing orders, subscriptions, and accounts through natural language using the Model Context Protocol.119MIT
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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