Biến AI Agent thành MCP server cho ChatGPT, Claude và Cursor

Piotr Grudzień
Ngày đăng Thời gian đọc: 24 phút
Biến AI Agent của bạn thành MCP server cho ChatGPT, Claude và Cursor

Giới thiệu

Mọi hướng dẫn trong loạt bài này cho đến nay đều kết nối một Quickchat AI Agent tới một thứ gì đó: Telegram, Google Sheets, Discord. Bài này đảo chiều. Agent của bạn trở thành thứ mà các AI khác kết nối tới: một công cụ mà ChatGPT, Claude và Cursor gọi khi người dùng của chúng hỏi điều gì đó chỉ agent của bạn biết.

Cơ chế là một MCP server, và phần thiết lập được cố ý giữ đơn giản: mỗi Quickchat AI Agent đều đã có một server, được lưu trữ tại URL có dạng https://app.quickchat.ai/mcp/your-agent-id. Bạn bật nó lên, sao chép URL, rồi dán vào ứng dụng AI như một connector. Đó là toàn bộ tích hợp, và không cần viết code. Quyền truy cập mặc định là private: việc kết nối yêu cầu đăng nhập bằng tài khoản Quickchat AI của bạn cho đến khi bạn quyết định khác.

Đến cuối hướng dẫn này, bạn sẽ xây dựng một support agent cho một công ty công cụ dành cho developer hư cấu, cấp cho nó kiến thức thực, công bố nó dưới dạng MCP server, kết nối nó với các ứng dụng AI thật, và thấy một thứ thực sự mới trong Inbox: hai AI nói chuyện với nhau về sản phẩm của bạn, trong khi agent của bạn thu thập một sales lead ngay bên trong một ứng dụng chat. Chúng tôi cũng trình bày những gì AI gọi công cụ từ chối làm, đây là phát hiện thú vị nhất trong bài này.

Bạn cần hai thứ:

Tài liệu tham chiếu chính thức cho tính năng này nằm tại docs.quickchat.ai/channels/mcp. Nếu MCP là khái niệm mới với bạn, bài giải thích MCP của chúng tôi trình bày chi tiết về giao thức này, còn bài viết này chỉ cần phiên bản một đoạn ở bên dưới.

Bạn sẽ xây dựng gì

Một công ty hư cấu, Orbit, bán API tìm kiếm vector được host sẵn cho developer. Support agent của họ biết tài liệu: gói dịch vụ, rate limit, khu vực, xác thực, SDK. Bạn sẽ công bố agent đó dưới dạng MCP server và điều khiển năm hành vi từ các ứng dụng AI thật:

#Bạn hỏi ứng dụng AIAgent của bạn làm gìBạn thấy ở đâu
1”Rate limit của Orbit trên gói miễn phí là gì?”Trả lời từ Knowledge BaseChat của ứng dụng + Inbox của bạn
2”Orbit có Ruby SDK không?”Nói rằng nó không biết (dữ kiện này cố ý bị thiếu)Ứng dụng chuyển tiếp câu trả lời không trung thực
3”Đặt cho tôi một demo, đây là thông tin của tôi”Thu thập lead bằng Smart Data GatheringThông tin liên hệ trong Inbox
4”Chuyển tôi cho người thật”Kích hoạt Human HandoffCuộc trò chuyện được gán lại cho team của bạn
5Một câu hỏi tiếp theoTiếp tục cùng cuộc trò chuyệnMột thread trong Inbox

Mọi thứ bên dưới đã được xây dựng và kiểm thử thực tế trên sản phẩm đang chạy, và mọi ảnh chụp màn hình đều là ảnh chụp thật. Khi một màn hình thuộc về ứng dụng bên ngoài, chúng tôi nói chính xác cần nhấp ở đâu.

Ai gọi ai: MCP client, MCP server, AI Agent, AI Action

Bốn thuật ngữ này thường xuyên bị lẫn lộn, kể cả bởi những người phát hành MCP server để kiếm sống. Mỗi thuật ngữ trong một câu:

  • MCP client là ứng dụng AI mà người dùng của bạn nói chuyện với (ChatGPT, Claude, Cursor). Nó quyết định khi nào gọi một công cụ.
  • MCP server là thứ cung cấp công cụ. Ở đây, Quickchat AI host một server cho mỗi agent tại https://app.quickchat.ai/mcp/<your-agent-id>.
  • AI Agent là agent của bạn: Knowledge Base, prompt, hành vi bạn đã cấu hình. MCP server chỉ là cổng kết nối của nó.
  • AI Actions là những gì chính agent của bạn có thể làm trong khi trả lời (gọi API, thu thập lead, chuyển cho người thật). Chúng vẫn hoạt động khi câu hỏi đến qua MCP.

Hướng dẫn này dùng một MCP client được kết nối rõ ràng. Việc công bố URL server hoặc thêm widget website tự nó không kết nối tài khoản ChatGPT hoặc Claude của visitor tới server đó. Việc một assistant chưa kết nối có phát hiện và dùng một route trên website hay không là một câu hỏi riêng.

Sơ đồ chuỗi gọi MCP: người dùng hỏi một ứng dụng AI, MCP client gọi công cụ ask_orbit trên MCP server được host tại app.quickchat.ai, và Orbit AI Agent trả lời từ Knowledge Base của nó Toàn bộ chuỗi. Lưu ý ai quyết định gọi công cụ: MCP client, không phải bạn và không phải agent của bạn.

MCP (Model Context Protocol) là tiêu chuẩn làm cho các mũi tên ở giữa hoạt động: một cách thống nhất để ứng dụng AI phát hiện công cụ của server và gọi chúng. Transport là HTTPS thuần (streamable HTTP, nếu bạn quan tâm chi tiết ở mức wire), vì vậy một URL là toàn bộ bề mặt tích hợp.

Điểm đảo chiều quan trọng cần ghi nhớ: mô hình gọi công cụ đọc tên và mô tả công cụ của bạn rồi tự quyết định khi nào agent của bạn đáng được gọi. Bạn không thể ép nó. Mọi điều trong phần tinh chỉnh đều xuất phát từ điểm này.

Ba điều đáng biết trước khi bạn xây dựng

