Перейти к основному содержимому

HTTP-транспорт

Помимо stdio, клиенты Neva поддерживают подключение к MCP-серверам по потоковому HTTP — двунаправленному транспортному уровню, подходящему для удалённых серверов.

Подключение через HTTP

Используйте with_http() для настройки клиента на HTTP-транспорт:

use neva::prelude::*;

#[tokio::main]
async fn main() -> Result<(), Error> {
let mut client = Client::new()
.with_options(|opt| opt
.with_http(|http| http
.bind("127.0.0.1:3000")));

client.connect().await?;

// Вызов инструментов, чтение ресурсов и т.д.

client.disconnect().await
}

Конфигурация HTTP по умолчанию

Для быстрого старта используйте with_default_http(), который подключается к 127.0.0.1:3000 с конечной точкой /mcp по умолчанию:

let mut client = Client::new()
.with_options(|opt| opt.with_default_http());

TLS / HTTPS

Для подключения к HTTPS-серверу настройте TLS на клиенте:

let mut client = Client::new()
.with_options(|opt| opt
.with_http(|http| http
.bind("localhost:7878")
.with_tls(|tls| tls
.with_certs_verification(false)))); // Отключить для самоподписанных сертификатов
warning

Отключение проверки сертификатов (with_certs_verification(false)) предназначено только для локальной разработки. В продакшене всегда используйте корректно подписанный сертификат и не отключайте проверку.

Аутентификация по токену Bearer

Если MCP-сервер требует JWT-аутентификацию, прикрепите токен Bearer с помощью with_auth():

const ACCESS_TOKEN: &str = "eyJhbGci..."; // Ваш JWT Bearer токен

let mut client = Client::new()
.with_options(|opt| opt
.with_http(|http| http
.bind("localhost:7878")
.with_auth(ACCESS_TOKEN)));

client.connect().await?;

Токен отправляется в заголовке Authorization: Bearer <token> при каждом запросе.

Полный пример: HTTPS + Auth

use neva::prelude::*;

const ACCESS_TOKEN: &str = "eyJhbGci...";

#[tokio::main]
async fn main() -> Result<(), Error> {
let mut client = Client::new()
.with_options(|opt| opt
.with_http(|http| http
.bind("localhost:7878")
.with_tls(|tls| tls
.with_certs_verification(false))
.with_auth(ACCESS_TOKEN)));

client.connect().await?;

let result = client.call_tool("my_tool", ("input", "value")).await?;
println!("{:?}", result.content);

client.disconnect().await
}

Обучение на примерах