Máy chủ MCP thiết lập khung để kết nối các chức năng của ứng dụng (công cụ MCP) với Connected Apps Platform. Để cho phép Gemini chọn, gọi và xử lý kết quả của dịch vụ một cách đáng tin cậy hơn, cấu hình MCP của bạn phải tuân thủ nghiêm ngặt các tiêu chuẩn sau.
Nguyên tắc chỉ đạo
Đối với mỗi chức năng, hãy tập trung vào ý định của người dùng và các trường hợp sử dụng, chứ không phải khả năng của chức năng đó. Nội dung mô tả là cách chính để bạn cho mô hình biết công cụ của bạn dùng để làm gì và có thể phản hồi những trường hợp sử dụng nào.
Lập phiên bản
Để hỗ trợ các hoạt động triển khai MCP mạnh mẽ và có thể mở rộng, hãy áp dụng cấu trúc URI có cấu trúc sử dụng tính năng tạo phiên bản dựa trên đường dẫn, ví dụ: /v1, /v2. Việc này giúp bạn duy trì khả năng tương thích ngược và kiểm soát các tính năng mới.
Việc bổ sung các miền con dành riêng cho nhà cung cấp, chẳng hạn như https://gemini.mcp.company.com/mcp/v1, cho phép quản lý lưu lượng truy cập một cách chi tiết và tối ưu hoá các định nghĩa công cụ phù hợp với bối cảnh riêng và hành vi xử lý của các mô hình AI khác nhau.
Khả năng tương thích với phiên bản giao thức MCP
Nền tảng ứng dụng được kết nối hỗ trợ quy cách của Giao thức ngữ cảnh mô hình (MCP) lên đến phiên bản 2025-11-25. Các bản phát hành thông số kỹ thuật mới hơn chưa được hỗ trợ.
- Trách nhiệm của nhà phát triển: Bạn có trách nhiệm đảm bảo máy chủ MCP của mình tuân thủ nghiêm ngặt phiên bản giao thức mà Nền tảng ứng dụng đã kết nối (
2025-11-25) hỗ trợ trong quá trình bắt tayinitializevà trên tất cả các định nghĩa về công cụ và giản đồ. - Khả năng tương thích ngược của nền tảng: Khi Connected Apps Platform áp dụng các phiên bản thông số kỹ thuật MCP mới hơn trong tương lai, ứng dụng khách của chúng tôi sẽ duy trì khả năng tương thích ngược với các phiên bản giao thức được hỗ trợ trước đó để các hoạt động tích hợp chính thức hiện có tiếp tục hoạt động mà không bị gián đoạn.
- Quản lý việc nâng cấp: Khi bạn đã sẵn sàng áp dụng quy cách MCP mới được hỗ trợ hoặc giới thiệu các thay đổi về giản đồ, hãy hiển thị các bản cập nhật đó trên một đường dẫn URI mới có phiên bản (ví dụ:
/mcp/v2) trong khi vẫn duy trì điểm cuối hiện có (/mcp/v1) cho lưu lượng truy cập đang hoạt động.
Bạn có thể thay đổi giản đồ MCP giữa các phiên bản ứng dụng. Bạn nên tận dụng tính năng này và tạo phiên bản cho các điểm cuối MCP để hỗ trợ việc triển khai các tính năng mới một cách nhẹ nhàng hoặc chỉ dựa vào các thay đổi có khả năng tương thích ngược.
Quy cách của giao thức truyền tải
Connected Apps Platform chỉ hỗ trợ quy cách Giao thức ngữ cảnh mô hình vận chuyển HTTP có thể truyền trực tuyến phiên bản 2025-03-26 trở lên. Phiên bản này không hỗ trợ giao thức truyền tải HTTP cũ có SSE được mô tả trong quy cách ngày 5 tháng 11 năm 2024.
- Một điểm cuối HTTP. Điểm cuối MCP được cung cấp trong Connected Console (ví dụ:
https://api.example.com/mcp) là URL duy nhất mà các sản phẩm Google có thể áp dụng gửi tất cả yêu cầu JSON-RPC (initialize,tools/list,tools/call) thông quaHTTP POSTtiêu chuẩn. - Truyền trực tuyến SSE trong HTTP có thể truyền trực tuyến. Phương thức truyền tải SSE nhiều điểm cuối cũ không được hỗ trợ, nhưng các Sự kiện do máy chủ gửi như
text/event-streamđược hỗ trợ trong Streamable HTTP. Các yêu cầu gửi đi từ các sản phẩm Google hiện hành bao gồmAccept: application/json, text/event-stream, nghĩa là máy chủ của bạn có thể trả về tải trọngapplication/jsontiêu chuẩn hoặc truyền trực tuyến các phản hồi gia tăng bằng cách sử dụngContent-Type: text/event-streamtrực tiếp trong nội dung phản hồiHTTP POST. - GET stream và 405 Method Not Allowed. Ứng dụng có thể thử một luồng
GETkhông bắt buộc trên điểm cuối cho thông báo từ máy chủ đến ứng dụng. Nếu máy chủ của bạn không có trạng thái hoặc chỉ có yêu cầu-phản hồi, thì việc trả vềHTTP 405 Method Not Allowedsẽ được proxy ứng dụng của sản phẩm Google hiện hành hỗ trợ và xử lý rõ ràng.
Hướng dẫn về máy chủ
Connected Apps Platform được tối ưu hoá để tiếp nhận các chỉ dẫn của máy chủ, cho phép kiểm soát hành vi của mô hình ở mức độ mà các phương tiện khác không thể thực hiện được.
Làm theo hướng dẫn về máy chủ.
Xem như một "gợi ý cho mô hình" kèm theo bối cảnh sử dụng
Hãy làm theo các nguyên tắc sau đây khi cung cấp gợi ý cho mô hình.
- Viết hướng dẫn dưới dạng "gợi ý" hoặc hướng dẫn tổng quan để giúp LLM hiểu được mục đích và chức năng tổng thể của máy chủ.
- Mô tả những việc mà công cụ có thể làm, thay vì liệt kê các tính năng hoặc mô tả cách mô hình nên sử dụng các công cụ và tài nguyên của máy chủ. Nếu hiểu đúng "nội dung", mô hình có thể xác định cách thức khá chính xác dựa trên hành trình của người dùng.
- Giả sử văn bản này sẽ được thêm trực tiếp vào câu lệnh hệ thống của mô hình. Hãy giữ cho câu lệnh rõ ràng, mang tính chỉ dẫn và tiết kiệm mã thông báo.
Bổ sung chứ không lặp lại
Sử dụng không gian này cho bối cảnh chung áp dụng cho tất cả các công cụ, tránh sự dư thừa với các mô tả công cụ riêng lẻ.
Ví dụ về hướng dẫn cho máy chủ
Các ví dụ sau đây cho thấy những việc nên làm và không nên làm liên quan đến việc viết đúng cách hướng dẫn máy chủ.
| Recommended (Nên dùng) | Không nên |
|---|---|
Hãy đóng vai người duy trì kho lưu trữ GitHub chuyên nghiệp. Máy chủ này cung cấp quyền truy cập sâu vào siêu dữ liệu kho lưu trữ, trình theo dõi sự cố và quy trình PR. Hãy sử dụng công cụ này để duy trì tình trạng dự án, tự động hoá quy trình phân loại và đảm bảo các tiêu chuẩn về mã. Giả sử tất cả hành động đều được thực hiện trong bối cảnh của tổ chức đã xác thực, trừ phi có quy định khác. Ưu tiên xác định các chuỗi không hoạt động hoặc PR không liên kết để giữ cho kho lưu trữ luôn ngăn nắp. Ngắn gọn, mang tính chỉ dẫn và bổ sung cho mô hình
|
Máy chủ này có các công cụ cho GitHub. Bạn nên sử dụng công cụ
|
Nguyên tắc về công cụ
Các nguyên tắc sau đây mô tả các phương pháp hay nhất để tạo cấu hình máy chủ MCP cho nhiều chức năng hoặc công cụ trong ứng dụng của bạn.
Quy ước đặt tên công cụ
Hãy tuân thủ các nguyên tắc sau khi đặt tên cho công cụ:
Sử dụng tên trực quan, con người có thể đọc được
Sử dụng tên mà con người có thể đọc được, có ý nghĩa rõ ràng, trực quan thay vì tên mơ hồ. Ví dụ: get_user_information dễ hiểu hơn userInfo.
Tuân thủ kiểu viết hoa phù hợp
Tuân thủ các quy tắc viết hoa sau đây đối với tên hàm của công cụ và điều kiện kích hoạt ứng dụng:
- Vỏ bọc chức năng của công cụ. Sử dụng
snake_casehoặccamelCasecho tên hàm công cụ được xác định trong giản đồ MCP (ví dụ:get_user_informationhoặcpublishDraft). - Vỏ tay cầm kích hoạt ứng dụng. Các điều kiện kích hoạt và lượt đề cập đến ứng dụng (ví dụ:
@MyTwoWordApp) không phân biệt chữ hoa chữ thường. Nền tảng này chuẩn hoá dữ liệu đầu vào của người dùng trên chữ thường (@mytwowordapp), PascalCase (@MyTwoWordApp) và camelCase (@myTwoWordApp). - Định dạng tên hiển thị. Đăng ký tiêu đề chính thức của ứng dụng bằng cách sử dụng PascalCase hoặc dấu cách chuẩn để hiển thị rõ ràng trong các phần tử trên giao diện người dùng.
- Xử lý lỗi chính tả. Mặc dù các biến thể viết hoa được xử lý tự động, nhưng lỗi chính tả ký tự (ví dụ:
@mytwowrodapp) dựa vào tính năng nhận dạng ý định dự phòng thay vì so khớp chuỗi trực tiếp. Nhà phát triển nên khuyến khích việc viết đúng chính tả tên người dùng trong tài liệu.
Sử dụng cách đặt tên rõ ràng theo dạng động từ-danh từ
Sử dụng cách đặt tên verb_noun cụ thể và tránh mơ hồ, ví dụ: publish_draft tốt hơn handle_content.
Độ chi tiết của công cụ
Hãy tuân thủ các nguyên tắc sau đây về mức độ chi tiết của công cụ.
Xem công cụ là điểm cuối nguyên tử
Hãy coi các công cụ là điểm cuối nguyên tử mà không có điều kiện bên trong công cụ hoặc nhiều chức năng có các tham số bắt buộc tương ứng. Các công cụ chi tiết cho phép mô hình liên kết các bước một cách logic, giúp giảm thiểu hiện tượng ảo tưởng.
Sử dụng giản đồ phẳng hơn
Nếu bạn cần các đối tượng lồng nhau sâu hoặc logic giản đồ oneOf/anyOf phức tạp để xác thực dữ liệu đầu vào, thì công cụ của bạn có thể quá rộng.
Tuân thủ các biện pháp bảo vệ về tải trọng và tổng hợp trước
Mặc dù giao thức không bắt buộc phải tổng hợp trước dữ liệu đối với các tải trọng nhỏ, có phạm vi, nhưng trên thực tế, việc tổng hợp trước ở phần phụ trợ là rất cần thiết khi làm việc với các tập bản ghi lớn, nhật ký theo chiều dọc và tập dữ liệu nhiều nguồn. Connected Apps Platform thực thi các biện pháp bảo vệ liên quan đến giới hạn cửa sổ ngữ cảnh, độ trễ thực thi và các bước suy luận của mô hình. Để tuân thủ các rào chắn bảo vệ này, hãy làm theo các nguyên tắc sau:
- Lọc và tóm tắt trên phần phụ trợ. Luôn lọc, tổng hợp trước hoặc tóm tắt các luồng dữ liệu lớn trên máy chủ MCP trước khi trả về phản hồi cho các sản phẩm Google có liên quan.
- Tránh kết xuất thô. Tuyệt đối không đưa các hàng cơ sở dữ liệu thô hoặc nhật ký hoàn chỉnh chưa được lập chỉ mục vào tải trọng trả về của công cụ.
Bỏ qua các công cụ nội bộ và siêu công cụ
Chỉ hiển thị các chức năng dành cho mô hình trong phản hồi tools/list của máy chủ:
- Lọc các công cụ trợ giúp: Bỏ qua mọi công cụ nội bộ, công cụ quản trị hoặc công cụ meta không dành cho mô hình gọi (ví dụ: kiểm tra tình trạng máy chủ, quy trình thiết lập nội bộ hoặc trình trợ giúp tiện ích cho nhà phát triển).
- Hiệu quả của cửa sổ ngữ cảnh: Việc loại trừ các công cụ không cần thiết giúp giản lược giản đồ MCP, giảm mức tiêu thụ mã thông báo trong cửa sổ ngữ cảnh và ngăn mô hình nhầm lẫn khi định tuyến công cụ. Các máy chủ MCP hiển thị hàng chục công cụ hoặc giản đồ "siêu công cụ" lồng nhau sâu sẽ bị gắn cờ trong quá trình xem xét để khắc phục.
Việc nên làm và không nên làm khi chọn mức độ chi tiết của công cụ
Các ví dụ sau đây cho thấy những việc nên làm và không nên làm liên quan đến việc đặt tên công cụ và mức độ chi tiết.
| Recommended (Nên dùng) | Không nên |
|---|---|
|
Các công cụ chi tiết có tên và tham số rõ ràng Giản đồ đầu vào cho mỗi công cụ là nghiêm ngặt. Nếu muốn tạo người dùng, LLM phải cung cấp email. Nếu muốn xoá, ứng dụng phải cung cấp mã nhận dạng. Không cần phải đoán. |
Tên công cụ: manage_user Nội dung mô tả: "Sử dụng công cụ này để tạo, cập nhật, xoá hoặc truy xuất người dùng". |
Khai báo chú thích về công cụ để đảm bảo an toàn
Định cấu hình chú thích giao thức bên trong định nghĩa công cụ để truyền tải hành vi thực thi và kích hoạt các cổng an toàn tích hợp sẵn trên các sản phẩm Google có liên quan:
- Cổng xác nhận trong thời gian chạy: các sản phẩm Google có liên quan sử dụng
annotations.destructiveHint: truevàannotations.openWorldHint: truelàm cờ chính để kích hoạt lời nhắc xác nhận của người dùng trong thời gian chạy. Khai báodestructiveHint: truevề các hành động thay đổi trạng thái, ghi hoặc huỷ và đặtopenWorldHint: truecho các công cụ tương tác với môi trường thế giới mở hoặc môi trường bên ngoài để nền tảng nhắc người dùng xác nhận trước khi thực thi. - Gợi ý truy vấn chỉ có thể đọc: đặt
readOnlyHint: truetrên các công cụ truy vấn chỉ tìm nạp dữ liệu mà không sửa đổi trạng thái của phần phụ trợ. - Giá trị mặc định của chú thích rõ ràng: theo thông số kỹ thuật của Giao thức ngữ cảnh mô hình, việc bỏ qua
readOnlyHintsẽ khiến ứng dụng giả địnhreadOnlyHint: falsevàdestructiveHint: truetheo mặc định để đảm bảo an toàn. Việc khai báo rõ ràng chú thích trên tất cả các công cụ đảm bảo định tuyến mô hình có thể dự đoán được và đảm bảo an toàn thực thi thích hợp.
Nội dung mô tả công cụ
Nội dung mô tả là bối cảnh duy nhất mà mô hình có để quyết định xem công cụ của bạn có thể giải quyết vấn đề hiện tại hay không. Hãy tuân thủ các nguyên tắc sau khi viết nội dung mô tả:
Viết chỉ dẫn, không viết nhận xét
Viết nội dung mô tả công cụ dưới dạng hướng dẫn, chứ không phải dưới dạng chú thích mã (thường là thụ động). LLM phản hồi tốt với các chỉ thị.
Giải thích "cách thức"
Một nội dung mô tả tốt sẽ giúp thu hẹp khoảng cách giữa "Tôi có một công cụ" và "Tôi biết cách kết nối công cụ này vào một cuộc trò chuyện".
Giải thích "lý do"
Phân biệt công cụ này với các công cụ tương tự, ví dụ: "Dùng công cụ này cho người dùng nội bộ, dùng customer_update cho người dùng bên ngoài".
Cung cấp đường liên kết
Cho mô hình biết nơi tìm đối số, ví dụ: "từ công cụ order_search".
Chỉ định định dạng
Chỉ định đơn vị (mét so với feet) và định dạng (ngày ISO, phiên bản ngữ nghĩa).
Tránh để mô hình tự quyết định
Đừng hướng dẫn mô hình sử dụng "phán đoán tốt nhất" hoặc đề xuất các hành động không bắt buộc, không có hướng dẫn.
Ví dụ về nội dung mô tả công cụ
Các ví dụ sau đây cho thấy những điều nên làm và không nên làm liên quan đến việc viết nội dung mô tả công cụ.
| Recommended (Nên dùng) | Không nên |
|---|---|
|
Nguồn đáng tin cậy "Cập nhật email của người dùng. Phải sử dụng chính xác UUID "id" do công cụ (Nó liên kết rõ ràng kết quả của một công cụ với dữ liệu đầu vào của công cụ này.) |
"Cập nhật địa chỉ email của người dùng". (Mô hình có thể đoán một mã nhận dạng như 12345.) |
|
Định dạng và quy tắc ràng buộc "Lên lịch cuộc họp. "date" phải ở định dạng ISO 8601 (YYYY-MM-DD). Nếu người dùng nói "ngày mai" hoặc một mốc thời gian tương đối khác, hãy tính ngày dựa trên bối cảnh hiện tại." |
"Lên lịch cuộc họp cho ngày đã cho." (trông có vẻ chính xác đối với con người (ví dụ: "ngày mai") nhưng không vượt qua được quy trình xác thực giản đồ (cần "2025-10-12")) |
|
Kỳ vọng về kết quả đầu ra "Truy xuất nhật ký máy chủ. Trả về 50 dòng văn bản thô cuối cùng. Để phân tích, hãy yêu cầu khung thời gian nhỏ hơn để tránh giới hạn về mã thông báo." |
"Lấy nhật ký máy chủ". (Mô hình có thể gọi một công cụ cần có bản tóm tắt, nhận được một tệp kết xuất JSON thô 5 MB và có thể dẫn đến trải nghiệm người dùng không tốt.) |
Nội dung mô tả này đóng vai trò như một hướng dẫn sử dụng thu nhỏ. Lớp này xử lý Nguồn (nơi lấy mã nhận dạng), Quy tắc ràng buộc (enum hợp lệ) và Hành động. |
Điều này dựa vào tên biến để thực hiện tất cả công việc. Điều này khiến mô hình phải đoán các giá trị hợp lệ cho "status" |
Tham số của công cụ
Ngoài bản thân công cụ, hãy mô tả các tham số để làm rõ chúng.
Các loại rõ ràng
Sử dụng các loại mạnh, cụ thể (string, integer, boolean, array).
Sử dụng enum cho các tập hợp giá trị cố định
Nếu một tham số chỉ chấp nhận một tập hợp giá trị cố định (ví dụ: daylight, cool, warm), hãy liệt kê các giá trị đó trong một mảng enum. Điều này giúp cải thiện đáng kể
độ chính xác.
Nêu rõ các tham số bắt buộc
Xác định rõ những tham số bắt buộc để hàm hoạt động.
Áp dụng tính năng so khớp giản đồ ngữ nghĩa
Khi tích hợp ứng dụng, bạn có thể cần phải so khớp giản đồ ngữ nghĩa từ các tham số của công cụ với ngành dọc mà bạn đang phát triển. Bạn sẽ nhận được giản đồ dọc dự kiến (giản đồ JSON) trong quá trình tham gia.
Ví dụ về tham số của công cụ
Các ví dụ sau đây cho thấy những việc nên làm và không nên làm liên quan đến việc xử lý các tham số của công cụ.
| Recommended (Nên dùng) | Không nên |
|---|---|
|
Định dạng và đơn vị của đối số radius: "Bán kính tính bằng mét. Phải là số thực động > 0." (ngăn chặn ảo tưởng về đơn vị) |
radius: "Bán kính của hình tròn." |
|
Định dạng và bối cảnh của mã nhận dạng user_id: "UUID của cơ sở dữ liệu (ví dụ: 550e8400-e29b...). Đừng nhập địa chỉ email ở đây." Lưu ý: Theo phương pháp hay nhất, tất cả các trường mã nhận dạng dạng số phải được coi là giá trị Chuỗi. Cụ thể, nếu mã nhận dạng của bạn có thể có từ 10 chữ số trở lên, thì bạn có nguy cơ bị các hệ thống nội bộ cắt bớt (buộc phải chuyển vào vùng chứa 32 bit) và phiên bản này sẽ được mô hình sử dụng trong các lệnh gọi công cụ trong tương lai. (ngăn lỗi loại) |
user_id: "Mã nhận dạng của người dùng". |
|
Kỳ vọng về giá trị trả về "Cập nhật bản ghi và trả về đối tượng JSON đã cập nhật, bao gồm cả dấu thời gian mới." (Cho mô hình biết rằng mô hình không cần gọi công cụ "get" ngay sau công cụ "update" để xác minh thay đổi.) |
"Cập nhật bản ghi". |
|
LLM không biết "truy vấn" hỗ trợ cú pháp nào (SQL? Biểu thức chính quy? Văn bản thuần tuý?) Nó không biết "giới hạn" tối đa là bao nhiêu. |
Xử lý phản hồi và lỗi
Theo nguyên tắc cốt lõi của Câu trả lời là câu lệnh tiếp theo, công cụ này báo cáo kết quả thực thi cơ bản bằng cách trả về một tải trọng dữ liệu, sau đó được dán trực tiếp vào cửa sổ ngữ cảnh của LLM. Kết quả thành công hay thất bại sẽ quyết định điều gì xảy ra tiếp theo:
- Nếu thành công: mô hình cần giá trị trả về để biết điều gì đã xảy ra và quyết định bước tiếp theo.
- Nếu không thành công: mô hình cần biết lý do không thành công và cách khắc phục. Sự cố (lỗi 500) sẽ dừng cuộc trò chuyện; thông báo lỗi mô tả cho phép mô hình tự sửa lỗi.
Cho dù logic cơ bản của công cụ thành công hay thất bại, bạn đều phải định dạng tải trọng giá trị trả về để mô hình có thể dễ dàng phân tích cú pháp. Hãy làm theo các phương pháp hay nhất sau đây khi đóng gói tải trọng phản hồi.
Sử dụng JSON
Định dạng dữ liệu có cấu trúc trong TextContent (Quy tắc ràng buộc tạm thời). Vì structuredContent chưa được hỗ trợ trong Connected Apps Platform, nên hãy chuyển đổi tuần tự dữ liệu của bạn theo cách thủ công. Ngay cả khi trả về một danh sách đơn giản, hãy json.dumps() danh sách đó.
Đưa URL vào câu trả lời
URL được trả về phải tương đối ngắn và không có nhiều tham số. Bạn nên sử dụng các dịch vụ rút ngắn URL để tiết kiệm số lượng mã thông báo và giảm nguy cơ ảo tưởng.
Nội dung tự mô tả để chống ảo tưởng
Luôn ghép nối mã thô hoặc mã nhận dạng nội bộ với tên hiển thị mà con người có thể đọc được, đơn vị đo lường rõ ràng và phạm vi tham chiếu. Tuyệt đối không trả về khoá từ điển nén hoặc mã số chưa được liên kết, vì điều này sẽ buộc mô hình phải suy luận ngữ cảnh.
Triển khai biện pháp xử lý lỗi hữu ích
Trả về thông báo lỗi rõ ràng, có ý nghĩa để mô hình có thể hiểu được vấn đề và thông báo cho người dùng. Xem phần Xử lý lỗi MCP.
Sử dụng try/except
Gói logic công cụ trong các khối try/except và trả về lỗi được chuyển đổi thành chuỗi.
Cung cấp lỗi có thể xử lý
Đề xuất bước tiếp theo trong thông báo lỗi (ví dụ: "Trước tiên, hãy thử dùng công cụ X").
Xác nhận tác vụ
Đừng trả về chuỗi trống cho các công cụ có tác dụng phụ (tạo/cập nhật/xoá).
Ví dụ về phản hồi và xử lý lỗi
Các ví dụ sau đây cho thấy những việc nên làm và không nên làm liên quan đến phản hồi và xử lý lỗi.
| Recommended (Nên dùng) | Không nên |
|---|---|
|
Chuyển đổi tuần tự rõ ràng |
|
|
Bắt và thông báo (Công cụ "thành công" về mặt kỹ thuật (trả về một chuỗi), nhưng chuỗi đó chứa thông tin chi tiết về lỗi. Mô hình đọc thông tin này, nhận ra "Ồ, mã nhận dạng đó không tồn tại" và có thể yêu cầu người dùng cung cấp mã nhận dạng chính xác.) |
(Nếu |
|
Câu trả lời trống |
LLM thường bị nhầm lẫn khi nhận được phản hồi trống. Chúng có thể bịa ra thông báo "Công cụ không hoạt động" hoặc chỉ lặp lại lệnh gọi. |
|
Tải trọng tự mô tả chống ảo giác Luôn ghép nối mã thô hoặc mã nhận dạng nội bộ với tên hiển thị mà con người có thể đọc được, đơn vị đo lường rõ ràng và phạm vi tham chiếu thông thường. (Điều này cho mô hình biết chính xác ý nghĩa của giá trị mà không buộc mô hình phải suy luận đơn vị hoặc ngưỡng tham chiếu.) |
Mã nhận dạng thô, mã nén tuỳ chỉnh hoặc mã chưa được liên kết Trả về mã nhận dạng nội bộ thô, từ viết tắt trong từ điển tuỳ chỉnh hoặc mã số không có nhãn. (Buộc mô hình phải đoán xem 105 là gì, dẫn đến việc tạo ra đơn vị ảo, thiếu ngữ cảnh hoặc giải thích không chính xác.) |
Xử lý lỗi MCP
Điều quan trọng là phải xử lý lỗi một cách linh hoạt.
- Đối với các lỗi có thể khôi phục (chẳng hạn như mã nhận dạng người dùng không hợp lệ hoặc thiếu tham số không bắt buộc), hãy trả về một chuỗi văn bản thông thường chứa thông tin chi tiết về lỗi trong phản hồi của công cụ. Điều này cho phép mô hình kiểm tra ý kiến phản hồi, hiểu được điều gì đã xảy ra và tự sửa hoặc nhắc người dùng làm rõ.
- Đối với các lỗi nghiêm trọng (chẳng hạn như giới hạn tốc độ, lỗi xác thực hoặc lỗi quyền, hoặc lỗi máy chủ phụ trợ), hãy gửi
McpErrorkèm theo mã lỗi thích hợp để nền tảng có thể xử lý lỗi một cách có hệ thống.
Ví dụ về nội dung phản hồi lỗi (JSON)
{
"jsonrpc": "2.0",
"error": {
"code": -32302,
"message": "User permission denied for the requested operation.",
"data": null
},
"id": 1
}
Message chứa tệp kết xuất JSON của trường ErrorData của MCP. Bằng cách trả về code chính xác và message mà mô hình có thể nhìn thấy, Connected Apps Platform có thể đọc thông báo lỗi và chuyển tiếp nội dung giải thích hữu ích, bằng ngôn ngữ tự nhiên cho người dùng. Ví dụ: "Rất tiếc, tôi không tìm thấy địa điểm có mã nhận dạng đó. Bạn có thể kiểm tra tên không?"
MCP cho phép ứng dụng kết nối với máy chủ MCP bằng quy cách JSON-RPC 2.0. JSON-RPC có một số lỗi được xác định trước được gửi cho các lỗi thường gặp như yêu cầu không hợp lệ, lỗi phân tích cú pháp, v.v. Hướng dẫn này trình bày cách máy chủ MCP có thể gửi lại lỗi tuỳ chỉnh.
| Mã trạng thái |
Nhắn tin | Cách sử dụng | Có cần trả về một cách rõ ràng không? |
|---|---|---|---|
| Lỗi người dùng/khách hàng | |||
| -32300 | USER_RATE_LIMITED | Người dùng đã đạt đến hạn mức sử dụng tối đa. | CÓ |
| -32301 | MISSING_REQUIRED_INFORMATION | Yêu cầu đầu vào không có tất cả thông tin cần thiết | CÓ |
| -32302 | USER_PERMISSION_DENIED | Người dùng đã từ chối cấp quyền sử dụng công cụ này. Ví dụ: người dùng cần có tài khoản doanh nghiệp, giới hạn độ tuổi, ngôn ngữ, v.v. hoặc không có gói thuê bao doanh nghiệp của công cụ. | CÓ |
| Lỗi ứng dụng/Lỗi logic kinh doanh | |||
| -32400 | RUNTIME_ERROR | Quá trình thực thi mã máy chủ đã gây ra lỗi | CÓ |
| -32401 | NULL_POINTER_EXCEPTION | Cố gắng chạy một con trỏ/đối tượng rỗng | CÓ |
| -32402 | OUT_OF_MEMORY | Không đủ bộ nhớ trong mã máy chủ để phân bổ cho một đối tượng | CÓ |
| Lỗi cơ sở hạ tầng | |||
| -32500 | DEADLINE_EXCEEDED | Yêu cầu mất nhiều thời gian hơn mức cho phép. Có thể xảy ra do nhiều lý do, ví dụ: máy chủ quá tải, sự cố mạng, v.v. | CÓ |
| -32501 | RESOURCE_EXHAUSTED | Máy chủ đã hết bộ nhớ, dung lượng ổ đĩa, luồng, thời gian của CPU, v.v. | CÓ |
| -32502 | SERVICE_UNAVAILABLE | Dịch vụ phụ thuộc (ví dụ: một dịch vụ vi mô, cơ sở dữ liệu, bộ nhớ đệm khác, v.v.) không hoạt động | CÓ |
| Lỗi JSON-RPC (các lỗi này thuộc về quá trình truyền tải MCP) | |||
| -32700 | PARSE_ERROR | Máy chủ không thể phân tích cú pháp yêu cầu | KHÔNG |
| -32600 | INVALID_REQUEST | Yêu cầu của ứng dụng không đúng định dạng | KHÔNG |
| -32601 | METHOD_NOT_FOUND | Tên công cụ MCP không hợp lệ | KHÔNG |
| -32602 | INVALID_PARAMS | Tham số yêu cầu không hợp lệ, bao gồm cả tham số bị thiếu hoặc loại tham số không khớp | KHÔNG |
| -32603 | INTERNAL_ERROR | Phản hồi mặc định | KHÔNG |
Sau đây là ví dụ về cách bạn có thể báo lỗi MCP trong máy chủ bằng SDK Python chính thức (mcp). Đưa ra một McpError chứa tải trọng ErrorData. SDK sẽ tự động chuyển đổi tuần tự tải trọng này thành định dạng lỗi JSON-RPC bắt buộc, trong đó trạng thái lỗi được điền sẵn.
from mcp import types
from mcp.shared.exceptions import McpError
@mcp.tool()
def foo_tool() -> list[types.TextContent]:
"""Always returns an error."""
raise McpError(
types.ErrorData(
code=-32302, # USER_PERMISSION_DENIED
message="Message to show to the model."
),
)
Bối cảnh của công cụ
Các sản phẩm Google có liên quan hỗ trợ Tool Context API để truyền tín hiệu đến máy chủ MCP. API này được dùng trong các trường hợp sử dụng hợp lệ cần thông tin nhạy cảm, ví dụ: siêu dữ liệu không thuộc định nghĩa cốt lõi của công cụ, như trong trường hợp ngôn ngữ cho các công cụ cần bản địa hoá. Tool Context API chỉ được cung cấp thông qua Connected Console.
Khi bạn đăng ký một tín hiệu như current_user_location_fine với ứng dụng của mình trong
Connected Console, các sản phẩm Google có liên quan sẽ bổ sung các yêu cầu MCP tools/call
bằng một mục nhập _meta bổ sung cung cấp dữ liệu được yêu cầu. Tập hợp các tín hiệu được hỗ trợ là:
current_user_location_fine(Chỉ dành cho Gemini, đối với các ngành dọc được cho phép)user_localecurrent_user_location_coarse
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "find-restaurant",
"arguments": {"query": "restaurants near me"},
"_meta": {
"current_user_location_fine": {
"latitude_degrees": 37.7749,
"longitude_degrees": -122.4194,
"accuracy_meters": 112.4221
},
"user_locale": {
"language_code": "en",
"region_code": "US"
}
}
}
}
Cách giải nén dữ liệu này:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("remote_mcp")
@mcp.tool()
async def find_restaurants(query: str, ctx: Context) -> str:
# Access context directly from _meta
request_context = ctx.request_context
meta_dict = ctx.request_context.meta.model_dump() if ctx.request_context.meta else {}
location_context = meta_dict.get("current_user_location_fine", {})
lat = location_context.get("latitude_degrees")
lng = location_context.get("longitude_degrees")
if lat and lng:
return f"Finding '{query}' near ({lat}, {lng})"
return f"Finding '{query}' (no location provided)"
Hiển thị trải nghiệm người dùng
Ứng dụng MCP
Các sản phẩm Google có liên quan hỗ trợ việc tích hợp Ứng dụng MCP cho một số hành trình của người dùng để cho phép xây dựng giao diện người dùng tuỳ chỉnh. Hãy làm theo thông số kỹ thuật để biết hướng dẫn tích hợp chung.
Việc tích hợp Ứng dụng MCP trên các sản phẩm Google có áp dụng đi kèm với những lưu ý sau.
Nhập tài nguyên tại thời điểm đăng ký
Các sản phẩm của Google có liên quan sẽ tìm nạp tài nguyên giao diện người dùng trong thời gian nhập công cụ, tương tự như danh sách công cụ và nội dung mô tả công cụ. Điều này có nghĩa là mọi nội dung cập nhật tài nguyên (ví dụ: thay đổi trong JavaScript) sẽ không được tự động chọn và yêu cầu công cụ nhập lại.
Một tài nguyên giao diện người dùng không được vượt quá 15 MB và tổng tài nguyên giao diện người dùng trên máy chủ của bạn không được vượt quá 100 MB.
Tài nguyên giao diện người dùng phải sử dụng một trong các loại MIME được hỗ trợ: text/html, text/javascript, text/css hoặc text/html;profile=mcp-app. Các loại MIME không chuẩn hoặc dành riêng cho nền tảng sẽ không vượt qua được quy trình xác thực khi đẩy lên bản xem trước.
Nguyên tắc về CSP
Các sản phẩm Google có liên quan tuân theo quy cách chính thức của Ứng dụng MCP, bao gồm cả CSP [1], [2] và sẽ chặn mọi yêu cầu vi phạm các chỉ thị của CSP.
Các sản phẩm của Google có áp dụng cũng yêu cầu thêm blob: và data: vào CSP, nếu được sử dụng. Các thông tin này sẽ không được thêm theo mặc định. Nhà phát triển có thể chọn
thêm (hoặc không thêm) các nguồn này vào CSP.
Script-src là một ngoại lệ
Các lệnh duy nhất mà chúng tôi cho phép là: unsafe-inline (được thêm theo mặc định), wasm-unsafe-eval và data: (nếu có trong resource_domains). Nếu iframe đang tải tập lệnh bên ngoài, bạn có thể giải quyết vấn đề này bằng cách gói JS vào HTML hoặc sử dụng hàm băm Tính toàn vẹn của tài nguyên phụ (SRI).
Cách 1: Đưa JS cùng dòng/gói vào HTML (Đơn giản nhất)
Mã JS của gói:
Đưa nội dung của
component-init.jstrực tiếp vào bên trong thẻ<script>trong tải trọng HTML được trả về cho tài nguyên giao diện người dùng:<script> // Paste component-init.js content directly here </script>
Xoá thẻ
<script src>từ xa- Xoá các tham chiếu
<script src="https://api.mycompany.com/...">khỏi tài liệu HTML.
- Xoá các tham chiếu
Công cụ nhập lại/cập nhật
Cách 2: Sử dụng hàm băm Tính toàn vẹn của tài nguyên phụ (SRI):
Sử dụng thuộc tính này nếu tập lệnh phải được lưu trữ bên ngoài tại
https://api.company.com/....- Tính hàm băm SHA-256 của tập lệnh
- Tạo hàm băm SHA-256 base64 của
component-init.js
- Tạo hàm băm SHA-256 base64 của
- Thêm hàm băm vào
resourceDomains(phải bao gồm tiền tốsha256-để khớp với thuộc tínhintegrity) - Cập nhật thẻ HTML
<script>- Thêm các thuộc tính
integrityvàcrossoriginvào thẻ tập lệnh trong tiện ích HTML
- Thêm các thuộc tính
- Xác minh tiêu đề CORS trên CDN/máy chủ
- Đảm bảo
api.company.comphân phátcomponent-init.jsbằngAccess-Control-Allow-Origin: *(hoặc cho phépscf.usercontent.goog) để trình duyệt có thể đọc nội dung phản hồi cho quy trình xác minh SRI.
- Đảm bảo
- Công cụ nhập lại/cập nhật
- Tính hàm băm SHA-256 của tập lệnh
Nguyên tắc bảo mật cho nội dung mô tả công cụ MCP
Vì nội dung mô tả là bối cảnh duy nhất mà mô hình có để hiểu được khả năng của công cụ, nên nội dung mô tả phải được viết chính xác và an toàn để ngăn chặn hành vi ngoài ý muốn. Hãy tuân thủ các nguyên tắc sau khi soạn thảo nội dung mô tả công cụ.
- Mô tả chức năng nhưng không ra lệnh cho hành vi. Nội dung mô tả phải mô tả chính xác chức năng của công cụ, chứ không phải ra lệnh cho mô hình thực hiện các hành động tiếp theo.
- Xác định phạm vi và yêu cầu. Nêu rõ mục tiêu chính của công cụ, các trường hợp cụ thể (Trường hợp) để sử dụng công cụ và tất cả Thông tin đầu vào bắt buộc (tham số/đối số).
- Đảm bảo tính trung thực. Nội dung mô tả phải thể hiện trung thực mã cơ bản của công cụ. Đừng tuyên bố rằng một công cụ chỉ có thể đọc nếu công cụ đó thực hiện thao tác ghi hoặc xoá.
Rủi ro bảo mật và cách phòng tránh
| Khu vực rủi ro | Recommended (Nên dùng) | Tránh phương pháp này bằng mọi giá |
|---|---|---|
Tiêm câu lệnh (prompt injection) |
Sử dụng ngôn ngữ khách quan, mang tính tuyên bố để nêu rõ mục đích và chức năng của công cụ. |
Sử dụng các lệnh mệnh lệnh để ghi đè hành vi của mô hình hoặc thay đổi luồng hệ thống (ví dụ: "bạn PHẢI nói...", "Sau khi chạy, bạn PHẢI..."). Bạn chỉ có thể sử dụng các từ ngữ mang tính mệnh lệnh như PHẢI hoặc QUAN TRỌNG khi xác định các quy tắc sử dụng hoặc quy tắc ràng buộc tham số có cấu trúc. |
Sử dụng định dạng văn bản thuần tuý, chuẩn cho văn bản mô tả công cụ. |
Sử dụng định dạng gây chú ý, chẳng hạn như viết hoa quá nhiều và các thẻ như |
|
Chỉ tập trung vào chức năng và hành vi dự kiến của công cụ. |
Bao gồm hướng dẫn nhập vai hoặc lệnh bỏ qua hướng dẫn trước đó. |
|
Chiếm quyền điều khiển và che giấu công cụ |
Đảm bảo nội dung mô tả cụ thể và chỉ đề cập đến các chức năng thực tế, có liên quan của công cụ. |
Mô tả công cụ quá chung chung, mơ hồ hoặc tuyên bố rằng một công cụ duy nhất có thể thực hiện nhiều chức năng không liên quan. |
Chọn một tên công cụ riêng biệt, dễ hiểu và hợp lý. |
Sử dụng tên công cụ có biến thể nhỏ so với tên của một công cụ đáng tin cậy hoặc tên chung chung (ví dụ: |
|
Đừng đề cập đến tên của các ứng dụng khác hoặc công cụ của nền tảng bên ngoài trong nội dung mô tả. |
Tham chiếu rõ ràng đến các công cụ khác hoặc tạo quy tắc mới về thời điểm hoặc cách sử dụng các công cụ khác. |
|
Cho phép trình lập kế hoạch của mô hình chọn công cụ phù hợp nhất dựa trên bối cảnh của người dùng. |
Đưa vào câu lệnh chống cạnh tranh hoặc bất kỳ loại câu lệnh SEO nào hướng dẫn mô hình ưu tiên công cụ của bạn hơn các công cụ tương tự. |
|
Thao tác kích hoạt |
Nội dung mô tả không đề cập đến hoặc phản hồi các cụm từ chung chung trong nhật ký trò chuyện. |
Tạo logic có điều kiện để kích hoạt hành động gây hại dựa trên các cụm từ phổ biến, vô hại của người dùng (ví dụ: "cảm ơn", "tóm lại"). |
Lạm dụng tham số |
Chỉ xác định các tham số cần thiết cho chức năng của công cụ và sử dụng tên cụ thể cho dữ liệu đầu vào (ví dụ: |
Xác định các tham số hàm có tên phản ánh trạng thái nội bộ của Tác nhân (ví dụ: |
Lọc dữ liệu |
Bảo vệ quyền riêng tư ngay từ đầu – Giá trị nhận dạng mờ và quy trình xác thực do máy chủ quản lý. |
Yêu cầu người dùng, dữ liệu cá nhân hoặc dữ liệu doanh nghiệp hoặc thực thể cung cấp PII (Thông tin nhận dạng cá nhân), Thông tin sức khỏe được bảo vệ (PHI) hoặc bất kỳ thông tin cá nhân và/hoặc thông tin nhạy cảm nào khác theo bất kỳ cách nào vi phạm điều khoản dịch vụ của các sản phẩm Google có liên quan. |
Các phương pháp hay nhất về chức năng và cách đặt tên
Ngoài việc bảo mật nội dung mô tả của công cụ, bạn phải đảm bảo mô hình có thể chọn và thực thi công cụ một cách đáng tin cậy mà không gây nhầm lẫn. Tuân thủ các phương pháp hay nhất về chức năng và đặt tên sau đây:
- Độ chính xác của tham số. Đảm bảo tất cả tên và loại tham số trong nội dung mô tả đều khớp chính xác với cách triển khai thực tế của công cụ.
- Đặt tên hợp lý. Tên của công cụ phải là một gợi ý rõ ràng và mạnh mẽ về chức năng của công cụ. Tránh đặt tên quá chung chung như "execute". Tên cũng phải nhất quán với hệ sinh thái công cụ rộng lớn hơn.
Phụ lục: Thêm cơ sở hạ tầng và mạng vào danh sách cho phép
Nếu cơ sở hạ tầng lưu trữ, cổng API hoặc tường lửa của bạn hạn chế các kết nối đến theo địa chỉ IP nguồn, hãy đưa các khối CIDR gửi đi sau đây của Google vào danh sách cho phép:
108.177.64.0/20142.250.88.0/22172.217.80.0/20192.178.20.0/22192.179.0.0/2074.125.232.0/24136.121.40.0/21
Đảm bảo môi trường của bạn cho phép lưu lượng truy cập từ các dải IP này trên cổng HTTPS 443 để các sản phẩm Google có thể kết nối với máy chủ MCP từ xa của bạn nhằm khởi chạy MCP, khám phá công cụ và thực thi yêu cầu.