0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Thêm máy chủ MCP vào ASP.NET Core Minimal API

Đăng vào 7 tháng trước

• 4 phút đọc

Cách Thêm Máy Chủ MCP vào ASP.NET Core Minimal API

Trong bài viết này, chúng ta sẽ cùng khám phá cách thêm máy chủ Model Context Protocol (MCP) vào ASP.NET Core Minimal API. Với giải pháp này, bạn có thể dễ dàng tích hợp các middleware máy chủ và tận dụng các tính năng của MCP trong ứng dụng của mình.

Mục Lục

  1. Cài đặt các gói NuGet MCP
  2. Thêm máy chủ MCP vào host
  3. Định nghĩa các công cụ MCP
  4. Thêm xác thực
  5. Kiểm tra cục bộ
  6. Kết luận
  7. Tài liệu tham khảo bổ sung

1. Cài đặt các gói NuGet MCP

Để bắt đầu, bạn cần cài đặt các gói MCP từ NuGet. Hãy sử dụng các phiên bản ổn định mới nhất khi có thể. Dưới đây là một số liên kết gói mẫu:

  • ModelContextProtocol
  • ModelContextProtocol.AspNetCore

2. Thêm máy chủ MCP vào host

Bạn cần đăng ký máy chủ MCP và các phương tiện (transports) trong quá trình xây dựng host. Phương thức WithToolsFromAssembly() sẽ quét assembly của bạn để tìm các lớp được đánh dấu bằng [McpServerToolType] và tự động đăng ký các công cụ.

csharp Copy
builder.Services
    .AddMcpServer()
    .WithHttpTransport()
    .WithToolsFromAssembly();

var app = builder.Build();

app.MapEndpoints(); // Phương thức mở rộng của bạn, sẽ được định nghĩa sau
app.MapMcp(pattern: "api/mcp"); // Tiết lộ MCP qua HTTP

await app.RunAsync();

3. Định nghĩa các công cụ MCP

Các kiểu chứa công cụ cần được đánh dấu bằng thuộc tính thích hợp McpServerToolType và các phương thức công cụ cần được chú thích bằng McpServerTool. Đảm bảo cung cấp mô tả rõ ràng để cải thiện khả năng phát hiện và tài liệu.

Lưu ý: Tên thuộc tính và chữ ký chính xác phụ thuộc vào MCP C# SDK mà bạn đang sử dụng.

csharp Copy
[McpServerToolType]
public static class Endpoint
{
    public static IEndpointRouteBuilder MapEndpoints(this IEndpointRouteBuilder app)
    {
        app.MapGet("api/users", Handler)
           .WithSummary("Lấy danh sách người dùng")
           .Produces<PagedResponse<GetUserResponse>>(StatusCodes.Status200OK)
           .WithOpenApi();

        return app;
    }

    [McpServerTool(Name = "get_paged_list_users"), Description("Lấy danh sách người dùng theo trang dựa trên con trỏ")]
    private static async Task<PagedResponse<GetUserResponse>> Handler(ApplicationDbContext dbContext, [AsParameters] GetUsersRequest request, IValidator<GetUsersRequest> validator, CancellationToken token)
    {
        await validator.ValidateAndThrowAsync(request, token);

        var users = await dbContext.Users
            .Select(user => Map(user))
            .ToPagedAsync(request, token);

        return users;
    }
}

4. Thêm xác thực

Model Context Protocol cung cấp khả năng xác thực. Trong API của chúng ta, chúng ta sẽ sử dụng OAuth 2.1 và tái sử dụng nó. Chỉ cần thêm RequireAuthorization vào endpoint MCP.

csharp Copy
// Thêm xác thực JWT
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.Authority = "jwt_authority";
        options.Audience = "jwt_audiences";
    });
builder.Services.AddAuthorization(c => c.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build());
...
app.MapMcp(pattern: "api/mcp").RequireAuthorization();
...

5. Kiểm tra cục bộ

6. Kết luận

Có một cách đơn giản để thêm hỗ trợ máy chủ MCP vào một API tối thiểu hiện có. Chúng ta có thể tái sử dụng các trình xử lý endpoint và logic xác thực, và việc tiêm phụ thuộc hoạt động như trước. Với thiết lập này, máy chủ giờ đây có thể tiết lộ cả một REST API và MCP. Điểm quan trọng là cung cấp mô tả rõ ràng cho các công cụ và tham số để cải thiện khả năng phát hiện và tính khả dụng cho các mô hình ngôn ngữ lớn (LLMs).

7. Tài liệu tham khảo bổ sung

Thực hành tốt nhất

  • Luôn kiểm tra các gói NuGet để đảm bảo bạn đang sử dụng phiên bản mới nhất.
  • Cung cấp tài liệu rõ ràng cho người dùng về cách sử dụng các công cụ MCP của bạn.

Những cạm bẫy phổ biến

  • Không cung cấp mô tả rõ ràng cho các công cụ có thể khiến người dùng gặp khó khăn trong việc tìm kiếm.
  • Thiếu xác thực có thể làm cho API dễ bị tấn công.

Mẹo hiệu suất

  • Tối ưu hóa truy vấn đến cơ sở dữ liệu để cải thiện tốc độ phản hồi.
  • Sử dụng caching cho các dữ liệu không thay đổi thường xuyên để giảm tải cho server.

Khắc phục sự cố

  • Nếu gặp lỗi xác thực, hãy kiểm tra cấu hình JWT và đảm bảo rằng Authority và Audience được thiết lập chính xác.
  • Kiểm tra xem các công cụ MCP có được đăng ký đúng cách hay không bằng cách xem log trong quá trình khởi động ứng dụng.
Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào