Комплектование заказа через MCP: что должен вычислять инструмент проверки
Менеджер спрашивает ассистента: «Хватит ли деталей на двадцать монтажных комплектов?» В учётной системе лежат остатки компонентов, часть уже зарезервирована, а на один комплект нужны разные количества деталей. Языковой модели удобно понять вопрос и выбрать инструмент. Сам расчёт должен выполнять код, который знает состав изделия и возвращает дефицит по каждой позиции.
MCP позволяет предоставить такую операцию клиентам как типизированный инструмент. Для этой задачи полезен узкий контракт check_kit: код комплекта и количество. Агенту не нужен произвольный SQL к складской базе. Результат должен объяснять, сколько комплектов доступно по текущему снимку и каких деталей не хватает для запрошенного количества.
Определите смысл доступности
Остаток на складе и свободное количество различаются. В примере свободно равно физическому остатку минус действующий резерв. Если система учитывает карантин, брак или ограничения по складу, включите их в расчёт до выдачи ответа. Укажите момент снимка: ответ «хватает» через час может устареть из-за другого заказа.
Состав комплекта и остатки должны относиться к согласованной редакции данных. Если спецификация изменилась во время чтения, расчёт может соединить количество деталей из новой версии с остатками, подготовленными для старой. В ERP-адаптере используйте согласованный снимок или сохраните версии прочитанных записей и проверьте их перед ответом.
Проверка комплекта не резервирует детали. Менеджер получает снимок доступности для следующего решения. Если требуется резервирование, проектируйте отдельную бизнес-операцию в учётной системе. Именно она должна повторно проверить доступность и атомарно изменить состояние. Аннотация инструмента чтения сама по себе не реализует эти правила.
Реализуйте вычислительное ядро
Ниже локальный обработчик предметной логики будущего MCP tool. Он не запускает MCP-сервер и не выполняет handshake. Это позволяет проверить формулу и смысл ответа до подключения SDK и ERP. Контракт MCP tools описывает inputSchema и structuredContent; готовую функцию затем вызывает обработчик вашего сервера.
Пример разрешает только положительное целое количество и известный комплект. Для каждого компонента считаются свободный остаток и дефицит. Максимальное число комплектов ограничивает самая дефицитная деталь. Используем целочисленное деление, потому что половину крепежа нельзя превратить в готовый комплект.
bom = {"mount-kit": {"bracket":2, "bolt":8}}
stock = {"bracket": {"on_hand":50, "reserved":10},
"bolt": {"on_hand":180, "reserved":36}}
def check_kit(kit_id, quantity):
if type(quantity) is not int or quantity <= 0:
raise ValueError("quantity must be a positive integer")
if kit_id not in bom:
raise ValueError("Unknown kit")
details, limits = [], []
for sku, per_kit in bom[kit_id].items():
if type(per_kit) is not int or per_kit <= 0:
raise ValueError("Invalid bill of materials")
record = stock[sku]
free = max(0, record["on_hand"] - record["reserved"])
needed = quantity * per_kit
limits.append(free // per_kit)
details.append({"sku":sku, "free":free, "required":needed,
"shortage":max(0, needed-free)})
return {"kit_id":kit_id, "requested":quantity,
"available_kits":min(limits),
"snapshot_at":"2026-10-29T09:00:00Z",
"reserved_by_call":False, "components":details}
result = check_kit("mount-kit", 20)
assert result["available_kits"] == 18
assert result["components"][1]["shortage"] == 16
assert check_kit("mount-kit", 18)["components"][1]["shortage"] == 0
print(result)
Свяжите вопрос менеджера с вызовом
Пользовательский вход: «Проверь, хватит ли на двадцать монтажных комплектов». Каталог разрешённых кодов содержит mount-kit — монтажный комплект. Модель выбирает check_kit и передаёт {"kit_id":"mount-kit","quantity":20}. Клиент проверяет аргументы по схеме, сервер читает разрешённый пользователю склад и запускает расчёт.
Инструкция ассистенту: используй check_kit для вопроса о доступности комплекта. Не вычисляй остатки из памяти. Если название неоднозначно, уточни код. После результата сообщи запрошенное и доступное количество, дефицит компонентов и snapshot_at. Не называй проверку резервированием. Не предлагай действие записи как уже выполненное.
На полученном результате корректный ответ назовёт 18 доступных комплектов и недостаток 16 болтов для двадцати. Проверьте также вопрос «зарезервируй двадцать»: инструмент проверки не выполняет это поручение. Для такой операции клиенту нужен другой, явно разрешённый процесс. Полная проверка discovery и tools/call проводится после регистрации функции в MCP-сервере.
Как оформить ответ ассистента
Из 40 свободных кронштейнов можно собрать 20 комплектов, а из 144 болтов — 18. Для двадцати комплектов не хватает 16 болтов. Ассистенту следует назвать ограничивающий компонент и время снимка. Это даёт менеджеру конкретное действие: проверить приход болтов или согласовать меньшую партию.
В inputSchema закрепите kit_id как строку и quantity как integer с minimum 1. В outputSchema опишите все возвращаемые поля, а structuredContent заполните результатом функции. Ошибки неизвестного комплекта и временной недоступности склада должны вести к разным действиям. Первый случай требует уточнения кода, второй — повторной проверки позже. Права на склад определяются сервером по пользователю, а не выбираются моделью.
Что проверить при подключении
На интеграционном стенде сопоставьте расчёт с ERP для нулевого остатка, частичного резерва и комплекта с одним компонентом. Для вложенных комплектов сначала понадобится развернуть состав до листовых деталей; приведённая функция работает с уже плоской спецификацией. Проверяйте также отсутствие изменений в резервах после вызова инструмента: это реальное свойство операции чтения.
Предоставьте расчёт AI-клиенту через MCP
Чтобы менеджер мог вызвать расчёт из AI-приложения, понадобится полноценный сервер и клиентский цикл выбора инструмента. На курсе вы соберёте MCP-сервер с типизированными tools, структурированными ответами и ресурсами, подключите клиента и добавите тесты, логи и ограничения доступа. Эти части превращают проверенную складскую функцию в поддерживаемую интеграцию. Откройте программу платного курса «AI Agent Integrations PRO: MCP».
Продолжить на практике
- AI Agent Integrations PRO: MCP ↗
Вы уже работали с LLM и понимаете, что подключать их к реальным системам — больно. MCP — это стандарт, который делает эту боль меньше: один контракт вместо десятка костылей, типизированные инструменты вместо голого доступа к базе, тесты и логи вместо молитв. На курсе соберём сервер с нуля и выведем в production-контур.
