Офіційний Model Context Protocol C# SDK v2.0 вийшов із підтримкою безстатусного HTTP-транспорту
Офіційний C# SDK для Model Context Protocol оновився до v2.0 з повною підтримкою специфікації від 2026-07-28. HTTP-транспорт тепер за замовчуванням є безстатусним (stateless), що усуває потребу в рукостисканнях та прив'язці сесій для горизонтального масштабування.
Вплив: Високий
Чому це важливо
Тепер ви можете будувати та розгортати горизонтально масштабовані MCP-сервери на ASP.NET Core та Docker без складного налаштування сесій і sticky routing.
TL;DR
- 01Оновлення до MCP C# SDK v2.0 вмикає повністю безстатусну роботу через HTTP в ASP.NET Core.
- 02Sticky sessions та синхронізація станiв більше не потрібні для балансування навантаження.
- 03Використовуйте [McpHeader], щоб API-шлюзи маршрутизували запити агентів без аналізу тіла JSON.
Ключові факти
- Версія специфікації
- Редакція 2026-07-28
- Режим транспорту
- Stateless HTTP за замовчуванням
- Зворотна сумісність
- Повна сумісність з ендпоінтами v1
Безстатусні HTTP-навантаження за замовчуванням
У версії 2.0 параметру HttpServerTransportOptions.Stateless присвоєно значення true. Застарілі SSE-ендпоінти на основі сесій позначено як obsolete. Сервери компонуються як звичайні застосунки ASP.NET Core:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMcpServer().WithHttpTransport();Маршрутизація за заголовками параметрів
Проміжні сервери можуть маршрутизувати трафік без розбору JSON-RPC. Позначаючи аргументи інструменту атрибутом [McpHeader], клієнтські бібліотеки виносять параметри в заголовки HTTP:
[McpServerTool(Name = "get_order_status")]
public static async Task<string> GetOrderStatus(
[McpHeader("Region")] string region,
string orderId) => await orders.GetStatusAsync(region, orderId);Якщо значення в HTTP-заголовку та тілі JSON-RPC не збігаються, SDK повертає помилку HeaderMismatch.
Спробуй за 2 хвилини
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMcpServer().WithHttpTransport();
[McpServerTool(Name = "get_order_status")]
public static async Task<string> GetOrderStatus(
[McpHeader("Region")] string region,
string orderId) => await orders.GetStatusAsync(region, orderId);csharp
✓ Коли використовувати
- Використовуйте під час розробки горизонтально масштабованих MCP-інструментів у хмарних контейнерах або serverless-інфраструктурі.
✕ Коли НЕ варто
- Не використовуйте безстатусний режим, якщо архітектура вимагає односторонніх серверних push-повідомлень через тривалі SSE-з'єднання.
Що зробити сьогодні
- Оновіть залежності проєкту до Microsoft.ModelContextProtocol.SDK 2.0.
- Видаліть власні шари збереження стану сесій з конфігурації MCP HTTP транспорту.
- Додайте атрибут [McpHeader] для критичних параметрів, щоб спростити маршрутизацію на шлюзі.
Джерела