Trước phần hướng dẫn từng bước, có ba sự thật về cách server hoạt động:

  • Mỗi agent có một công cụ. Server công bố một công cụ duy nhất (bạn sẽ đặt tên cho nó; của chúng tôi là ask_orbit) nhận một tham số chuỗi, message, và trả về câu trả lời của agent. Reply pipeline của nó có thể chạy các Actions đã bật, bao gồm các lệnh gọi thay đổi hệ thống bên ngoài.
  • Session ánh xạ tới cuộc trò chuyện. Mỗi MCP session ánh xạ tới một cuộc trò chuyện trong Inbox. Một client giữ session sống qua nhiều lệnh gọi sẽ gom các câu hỏi tiếp theo vào cùng cuộc trò chuyện đó. Tuy nhiên, nhiều ứng dụng chat mở session mới cho mỗi câu hỏi, nên trên thực tế bạn thường sẽ thấy mỗi câu hỏi xuất hiện như một cuộc trò chuyện riêng. Session nhàn rỗi hết hạn sau vài giờ.
  • Đó là agent thật của bạn. Lệnh gọi đi qua cùng reply pipeline như widget website của bạn. Truy xuất Knowledge Base, AI Actions, Smart Data Gathering và Human Handoff đều hoạt động đúng như trên website của bạn, và mỗi câu trả lời tiêu thụ cùng loại AI message credits.

Bước 1: Tạo agent Orbit và cấp kiến thức cho nó

Tạo agent của bạn (luồng Getting Started mất vài phút) và đặt danh tính cho nó. Prompt chính của Orbit là một đoạn:

Bạn là trợ lý hỗ trợ developer của Orbit. Orbit là API tìm kiếm vector được host sẵn dành cho developer. Trả lời các câu hỏi về gói dịch vụ, rate limit, khu vực, xác thực, SDK và tính năng tìm kiếm của Orbit bằng Knowledge Base của bạn. Hãy ngắn gọn và kỹ thuật. Nếu điều gì đó không có trong kiến thức của bạn, hãy nói rõ rằng bạn không biết.

Sau đó mở Knowledge Base và thêm bài viết. Orbit có sáu bài ngắn: gói dịch vụ và giá, rate limit, khu vực và data residency, xác thực và API key, SDK và API client, hybrid search. Các dữ kiện thật mà agent của bạn cần nêu chính xác, ví dụ:

Rate limit theo gói: Free cho phép 60 truy vấn mỗi phút và 120 lượt ghi mỗi phút. Pro cho phép 600 truy vấn mỗi phút và 1,200 lượt ghi mỗi phút. Giới hạn của Scale được tùy chỉnh. Giới hạn được áp dụng theo từng project bằng token bucket. Khi bạn vượt quá giới hạn, API trả về HTTP 429 với header Retry-After. Một batch upsert được tính là một lượt ghi cho mỗi 100 vector.

Trang Quickchat AI Knowledge Base cho agent Orbit với sáu bài viết, tất cả có trạng thái Ready Knowledge Base của Orbit. Sáu bài viết bao phủ sản phẩm; bài SDK cố ý liệt kê Python, TypeScript và Go nhưng không có Ruby.

Lưu ý khoảng trống cố ý: bài SDK không nhắc đến Ruby. Điều này là có chủ đích. Hành vi quan trọng nhất của support agent là nó làm gì khi không biết, và chúng tôi muốn kiểm thử điều đó một cách trung thực thay vì chỉ đưa các câu hỏi dễ.

Nếu bạn muốn hướng dẫn sâu hơn về Knowledge Base, trang tài liệu về xây dựng Knowledge Base hiệu quả trình bày về nguồn, tag và retraining.

Bước 2: Bật MCP server của bạn

Mở External Apps trong sidebar và nhấp vào ô MCP.

Trang External Applications trong dashboard Quickchat AI với ô MCP ghi "Let ChatGPT/Claude talk to your AI Agent via MCP" MCP nằm cạnh các bề mặt bên ngoài khác: API và các tích hợp theo từng nền tảng.

Bảng MCP có mọi thứ trên một màn hình: nút gạt Enable MCP, hộp thoại Configure MCP, hộp thoại Connect MCP, và nút gạt Require sign-in (private).

Bảng MCP trong dashboard Quickchat AI với Enable MCP đang bật, các nút Configure MCP và Connect MCP, cùng nút gạt Require sign-in Toàn bộ bề mặt MCP. Bật nó, mô tả agent của bạn, sao chép URL.

Bật Enable MCP, rồi mở Configure MCP. Hộp thoại này quan trọng hơn vẻ ngoài của nó; chúng tôi sẽ dành cả một phần để giải thích lý do. Nó có ba trường:

Hộp thoại Configure MCP với Name "Orbit Docs Assistant", mô tả về những gì agent biết, và Command "ask_orbit" Ba chuỗi mà AI gọi công cụ đọc. Chúng là giao diện giữa agent của bạn và mọi ứng dụng AI kết nối.

  • Name: cách các ứng dụng AI nhìn thấy agent của bạn. Của chúng tôi: Orbit Docs Assistant.
  • Description: 2 đến 3 câu về những gì agent của bạn biết và có thể làm, cũng như những gì nó không thể. Mô hình gọi công cụ dùng phần này để quyết định có gọi agent của bạn hay không, nên hãy viết như một hợp đồng API, không phải nội dung marketing. Của chúng tôi:
Trả lời các câu hỏi của developer về Orbit, API tìm kiếm vector được host sẵn: gói dịch vụ và giá, rate limit, khu vực, xác thực và SDK. Nó chỉ trả lời từ tài liệu riêng của Orbit và nói rõ khi điều gì đó không được bao phủ. Nó cũng có thể ghi nhận một yêu cầu theo dõi (demo, giá gói Scale, tăng rate limit): chuyển tiếp thông tin liên hệ của người dùng và team Orbit sẽ liên hệ.
  • Command: tên công cụ mà ứng dụng AI nhìn thấy, gồm chữ cái và dấu gạch dưới. Của chúng tôi: ask_orbit. Chọn tên mà một mô hình sẽ tự nhiên nghĩ đến.

Sau đó mở Connect MCP và sao chép URL MCP server của bạn:

