MCP tool считает деньги через float: как задать точный контракт
Для денежного инструмента согласуйте единицу, масштаб и правило округления до вызова. Число в JSON без валюты и семантики не объясняет, переданы рубли, копейки или промежуточное значение расчёта.
Разберём рабочий случай
Инструмент вычисляет скидку и передаёт результат следующему сервису. Разработчик складывает двоичные float и округляет на каждом этапе. Два пути вычисления могут расходиться на копейку. Агент видит правдоподобные числа и не замечает, что система по-разному округляет отдельные позиции и весь заказ. Строгая схема типа number проверит тип, но не исправит денежное правило.
Что изменить
Для выбранной валюты можно использовать целые минимальные единицы либо десятичную строку с явным масштабом; вариант зависит от внешнего API. Определите место округления и обработку отрицательных сумм. В Python создавайте Decimal из согласованной десятичной строки, если нужен именно её точный смысл, и задавайте режим округления явно. Не объявляйте ROUND_HALF_UP универсальным стандартом: ниже это только учебное правило. Между сервисами сохраняйте валюту и единицу вместе со значением.
from decimal import Decimal, ROUND_HALF_UP
value = Decimal("1.005").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
assert value == Decimal("1.01")Как проверить результат
| Проверка | Ожидаемое поведение |
|---|---|
| Учебное число 1.005 с округлением HALF_UP до сотых | Получается десятичное значение 1.01; ожидаемый результат связан с явно выбранным правилом, а не случайной формулой float. |
| Пользователь передал сумму в рублях вместо копеек | Контракт обнаруживает несоответствие единицы или требует явного выбора; модель не умножает значение на сто по догадке. |
| Возврат и сумма из нескольких позиций | Проверены знак, валюта и порядок округления; итог сопоставлен с независимым контрольным расчётом. |
Пример не задаёт бухгалтерские правила и не охватывает все валюты. Масштаб, налоги и распределение скидок определяет предметный контракт. Сам переход на Decimal не исправляет неверно выбранное правило или неточный исходный факт модели.
MCP-интеграция с бизнес-системами требует проверять смысл чисел и совместимость контрактов, особенно когда результаты используются для реальных денежных действий. В платном курсе AI Agent Integrations PRO: MCP можно продолжить изучение соответствующего инженерного направления. Перед покупкой сравните программу и открытые материалы со своей задачей.
Документация для проверки технических деталей: Документация Python decimal.
Следующий шаг: MCP-интеграции: контракты инструментов, ошибки и доступ. По смежным вопросам: Структурированный ответ MCP tool: как не потерять типы данных, Пагинация MCP tool: как не потерять данные между страницами.
