ADR.Z1: выбор мажора FastMCP
- Статус: принято (этап M1, вертикальный срез)
- Дата: 2026-10-27
- Контекст: план
.omc/plans/plan-ati-hh-mcp.md, раздел ADR / ADR.Z1
Контекст
Интервью зафиксировало «FastMCP 2», но на момент решения актуальный мажор на PyPI – 4.x (последняя версия 2.x – 2.14.7). Требуется выбрать мажор по итогам спайка M1: создание приложения, регистрация инструментов, stdio- и HTTP-транспорты, клиент для тестов, поддержка Python 3.10–3.14.
Решение
Остаться на FastMCP 4.x, пин fastmcp>=4.1,<5 (фактически 4.1.4).
Спайк на 4.1.4 подтвердил все критерии:
FastMCP(name)+@mcp.tool/mcp.tool(fn)– регистрация инструментов, docstring и pydantic-аннотации транслируются в описание и входную схему;run_async(transport=...)поддерживает"stdio","http","streamable-http","sse";- в stdio-режиме stdout содержит только протокол MCP (баннер и логи идут в stderr) – ключевой инвариант проекта;
fastmcp.Clientработает и in-memory, и поверхStdioTransport(подпроцесс) – закрывает потребность e2e-тестов;requires-python >= 3.10– покрывает всю матрицу 3.10–3.14.
Последствия
Версия зафиксирована в uv.lock; откат на 2.x (пин >=2.14,<3) остаётся
запасным путём при обнаружении блокирующих регрессий 4.x – изоляция сборки
сервера в server.py/toolkit.py делает замену локальной. Отступление от
«FastMCP 2» фиксируется в README (раздел «Стек») на этапе M8.