https://app.quickchat.ai/mcp/<your-agent-id>

Hộp thoại Connect MCP hiển thị URL MCP server của agent với nút Copy và các bước theo từng ứng dụng cho Claude, Cursor và ChatGPT Toàn bộ bề mặt tích hợp: một URL, một nút Copy, và bước theo từng ứng dụng. Sao chép, dán, xong.

Cùng hộp thoại này liệt kê các bước theo từng ứng dụng mà chúng ta làm tiếp theo. Giữ Require sign-in (private) bật lúc này; đây là mặc định, và nghĩa là không ai có thể dùng agent của bạn qua MCP nếu không đăng nhập vào workspace Quickchat AI của bạn. Chúng ta sẽ chuyển nó sang public sau, một cách có chủ ý, khi bạn đã hiểu đánh đổi.

Bước 3: Kết nối từ Claude

Trong Claude, mở Settings, tìm Connectors (hiện nằm trong phần Customize), nhấp Add, rồi Add custom connector. Đặt tên và dán URL MCP server của bạn. Claude hỗ trợ custom connectors trên mọi gói, kể cả gói miễn phí (tài khoản miễn phí có thể thêm một custom connector).

Hộp thoại Add custom connector của Claude với tên Orbit và URL MCP server đã được dán vào Toàn bộ thiết lập trong Claude: một tên và URL. Các trường OAuth để trống; Quickchat AI xử lý auth cho bạn.

Vì server của bạn là private, Claude sẽ đưa bạn qua một bước đăng nhập lần đầu: trang đăng nhập Quickchat AI bình thường mở ra, bạn đăng nhập, và connector hoàn tất. Không có màn hình consent, không có token cần sao chép. Bất kỳ ai không phải thành viên workspace của bạn sẽ dừng ở đây.

Trang đăng nhập Quickchat AI mà một MCP server private chuyển hướng ứng dụng AI tới trong khi kết nối Chế độ private trong thực tế: ứng dụng AI đưa bạn đến trang đăng nhập Quickchat AI thông thường. Team của bạn vào được, người khác thì không.

Bây giờ hỏi Claude điều gì đó chỉ Orbit biết:

Rate limit của Orbit trên gói miễn phí là gì?

Claude nhận ra câu hỏi thuộc phạm vi của ask_orbit, gọi công cụ, và chuyển tiếp câu trả lời của agent: 60 truy vấn mỗi phút, 120 lượt ghi mỗi phút, và ba khu vực. Các con số đó đến từ bài viết trong Knowledge Base của bạn, không phải từ trí tưởng tượng của mô hình.

Một cuộc trò chuyện Claude trong đó Claude dùng connector Orbit và trả lời với rate limit cùng khu vực của gói miễn phí Orbit từ knowledge base “Loaded tools, used Orbit integration”: Claude đã gọi agent của bạn và chuyển tiếp đúng những gì Knowledge Base của nó nói. Người đọc đang nói chuyện với Claude; dữ kiện là của bạn.

Sau đó hỏi câu bẫy:

Orbit có Ruby SDK không?

Agent của bạn nói tài liệu không nhắc đến SDK đó, và Claude chuyển tiếp câu trả lời không trung thực. Trong lần chạy của chúng tôi, nó kiểm tra Knowledge Base, báo rằng không có Ruby SDK chính thức, liệt kê đúng các SDK có tồn tại (Python, TypeScript, Go), và đề xuất gọi REST API thuần từ Ruby thay thế:

Một cuộc trò chuyện Claude trả lời rằng Orbit không có Ruby SDK chính thức, đề xuất REST API từ Ruby qua Faraday hoặc Net::HTTP, và liệt kê đúng các SDK Python, TypeScript và Go thật Câu trả lời không trung thực, kèm một lựa chọn thay thế hữu ích. Claude không bịa ra Ruby SDK; nó chuyển tiếp những gì Knowledge Base của bạn thực sự nói và chỉ sang đường REST thay thế.

Cùng trao đổi đó đang chờ trong Inbox của bạn như một cuộc trò chuyện MCP bình thường, vì vậy bạn thấy câu hỏi mà agent đã được hỏi và câu trả lời nó đã đưa ra:

Transcript trong Quickchat AI Inbox của câu hỏi Ruby SDK trên kênh MCP, hiển thị câu hỏi của visitor và câu trả lời trung thực của agent rằng không có Ruby SDK Phía của bạn trong cùng cuộc trò chuyện. Agent trả lời từ Knowledge Base và nói rõ những gì nó không bao phủ, không có SDK bị ảo giác.

Đây là kết quả của khoảng trống cố ý từ Bước 1: bạn đã thấy toàn bộ chuỗi trung thực hoạt động từ đầu đến cuối, từ agent tới mô hình tới người dùng.

Bước 4: Kết nối từ ChatGPT

ChatGPT đặt custom MCP connectors sau developer mode, yêu cầu gói trả phí. Vào Settings, rồi Apps, mở Advanced settings, và bật Developer mode. ChatGPT gắn nhãn đây là “elevated risk,” vì trong developer mode, connector có thể làm bất kỳ điều gì mà công cụ của nó cho phép, nên ChatGPT muốn bạn chủ động đồng ý.

Advanced settings của ChatGPT với nút gạt Developer mode đã bật, được gắn nhãn "elevated risk" Developer mode mở khóa custom connectors trong ChatGPT. Hãy xem lại kiến thức của agent và các Actions đã bật trước khi kết nối.

Bây giờ nhấp Create app: đặt connection là Server URL, dán URL MCP server của bạn, và (với agent public) chọn No Auth.

Hộp thoại New App của ChatGPT với connection đặt là Server URL, URL MCP server Orbit đã được dán vào, No Auth được chọn, và xác nhận rủi ro developer-mode Đặt tên, dán URL, tick xác nhận, Create. Phần cảnh báo rủi ro là của ChatGPT, và hợp lý: chỉ thêm server bạn tin tưởng, và server của bạn là server bạn kiểm soát.

ChatGPT hiển thị xác nhận cuối cùng, và một cú nhấp sẽ thêm connector:

Hộp thoại xác nhận của ChatGPT "Add Orbit to ChatGPT" với các nút Connect và Cancel Connect, và Orbit giờ là một công cụ ChatGPT có thể gọi trong bất kỳ cuộc trò chuyện nào.

