IT · Model Context Protocol

Додавання нових методів і розширення функціоналу MCP

Практика: signin, add_car, get_cars і сесія клієнта

Урок 7

План заняття

  1. 01 Архітектурне розширення через AsyncClient
  2. 02 Огляд методів
  3. 03 Реалізація методів
  4. 04 Висновок

Блок 1

Архітектурне розширення через AsyncClient

Один клієнт — одна сесія для всіх tools

AsyncClient

Проблема без спільного клієнта

Якщо створювати новий HTTP-клієнт на кожен виклик tool, cookie sid після авторизації втрачається.

Тоді add_car і get_cars отримують 401 — сесії вже немає.

AsyncClient

Рішення: get_client()

Функція get_client() повертає один спільний httpx.AsyncClient на весь процес MCP-сервера.

Після signup або signin cookie sid зберігається і доступна для всіх наступних tools.

  • Менше дублювання коду
  • Передбачувана поведінка tools
  • Один авторизований контекст для signin, add_car, get_cars

AsyncClient

Базовий патерн

from functools import lru_cache
import httpx

@lru_cache
def get_client() -> httpx.AsyncClient:
    return httpx.AsyncClient(
        base_url=BASE_URL,
        timeout=30.0,
        headers={"Content-Type": "application/json"},
    )

lru_cache гарантує: один інстанс клієнта на процес. Усі tools беруть його через get_client().

Фінал заняття

Висновок

Спільний AsyncClient через get_client() — фундамент розширення qauto MCP server.

Без нього нові методи не зможуть працювати в одній сесії після авторизації.

Далі — огляд і реалізація методів: signin, add_car, get_cars.