- Giao thức Context Mô hình (MCP) mở rộng khả năng tương tác AI vượt xa việc chỉ gọi công cụ, bằng cách giới thiệu các
primitivemới để xây dựng trải nghiệm người dùng phong phú và linh hoạt hơn. - Các
primitivecốt lõi bao gồmprompts(người dùng điều khiển),resources(ứng dụng điều khiển),tools(mô hình AI điều khiển),sampling(server yêu cầu AI client) vàroots(client cung cấp ngữ cảnh môi trường), mỗi loại phục vụ một mô hình tương tác khác nhau. - Hướng phát triển chính của MCP là đưa các
serverlên web thông quaủy quyền(sử dụngOAuth 2.1) vàkhả năng mở rộng, cho phép các dịch vụ trực tuyến đáng tin cậy tích hợp sâu hơn với hệ sinh thái AI.
MCP 201 | Code w/ Claude
- MCP Primitives: MCP định nghĩa năm loại
primitivechính:Prompts,Resources,Tools,Sampling, vàRoots, mỗi loại đại diện cho một phương thức tương tác độc đáo giữaclient,server,người dùngvàmô hình AI. - Prompts (Người dùng điều khiển):
Promptscho phépserverhiển thị các mẫu câu lệnh được định nghĩa trước, có tính động và hỗ trợ tự động hoàn thành, để người dùng trực tiếp thêm vàocửa sổ ngữ cảnhvà định hướng tương tác vớimô hình AI. - Resources (Ứng dụng điều khiển):
Resourcesđược dùng để hiển thị dữ liệu thô hoặc nội dung từserver(ví dụ:database schema), cho phépclientxử lý theo nhiều cách (như thêm vàocửa sổ ngữ cảnh, tạoembedding, RAG) mà không cần sự can thiệp trực tiếp của người dùng haymô hình AI. - Tools (Mô hình AI điều khiển):
Toolslà cáchành độngmàmô hình AIquyết định khi nào cần gọi để thực hiện một tác vụ cụ thể, làprimitivequen thuộc nhất với các nhà phát triểnMCP server. - Sampling (Server yêu cầu AI từ Client): Tính năng
samplingcho phépMCP serveryêu cầuhoàn thànhtừmô hình AIđã được cấu hình trênclient, giúpserversử dụng AI mà không cầnAPI keyriêng, đảm bảoclientkiểm soátbảo mật,quyền riêng tưvàchi phí, đồng thời cho phép chuỗiserverđệ quy. - Roots (Ngữ cảnh môi trường từ Client):
Rootslàprimitivecho phépMCP serverhỏiclient(ví dụ:IDE) về cácdự ánhoặcthư mụcđang mở, cung cấpngữ cảnh môi trườngcần thiết đểserverhoạt động chính xác (ví dụ: thực thilệnh Gittrong đúngworkspace). - Web Integration với OAuth 2.1: Tương lai của MCP hướng tới việc đưa các
serverlên web. Điều này yêu cầuủy quyềnthông quaOAuth 2.1để cho phépservertruy cậpngữ cảnh riêng tưcủa người dùng một cách an toàn và đáng tin cậy, chuyển đổi từ cácserver cục bộsang cácdịch vụ webcó khả năng mở rộng.
Model Context Protocol (MCP)— Giao thức Context Mô hình (MCP)Primitive— Thành phần cơ bảnPrompt— Mẫu câu lệnh / Câu lệnh (người dùng điều khiển)Resource— Tài nguyên / Dữ liệu thô (ứng dụng điều khiển)Tool— Công cụ / Hành động (mô hình AI điều khiển)Sampling— Lấy mẫu / Yêu cầu hoàn thành từ clientRoot— Ngữ cảnh môi trường / GốcContext Window— Cửa sổ ngữ cảnhDelegation— Ủy quyềnOAuth 2.1— OAuth 2.1
Giới thiệu về Giao thức Context Mô hình (MCP)
Xin chào, tôi là David, thành viên nhóm kỹ thuật tại Anthropic và là một trong những người đồng sáng tạo MCP. Hôm nay, tôi sẽ chia sẻ thêm về giao thức này và những điều bạn có thể làm, nhằm giúp bạn hiểu rõ hơn về MCP ngoài việc sử dụng nó cho các công cụ như hầu hết mọi người đang làm. Mục tiêu hôm nay là giới thiệu khả năng của giao thức và cách bạn có thể sử dụng nó để xây dựng các tương tác phong phú hơn với các MCP client, vượt ra ngoài những gì thường được biết đến về việc gọi công cụ.
Đầu tiên, tôi sẽ trình bày tất cả những gì chúng tôi gọi là các primitive – các cách để server hiển thị thông tin cho client. Sau đó, chúng ta sẽ đi sâu vào một số khía cạnh ít được biết đến hơn của giao thức. Tiếp theo, tôi muốn nói một chút về cách xây dựng một tương tác thực sự phong phú trước khi chuyển sang những gì sắp ra mắt cho MCP và cách chúng tôi đưa MCP lên web.
Prompts và Tương tác Người dùng
Để bắt đầu, tôi muốn nói về một trong những primitive của MCP mà các server có thể hiển thị cho MCP client nhưng rất ít người biết đến: đó là prompts. Prompts thực chất là các mẫu được định nghĩa trước cho các tương tác AI. Nói cách khác, đó là một cách để MCP server hiển thị một tập hợp văn bản (một câu lệnh) theo cách cho phép người dùng trực tiếp thêm vào cửa sổ ngữ cảnh và xem cách họ sẽ sử dụng MCP server mà bạn đang xây dựng.
Hai trường hợp sử dụng chính ở đây là:
- Bạn, với tư cách là tác giả
MCP server, cung cấp một ví dụ để giới thiệu cho người dùng. Điều này giúp họ biết cách sử dụngMCP servermột cách tốt nhất, bởi vì bạn là người đã xây dựng nó và bạn là người biết cách sử dụng nó hiệu quả nhất. - Vì
MCP Promptscũng có tính động (chúng chỉ làmãđược thực thi trênMCP server), chúng cho phép bạn làm những điều phong phú hơn.
Trong kịch bản này, tôi muốn giới thiệu một MCP prompt mà người dùng gọi. Trình chỉnh sửa ở đây sẽ trực tiếp tìm nạp các bình luận trên GitHub vào cửa sổ ngữ cảnh của tôi. Điều bạn thấy tôi đang làm ở đây là đơn giản đưa các bình luận từ pull request mà tôi đã viết vào cửa sổ ngữ cảnh, để tôi có thể tương tác với chúng và yêu cầu mô hình AI giúp tôi áp dụng những thay đổi đã được yêu cầu hoặc bất cứ điều gì tôi muốn làm. Đây thực sự là một cách để hiển thị những thứ mà người dùng nên tương tác trực tiếp và muốn đưa trực tiếp vào cửa sổ ngữ cảnh trước khi tương tác với Mô hình ngôn ngữ lớn (LLM).
Điều này khác với công cụ ở chỗ mô hình AI quyết định khi nào cần hành động, còn ở đây, người dùng quyết định: "Tôi muốn thêm điều này vào cửa sổ ngữ cảnh."
Hoàn thành Prompt
Nếu bạn để ý kỹ, có một điều bổ sung mà rất ít người biết bạn có thể làm: đó là hoàn thành prompt. Nếu bạn đã quan sát kỹ, có một lúc hiện lên một cửa sổ bật nhanh cho thấy tôi đang chọn các pull request có sẵn cho mình. Đây là một điều mà bạn, với tư cách là tác giả MCP server, có thể cung cấp để xây dựng các mẫu tham số phong phú hơn.
Việc này cực kỳ dễ thực hiện trong mã. Nếu bạn đang xây dựng một prompt bằng TypeScript cung cấp cho người dùng một mẫu như vậy và có các tham số cùng với tính năng tự động hoàn thành, thì đó chỉ là vài dòng mã mà Claude Code cùng với Claude 4 hầu hết có thể viết cho bạn. Nó đơn giản như vậy: một hàm để hoàn thành, một hàm để tạo prompt.
Đây đã là một trong những primitive bạn có thể sử dụng để xây dựng tương tác cho người dùng với MCP server, nhưng nó phong phú hơn một chút so với việc gọi công cụ.
Resources và Dữ liệu Thô
Một primitive thứ hai là thứ chúng tôi gọi là resources. Đây là một primitive khác mà MCP server có thể hiển thị cho MCP client. Trong khi prompts thực sự tập trung vào các đoạn văn bản mà người dùng có thể thêm vào cửa sổ ngữ cảnh, thì resources là về việc hiển thị dữ liệu thô hoặc nội dung từ một server.
Tại sao bạn muốn làm điều này? Có hai lý do:
- Hầu hết các
clienthiện nay sẽ cho phép bạn thêm nội dung thô này trực tiếp vàocửa sổ ngữ cảnh, theo cách đó chúng không khác nhiều so vớiprompts. - Nó cũng cho phép
ứng dụngthực hiện những điều bổ sung với dữ liệu thô đó. Ví dụ, xây dựng cácembeddingxung quanh dữ liệu màserverhiển thị và sau đó thực hiệntạo sinh tăng cường truy xuấtbằng cách thêm những thứ phù hợp nhất vàocửa sổ ngữ cảnh.
Đây là một lĩnh vực mà tôi cảm thấy hiện tại vẫn còn ít được khám phá. Tôi chỉ muốn nhanh chóng cho bạn thấy cách resources hoạt động. Trong trường hợp này, đây lại là một trong những cách mà MCP client hiển thị resource dưới dạng đối tượng giống tệp. Trong kịch bản này, chúng ta đang hiển thị database schema cho một PostgreSQL database dưới dạng resources, và sau đó bạn có thể thêm chúng vào Claude Desktop giống như các tệp. Bằng cách đó, bạn có thể nói với Claude rằng đây là các bảng mà tôi quan tâm, và bây giờ hãy tiếp tục và trực quan hóa chúng.
Trong kịch bản này, bạn sẽ thấy Claude sẽ viết một biểu đồ đẹp mắt để trực quan hóa database schema cho tôi. Tôi đã hiển thị schema thông qua resources. Vẫn còn rất nhiều không gian chưa được khám phá ở đây, nếu bạn vượt ra ngoài việc chỉ thêm nó dưới dạng tệp, tôi có thể nghĩ về việc tăng cường truy xuất hoặc bất kỳ điều gì khác mà ứng dụng có thể muốn làm.
Tools và Tác vụ Điều khiển bởi Mô hình AI
Vậy đó là hai primitive: một là prompts (những thứ mà người dùng tương tác), thứ hai là resources (mà ứng dụng tương tác).
Sau đó, tất nhiên, phải có một primitive thứ ba mà tất cả các bạn đều rất quen thuộc, mà tôi không muốn đi sâu vào quá nhiều. Bởi vì nếu bạn đã xây dựng một MCP server, bạn có thể đã xây dựng nó để hiển thị một công cụ. Công cụ thực sự là những hành động có thể được gọi ra. Đó là một trong những khoảnh khắc mà tôi cảm thấy kỳ diệu nhất khi bạn xây dựng một MCP server: khi mô hình AI lần đầu tiên gọi một thứ mà bạn quan tâm, một thứ bạn đã xây dựng, và có một tác động nhỏ đến nó – có thể là kích hoạt một database cho bạn hoặc bất cứ điều gì.
Nhưng đây lại là điều mà mô hình AI quyết định khi nào cần gọi một hành động.
Mô hình Tương tác: Prompts, Resources và Tools
Đây là ba primitive rất cơ bản mà giao thức hiển thị. Nếu bạn suy nghĩ kỹ về ba primitive mà tôi vừa giới thiệu cho bạn, có một chút chồng chéo về cách bạn sử dụng chúng, khi nào bạn thực sự sử dụng cái nào.
Có một điều mà chúng ta không nói đủ về nó, và nó nằm đâu đó trong ngôn ngữ đặc tả của Model Context Protocol: đó là mô hình tương tác. Tôi nghĩ việc giới thiệu nó hy vọng sẽ làm rõ khi nào bạn sử dụng cái gì. Bởi vì mô hình tương tác được xây dựng theo cách mà bạn có thể hiển thị cùng một dữ liệu theo ba cách khác nhau, tùy thuộc vào thời điểm bạn muốn nó xuất hiện.
Prompts, một lần nữa, là tất cả những thứ do người dùng điều khiển. Đó là thứ mà người dùng gọi, thêm vàocửa sổ ngữ cảnh. Kịch bản phổ biến nhất mà bạn thấy chúng xuất hiện là lệnhslash commandhoặc lệnh@.Resourcesmặt khác, hoàn toàn doứng dụngđiều khiển.Ứng dụngsử dụngLLM, có thể làClaude Desktop, có thể làVSCode, hoàn toàn quyết định những gì nó muốn làm với dữ liệu đó.- Cuối cùng,
công cụđược điều khiển bởimô hình AI.
Giữa ứng dụng AI sử dụng mô hình AI và người dùng, chúng ta có cả ba phần mà chúng ta cuối cùng bao phủ bằng cách sử dụng ba primitive cơ bản này. Điều đó đã cho phép bạn xây dựng một ứng dụng và trải nghiệm phong phú hơn một chút so với những gì hầu hết mọi người hiện có thể làm với công cụ, bởi vì bạn có một cách tương tác với người dùng tinh tế hơn một chút so với việc chỉ chờ mô hình AI gọi công cụ.
Vượt xa các Primitive cơ bản: Sampling
Nhưng chúng ta thậm chí có thể đi xa hơn nữa, bởi vì mặc dù các primitive cơ bản này đưa chúng ta đi xa hơn một chút so với những gì hầu hết các MCP server đang làm hiện tại, vẫn có những tương tác phong phú hơn mà chúng ta muốn kích hoạt. Để làm cho điều này dễ hiểu hơn, đây là một ví dụ mà tôi muốn đưa ra, nó thể hiện vấn đề này.
Làm thế nào bạn có thể xây dựng một MCP server chẳng hạn, tóm tắt một cuộc thảo luận từ một issue tracker? Một mặt, tôi có thể xây dựng một MCP server hiển thị loại dữ liệu này rất đơn giản và điều đó khá rõ ràng. Nhưng làm thế nào để tôi thực hiện bước tóm tắt? Bởi vì để tóm tắt, rõ ràng tôi cần một mô hình AI.
Vậy có một cách để xây dựng điều này là bạn có thể xây dựng một MCP server đóng vai trò là server theo dõi issue. Và bạn có một lựa chọn ở đây: bạn có thể tự mang SDK của riêng mình và gọi mô hình AI để mô hình AI tóm tắt. Nhưng sau đó có một vấn đề nhỏ. Vấn đề là client có một lựa chọn mô hình AI (có thể là Claude hoặc bất kỳ mô hình AI nào khác), nhưng server – MCP server mà bạn xây dựng – không biết mô hình AI nào mà client đã cấu hình. Vì vậy, nếu bạn tự mang SDK của nhà cung cấp mô hình AI, có thể là SDK của Anthropic, bạn vẫn cần một API key mà người dùng cần cung cấp, và điều này rất nhanh chóng trở nên khó xử.
Vì vậy, MCP có một tính năng ẩn nhỏ hoặc một primitive nhỏ gọi là sampling (lấy mẫu) cho phép server yêu cầu hoàn thành từ client. Điều này có nghĩa là gì? Nó có nghĩa là server có thể sử dụng một mô hình AI một cách độc lập mà không cần phải tự cung cấp SDK, mà thay vào đó hỏi client rằng bạn đã cấu hình mô hình AI nào, và client là người cung cấp hoàn thành cho server.
Điều này làm được hai việc:
- Trước hết, nó cho phép
clientcó toàn quyền kiểm soát về bảo mật, quyền riêng tư và chi phí. Thay vì phải cung cấp mộtAPI keybổ sung, bạn có thể tận dụnggói đăng kýmàclientcủa bạn có thể đã có. - Nhưng nó cũng cho phép một phần thứ hai: nếu bạn xâu chuỗi nhiều
MCP servertheo một cách thú vị, nó làm cho toàn bộ mẫu này trở nên đệ quy. Ý tôi là gì khi nói điều này, nó hơi trừu tượng: bạn có thể lấy mộtMCP serverhiển thị mộtcông cụ, nhưng trong quá trình thực thicông cụ, bạn có thể muốn sử dụng thêm cácMCP serverởdownstream. Và đâu đó ởdownstreamtronghệ thống AInày có thể cóserver theo dõi issuemới muốn có mộthoàn thành. Nhưng bằng cách sử dụngsampling, bạn có thể đẩy yêu cầu lên đểclientluôn có toàn quyền kiểm soát chi phí củagói đăng ký(bất cứ điều gì bạn muốn sử dụng). Nó giữ toàn quyền kiểm soát quyền riêng tư, chi phí của tương tác này và về cơ bản quản lý mọi tương tác màMCP servermuốn thực hiện vớimô hình AI.
Và điều đó cho phép xâu chuỗi rất mạnh mẽ và cho phép các mẫu phức tạp hơn, vốn đã đi vào các cách bạn có thể xây dựng các Tác nhân AI MCP nhỏ. Nhưng đó là sampling. Sampling hiện tại thật đáng buồn, tôi nghĩ là một trong những tính năng thú vị hơn, nhưng cũng là một trong những tính năng ít được hỗ trợ nhất trong các client. Đối với các project first-party của chúng tôi, chúng tôi sẽ đưa sampling vào năm nay. Và sau đó, hy vọng bạn có thể bắt đầu xây dựng các MCP server thú vị hơn.
Roots và Ngữ cảnh Môi trường
Và sau đó có một primitive cuối cùng mà tôi muốn đề cập, nó cũng thú vị hơn một chút. Và đây là một trong những điều mà khi nhìn lại, với tư cách là một trong những người đã xây dựng giao thức, tôi có lẽ đã đặt tên rất tệ (thành thật mà nói, tôi không giỏi đặt tên lắm, bạn có thể sẽ thấy điều này xuyên suốt bài nói chuyện).
Nhưng có một thứ gọi là roots. Và roots cũng là một khía cạnh thú vị. Bởi vì hãy tưởng tượng tôi muốn xây dựng một MCP server hôm nay để xử lý các lệnh git của tôi. Tôi không muốn phải tự mình xử lý git. Tôi không muốn thực hiện các lệnh source control. Tôi không nhớ bất kỳ điều gì trong số đó. Tôi muốn có MCP, như một MCP server xử lý việc này.
Vậy bây giờ tôi sẽ kết nối một MCP server vào IDE yêu thích của tôi. Nhưng làm sao IDE biết được? Làm sao MCP server biết được những project nào đang mở trong IDE? Bởi vì rõ ràng tôi muốn chạy các lệnh git trong các workspace...
[transcript bị gián đoạn]
Khám phá Thành phần Cơ bản của MCP và Xây dựng Tương tác Phong phú
Tôi đã mở. Và vì vậy, roots là một cách để máy chủ có thể hỏi máy khách, chẳng hạn như VS Code, về các dự án chúng ta đang mở, để máy chủ chỉ hoạt động trong các thư mục đã mở và biết nơi cần thực thi các lệnh Git của mình. Đây lại là một tính năng không được sử dụng rộng rãi, nhưng VS Code hiện đang hỗ trợ nó. Và đây chỉ là tất cả các thành phần cơ bản lớn mà MCP cung cấp. Chúng ta có năm thành phần cơ bản: ba ở phía máy chủ và hai ở phía máy khách. Nhưng làm thế nào để kết hợp tất cả lại với nhau để thực sự xây dựng một tương tác phong phú, bởi vì đó là điều chúng ta muốn. Chúng ta muốn xây dựng một thứ gì đó cho người dùng phong phú hơn là chỉ gọi công cụ.
Vậy hãy cùng xem bạn sẽ xây dựng một máy chủ MCP giả định tương tác với ứng dụng trò chuyện yêu thích của bạn, cho dù đó là Discord hay Slack, như thế nào. Bạn có thể sử dụng câu lệnh để đưa ra ví dụ cho người dùng, chẳng hạn như "tóm tắt cuộc thảo luận này", và bạn có thể sử dụng các bổ sung với các luồng thảo luận gần đây của người dùng hoặc bất cứ điều gì bạn muốn họ hiển thị. Bạn có thể có các câu lệnh bổ sung như "có gì mới", "chuyện gì đã xảy ra kể từ hôm qua". Và đó là một cách để người dùng có thể bắt đầu ngay lập tức sử dụng máy chủ bạn đã cung cấp và nhận được những ý tưởng mà bạn muốn nó được sử dụng. Sau đó, bạn có thể sử dụng tài nguyên để liệt kê trực tiếp các kênh để hiển thị các luồng thảo luận gần đây đã xảy ra trong ứng dụng trò chuyện, sao cho máy khách MCP có thể lập chỉ mục và xử lý chúng theo cách nó muốn. Và tất nhiên, cuối cùng nhưng không kém phần quan trọng, chúng ta vẫn có các công cụ của mình: chúng ta có tìm kiếm, chúng ta có đọc kênh, chúng ta có đọc và luồng thảo luận, và chúng ta sẽ sử dụng lấy mẫu để tóm tắt một luồng thảo luận, chẳng hạn, và thực sự hiển thị điều này. Và đó là một cách để thực sự xây dựng một trải nghiệm phong phú hơn rất nhiều với MCP để sử dụng toàn bộ sức mạnh mà giao thức mang lại.
Đưa MCP Server lên Web: Ủy quyền và Khả năng Mở rộng
Nhưng đây chỉ là khởi đầu. Bởi vì hầu hết các trải nghiệm nếu bạn xây dựng các máy chủ MCP cho đến nay đều là các trải nghiệm cục bộ. Trong số 10.000 máy chủ MCP mà cộng đồng đã xây dựng trong sáu đến bảy tháng qua, phần lớn là các trải nghiệm cục bộ. Nhưng tôi nghĩ chúng ta có thể tiến thêm một bước nữa, và tôi nghĩ đây là điều lớn tiếp theo của MCP: đưa các máy chủ MCP ra khỏi trải nghiệm cục bộ lên web.
Vậy điều này có nghĩa là gì? Nó có nghĩa là thay vì có một máy chủ MCP là một vùng chứa Docker hoặc một dạng tệp thực thi cục bộ nào đó, thì nó sẽ chỉ là một trang web mà máy khách của bạn có thể kết nối và hiển thị MCP này để bạn tương tác. Nhưng để làm được điều đó, chúng ta cần hai thành phần quan trọng: chúng ta cần ủy quyền và chúng ta cần khả năng mở rộng. Trong đặc tả kỹ thuật gần đây nhất của MCP, chúng ta đã thực hiện rất nhiều thay đổi về vấn đề này, từ những bài học chúng ta đã học được và những phản hồi chúng ta thực sự nhận được từ cộng đồng cũng như các đối tác chính. Và chúng tôi đã làm việc chặt chẽ, ví dụ, với những người trong ngành làm việc về OAuth và các khía cạnh khác để thực hiện điều này đúng cách.
Với ủy quyền trong MCP, bạn có thể cung cấp ngữ cảnh riêng tư của người dùng có thể nằm phía sau một tài khoản trực tuyến hoặc thứ gì đó trực tiếp cho ứng dụng LLM. Và điều này thực sự cho phép các tác giả MCP ràng buộc khả năng của máy chủ MCP với một người dùng và tài khoản trực tuyến hoặc những thứ tương tự. Và để làm điều đó, cách mà điều này hiện phải hoạt động trong MCP là bạn thực hiện bằng cách cung cấp OAuth 2.1 làm lớp ủy quyền. Và đặc tả kỹ thuật MCP về cơ bản nói rằng bạn cần thực hiện OAuth 2.1 và điều đó hơi khó khăn vì rất ít người biết OAuth 2.1 là gì. Nhưng OAuth 2.1 thường chỉ là OAuth 2.0 với tất cả những điều cơ bản bạn sẽ làm dù sao đi nữa, tất cả những cân nhắc bảo mật mà những người đã làm OAuth sẽ khuyên bạn làm. Vì vậy, nó chỉ là OAuth 2.0 được tinh chỉnh một chút. Và bạn có thể đã làm điều đó nếu bạn đang làm OAuth.
Nếu bạn triển khai quy trình làm việc OAuth này, bạn sẽ nhận được hai mẫu thú vị. Và mẫu đầu tiên là kịch bản của một máy chủ MCP trên web. Một ví dụ điển hình là nếu bạn là một nhà cung cấp dịch vụ thanh toán và bạn có trang web payment.com. Và tôi, với tư cách là người dùng, có một tài khoản trực tuyến ở đó. Bây giờ, tôi, với tư cách là nhà cung cấp dịch vụ thanh toán, có thể hiển thị MCP.payment.com mà người dùng có thể đưa vào máy khách MCP. Và máy khách MCP sẽ thực hiện quy trình làm việc OAuth. Tôi đăng nhập bằng tài khoản của mình và tôi biết đây là payment.com. Tôi biết đây là người mà tôi có tài khoản trực tuyến với nhà cung cấp mà tôi tin tưởng. Tôi không còn tin tưởng một vùng chứa Docker ngẫu nhiên chạy cục bộ được xây dựng bởi một nhà phát triển bên thứ ba nữa. Tôi tin tưởng người mà tôi đã tin tưởng với dữ liệu của họ, và các nhà phát triển của họ. Và về phía phát triển của họ, họ có thể cập nhật máy chủ này tùy ý và họ không phải đợi tôi tải xuống một ảnh Docker mới. Và đây, tôi nghĩ, sẽ là một bước tiến rất lớn để cho phép các máy chủ MCP được hiển thị trên web và máy khách MCP tương tác về cơ bản với tất cả các tương tác trực tuyến mà bạn đã có.
Và đây chỉ là một ví dụ nhỏ về điều này. Trong kịch bản này, chúng tôi sử dụng Tích hợp Trí tuệ nhân tạo của Claude mà chúng tôi đã ra mắt vào đầu tháng này để kết nối máy chủ từ xa của bạn và sử dụng quy trình làm việc OAuth này để đăng nhập người dùng của chúng tôi. Để sau đó có các công cụ có sẵn biết về dữ liệu của tôi mà tôi quan tâm, nó dành cho tôi. Nhưng nó cho phép một khía cạnh khác, nó cho phép các doanh nghiệp tích hợp MCP một cách suôn sẻ vào hệ sinh thái của họ, cách họ thường xây dựng ứng dụng. Và điều này có nghĩa là gì? Nó có nghĩa là nội bộ, họ có thể triển khai một máy chủ MCP vào mạng nội bộ của họ hoặc bất cứ thứ gì họ sử dụng. Và sử dụng một nhà cung cấp danh tính như Azure AD hoặc Okta hoặc bất kỳ nhà cung cấp danh tính tập trung nào mà bạn thường sử dụng cho đăng nhập một lần. Và bạn có thể có điều đó vẫn tồn tại và nó sẽ là thứ cung cấp cho bạn các token bạn cần để tương tác với máy chủ MCP. Và điều đó có rất nhiều điều để nói rằng kết quả cuối cùng là một sự tích hợp rất suôn sẻ. Bạn, với tư cách là một đội ngũ phát triển nội bộ, sẽ xây dựng một máy chủ MCP mà bạn kiểm soát, bạn có thể kiểm soát việc triển khai và người dùng chỉ cần đăng nhập vào buổi sáng với đăng nhập một lần bình thường như bạn vẫn làm. Và bất cứ khi nào họ sử dụng một máy chủ MCP từ đó trở đi, họ sẽ được đăng nhập và có quyền truy cập vào dữ liệu mà bạn biết là dữ liệu của họ mà công ty có cho họ. Và điều này, tôi nghĩ, cho phép một cách mới mà tôi đã thấy một số doanh nghiệp lớn đang thực hiện: để xây dựng các hệ thống rộng lớn gồm các máy chủ MCP cho phép một phần của công ty xây dựng một máy chủ, trong khi phần còn lại xử lý các tích hợp, tách biệt rất tốt giữa người xây dựng tích hợp và người xây dựng nền tảng.
Và phần thứ hai mà chúng ta yêu cầu là khả năng mở rộng. Và chúng ta vừa thêm một thứ mới gọi là HTTP có khả năng truyền luồng. Điều đó có nghĩa là có rất nhiều công việc để nói rằng về cơ bản chúng ta muốn các máy chủ MCP có khả năng mở rộng tương tự như các API thông thường. Và nó đơn giản như vậy: với tư cách là tác giả máy chủ, bạn có thể chọn trả về kết quả trực tiếp như bạn sẽ làm trong một API REST, ngoại trừ nó không hoàn toàn chỉ là REST, hoặc nếu bạn cần, bạn có thể mở một luồng và nhận các tương tác trả về. Theo cách đơn giản nhất, bạn chỉ muốn cung cấp một kết quả gọi công cụ. Bạn nhận được một yêu cầu, trả về JSON ứng dụng và bạn đi. Kết thúc câu chuyện, bạn đóng kết nối và kết nối tiếp theo đến và được phục vụ bởi một hàm lambda khác. Nhưng nếu bạn cần các tương tác trả về, chẳng hạn như thông báo hoặc các tính năng chúng ta đã nói đến như lấy mẫu, một yêu cầu đến, bạn bắt đầu một luồng, máy khách chấp nhận luồng và bây giờ bạn có thể gửi thêm những thứ bổ sung cho máy khách trước khi cuối cùng trả về kết quả. Và cả ủy quyền và khả năng mở rộng cùng nhau thực sự là nền tảng để biến MCP từ trải nghiệm cục bộ này trở thành một tiêu chuẩn thực sự về cách các ứng dụng LLM sẽ tương tác với web.
Tương lai của MCP: Tác nhân, Gợi ý, Đăng ký và Đa phương thức
Và để kết thúc tất cả, tôi chỉ muốn nhanh chóng cho bạn thấy về những gì sắp tới cho MCP trong vài tháng tới, một số điểm nổi bật quan trọng nhất. Và phần quan trọng nhất là chúng ta đang bắt đầu suy nghĩ nhiều hơn về các tác nhân. Và có rất nhiều điều phải làm ở đó. Có những tác vụ bất đồng bộ mà bạn phải đóng khi chạy những thứ chạy dài hơn, không chỉ kéo dài một phút, mà có thể là vài giờ. Tác vụ mà một tác nhân thực hiện và cuối cùng tôi muốn có một kết quả cho. Vì vậy, chúng ta suy nghĩ rất nhiều về điều đó và chúng ta sẽ làm việc để xây dựng các thành phần cơ bản cho điều đó trong MCP trong tương lai gần.
Phần thứ hai là gợi ý (elicitations), nghĩa là các máy chủ MCP có thể yêu cầu thông tin đầu vào từ người dùng. Và đó là điều sẽ được triển khai ngay hôm nay hoặc vào thứ Hai trong giao thức.
Và sau đó chúng ta đang làm thêm hai điều. Đầu tiên và quan trọng nhất, chúng ta sẽ xây dựng một kho đăng ký chính thức để đảm bảo có một nơi tập trung mà bạn có thể tìm và xuất bản các máy chủ MCP. Để chúng ta thực sự có một nơi chung để tìm kiếm các máy chủ này, nhưng cũng cho phép các tác nhân tải xuống và cài đặt máy chủ một cách linh hoạt để sử dụng chúng.
Và sau đó, tất nhiên, chúng ta đang suy nghĩ nhiều hơn về đa phương thức. Và điều đó có thể là, ví dụ, truyền luồng kết quả. Nhưng chúng có thể có các khía cạnh khác mà tôi không muốn đi sâu vào chi tiết ngay bây giờ. Và đó chỉ là phần đặc tả kỹ thuật.
Về phần hệ sinh thái, chúng ta đang thực hiện rất nhiều điều khác vào lúc này. Chúng ta đang thêm một Bộ công cụ phát triển phần mềm Ruby được Shopify tài trợ trong vài tuần tới. Và đội ngũ Google Go hiện đang xây dựng một Bộ công cụ phát triển phần mềm Go chính thức của MCP.
Và vì vậy, tôi chỉ hy vọng rằng tôi đã có thể cung cấp cho bạn một cái nhìn sâu sắc hơn về những gì bạn có thể làm với MCP nếu bạn sử dụng toàn bộ sức mạnh của giao thức. Và với điều đó, tôi nghĩ tôi đang hết thời gian. Vì vậy, tôi không thể đặt câu hỏi, chúng ta không thể đặt câu hỏi, chúng ta không thể Hỏi & Đáp. Nhưng hãy tìm tôi sau đó và tôi rất vui được trả lời bất kỳ câu hỏi nào bạn có ở hành lang. Cảm ơn rất nhiều.
TL;DR
- Giao thức Context Mô hình (MCP) mở rộng khả năng tương tác AI vượt xa việc chỉ gọi công cụ, bằng cách giới thiệu các
primitivemới để xây dựng trải nghiệm người dùng phong phú và linh hoạt hơn. - Các
primitivecốt lõi bao gồmprompts(người dùng điều khiển),resources(ứng dụng điều khiển),tools(mô hình AI điều khiển),sampling(server yêu cầu AI client) vàroots(client cung cấp ngữ cảnh môi trường), mỗi loại phục vụ một mô hình tương tác khác nhau. - Hướng phát triển chính của MCP là đưa các
serverlên web thông quaủy quyền(sử dụngOAuth 2.1) vàkhả năng mở rộng, cho phép các dịch vụ trực tuyến đáng tin cậy tích hợp sâu hơn với hệ sinh thái AI.
Điểm chính
- MCP Primitives: MCP định nghĩa năm loại
primitivechính:Prompts,Resources,Tools,Sampling, vàRoots, mỗi loại đại diện cho một phương thức tương tác độc đáo giữaclient,server,người dùngvàmô hình AI. - Prompts (Người dùng điều khiển):
Promptscho phépserverhiển thị các mẫu câu lệnh được định nghĩa trước, có tính động và hỗ trợ tự động hoàn thành, để người dùng trực tiếp thêm vàocửa sổ ngữ cảnhvà định hướng tương tác vớimô hình AI. - Resources (Ứng dụng điều khiển):
Resourcesđược dùng để hiển thị dữ liệu thô hoặc nội dung từserver(ví dụ:database schema), cho phépclientxử lý theo nhiều cách (như thêm vàocửa sổ ngữ cảnh, tạoembedding, RAG) mà không cần sự can thiệp trực tiếp của người dùng haymô hình AI. - Tools (Mô hình AI điều khiển):
Toolslà cáchành độngmàmô hình AIquyết định khi nào cần gọi để thực hiện một tác vụ cụ thể, làprimitivequen thuộc nhất với các nhà phát triểnMCP server. - Sampling (Server yêu cầu AI từ Client): Tính năng
samplingcho phépMCP serveryêu cầuhoàn thànhtừmô hình AIđã được cấu hình trênclient, giúpserversử dụng AI mà không cầnAPI keyriêng, đảm bảoclientkiểm soátbảo mật,quyền riêng tưvàchi phí, đồng thời cho phép chuỗiserverđệ quy. - Roots (Ngữ cảnh môi trường từ Client):
Rootslàprimitivecho phépMCP serverhỏiclient(ví dụ:IDE) về cácdự ánhoặcthư mụcđang mở, cung cấpngữ cảnh môi trườngcần thiết đểserverhoạt động chính xác (ví dụ: thực thilệnh Gittrong đúngworkspace). - Web Integration với OAuth 2.1: Tương lai của MCP hướng tới việc đưa các
serverlên web. Điều này yêu cầuủy quyềnthông quaOAuth 2.1để cho phépservertruy cậpngữ cảnh riêng tưcủa người dùng một cách an toàn và đáng tin cậy, chuyển đổi từ cácserver cục bộsang cácdịch vụ webcó khả năng mở rộng.
Từ vựng
Model Context Protocol (MCP)— Giao thức Context Mô hình (MCP)Primitive— Thành phần cơ bảnPrompt— Mẫu câu lệnh / Câu lệnh (người dùng điều khiển)Resource— Tài nguyên / Dữ liệu thô (ứng dụng điều khiển)Tool— Công cụ / Hành động (mô hình AI điều khiển)Sampling— Lấy mẫu / Yêu cầu hoàn thành từ clientRoot— Ngữ cảnh môi trường / GốcContext Window— Cửa sổ ngữ cảnhDelegation— Ủy quyềnOAuth 2.1— OAuth 2.1
Nội dung chi tiết
Giới thiệu về Giao thức Context Mô hình (MCP)
Xin chào, tôi là David, thành viên nhóm kỹ thuật tại Anthropic và là một trong những người đồng sáng tạo MCP. Hôm nay, tôi sẽ chia sẻ thêm về giao thức này và những điều bạn có thể làm, nhằm giúp bạn hiểu rõ hơn về MCP ngoài việc sử dụng nó cho các công cụ như hầu hết mọi người đang làm. Mục tiêu hôm nay là giới thiệu khả năng của giao thức và cách bạn có thể sử dụng nó để xây dựng các tương tác phong phú hơn với các MCP client, vượt ra ngoài những gì thường được biết đến về việc gọi công cụ.
Đầu tiên, tôi sẽ trình bày tất cả những gì chúng tôi gọi là các primitive – các cách để server hiển thị thông tin cho client. Sau đó, chúng ta sẽ đi sâu vào một số khía cạnh ít được biết đến hơn của giao thức. Tiếp theo, tôi muốn nói một chút về cách xây dựng một tương tác thực sự phong phú trước khi chuyển sang những gì sắp ra mắt cho MCP và cách chúng tôi đưa MCP lên web.
Prompts và Tương tác Người dùng
Để bắt đầu, tôi muốn nói về một trong những primitive của MCP mà các server có thể hiển thị cho MCP client nhưng rất ít người biết đến: đó là prompts. Prompts thực chất là các mẫu được định nghĩa trước cho các tương tác AI. Nói cách khác, đó là một cách để MCP server hiển thị một tập hợp văn bản (một câu lệnh) theo cách cho phép người dùng trực tiếp thêm vào cửa sổ ngữ cảnh và xem cách họ sẽ sử dụng MCP server mà bạn đang xây dựng.
Hai trường hợp sử dụng chính ở đây là:
- Bạn, với tư cách là tác giả
MCP server, cung cấp một ví dụ để giới thiệu cho người dùng. Điều này giúp họ biết cách sử dụngMCP servermột cách tốt nhất, bởi vì bạn là người đã xây dựng nó và bạn là người biết cách sử dụng nó hiệu quả nhất. - Vì
MCP Promptscũng có tính động (chúng chỉ làmãđược thực thi trênMCP server), chúng cho phép bạn làm những điều phong phú hơn.
Trong kịch bản này, tôi muốn giới thiệu một MCP prompt mà người dùng gọi. Trình chỉnh sửa ở đây sẽ trực tiếp tìm nạp các bình luận trên GitHub vào cửa sổ ngữ cảnh của tôi. Điều bạn thấy tôi đang làm ở đây là đơn giản đưa các bình luận từ pull request mà tôi đã viết vào cửa sổ ngữ cảnh, để tôi có thể tương tác với chúng và yêu cầu mô hình AI giúp tôi áp dụng những thay đổi đã được yêu cầu hoặc bất cứ điều gì tôi muốn làm. Đây thực sự là một cách để hiển thị những thứ mà người dùng nên tương tác trực tiếp và muốn đưa trực tiếp vào cửa sổ ngữ cảnh trước khi tương tác với Mô hình ngôn ngữ lớn (LLM).
Điều này khác với công cụ ở chỗ mô hình AI quyết định khi nào cần hành động, còn ở đây, người dùng quyết định: "Tôi muốn thêm điều này vào cửa sổ ngữ cảnh."
Hoàn thành Prompt
Nếu bạn để ý kỹ, có một điều bổ sung mà rất ít người biết bạn có thể làm: đó là hoàn thành prompt. Nếu bạn đã quan sát kỹ, có một lúc hiện lên một cửa sổ bật nhanh cho thấy tôi đang chọn các pull request có sẵn cho mình. Đây là một điều mà bạn, với tư cách là tác giả MCP server, có thể cung cấp để xây dựng các mẫu tham số phong phú hơn.
Việc này cực kỳ dễ thực hiện trong mã. Nếu bạn đang xây dựng một prompt bằng TypeScript cung cấp cho người dùng một mẫu như vậy và có các tham số cùng với tính năng tự động hoàn thành, thì đó chỉ là vài dòng mã mà Claude Code cùng với Claude 4 hầu hết có thể viết cho bạn. Nó đơn giản như vậy: một hàm để hoàn thành, một hàm để tạo prompt.
Đây đã là một trong những primitive bạn có thể sử dụng để xây dựng tương tác cho người dùng với MCP server, nhưng nó phong phú hơn một chút so với việc gọi công cụ.
Resources và Dữ liệu Thô
Một primitive thứ hai là thứ chúng tôi gọi là resources. Đây là một primitive khác mà MCP server có thể hiển thị cho MCP client. Trong khi prompts thực sự tập trung vào các đoạn văn bản mà người dùng có thể thêm vào cửa sổ ngữ cảnh, thì resources là về việc hiển thị dữ liệu thô hoặc nội dung từ một server.
Tại sao bạn muốn làm điều này? Có hai lý do:
- Hầu hết các
clienthiện nay sẽ cho phép bạn thêm nội dung thô này trực tiếp vàocửa sổ ngữ cảnh, theo cách đó chúng không khác nhiều so vớiprompts. - Nó cũng cho phép
ứng dụngthực hiện những điều bổ sung với dữ liệu thô đó. Ví dụ, xây dựng cácembeddingxung quanh dữ liệu màserverhiển thị và sau đó thực hiệntạo sinh tăng cường truy xuấtbằng cách thêm những thứ phù hợp nhất vàocửa sổ ngữ cảnh.
Đây là một lĩnh vực mà tôi cảm thấy hiện tại vẫn còn ít được khám phá. Tôi chỉ muốn nhanh chóng cho bạn thấy cách resources hoạt động. Trong trường hợp này, đây lại là một trong những cách mà MCP client hiển thị resource dưới dạng đối tượng giống tệp. Trong kịch bản này, chúng ta đang hiển thị database schema cho một PostgreSQL database dưới dạng resources, và sau đó bạn có thể thêm chúng vào Claude Desktop giống như các tệp. Bằng cách đó, bạn có thể nói với Claude rằng đây là các bảng mà tôi quan tâm, và bây giờ hãy tiếp tục và trực quan hóa chúng.
Trong kịch bản này, bạn sẽ thấy Claude sẽ viết một biểu đồ đẹp mắt để trực quan hóa database schema cho tôi. Tôi đã hiển thị schema thông qua resources. Vẫn còn rất nhiều không gian chưa được khám phá ở đây, nếu bạn vượt ra ngoài việc chỉ thêm nó dưới dạng tệp, tôi có thể nghĩ về việc tăng cường truy xuất hoặc bất kỳ điều gì khác mà ứng dụng có thể muốn làm.
Tools và Tác vụ Điều khiển bởi Mô hình AI
Vậy đó là hai primitive: một là prompts (những thứ mà người dùng tương tác), thứ hai là resources (mà ứng dụng tương tác).
Sau đó, tất nhiên, phải có một primitive thứ ba mà tất cả các bạn đều rất quen thuộc, mà tôi không muốn đi sâu vào quá nhiều. Bởi vì nếu bạn đã xây dựng một MCP server, bạn có thể đã xây dựng nó để hiển thị một công cụ. Công cụ thực sự là những hành động có thể được gọi ra. Đó là một trong những khoảnh khắc mà tôi cảm thấy kỳ diệu nhất khi bạn xây dựng một MCP server: khi mô hình AI lần đầu tiên gọi một thứ mà bạn quan tâm, một thứ bạn đã xây dựng, và có một tác động nhỏ đến nó – có thể là kích hoạt một database cho bạn hoặc bất cứ điều gì.
Nhưng đây lại là điều mà mô hình AI quyết định khi nào cần gọi một hành động.
Mô hình Tương tác: Prompts, Resources và Tools
Đây là ba primitive rất cơ bản mà giao thức hiển thị. Nếu bạn suy nghĩ kỹ về ba primitive mà tôi vừa giới thiệu cho bạn, có một chút chồng chéo về cách bạn sử dụng chúng, khi nào bạn thực sự sử dụng cái nào.
Có một điều mà chúng ta không nói đủ về nó, và nó nằm đâu đó trong ngôn ngữ đặc tả của Model Context Protocol: đó là mô hình tương tác. Tôi nghĩ việc giới thiệu nó hy vọng sẽ làm rõ khi nào bạn sử dụng cái gì. Bởi vì mô hình tương tác được xây dựng theo cách mà bạn có thể hiển thị cùng một dữ liệu theo ba cách khác nhau, tùy thuộc vào thời điểm bạn muốn nó xuất hiện.
Prompts, một lần nữa, là tất cả những thứ do người dùng điều khiển. Đó là thứ mà người dùng gọi, thêm vàocửa sổ ngữ cảnh. Kịch bản phổ biến nhất mà bạn thấy chúng xuất hiện là lệnhslash commandhoặc lệnh@.Resourcesmặt khác, hoàn toàn doứng dụngđiều khiển.Ứng dụngsử dụngLLM, có thể làClaude Desktop, có thể làVSCode, hoàn toàn quyết định những gì nó muốn làm với dữ liệu đó.- Cuối cùng,
công cụđược điều khiển bởimô hình AI.
Giữa ứng dụng AI sử dụng mô hình AI và người dùng, chúng ta có cả ba phần mà chúng ta cuối cùng bao phủ bằng cách sử dụng ba primitive cơ bản này. Điều đó đã cho phép bạn xây dựng một ứng dụng và trải nghiệm phong phú hơn một chút so với những gì hầu hết mọi người hiện có thể làm với công cụ, bởi vì bạn có một cách tương tác với người dùng tinh tế hơn một chút so với việc chỉ chờ mô hình AI gọi công cụ.
Vượt xa các Primitive cơ bản: Sampling
Nhưng chúng ta thậm chí có thể đi xa hơn nữa, bởi vì mặc dù các primitive cơ bản này đưa chúng ta đi xa hơn một chút so với những gì hầu hết các MCP server đang làm hiện tại, vẫn có những tương tác phong phú hơn mà chúng ta muốn kích hoạt. Để làm cho điều này dễ hiểu hơn, đây là một ví dụ mà tôi muốn đưa ra, nó thể hiện vấn đề này.
Làm thế nào bạn có thể xây dựng một MCP server chẳng hạn, tóm tắt một cuộc thảo luận từ một issue tracker? Một mặt, tôi có thể xây dựng một MCP server hiển thị loại dữ liệu này rất đơn giản và điều đó khá rõ ràng. Nhưng làm thế nào để tôi thực hiện bước tóm tắt? Bởi vì để tóm tắt, rõ ràng tôi cần một mô hình AI.
Vậy có một cách để xây dựng điều này là bạn có thể xây dựng một MCP server đóng vai trò là server theo dõi issue. Và bạn có một lựa chọn ở đây: bạn có thể tự mang SDK của riêng mình và gọi mô hình AI để mô hình AI tóm tắt. Nhưng sau đó có một vấn đề nhỏ. Vấn đề là client có một lựa chọn mô hình AI (có thể là Claude hoặc bất kỳ mô hình AI nào khác), nhưng server – MCP server mà bạn xây dựng – không biết mô hình AI nào mà client đã cấu hình. Vì vậy, nếu bạn tự mang SDK của nhà cung cấp mô hình AI, có thể là SDK của Anthropic, bạn vẫn cần một API key mà người dùng cần cung cấp, và điều này rất nhanh chóng trở nên khó xử.
Vì vậy, MCP có một tính năng ẩn nhỏ hoặc một primitive nhỏ gọi là sampling (lấy mẫu) cho phép server yêu cầu hoàn thành từ client. Điều này có nghĩa là gì? Nó có nghĩa là server có thể sử dụng một mô hình AI một cách độc lập mà không cần phải tự cung cấp SDK, mà thay vào đó hỏi client rằng bạn đã cấu hình mô hình AI nào, và client là người cung cấp hoàn thành cho server.
Điều này làm được hai việc:
- Trước hết, nó cho phép
clientcó toàn quyền kiểm soát về bảo mật, quyền riêng tư và chi phí. Thay vì phải cung cấp mộtAPI keybổ sung, bạn có thể tận dụnggói đăng kýmàclientcủa bạn có thể đã có. - Nhưng nó cũng cho phép một phần thứ hai: nếu bạn xâu chuỗi nhiều
MCP servertheo một cách thú vị, nó làm cho toàn bộ mẫu này trở nên đệ quy. Ý tôi là gì khi nói điều này, nó hơi trừu tượng: bạn có thể lấy mộtMCP serverhiển thị mộtcông cụ, nhưng trong quá trình thực thicông cụ, bạn có thể muốn sử dụng thêm cácMCP serverởdownstream. Và đâu đó ởdownstreamtronghệ thống AInày có thể cóserver theo dõi issuemới muốn có mộthoàn thành. Nhưng bằng cách sử dụngsampling, bạn có thể đẩy yêu cầu lên đểclientluôn có toàn quyền kiểm soát chi phí củagói đăng ký(bất cứ điều gì bạn muốn sử dụng). Nó giữ toàn quyền kiểm soát quyền riêng tư, chi phí của tương tác này và về cơ bản quản lý mọi tương tác màMCP servermuốn thực hiện vớimô hình AI.
Và điều đó cho phép xâu chuỗi rất mạnh mẽ và cho phép các mẫu phức tạp hơn, vốn đã đi vào các cách bạn có thể xây dựng các Tác nhân AI MCP nhỏ. Nhưng đó là sampling. Sampling hiện tại thật đáng buồn, tôi nghĩ là một trong những tính năng thú vị hơn, nhưng cũng là một trong những tính năng ít được hỗ trợ nhất trong các client. Đối với các project first-party của chúng tôi, chúng tôi sẽ đưa sampling vào năm nay. Và sau đó, hy vọng bạn có thể bắt đầu xây dựng các MCP server thú vị hơn.
Roots và Ngữ cảnh Môi trường
Và sau đó có một primitive cuối cùng mà tôi muốn đề cập, nó cũng thú vị hơn một chút. Và đây là một trong những điều mà khi nhìn lại, với tư cách là một trong những người đã xây dựng giao thức, tôi có lẽ đã đặt tên rất tệ (thành thật mà nói, tôi không giỏi đặt tên lắm, bạn có thể sẽ thấy điều này xuyên suốt bài nói chuyện).
Nhưng có một thứ gọi là roots. Và roots cũng là một khía cạnh thú vị. Bởi vì hãy tưởng tượng tôi muốn xây dựng một MCP server hôm nay để xử lý các lệnh git của tôi. Tôi không muốn phải tự mình xử lý git. Tôi không muốn thực hiện các lệnh source control. Tôi không nhớ bất kỳ điều gì trong số đó. Tôi muốn có MCP, như một MCP server xử lý việc này.
Vậy bây giờ tôi sẽ kết nối một MCP server vào IDE yêu thích của tôi. Nhưng làm sao IDE biết được? Làm sao MCP server biết được những project nào đang mở trong IDE? Bởi vì rõ ràng tôi muốn chạy các lệnh git trong các workspace...
[transcript bị gián đoạn]
Khám phá Thành phần Cơ bản của MCP và Xây dựng Tương tác Phong phú
Tôi đã mở. Và vì vậy, roots là một cách để máy chủ có thể hỏi máy khách, chẳng hạn như VS Code, về các dự án chúng ta đang mở, để máy chủ chỉ hoạt động trong các thư mục đã mở và biết nơi cần thực thi các lệnh Git của mình. Đây lại là một tính năng không được sử dụng rộng rãi, nhưng VS Code hiện đang hỗ trợ nó. Và đây chỉ là tất cả các thành phần cơ bản lớn mà MCP cung cấp. Chúng ta có năm thành phần cơ bản: ba ở phía máy chủ và hai ở phía máy khách. Nhưng làm thế nào để kết hợp tất cả lại với nhau để thực sự xây dựng một tương tác phong phú, bởi vì đó là điều chúng ta muốn. Chúng ta muốn xây dựng một thứ gì đó cho người dùng phong phú hơn là chỉ gọi công cụ.
Vậy hãy cùng xem bạn sẽ xây dựng một máy chủ MCP giả định tương tác với ứng dụng trò chuyện yêu thích của bạn, cho dù đó là Discord hay Slack, như thế nào. Bạn có thể sử dụng câu lệnh để đưa ra ví dụ cho người dùng, chẳng hạn như "tóm tắt cuộc thảo luận này", và bạn có thể sử dụng các bổ sung với các luồng thảo luận gần đây của người dùng hoặc bất cứ điều gì bạn muốn họ hiển thị. Bạn có thể có các câu lệnh bổ sung như "có gì mới", "chuyện gì đã xảy ra kể từ hôm qua". Và đó là một cách để người dùng có thể bắt đầu ngay lập tức sử dụng máy chủ bạn đã cung cấp và nhận được những ý tưởng mà bạn muốn nó được sử dụng. Sau đó, bạn có thể sử dụng tài nguyên để liệt kê trực tiếp các kênh để hiển thị các luồng thảo luận gần đây đã xảy ra trong ứng dụng trò chuyện, sao cho máy khách MCP có thể lập chỉ mục và xử lý chúng theo cách nó muốn. Và tất nhiên, cuối cùng nhưng không kém phần quan trọng, chúng ta vẫn có các công cụ của mình: chúng ta có tìm kiếm, chúng ta có đọc kênh, chúng ta có đọc và luồng thảo luận, và chúng ta sẽ sử dụng lấy mẫu để tóm tắt một luồng thảo luận, chẳng hạn, và thực sự hiển thị điều này. Và đó là một cách để thực sự xây dựng một trải nghiệm phong phú hơn rất nhiều với MCP để sử dụng toàn bộ sức mạnh mà giao thức mang lại.
Đưa MCP Server lên Web: Ủy quyền và Khả năng Mở rộng
Nhưng đây chỉ là khởi đầu. Bởi vì hầu hết các trải nghiệm nếu bạn xây dựng các máy chủ MCP cho đến nay đều là các trải nghiệm cục bộ. Trong số 10.000 máy chủ MCP mà cộng đồng đã xây dựng trong sáu đến bảy tháng qua, phần lớn là các trải nghiệm cục bộ. Nhưng tôi nghĩ chúng ta có thể tiến thêm một bước nữa, và tôi nghĩ đây là điều lớn tiếp theo của MCP: đưa các máy chủ MCP ra khỏi trải nghiệm cục bộ lên web.
Vậy điều này có nghĩa là gì? Nó có nghĩa là thay vì có một máy chủ MCP là một vùng chứa Docker hoặc một dạng tệp thực thi cục bộ nào đó, thì nó sẽ chỉ là một trang web mà máy khách của bạn có thể kết nối và hiển thị MCP này để bạn tương tác. Nhưng để làm được điều đó, chúng ta cần hai thành phần quan trọng: chúng ta cần ủy quyền và chúng ta cần khả năng mở rộng. Trong đặc tả kỹ thuật gần đây nhất của MCP, chúng ta đã thực hiện rất nhiều thay đổi về vấn đề này, từ những bài học chúng ta đã học được và những phản hồi chúng ta thực sự nhận được từ cộng đồng cũng như các đối tác chính. Và chúng tôi đã làm việc chặt chẽ, ví dụ, với những người trong ngành làm việc về OAuth và các khía cạnh khác để thực hiện điều này đúng cách.
Với ủy quyền trong MCP, bạn có thể cung cấp ngữ cảnh riêng tư của người dùng có thể nằm phía sau một tài khoản trực tuyến hoặc thứ gì đó trực tiếp cho ứng dụng LLM. Và điều này thực sự cho phép các tác giả MCP ràng buộc khả năng của máy chủ MCP với một người dùng và tài khoản trực tuyến hoặc những thứ tương tự. Và để làm điều đó, cách mà điều này hiện phải hoạt động trong MCP là bạn thực hiện bằng cách cung cấp OAuth 2.1 làm lớp ủy quyền. Và đặc tả kỹ thuật MCP về cơ bản nói rằng bạn cần thực hiện OAuth 2.1 và điều đó hơi khó khăn vì rất ít người biết OAuth 2.1 là gì. Nhưng OAuth 2.1 thường chỉ là OAuth 2.0 với tất cả những điều cơ bản bạn sẽ làm dù sao đi nữa, tất cả những cân nhắc bảo mật mà những người đã làm OAuth sẽ khuyên bạn làm. Vì vậy, nó chỉ là OAuth 2.0 được tinh chỉnh một chút. Và bạn có thể đã làm điều đó nếu bạn đang làm OAuth.
Nếu bạn triển khai quy trình làm việc OAuth này, bạn sẽ nhận được hai mẫu thú vị. Và mẫu đầu tiên là kịch bản của một máy chủ MCP trên web. Một ví dụ điển hình là nếu bạn là một nhà cung cấp dịch vụ thanh toán và bạn có trang web payment.com. Và tôi, với tư cách là người dùng, có một tài khoản trực tuyến ở đó. Bây giờ, tôi, với tư cách là nhà cung cấp dịch vụ thanh toán, có thể hiển thị MCP.payment.com mà người dùng có thể đưa vào máy khách MCP. Và máy khách MCP sẽ thực hiện quy trình làm việc OAuth. Tôi đăng nhập bằng tài khoản của mình và tôi biết đây là payment.com. Tôi biết đây là người mà tôi có tài khoản trực tuyến với nhà cung cấp mà tôi tin tưởng. Tôi không còn tin tưởng một vùng chứa Docker ngẫu nhiên chạy cục bộ được xây dựng bởi một nhà phát triển bên thứ ba nữa. Tôi tin tưởng người mà tôi đã tin tưởng với dữ liệu của họ, và các nhà phát triển của họ. Và về phía phát triển của họ, họ có thể cập nhật máy chủ này tùy ý và họ không phải đợi tôi tải xuống một ảnh Docker mới. Và đây, tôi nghĩ, sẽ là một bước tiến rất lớn để cho phép các máy chủ MCP được hiển thị trên web và máy khách MCP tương tác về cơ bản với tất cả các tương tác trực tuyến mà bạn đã có.
Và đây chỉ là một ví dụ nhỏ về điều này. Trong kịch bản này, chúng tôi sử dụng Tích hợp Trí tuệ nhân tạo của Claude mà chúng tôi đã ra mắt vào đầu tháng này để kết nối máy chủ từ xa của bạn và sử dụng quy trình làm việc OAuth này để đăng nhập người dùng của chúng tôi. Để sau đó có các công cụ có sẵn biết về dữ liệu của tôi mà tôi quan tâm, nó dành cho tôi. Nhưng nó cho phép một khía cạnh khác, nó cho phép các doanh nghiệp tích hợp MCP một cách suôn sẻ vào hệ sinh thái của họ, cách họ thường xây dựng ứng dụng. Và điều này có nghĩa là gì? Nó có nghĩa là nội bộ, họ có thể triển khai một máy chủ MCP vào mạng nội bộ của họ hoặc bất cứ thứ gì họ sử dụng. Và sử dụng một nhà cung cấp danh tính như Azure AD hoặc Okta hoặc bất kỳ nhà cung cấp danh tính tập trung nào mà bạn thường sử dụng cho đăng nhập một lần. Và bạn có thể có điều đó vẫn tồn tại và nó sẽ là thứ cung cấp cho bạn các token bạn cần để tương tác với máy chủ MCP. Và điều đó có rất nhiều điều để nói rằng kết quả cuối cùng là một sự tích hợp rất suôn sẻ. Bạn, với tư cách là một đội ngũ phát triển nội bộ, sẽ xây dựng một máy chủ MCP mà bạn kiểm soát, bạn có thể kiểm soát việc triển khai và người dùng chỉ cần đăng nhập vào buổi sáng với đăng nhập một lần bình thường như bạn vẫn làm. Và bất cứ khi nào họ sử dụng một máy chủ MCP từ đó trở đi, họ sẽ được đăng nhập và có quyền truy cập vào dữ liệu mà bạn biết là dữ liệu của họ mà công ty có cho họ. Và điều này, tôi nghĩ, cho phép một cách mới mà tôi đã thấy một số doanh nghiệp lớn đang thực hiện: để xây dựng các hệ thống rộng lớn gồm các máy chủ MCP cho phép một phần của công ty xây dựng một máy chủ, trong khi phần còn lại xử lý các tích hợp, tách biệt rất tốt giữa người xây dựng tích hợp và người xây dựng nền tảng.
Và phần thứ hai mà chúng ta yêu cầu là khả năng mở rộng. Và chúng ta vừa thêm một thứ mới gọi là HTTP có khả năng truyền luồng. Điều đó có nghĩa là có rất nhiều công việc để nói rằng về cơ bản chúng ta muốn các máy chủ MCP có khả năng mở rộng tương tự như các API thông thường. Và nó đơn giản như vậy: với tư cách là tác giả máy chủ, bạn có thể chọn trả về kết quả trực tiếp như bạn sẽ làm trong một API REST, ngoại trừ nó không hoàn toàn chỉ là REST, hoặc nếu bạn cần, bạn có thể mở một luồng và nhận các tương tác trả về. Theo cách đơn giản nhất, bạn chỉ muốn cung cấp một kết quả gọi công cụ. Bạn nhận được một yêu cầu, trả về JSON ứng dụng và bạn đi. Kết thúc câu chuyện, bạn đóng kết nối và kết nối tiếp theo đến và được phục vụ bởi một hàm lambda khác. Nhưng nếu bạn cần các tương tác trả về, chẳng hạn như thông báo hoặc các tính năng chúng ta đã nói đến như lấy mẫu, một yêu cầu đến, bạn bắt đầu một luồng, máy khách chấp nhận luồng và bây giờ bạn có thể gửi thêm những thứ bổ sung cho máy khách trước khi cuối cùng trả về kết quả. Và cả ủy quyền và khả năng mở rộng cùng nhau thực sự là nền tảng để biến MCP từ trải nghiệm cục bộ này trở thành một tiêu chuẩn thực sự về cách các ứng dụng LLM sẽ tương tác với web.
Tương lai của MCP: Tác nhân, Gợi ý, Đăng ký và Đa phương thức
Và để kết thúc tất cả, tôi chỉ muốn nhanh chóng cho bạn thấy về những gì sắp tới cho MCP trong vài tháng tới, một số điểm nổi bật quan trọng nhất. Và phần quan trọng nhất là chúng ta đang bắt đầu suy nghĩ nhiều hơn về các tác nhân. Và có rất nhiều điều phải làm ở đó. Có những tác vụ bất đồng bộ mà bạn phải đóng khi chạy những thứ chạy dài hơn, không chỉ kéo dài một phút, mà có thể là vài giờ. Tác vụ mà một tác nhân thực hiện và cuối cùng tôi muốn có một kết quả cho. Vì vậy, chúng ta suy nghĩ rất nhiều về điều đó và chúng ta sẽ làm việc để xây dựng các thành phần cơ bản cho điều đó trong MCP trong tương lai gần.
Phần thứ hai là gợi ý (elicitations), nghĩa là các máy chủ MCP có thể yêu cầu thông tin đầu vào từ người dùng. Và đó là điều sẽ được triển khai ngay hôm nay hoặc vào thứ Hai trong giao thức.
Và sau đó chúng ta đang làm thêm hai điều. Đầu tiên và quan trọng nhất, chúng ta sẽ xây dựng một kho đăng ký chính thức để đảm bảo có một nơi tập trung mà bạn có thể tìm và xuất bản các máy chủ MCP. Để chúng ta thực sự có một nơi chung để tìm kiếm các máy chủ này, nhưng cũng cho phép các tác nhân tải xuống và cài đặt máy chủ một cách linh hoạt để sử dụng chúng.
Và sau đó, tất nhiên, chúng ta đang suy nghĩ nhiều hơn về đa phương thức. Và điều đó có thể là, ví dụ, truyền luồng kết quả. Nhưng chúng có thể có các khía cạnh khác mà tôi không muốn đi sâu vào chi tiết ngay bây giờ. Và đó chỉ là phần đặc tả kỹ thuật.
Về phần hệ sinh thái, chúng ta đang thực hiện rất nhiều điều khác vào lúc này. Chúng ta đang thêm một Bộ công cụ phát triển phần mềm Ruby được Shopify tài trợ trong vài tuần tới. Và đội ngũ Google Go hiện đang xây dựng một Bộ công cụ phát triển phần mềm Go chính thức của MCP.
Và vì vậy, tôi chỉ hy vọng rằng tôi đã có thể cung cấp cho bạn một cái nhìn sâu sắc hơn về những gì bạn có thể làm với MCP nếu bạn sử dụng toàn bộ sức mạnh của giao thức. Và với điều đó, tôi nghĩ tôi đang hết thời gian. Vì vậy, tôi không thể đặt câu hỏi, chúng ta không thể đặt câu hỏi, chúng ta không thể Hỏi & Đáp. Nhưng hãy tìm tôi sau đó và tôi rất vui được trả lời bất kỳ câu hỏi nào bạn có ở hành lang. Cảm ơn rất nhiều.