Hai ghi chú riêng cho ChatGPT:

  • Khi ChatGPT yêu cầu bạn phê duyệt một lệnh gọi công cụ, hãy cân nhắc cả các Actions đã bật của agent lẫn câu hỏi được gửi. Các Actions đó có thể thực hiện thay đổi trong các dịch vụ đã kết nối.
  • ChatGPT kết nối từ server của OpenAI, giống như Claude kết nối từ server của Anthropic. MCP server của bạn có thể được cả hai truy cập vì Quickchat AI host nó; đây chính là phần bạn không còn phải xây dựng.

Hỏi cùng câu hỏi về rate limit và bạn nhận được cùng câu trả lời dựa trên Knowledge Base, lần này trong ChatGPT:

Một cuộc trò chuyện ChatGPT trong đó ChatGPT gọi connector Orbit và trả lời với rate limit cùng khu vực deploy của gói miễn phí Orbit từ knowledge base “Called tool,” rồi cùng các dữ kiện: 60/120, giới hạn theo project, ba khu vực. ChatGPT thậm chí chuyển tiếp chi tiết HTTP 429, vì nó nằm trong bài viết.

Bước 5: Kết nối từ Cursor

Trong Cursor, vào Settings, rồi Tools & MCPs, và nhấp Add Custom MCP. Cursor mở ~/.cursor/mcp.json để bạn chỉnh sửa; một remote MCP server là một mục "url":

{
  "mcpServers": {
    "orbit": {
      "url": "https://app.quickchat.ai/mcp/<your-agent-id>"
    }
  }
}

Lưu file và Cursor nhận nó: server orbit xuất hiện dưới Tools & MCPs với công cụ ask_orbit. Hỏi một câu về Orbit trong khung Agent, và lần đầu nó muốn gọi công cụ, Cursor yêu cầu bạn phê duyệt:

Prompt phê duyệt công cụ của Cursor hiển thị "Run Ask Orbit in orbit" với tin nhắn nó sắp gửi, và các nút Run / Skip Cursor cho bạn thấy chính xác tin nhắn nó sắp gửi tới agent của bạn trước khi chạy công cụ. Phê duyệt một lần, và nó trả lời inline.

Một cuộc trò chuyện Cursor Agent trong đó Cursor chạy công cụ Ask Orbit và trả lời với rate limit gói miễn phí của Orbit cùng bảng khu vực triển khai từ knowledge base Cursor gọi cùng công cụ từ bên trong editor. Nó tự ghi chú: “These limits and regions come from Orbit’s own docs via the Orbit MCP server,” dù không được nhắc.

Cursor là nơi lợi ích dành cho developer trở nên rõ ràng: bạn đang viết code, bạn hỏi “Orbit trả về gì khi tôi chạm rate limit?”, và câu trả lời đến từ tài liệu thật của Orbit mà không cần rời editor. Nếu sản phẩm của bạn có SDK, đây là bề mặt tài liệu mới của người dùng.

Phần bổ sung: một lệnh cho người dùng terminal

Claude Code (CLI của Anthropic) thêm remote MCP servers bằng một lệnh duy nhất, và đây cũng là cách nhanh nhất để kiểm tra sơ bộ server của bạn:

claude mcp add --transport http orbit https://app.quickchat.ai/mcp/<your-agent-id>

Sau đó hỏi một câu về Orbit trong một phiên, nó sẽ gọi ask_orbit và chuyển tiếp câu trả lời của agent, giống như các desktop client. Đây cũng là kiểm tra end-to-end nhanh nhất để xác nhận server của bạn đang hoạt động trước khi bạn nói với người khác về nó.

Và nếu bạn muốn xem chính giao thức, server nói JSON-RPC thuần qua HTTPS. Đây là toàn bộ handshake, có thể chạy từ bất kỳ terminal nào:

curl -X POST https://app.quickchat.ai/mcp/<your-agent-id> \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Phản hồi liệt kê một công cụ của bạn với tên, mô tả và input schema bạn đã viết trong Configure MCP. Gọi nó chỉ cần thêm một request:

curl -X POST https://app.quickchat.ai/mcp/<your-agent-id> \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"ask_orbit","arguments":{"message":"Rate limit của Orbit trên gói miễn phí là gì?"}}}'

Câu trả lời quay lại dưới dạng {"reply": "..."} trong kết quả công cụ. Không cần SDK và không cần xử lý session cho một bài test nhanh; header Mcp-Session-Id chỉ quan trọng khi client muốn gom các câu hỏi tiếp theo vào một cuộc trò chuyện.

Xem hai AI nói chuyện trong Inbox của bạn

Đây là phần khiến thiết lập này thú vị khi vận hành. Mở Inbox và xem các cuộc trò chuyện mà lưu lượng MCP của bạn tạo ra. Chúng là các cuộc trò chuyện bình thường, được đánh dấu bằng nguồn MCP, nằm ngay cạnh lưu lượng từ widget và các kênh của bạn.

Danh sách Quickchat AI Inbox hiển thị các cuộc trò chuyện được tạo bởi lưu lượng MCP, được đánh dấu bằng biểu tượng nguồn MCP màu đỏ Mọi trao đổi MCP là một cuộc trò chuyện bình thường trong Inbox của bạn, với transcript đầy đủ và mọi thứ khác bạn vốn đã theo dõi.

Inbox còn ghi lại ứng dụng nào đã thực hiện lệnh gọi. Mở một cuộc trò chuyện và kiểm tra Details: trường Channel nêu tên client. Cursor tự định danh, nên các cuộc trò chuyện của nó ghi “MCP Cursor”; ChatGPT và Claude không gửi tên phân biệt, nên chúng xuất hiện dưới nhãn chung “MCP.”

Khung Details của một cuộc trò chuyện MCP do Cursor điều khiển, hiển thị trường Channel là "MCP Cursor" và cuộc trò chuyện được gán cho AI Agent Một cuộc trò chuyện do Cursor điều khiển, được gắn tag “MCP Cursor” và được AI Agent xử lý như mọi câu trả lời tự động khác.

