Модуль md.2 · Урок 3
Медицинский тул-сервер через MCP: ToolUniverse
Чему вы научитесь
- Понимать роль MCP как стандарта подключения инструментов к агенту
- Объяснять, что даёт ToolUniverse и какие инструменты в нём есть
- Подключать тул-сервер к агенту и вызывать проверку фактов
- Видеть, почему вызов инструмента надёжнее «памяти» модели
Зачем агенту инструменты
Reasoner из прошлых уроков рассуждает, но не должен «помнить» дозировки и взаимодействия лекарств — это как раз зона галлюцинаций. Вместо этого он вызывает инструмент, который возвращает проверенные данные из реального источника. Это превращает «модель сказала» в «источник подтвердил».
Стандартом интеграции инструментов в 2025–2026 стал MCP (Model Context Protocol). Инструмент выставляется как MCP-сервер, а агент подключается к нему по единому протоколу — навык переносится между продуктами и моделями.
flowchart LR
AG["Агент\n(Reasoner)"] -->|"MCP"| TS["Тул-сервер\nToolUniverse"]
TS --> D1["FDA drug labels"]
TS --> D2["OpenTarget"]
TS --> D3["Monarch\n(онтологии болезней)"]
D1 --> AG
style TS fill:#fef3c7,stroke:#d97706
style AG fill:#eef2ff,stroke:#4400FF
Что такое ToolUniverse
ToolUniverse (лаборатория Zitnik, Harvard, проект TxAgent) — реальный научный MCP-сервер медицинских и биомед-инструментов: метки препаратов FDA, OpenTarget, онтологии Monarch и другие. В README MedicalAgentX заявлено около 215 инструментов; точное число и версию стоит проверять при установке.
| Инструмент | Что отвечает | Пример вопроса |
|---|---|---|
| FDA drug labels | Информация о препарате из официальных меток | Показания, противопоказания |
| Взаимодействия | Совместимость препаратов | Можно ли назначать вместе |
| Monarch | Онтологии болезней и фенотипов | Связь симптома и заболевания |
| OpenTarget | Связи ген–болезнь–препарат | Мишени и доказательная база |
Как подключить и вызвать
Подключение по MCP единообразно: агент получает список доступных инструментов и вызывает нужный с аргументами. Ниже — учебный набросок логики ToolsConsultant.
# подключение к тул-серверу по MCP (псевдокод поверх MCP-клиента)
tools = mcp_client.connect("tooluniverse")
def verify(entities: dict) -> dict:
results = {}
for drug in entities.get("drugs", []):
# вместо "память модели" — вызов проверенного источника
results[drug] = tools.call("fda_drug_label", {"name": drug})
if len(entities.get("drugs", [])) > 1:
results["interactions"] = tools.call(
"drug_interactions", {"drugs": entities["drugs"]}
)
return results
Обратите внимание: модель не выдумывает данные о препарате — она их запрашивает. Если инструмент не нашёл препарат, это честный сигнал «нет данных», а не повод сочинить ответ.
Как встроить проверку в пайплайн
Извлеките сущности. Reasoner выделяет упомянутые препараты и состояния из рассуждения.
Вызовите инструменты. ToolsConsultant проверяет каждый препарат и взаимодействия через тул-сервер.
Передайте результаты в отчёт. ReportGenerator цитирует ответы инструментов рядом с тезисами.
Отметьте «нет данных». Если инструмент ничего не вернул, это должно быть видно в отчёте, а не скрыто.
Что дальше
Ядро собрано. Следующий модуль — мультиагентность и клиническое рассуждение. Начните с md.3/01.