ustore-backoffice-mcp
ustore-backoffice-mcp
MCP-сервер для REST API XMPie uStore BackOffice по адресу
https://produproduce.mysite.com/ustorebackofficerestapi.
Статус: рабочий, проверен от начала до конца на живом API. Спецификация загружается (52 пути / 63 операции в 15 группах тегов), вход выполняется успешно, и ustore_call_endpoint GET /v1/admin/stores возвращает HTTP 200. Защита от записи корректно отклоняет DELETE.
Дизайн
Сервер не зашивает эндпоинты в код. При первом использовании он загружает собственный документ OpenAPI 3.0 API и предоставляет на его основе пять инструментов:
Инструмент | Назначение |
| Группы контроллеров + количество операций — ознакомительный вызов |
| Поиск/фильтрация операций по тегу, методу или тексту |
| Полный контракт: параметры, тело запроса, форма ответа |
| Выполнение запроса; аутентификация на стороне сервера |
| Диагностика: базовый URL, источник спецификации, режим аутентификации, политика записи |
Это та же схема, что и у MCP-серверов MSSQL (list_databases → list_tables → describe_table → query), и она сохраняет количество инструментов небольшим независимо от того, сколько эндпоинтов предоставляет API. Она также переживает обновления uStore — новые эндпоинты появляются автоматически при следующем обновлении спецификации.
Запись отключена по умолчанию. Методы, отличные от GET, отклоняются, пока на серверном процессе не установлено USTORE_ALLOW_WRITES=true.
Related MCP server: mcp-db-server
Установка
Должен работать на хосте с доступом к внутренней сети produproduce.
cd /opt/mcp/ustore-backoffice-mcp
npm install
cp .env.example .env
$EDITOR .env # credentials — the base URL and spec URL are preset
npm run probe # optional: re-confirm the spec URL and auth handshakeРукопожатие аутентификации подтверждено на живом API и уже используется по умолчанию:
POST {base}/v1/admin/auth/login {"email": "...", "password": "..."}
-> 200 {"Token": "..."}
Authorization: uStoreBackoffice <token> # on every subsequent requestОбратите внимание: в теле входа используется email, а не username, а поле токена — с заглавной Token. Схема буквально uStoreBackoffice — API отклоняет любой другой префикс с {"Errors":[{"Message":"Invalid security token."}]}.
URL спецификации также подтверждён и задан заранее:
USTORE_SPEC_URL=https://produproduce.mysite.com/ustorebackofficerestapi/ustore-oas3Его необходимо задать явно — этот деплоймент отдаёт OAS3 по адресу /ustore-oas3, а пути, которые loadSpec() в противном случае опрашивала бы, все возвращают 404.
Затем:
npm run http # or: npm run stdioПроверка:
$ curl -s localhost:8931/healthz
{"ok":true,"target":"https://produproduce.mysite.com/ustorebackofficerestapi"}/healthz доказывает только то, что процесс запущен. Чтобы подтвердить, что часть API работает, вызовите ustore_server_info из клиента — он сообщает выбранную схему аутентификации и количество операций и громко падает, если вход не работает.
Развёртывание
pm2
pm2 start index.js --name ustore-mcp --node-args="--enable-source-maps"
pm2 savesystemd
[Unit]
Description=uStore BackOffice MCP server
After=network-online.target
[Service]
Type=simple
User=tc
WorkingDirectory=/opt/mcp/ustore-backoffice-mcp
EnvironmentFile=/opt/mcp/ustore-backoffice-mcp/.env
ExecStart=/usr/bin/node index.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.targetДержите .env с правами chmod 600 — в нём хранятся учётные данные uStore BackOffice, которые являются административными.
HAProxy
Для SSE требуется отключить буферизацию и установить длинный тайм-аут сервера, иначе сеансы обрываются:
backend be_mcp_ustore
mode http
option http-server-close
timeout server 3600s
timeout tunnel 3600s
http-request set-header X-Accel-Buffering no
server ustore1 127.0.0.1:8931 checkОбслуживаются оба транспорта: POST /mcp (Streamable HTTP, текущая спецификация) и GET /sse + POST /messages (унаследованный SSE, совместимый с существующим стеком). Установите MCP_BEARER_TOKEN, если хотите, чтобы сам сервер проверял общий секрет, а не полагался только на ACL HAProxy.
Конфигурация клиента
Локальный stdio (Claude Desktop на той же машине):
{
"mcpServers": {
"ustore-backoffice": {
"command": "node",
"args": ["/opt/mcp/ustore-backoffice-mcp/index.js"],
"env": { "MCP_TRANSPORT": "stdio" }
}
}
}Записывайте файл конфигурации в UTF-8 без BOM.
В этом блоке env учётные данные не нужны: сервер читает .env, который находится рядом с index.js. Claude Desktop запускает MCP-серверы с cwd=/ и почти пустым окружением, поэтому config.js ищет .env относительно собственного расположения файла, а не рабочего каталога. Всё, что вы действительно поместите в env, по-прежнему имеет приоритет — реальные переменные окружения имеют приоритет над файлом.
После редактирования конфигурации полностью завершите Claude Desktop (Cmd-Q на macOS, а не просто закройте окно), чтобы процесс сервера был перезапущен.
Примечания и подводные камни
Область действия учётных данных. Учётные записи BackOffice API обычно имеют полные права администратора. Если uStore поддерживает ограниченную роль оператора, используйте её — защита от записи в этом сервере защищает от случайностей, а не от скомпрометированного токена.
USTORE_ALLOW_PATHS— это список разрешений через регулярное выражение. Его установка сужает сервер до контроллеров, которые вам действительно нужны, что является более сильным контролем, чем один только флаг записи.Усечение ответа по умолчанию составляет 60 тысяч символов. Если конечная точка списка переполняется, используйте её параметры постраничной навигации, а не увеличивайте лимит — в этом API они называются
pageNumber(с 1) иpageSize(по умолчанию 50).Кэширование спецификации обновляется каждые 15 минут. После обновления uStore вызовите
ustore_server_infoсrefreshSpec: true, чтобы сразу получить изменения.Сбои аутентификации, которые выглядят как сбои соединения. Сервер запускается и перечисляет свои инструменты, даже если учётные данные отсутствуют — вход происходит только при первом вызове API. Если инструменты появляются, но каждый вызов завершается ошибкой, запустите
ustore_server_infoи проверьтеhasToken.Это дополняет, а не заменяет SQL MCP-сервер. REST API обеспечивает соблюдение бизнес-логики uStore, поэтому это правильный путь для всего, что изменяет состояние. Прямые запросы
[PRODUPRODUCE].ustoreостаются лучшими для отчётных объединений и археологии схемы.
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 read-only interaction with Zoho CRM data through natural language queries, allowing users to search records, list modules, retrieve field information, and count records using secure OAuth authentication.2
- FlicenseNot gradedqualityDmaintenanceEnables querying PostgreSQL and MySQL databases using natural language, with RESTful endpoints for listing tables, describing schemas, and executing read-only queries.1
- FlicenseNot gradedqualityDmaintenanceEnables management of BeyondTrust Endpoint Privilege Management (EPM) through natural language, supporting policy, computer, user, group management, file inspection, audit monitoring, and admin access requests.1
- AlicenseAqualityDmaintenanceExposes Swagger/OpenAPI API documentation to AI models, enabling exploration, search, and interaction with endpoints, schemas, and execution of API calls.14102MIT
Related MCP Connectors
Search, document and execute authenticated API calls across 500+ apps via one MCP server
Read-only access to your VortexIQ store data: audits, KPIs, alerts, Brand DNA, reports, Ask VIQ.
Official Microsoft MCP Server to query Microsoft Entra data using natural language
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/tkuan/uStoreBackoffice-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server