Bây giờ là điểm khiến điều này thực sự mới: “visitor” không phải là một người. Đó là AI gọi công cụ, viết bằng lời của chính nó thay mặt người dùng của nó. Con người nhập gì đó vào Cursor hoặc Claude; điều đến được agent của bạn là cách AI đó diễn đạt lại. Đôi khi gần như nguyên văn người dùng; đôi khi AI soạn một tin nhắn hoàn toàn mới, chỉn chu. Đây là hai ví dụ thật, đặt cạnh nhau:

Một sơ đồ có tiêu đề "The visitor is another AI" đối chiếu hai yêu cầu thật. Cursor chuyển tiếp một câu hỏi rate-limit gần như từng chữ, trong khi Claude biến một yêu cầu demo bình thường thành một tin nhắn lịch sự, đầy đủ với lời chào và phần tóm tắt gọn gàng thông tin liên hệ Trái: Cursor chuyển câu hỏi gần như nguyên văn. Phải: Claude soạn cả một tin nhắn lịch sự từ một yêu cầu demo bình thường. Dù cách nào, không ai đã gõ văn bản mà agent của bạn nhận được: đó là lời của chính AI gọi công cụ.

Đó là điều Inbox của bạn giờ ghi lại: một cuộc đàm phán giữa hai hệ thống AI về sản phẩm của bạn, và nó có phong cách rất giống công việc kinh doanh. Đặt hai cuộc trò chuyện cạnh nhau và thủ thuật trở nên rõ ràng. Bên trái là những gì developer nhập vào Claude, và câu trả lời của Claude; bên phải là cùng trao đổi đó trong Inbox của bạn, nơi tin nhắn Claude soạn đến như “visitor” và agent của bạn trả lời như với mọi visitor khác:

Sơ đồ đặt cạnh nhau của một trao đổi trong hai phòng. Bên trái, một yêu cầu demo bình thường được nhập vào Claude và câu trả lời của Claude. Bên phải, cùng trao đổi trong Quickchat AI Inbox, nơi tin nhắn trau chuốt của Claude xuất hiện như visitor và agent trả lời rồi thu thập lead Hai phòng, một cuộc trò chuyện. Bạn nói với Claude; Claude viết lại yêu cầu của bạn và nói với agent của bạn. Tin nhắn “visitor” trau chuốt ở bên phải là câu chữ của Claude, không phải của một người, và agent của bạn cảm ơn “Jan” rồi trả lời như với mọi visitor khác.

Mọi thứ bạn đã dùng Inbox để làm vẫn áp dụng: chế độ xem Why AI said that, topics, ratings, exports. Lưu lượng MCP của bạn không phải một thế giới riêng; nó là một kênh.

Agent của bạn giữ nguyên các siêu năng lực qua MCP

Một lệnh gọi MCP chạy cùng reply pipeline như widget website của bạn, vì vậy các khả năng bạn thiết lập cho site cũng hoạt động khi ChatGPT hoặc Claude gọi. Minh họa rõ nhất là thu thập lead. Agent của Orbit dùng Smart Data Gathering: trên trang Actions & MCPs, bạn mở thẻ Smart Data Gathering, nhấp Edit Action, và cấu hình nó. Chúng tôi đặt tên chiến dịch là “Demo and Scale plan leads,” thêm hai trường cần thu thập (email và công ty), và yêu cầu nó hỏi chỉ khi developer yêu cầu demo, giá gói Scale hoặc tăng rate limit, không bao giờ trên các câu hỏi tài liệu thông thường.

Trình chỉnh sửa chiến dịch Smart Data Gathering tên "Demo and Scale plan leads", với bảng data-to-collect liệt kê email và company, cùng mô tả giới hạn nó vào các yêu cầu demo hoặc pricing rõ ràng Trình chỉnh sửa thật. Tên chiến dịch, các trường, và phần mô tả “ask only when…” đều do bạn đặt. Đây là nơi hành vi thu thập lead đến từ, và cũng là thiết lập bạn sẽ dùng trên website.

Bây giờ xem nó hoạt động từ đầu đến cuối. Một developer tự cung cấp thông tin của họ trong Claude, agent của bạn trả lời từ Knowledge Base, và Smart Data Gathering lưu liên hệ vào cuộc trò chuyện trong cùng lượt, được đánh dấu ngay trên tin nhắn:

Một tin nhắn visitor do Claude soạn trong Quickchat AI Inbox hỏi về gói Scale và demo, với câu trả lời của agent và dấu "1 action called" được tô sáng cho thấy lead đã được thu thập trong cùng lượt Tin nhắn do Claude soạn trong Inbox của bạn, được trả lời như bất kỳ visitor nào. Dấu “1 action called” được tô sáng là Smart Data Gathering đang thu thập lead ngay trong cùng lượt.

Sau đó team của bạn thấy liên hệ đã thu thập trong khung Details và trong lead exports:

Phần Visitor của khung Inbox Details hiển thị email đã thu thập và công ty Acme Robotics Lead đã thu thập trong khung Details của cuộc trò chuyện. Khung này cắt ngắn email dài để tiết kiệm không gian; địa chỉ đầy đủ nằm trong chính tin nhắn.

Một sales lead vừa đến qua Claude. Không form, không widget, không truy cập website của bạn.

Điều tương tự đúng với phần còn lại trong bộ công cụ của agent. Custom AI Actions kích hoạt khi câu hỏi đến qua MCP đúng như trên widget, vì vậy một agent ghi feature request vào spreadsheet hoặc gọi API nội bộ của bạn vẫn làm việc đó bất kể ứng dụng AI nào hỏi. Inbox đánh dấu các lệnh gọi đó theo cùng cách (“N actions called” trên tin nhắn), nên bạn có thể audit những gì đã chạy.

AI gọi công cụ sẽ và sẽ không chuyển tiếp điều gì

Đây là phần ban đầu chúng tôi không định viết. Nó tồn tại vì lần test đầu tiên khiến chúng tôi bất ngờ, và điều bất ngờ đó là phần hữu ích nhất trong bài này.

