# MCP-клиент

Библиотека `huggingface_hub` теперь включает [MCPClient](/docs/huggingface_hub/main/ru/package_reference/mcp#huggingface_hub.MCPClient), предназначенный для предоставления языковым моделям (LLM) возможности взаимодействия с внешними инструментами через [Model Context Protocol](https://modelcontextprotocol.io) (MCP). Этот клиент расширяет [AsyncInferenceClient](/docs/huggingface_hub/main/ru/package_reference/inference_client#huggingface_hub.AsyncInferenceClient) для бесшовной интеграции использования инструментов.

[MCPClient](/docs/huggingface_hub/main/ru/package_reference/mcp#huggingface_hub.MCPClient) подключается к MCP-серверам (локальным `stdio`-скриптам или удалённым `http`/`sse`-сервисам), которые предоставляют инструменты. Он передаёт эти инструменты LLM (через [AsyncInferenceClient](/docs/huggingface_hub/main/ru/package_reference/inference_client#huggingface_hub.AsyncInferenceClient)). Если LLM решает использовать инструмент, [MCPClient](/docs/huggingface_hub/main/ru/package_reference/mcp#huggingface_hub.MCPClient) управляет запросом на выполнение на MCP-сервере и возвращает вывод инструмента обратно в LLM, часто транслируя результаты в реальном времени.

Мы также предоставляем класс [Agent](/docs/huggingface_hub/main/ru/package_reference/mcp#huggingface_hub.Agent) более высокого уровня. Этот «Tiny Agent» упрощает создание диалоговых агентов, управляя циклом чата и состоянием, выступая в роли обёртки над [MCPClient](/docs/huggingface_hub/main/ru/package_reference/mcp#huggingface_hub.MCPClient).

## MCP-клиент[[huggingface_hub.MCPClient]]

#### huggingface_hub.MCPClient[[huggingface_hub.MCPClient]]

```python
huggingface_hub.MCPClient(model: typing.Optional[str] = None, provider: typing.Union[typing.Literal['baseten', 'cerebras', 'cohere', 'deepinfra', 'fal-ai', 'featherless-ai', 'fireworks-ai', 'groq', 'hf-inference', 'novita', 'nscale', 'openai', 'ovhcloud', 'publicai', 'replicate', 'scaleway', 'together', 'wavespeed', 'zai-org'], typing.Literal['auto'], NoneType] = None, base_url: typing.Optional[str] = None, api_key: typing.Optional[str] = None)
```

[Источник](https://github.com/huggingface/huggingface_hub/blob/main/src/huggingface_hub/inference/_mcp/mcp_client.py#L55)

**Параметры:**

model (`str`, `optional`) : Модель для выполнения инференса. Может быть идентификатором модели, размещённой на Hugging Face Hub, например `meta-llama/Meta-Llama-3-8B-Instruct`, или URL-адресом развёрнутого Inference Endpoint или другого локального/удалённого эндпоинта.

provider (`str`, *optional*) : Имя провайдера, используемого для инференса. По умолчанию — "auto", то есть первый из доступных для модели провайдеров, отсортированных в соответствии с порядком, заданным пользователем в https://hf.co/settings/inference-providers. Если модель задана в виде URL или передан `base_url`, параметр `provider` не используется.

base_url (`str`, *необязательный*) : Базовый URL для запуска инференса. По умолчанию — None.

api_key (`str`, `optional`) : Токен для аутентификации. Если не указан, по умолчанию используется токен Hugging Face, сохранённый локально. Также можно использовать собственный API-ключ провайдера для прямого взаимодействия с его сервисом.

Клиент для подключения к одному или нескольким MCP-серверам и обработки ответов чата с инструментами.

> [!WARNING]
> Этот класс является экспериментальным и может быть изменён в будущем без предварительного уведомления.

#### add_mcp_server[[huggingface_hub.MCPClient.add_mcp_server]]

```python
add_mcp_server(type: typing.Literal['stdio', 'sse', 'http'], **params: typing.Any)
```

[Источник](https://github.com/huggingface/huggingface_hub/blob/main/src/huggingface_hub/inference/_mcp/mcp_client.py#L123)

**Параметры:**

type (`str`) : Тип подключаемого сервера. Может быть одним из: - "stdio": сервер стандартного ввода/вывода (локальный) - "sse": сервер событий, отправляемых сервером (SSE) - "http": сервер StreamableHTTP

- ****params** (`dict[str, Any]`) : Параметры сервера, которые могут быть следующими: - Для stdio-серверов: - command (str): Команда для запуска MCP-сервера - args (list[str], optional): Аргументы для команды - env (dict[str, str], optional): Переменные окружения для команды - cwd (Union[str, Path, None], optional): Рабочая директория для команды - allowed_tools (list[str], optional): Список имён инструментов, разрешённых с этого сервера - Для SSE-серверов: - url (str): URL SSE-сервера - headers (dict[str, Any], optional): Заголовки для SSE-соединения - timeout (float, optional): Таймаут соединения - sse_read_timeout (float, optional): Таймаут чтения SSE - allowed_tools (list[str], optional): Список имён инструментов, разрешённых с этого сервера - Для StreamableHTTP-серверов: - url (str): URL StreamableHTTP-сервера - headers (dict[str, Any], optional): Заголовки для StreamableHTTP-соединения - timeout (timedelta, optional): Таймаут соединения - sse_read_timeout (timedelta, optional): Таймаут чтения SSE - terminate_on_close (bool, optional): Нужно ли завершать соединение при закрытии - allowed_tools (list[str], optional): Список имён инструментов, разрешённых с этого сервера

Подключение к серверу MCP

#### очистка[[huggingface_hub.MCPClient.cleanup]]

```python
cleanup()
```

[Источник](https://github.com/huggingface/huggingface_hub/blob/main/src/huggingface_hub/inference/_mcp/mcp_client.py#L109)

Освобождение ресурсов

#### process_single_turn_with_tools[[huggingface_hub.MCPClient.process_single_turn_with_tools]]

```python
process_single_turn_with_tools(messages: list, exit_loop_tools: typing.Optional[list[huggingface_hub.inference._generated.types.chat_completion.ChatCompletionInputTool]] = None, exit_if_first_chunk_no_tool: bool = False)
```

[Источник](https://github.com/huggingface/huggingface_hub/blob/main/src/huggingface_hub/inference/_mcp/mcp_client.py#L252)

**Параметры:**

messages (`list[dict]`) : список объектов сообщений, представляющих историю диалога

exit_loop_tools (`list[ChatCompletionInputTool]`, *необязательный*) : Список инструментов, вызов которых должен завершить работу генератора

exit_if_first_chunk_no_tool (`bool`, *необязательный*) : Выходит, если в первых чанках нет инструмента. По умолчанию False.

**Возвращает:**

чанки [ChatCompletionStreamOutput](/docs/huggingface_hub/main/ru/package_reference/inference_types#huggingface_hub.ChatCompletionStreamOutput) или объекты [ChatCompletionInputMessage](/docs/huggingface_hub/main/ru/package_reference/inference_types#huggingface_hub.ChatCompletionInputMessage)

Обработайте запрос с помощью `self.model` и доступных инструментов, возвращая фрагменты и результаты инструментов.

## Агент[[huggingface_hub.Agent]]

#### huggingface_hub.Agent[[huggingface_hub.Agent]]

```python
huggingface_hub.Agent(model: Optional[str] = None, servers: Iterable[ServerConfig], provider: Optional[PROVIDER_OR_POLICY_T] = None, base_url: Optional[str] = None, api_key: Optional[str] = None, prompt: Optional[str] = None)
```

[Источник](https://github.com/huggingface/huggingface_hub/blob/main/src/huggingface_hub/inference/_mcp/agent.py#L13)

**Параметры:**

model (`str`, *необязательный*) : Модель, с которой выполняется инференс. Может быть идентификатором модели, размещенной на Hugging Face Hub, например `meta-llama/Meta-Llama-3-8B-Instruct`, или URL-адресом развернутого Inference Endpoint или другого локального или удаленного конечного пункта.

servers (`Iterable[dict]`) : MCP-серверы для подключения. Каждый сервер — это словарь, содержащий ключ `type` и ключ `config`. Ключ `type` может принимать значение `"stdio"` или `"sse"`, а ключ `config` — это словарь аргументов для сервера.

provider (`str`, *optional*) : Имя провайдера, используемого для инференса. По умолчанию — "auto", то есть первый из доступных для модели провайдеров, отсортированных в соответствии с порядком, заданным пользователем в https://hf.co/settings/inference-providers. Если модель задана в виде URL или передан `base_url`, параметр `provider` не используется.

base_url (`str`, *необязательный*) : Базовый URL для запуска инференса. По умолчанию — None.

api_key (`str`, *необязательный*) : Токен для аутентификации. Если не указан, по умолчанию используется локально сохранённый токен Hugging Face. Также можно использовать собственный API-ключ провайдера для прямого взаимодействия с его сервисом.

prompt (`str`, *необязательный*) : Системный промпт, используемый для агента. По умолчанию используется системный промпт по умолчанию из `constants.py`.

Реализация простого агента, представляющего собой обычный цикл while, построенный непосредственно на базе [MCPClient](/docs/huggingface_hub/main/ru/package_reference/mcp#huggingface_hub.MCPClient).

> [!WARNING]
> Этот класс является экспериментальным и может быть изменён в будущем без предварительного уведомления.

#### run[[huggingface_hub.Agent.run]]

```python
run(user_input: str, abort_event: Optional[asyncio.Event] = None)
```

[Источник](https://github.com/huggingface/huggingface_hub/blob/main/src/huggingface_hub/inference/_mcp/agent.py#L57)

**Параметры:**

user_input (`str`) : Пользовательский ввод для запуска агента.

abort_event (`asyncio.Event`, *необязательный*) : Событие, которое можно использовать для прерывания агента. Если событие установлено, агент прекратит выполнение.

Запустите агента с указанным пользовательским вводом.