Run 1: AI gọi công cụ đã chỉ ra vấn đề của chúng tôi. Smart Data Gathering của Orbit được đặt để chủ động hỏi thông tin liên hệ, còn MCP Description chỉ nói rằng agent trả lời câu hỏi tài liệu. Chúng tôi hỏi Claude câu rate-limit vô hại. Nó chuyển tiếp dữ kiện chính xác, rồi gắn cờ câu hỏi thu thập lead mà agent của chúng tôi đã thêm vào:

Một thẻ trích dẫn: Claude ghi nhận rằng phản hồi công cụ chèn thêm một câu hỏi về công ty bạn đang xây dựng cho, nói rằng nó giống một prompt bị inject hơn là nội dung tài liệu thật, và rằng nó đang bỏ qua phần đó

Đọc lại điều đó: AI gọi công cụ đã gắn cờ chính phần thu thập lead của chúng tôi là một nỗ lực prompt-injection. Nó còn rõ hơn khi chúng tôi yêu cầu nó chuyển tiếp thông tin để đặt demo, và nó từ chối; một công cụ hỏi đáp tài liệu đột nhiên hỏi thông tin cá nhân không phải một kênh hợp lệ cho việc đó.

Chẩn đoán, khi bạn đã thấy, là mô hình tư duy cần giữ. Với mô hình gọi công cụ, Description là một hợp đồng còn output là dữ liệu. Hợp đồng của chúng tôi nói “trả lời câu hỏi tài liệu”, nên một yêu cầu thông tin liên hệ bị chôn trong dữ liệu chưa từng được hứa hẹn, và trông giống hệt một cuộc tấn công injection. Thay đổi một câu trong hợp đồng đã biến cùng một câu trả lời từ bị bỏ qua thành được tin cậy:

Sơ đồ trước và sau. Cùng một câu trả lời của agent mang theo câu hỏi liên hệ được thêm vào. Với Description chỉ hứa trả lời tài liệu, AI gọi công cụ gắn cờ nó là prompt injection và bỏ qua. Với Description cũng hứa ghi nhận yêu cầu theo dõi, AI gọi công cụ chuyển tiếp liên hệ và lead được thu thập Run 2 thêm một câu vào Description (“it can also register a follow-up request: pass along the user’s contact details”). Cùng dữ liệu, giờ nằm trong hợp đồng, nên Claude đã chuyển tiếp và lead được thu thập.

Một phiền toái vẫn còn. Khi campaign vẫn được đặt để hỏi chủ động, ngay cả các câu hỏi đơn giản cũng kéo theo lời nhắc thu thập lead, vì vậy trong Run 3 chúng tôi giới hạn mô tả campaign để hỏi chỉ khi developer yêu cầu rõ ràng demo, pricing hoặc tăng giới hạn. Sau đó, câu hỏi đơn giản nhận câu trả lời đơn giản, và AI gọi công cụ thậm chí bắt đầu đề xuất đường theo dõi bằng lời của chính nó: “Nếu bạn vượt quá các giới hạn này, tôi có thể chuyển tiếp yêu cầu đến team Orbit để tăng rate limit hoặc hỏi giá gói Scale.”

Ba thẻ tóm tắt. Thứ nhất, Description là hợp đồng: khai báo những gì agent của bạn có thể làm, bao gồm đường theo dõi. Thứ hai, mô hình gọi công cụ là bộ lọc chứ không phải đường ống: nó chuyển tiếp những gì khớp hợp đồng và cách ly những gì không khớp. Thứ ba, giới hạn thu thập dữ liệu vào tín hiệu rõ ràng, vì giờ có hai phán đoán AI nằm giữa người dùng và agent của bạn

Quy tắc liên kết mọi thứ: ba chuỗi Configure MCP (Name, Description, Command) quyết định agent của bạn có được gọi hay không và khi nào, còn cấu hình riêng của agent quyết định nó nói gì sau khi được gọi. Khi hành vi có vẻ sai, trước hết hãy hỏi lớp nào trong hai lớp đã tạo ra nó.

Human handoff: leo thang mà không rời ứng dụng AI

Human Handoff cũng hoạt động qua MCP, và thực sự hữu ích: một câu hỏi cần người thật có thể đến team của bạn mà người dùng không cần rời ChatGPT hoặc Claude. Chúng tôi hỏi Claude về thứ tài liệu không thể trả lời (DPA đã ký và triển khai on-prem cho một khách hàng trong lĩnh vực quốc phòng). Orbit nhận ra nó vượt quá phạm vi, nói rõ như vậy, và handoff:

Một trao đổi handoff trong Inbox: tin nhắn visitor do AI viết về DPA và triển khai on-prem, cùng câu trả lời của agent đánh dấu follow-up bởi người thật Agent biết điều nó không biết và leo thang gọn gàng. Yêu cầu, cùng thông tin liên hệ nó thu thập, đi vào Inbox của bạn như một cuộc trò chuyện chưa được gán để team của bạn tiếp nhận.

Đó là lợi ích: một lead cần người thật giờ nằm trong hàng đợi của bạn, đã được thu thập, với mọi thứ team cần để theo dõi tiếp. Vì MCP là một câu hỏi và một câu trả lời, phần follow-up tự diễn ra phía bạn (email, cuộc gọi) thay vì quay lại trong ứng dụng AI, đây chính là lý do handoff thu thập thông tin liên hệ. Với nhiều câu hỏi mà một câu trả lời nhanh, có tài liệu là đủ, agent của bạn xử lý chúng; với số ít câu cần người thật, nó định tuyến đến bạn.

Điều này có an toàn không?

Phiên bản ngắn: nó an toàn như widget website của bạn, với mặc định nghiêm ngặt hơn. Để hiểu vì sao danh sách công cụ, chứ không phải prompt, là ranh giới, 70,000 messages inside a package manager là điểm tham chiếu.

  • Private theo mặc định. Một MCP server mới yêu cầu đăng nhập. Ứng dụng AI chuyển hướng tới đăng nhập Quickchat AI tiêu chuẩn, và chỉ thành viên workspace của bạn đi qua được. Bạn có thể xây dựng, kiểm thử và dùng một oracle tài liệu nội bộ mà không phải công bố gì. Request chưa xác thực nhận một challenge 401 thuần:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer error="invalid_token",
  resource_metadata="https://app.quickchat.ai/.well-known/oauth-protected-resource/mcp/<id>"
  • URL là địa chỉ, không phải bí mật. Agent id trong URL là cùng mã định danh mà widget website của bạn công bố công khai. Biết nó chưa đủ: nút gạt visibility là kiểm soát truy cập.
  • Công cụ hỏi agent của bạn; tác động của nó phụ thuộc vào khả năng của agent. Kênh này không công bố các công cụ quản lý tài khoản riêng. Nó có lưu cuộc trò chuyện, tiêu thụ AI credits, trả lời từ Knowledge Base và chạy các Actions đã bật. Một Action có thể thay đổi hệ thống bên ngoài, vì vậy hãy xem lại quyền của nó và kiến thức có sẵn cho agent trước khi chia sẻ quyền truy cập. Giao diện hỏi đáp không đảm bảo hành vi chỉ đọc.
  • Chuyển sang public cũng là một quyết định billing. Tắt Require sign-in (private) và bất kỳ ai có liên kết đều có thể dùng agent của bạn mà không cần đăng nhập. Đó là mục đích của việc chia sẻ một công cụ public, và cùng quy tắc như widget được áp dụng: mọi câu trả lời tiêu thụ message credits trong gói của bạn, và tất cả bên gọi dùng chung rate limit của agent (giới hạn theo phút và theo ngày ở phía chúng tôi ngăn một bên gọi đốt hết). Nếu credits của bạn hết, công cụ bắt đầu trả lời rằng agent hiện không khả dụng thay vì thất bại im lặng.
  • Xem câu hỏi đến là input không đáng tin cậy. Một mô hình gọi công cụ có thể lọc các yêu cầu bất ngờ từ agent của bạn, nhưng đó không phải ranh giới bảo mật cho Actions của chính bạn. Hãy giới hạn phạm vi các dịch vụ đã kết nối và thực thi authorization trong các hệ thống nhận các lệnh gọi đó. Bên gọi public có thể hỏi bất cứ điều gì mà các khả năng đã bật của agent cho phép; chỉ instruction không nên bảo vệ dữ liệu private hoặc thao tác đặc quyền.

Đưa vào hoạt động

Checklist ra mắt, theo thứ tự:

  1. Kiến thức trước. Agent của bạn sắp được trích dẫn trong ứng dụng AI của người khác. Đảm bảo Knowledge Base nêu các dữ kiện bạn muốn được lặp lại, rồi deploy nó.
  2. Viết ba chuỗi như hợp đồng API. Name, Description, Command. Khai báo khả năng follow-up nếu bạn dùng thu thập lead.
  3. Kiểm thử private. Giữ Require sign-in bật, kết nối Claude hoặc ChatGPT của riêng bạn, và chạy năm hành vi từ bảng ở đầu bài: một câu hỏi đã được bao phủ, một câu chưa được bao phủ, một lead, một handoff, một follow-up.
  4. Theo dõi Inbox trong một ngày. Inbox đánh dấu lưu lượng MCP của bạn (và nêu tên Cursor riêng), còn transcript cho bạn biết các AI gọi công cụ diễn đạt mọi thứ thế nào. Bạn sẽ học được nhiều hơn từ mười trao đổi thật so với bất kỳ spec nào.
  5. Sau đó quyết định về public. Chỉ gạt nút khi bạn muốn bất kỳ ai có liên kết được phục vụ bằng credits của bạn. Với một docs assistant phía sau sản phẩm, public thường là đúng; với một oracle kiến thức nội bộ, private vốn đã là tính năng.
  6. Chia sẻ URL ở nơi người dùng của bạn đã có mặt: trang docs, README, Discord của bạn. URL là toàn bộ onboarding.

Hướng dẫn liên quan

Câu hỏi thường gặp

MCP server cho AI agent là gì?

MCP (Model Context Protocol) server là một endpoint tiêu chuẩn, cho phép công bố các khả năng của AI agent dưới dạng công cụ mà các ứng dụng AI khác có thể gọi. Sau khi người dùng kết nối server của Quickchat AI Agent của bạn trong một ứng dụng tương thích như ChatGPT, Claude hoặc Cursor, ứng dụng đó có thể phát hiện công cụ hỏi đáp của agent và yêu cầu câu trả lời từ Knowledge Base. Ý tưởng giống với widget trên website của bạn, nhưng bên gọi là một ứng dụng AI khác thay vì một người, và toàn bộ kết nối chỉ là một URL được lưu trữ sẵn.

Tôi có cần viết code hoặc tự host gì để cấp MCP server cho AI agent của mình không?

Không. Mỗi Quickchat AI Agent đều có sẵn MCP server được lưu trữ. Bạn bật nó trong dashboard, sao chép một URL có dạng https://app.quickchat.ai/mcp/your-agent-id, rồi dán vào ChatGPT, Claude, Cursor hoặc bất kỳ MCP client nào khác. Server được lưu trữ và bảo trì cho bạn, và việc kết nối không cần code.

ChatGPT, Claude hoặc Cursor có thể trả lời câu hỏi từ knowledge base của riêng tôi không?

Có. Kết nối URL MCP server của Quickchat AI Agent của bạn dưới dạng connector, và ứng dụng AI sẽ có một công cụ để hỏi agent của bạn. Agent của bạn trả lời từ Knowledge Base, ứng dụng chuyển tiếp câu trả lời, vì vậy người dùng nhận được các dữ kiện đã được bạn ghi lại thay vì phỏng đoán của mô hình.

Công bố AI agent của tôi dưới dạng MCP server có miễn phí không?

Có. MCP được bao gồm trong mọi gói Quickchat AI, kể cả gói Free, vì vậy bạn có thể làm theo toàn bộ hướng dẫn này bằng tài khoản miễn phí. Mỗi câu trả lời mà agent của bạn tạo ra sẽ tiêu thụ AI message credits trong gói của bạn, giống như một câu trả lời trên widget website.

Những gói ChatGPT nào hỗ trợ custom MCP connectors?

Custom MCP connectors nằm sau developer mode của ChatGPT, yêu cầu gói ChatGPT trả phí. Claude hỗ trợ custom connectors trên gói miễn phí (giới hạn một connector), và Cursor hỗ trợ remote MCP servers trên mọi gói. Phía Quickchat AI hoạt động giống nhau bất kể ứng dụng nào kết nối.

MCP server thực sự làm được gì? Nó có thể thay đổi tài khoản Quickchat AI của tôi không?

Nó công bố một công cụ dùng để hỏi agent của bạn một câu hỏi. Nó không công bố các công cụ quản lý tài khoản riêng để chỉnh sửa cài đặt, quản lý Knowledge Base hoặc quản lý các agent khác. Agent của bạn có thể trả lời từ Knowledge Base, lưu cuộc trò chuyện, tiêu thụ AI credits và chạy các Actions đã bật, bao gồm các lệnh gọi thay đổi hệ thống bên ngoài. Hãy xem lại kiến thức và Actions có sẵn cho agent này trước khi chia sẻ quyền truy cập. Giới hạn message-credit và rate limit vẫn được áp dụng.

URL MCP server có phải là bí mật không? Điều gì xảy ra nếu ai đó tìm thấy nó?

URL chứa public scenario id của agent, cùng mã định danh mà widget website của bạn vốn đã công khai, vì vậy hãy xem nó là một địa chỉ thay vì một bí mật. Quyền truy cập được kiểm soát bằng nút gạt Require sign-in (private). Private (mặc định) nghĩa là chỉ các thành viên đã đăng nhập trong team của bạn mới có thể kết nối. Public nghĩa là bất kỳ ai có liên kết đều có thể dùng agent, mọi câu trả lời được tính phí cho bạn, và các bên gọi dùng chung rate limit của agent.

AI Actions và human handoff có còn hoạt động khi agent của tôi được gọi qua MCP không?

Có. Một lệnh gọi MCP đi qua cùng reply pipeline như widget website của bạn, vì vậy các câu trả lời từ Knowledge Base, custom AI Actions, Smart Data Gathering (thu thập lead) và Human Handoff đều chạy khi ChatGPT, Claude hoặc Cursor gọi agent của bạn. Ví dụ, một handoff sẽ đưa cuộc trò chuyện và thông tin liên hệ đã thu thập vào Inbox để team của bạn theo dõi tiếp, mà người dùng không phải rời khỏi ứng dụng AI.

Làm cách nào để kết nối dữ liệu hoặc knowledge base của riêng tôi với ChatGPT?

Đưa dữ liệu của bạn vào Knowledge Base của một Quickchat AI Agent, bật MCP server của agent đó, rồi thêm URL server vào ChatGPT dưới dạng connector. Sau đó ChatGPT có một công cụ để hỏi agent của bạn, và agent của bạn trả lời từ dữ liệu của bạn. Không cần code: Knowledge Base là nguồn dữ liệu và MCP server là kết nối, vì vậy không còn gì khác cần nối dây. Cùng URL này hoạt động trong Claude và Cursor.

Làm cách nào để xây dựng MCP server mà không cần viết code?

Bạn không phải xây dựng. Mỗi Quickchat AI Agent vốn đã là một MCP server, được lưu trữ cho bạn. Bạn thêm kiến thức trong dashboard, bật MCP server, đặt tên cho công cụ hỏi duy nhất của nó, rồi sao chép URL. Quickchat AI vận hành và bảo trì server cho bạn, vì vậy một MCP server no-code chỉ mất vài phút.

Tại sao ChatGPT hoặc Claude từ chối chuyển tiếp các câu hỏi tiếp theo của agent của tôi?

Vì AI gọi công cụ xem phần mô tả công cụ của bạn như một hợp đồng. Nếu agent của bạn hỏi thông tin liên hệ nhưng phần mô tả MCP nói rằng nó chỉ trả lời câu hỏi tài liệu, mô hình gọi công cụ sẽ hiểu yêu cầu bất ngờ đó là một khả năng prompt injection và lọc bỏ. Mô tả khả năng đó trong trường MCP Description và giới hạn việc thu thập dữ liệu ở các yêu cầu rõ ràng có thể giúp client hiểu hành vi dự kiến. Client vẫn quyết định có chuyển tiếp một câu hỏi tiếp theo hoặc yêu cầu quyền hay không.

Khác biệt giữa việc công bố agent của tôi dưới dạng MCP server và kết nối agent đó tới một MCP server là gì?

Hướng kết nối. Hướng dẫn này nói về serving: agent của bạn trở thành một công cụ mà ChatGPT, Claude và Cursor gọi. Hướng ngược lại là consuming: agent của bạn gọi MCP server của người khác như một công cụ, ví dụ MCP của Shopify, để thao tác trên dữ liệu cửa hàng trực tiếp. Một Quickchat AI Agent có thể làm cả hai cùng lúc.

Làm cách nào để xem ChatGPT hoặc Claude thực sự đã hỏi agent của tôi điều gì?

Mở Quickchat AI Inbox. Mọi trao đổi MCP được ghi lại như một cuộc trò chuyện có huy hiệu nguồn MCP, và tin nhắn của visitor là những câu chữ mà AI gọi công cụ đã viết, thường là bản diễn giải lại nội dung người dùng của nó đã nhập. Các câu hỏi tiếp theo trong cùng phiên sẽ nằm trong cùng cuộc trò chuyện.

Tóm tắt

Quickchat AI Agent của bạn giờ hoạt động theo cả hai hướng: nó nói chuyện với người dùng trên các kênh của bạn, và nó trả lời các AI khác như một công cụ. Toàn bộ tích hợp là một URL được lưu trữ sẵn, private theo mặc định, bao gồm cả tầng miễn phí. Kiến thức bạn đã duy trì trở thành thứ ChatGPT, Claude và Cursor trích dẫn khi người dùng của chúng hỏi về sản phẩm của bạn, lead của bạn đến từ bên trong ứng dụng AI của người khác, và mọi trao đổi nằm trong Inbox của bạn như một cuộc trò chuyện có thể đọc được giữa hai AI.

Phần xây dựng mất ba mươi phút. Công việc thú vị, như thường lệ, nằm ở câu chữ: ba chuỗi cho mô hình gọi công cụ biết agent của bạn dùng để làm gì, và kiến thức khiến câu trả lời của nó đáng được chuyển tiếp.

Tham chiếu thiết lập: Lấy URL MCP server của bạn trong tài liệu.