Host MCP server trên Posit Connect: khi nào nên build, FastMCP, OAuth và demo
MCP là gì, khi nào nên dùng MCP hay skill, build server bằng FastMCP, deploy lên Posit Connect, OAuth, Snowflake theo từng user và gọi từ Claude Desktop.
✓ Đã duyệt độc lập · cập nhật 03/11/2026 · 44 min
1. Mở đầu: Matt, Samiul và agenda của buổi webinar
Đây là một buổi webinar trong loạt Workflow Demo hằng tháng của Posit (theo mô tả video đăng ngày 30/09/2026), với tên trên slide mở đầu là "MCP in practice", tiêu đề phụ "Building AI workflows with MCP". Matt Leary là Product Manager phụ trách Posit Connect, còn Samiul Haque là Senior Solutions Advisor ở Posit (theo mô tả video đăng ngày 30/09/2026).

Matt mở đầu: đã qua giờ hẹn một phút, anh cảm ơn mọi người đã dành thời gian, và nói anh rất hào hứng được nói về MCP trong thực tế. Anh tự giới thiệu là Matt Leary, product manager ở Posit, làm việc trên Posit Connect. Anh nói đi cùng anh hôm nay là đồng nghiệp Samiul, và mời Samiul tự giới thiệu.
Samiul chào mọi người. Anh nói anh là solution architect trong mảng HLS enterprise ở Posit, và anh hỗ trợ khách hàng build các AI workflow (theo lời anh trong video đăng ngày 30/09/2026). Matt cảm ơn Samiul, rồi nói hai người cùng hào hứng tổ chức buổi workflow webinar này, một buổi tập trung vào việc dùng MCP trong workflow của bạn.
Trước khi vào vài slide, Matt nói qua những gì sẽ có hôm nay. Anh mở đầu bằng vài điều căn bản về MCP, và xem lại cách host MCP server trên Posit Connect. Sau đó anh chuyển lời cho Samiul, người sẽ đi qua các workflow dùng MCP, cho xem code và nhiều thứ khác quanh đó. Ý định của hai người là để lại khoảng 15 phút cuối cho Q&A rồi kết thúc ở đó. Riêng Matt, anh rất mong tới phần Q&A: vừa để nghe câu hỏi, vừa để nghe những use case mọi người đang gặp, mọi người đang làm gì với MCP, và có một cuộc trao đổi ở cuối.
2. MCP là gì: protocol, server, client, local hay remote, MCP hay skill
Matt bắt đầu bằng việc "level setting": MCP là gì. MCP là viết tắt của Model Context Protocol. Theo lời Matt, Anthropic phát triển nó vào cuối năm 2024, và giờ nó nằm dưới sự quản trị của Linux Foundation; slide ghi "Anthropic announced it in 2024; it is now under open governance at the Linux Foundation" (slide trong video đăng ngày 30/09/2026).
Anh nói sẽ đi qua một ví dụ cơ bản ở slide sau, nhưng lúc này điều quan trọng cần nhấn mạnh là MCP là một protocol mã nguồn mở được dùng rộng rãi, phần nào giống REST API. Đó là một specification định nghĩa mọi thứ hoạt động ra sao và AI client dùng tool như thế nào (theo Matt, video đăng ngày 30/09/2026). Rồi anh đi qua vài thuật ngữ chính trước khi đi tiếp.
Thứ nhất, như anh vừa nói, MCP là một protocol: chính là bộ tiêu chuẩn, định nghĩa cách một client và một server nói chuyện với nhau. Sang ô thứ hai, MCP server cung cấp tool: đó là thứ bạn host để đưa tool, prompt và resource tới một MCP client. Matt lưu ý specification có nói về tool, prompt và resource, nhưng phần lớn những gì anh thấy mọi người đang dùng là tool (theo Matt, video đăng ngày 30/09/2026).
Cuối cùng là MCP client, thứ dùng các tool từ MCP server. Tên là MCP client, nhưng chúng cũng hay được gọi là AI client hay AI application. Matt nêu ví dụ: Claude Desktop, ChatGPT, Posit Assistant. Đó là một AI front end có thể truy cập và dùng những tool mà MCP server host (theo video đăng ngày 30/09/2026).
Matt nhấn thêm vài điểm phân biệt. Bạn có thể host MCP server ở local hoặc remote. Local đúng như tên gọi: nó chạy trên máy tính của bạn. Cái hay là bạn không phải lo nhiều về bảo mật, nhưng bạn cũng không chia sẻ nó với đồng nghiệp một cách dễ dàng được. Remote server nghĩa là MCP server được host bên ngoài máy của bạn và bạn kết nối tới nó. Khi đó bạn thật sự phải tính tới bảo mật và authentication, nhưng nó cũng dễ chia sẻ hơn (theo Matt, video đăng ngày 30/09/2026). Buổi này tập trung vào remote MCP, và trong phần đó hai người sẽ nói Posit Connect giúp host MCP server dễ dàng ra sao.
Điểm cuối trước khi sang ví dụ: MCP so với skill. Matt nói nếu bạn đang tìm hiểu MCP server thì có lẽ đây là chuyện bạn đang bàn. Buổi webinar tập trung vào MCP, nhưng cũng có rất nhiều lúc một skill hoặc một CLI có thể là cách hợp hơn để giải bài toán kinh doanh của bạn. Anh sẽ không đi sâu vào đó, nhưng cần lưu ý MCP server có thể tự giải một việc, và cũng có thể được dùng cùng skill, cùng CLI tool; bạn có thể ghép chúng với nhau một cách hiệu quả (theo Matt, video đăng ngày 30/09/2026). Slide ghi: "MCP servers and Skills, important to consider when to use each. You can pair them together, or use either on its own" (slide trong video đăng ngày 30/09/2026).
3. Bên trong một MCP server: ví dụ classifier tool
Matt đi nhanh qua một ví dụ về những gì nằm sau một MCP server. Bắt đầu từ bên trái là MCP client. Trong ví dụ này đó là Posit Assistant chạy trong Positron, dùng một trong các model Claude (theo lời Matt; ô trên slide ghi "Running in Positron, using Haiku 4.5", slide trong video đăng ngày 30/09/2026). Đó là MCP client, nơi bạn làm việc.

Trong ví dụ, anh và nhóm build một MCP server có một tool, một classifier tool. Nghĩa của nó, theo Matt: tool này gọi ra một large language model ở phía bên phải, với một prompt tùy biến và vài chỉ dẫn để nó phân loại text theo một cách rất cụ thể (theo video đăng ngày 30/09/2026).
MCP client kết nối tới MCP server, thấy có một classifier tool, biết phải truyền những input nào để tool chạy được. Rốt cuộc MCP server sẽ đi ra hệ thống bên ngoài, ở đây là một LLM, lấy câu trả lời, rồi trả về cho MCP client (theo Matt, video đăng ngày 30/09/2026).
Matt nói anh đang trình bày ở mức khá cơ bản, nhưng theo anh điều thật sự mạnh ở đây là: với người đang dùng Posit Assistant, bạn không cần lo về phần back end. Tool đang làm gì? Nó gọi LLM này ở đâu? Prompt là gì? Có ai vừa sửa system prompt tối qua không? Tất cả đã được xử lý giúp bạn. Bạn chỉ biết mình có quyền dùng tool này, AI client của bạn gọi được nó, biết phải làm gì với nó và lấy kết quả về ra sao (theo Matt, video đăng ngày 30/09/2026).
4. Cân nhắc trước khi build: chỗ MCP hợp và chỗ cần cẩn thận
Hai người muốn nói qua những gì bạn nên cân nhắc trước khi build một MCP. Matt nói đây không phải danh sách đầy đủ; anh sẽ đi qua vài use case nơi MCP hoạt động tốt, và nơi bạn nên cẩn thận (theo video đăng ngày 30/09/2026).

Chỗ MCP hoạt động tốt thứ nhất: bạn muốn chia sẻ tool giữa nhiều nhóm và nhiều AI client khác nhau. Như Matt đã nói, MCP là một protocol tiêu chuẩn. Vậy nếu bạn có những người dùng bên kinh doanh không viết code trong IDE mà làm việc trong Claude Desktop, họ có thể kết nối tới đúng MCP server mà bạn kết nối bằng Posit Assistant. Theo Matt, điều đó có thể rất mạnh, vì nó mở rộng phạm vi những người dùng được MCP server (theo video đăng ngày 30/09/2026).
Nó cũng giúp phân phối bản cập nhật dễ dàng. Bạn có thể chia sẻ skill giữa Claude Desktop và Posit Assistant, nhưng bạn phải giữ chúng luôn được cập nhật. Còn với một MCP server host ở remote, bạn cập nhật nó và người dùng không cần bận tâm gì; họ tự động có quyền dùng các chức năng mới (theo Matt, video đăng ngày 30/09/2026).
Một use case khác nơi MCP có thể có ích là khi tool cần resource hay package cụ thể. Matt lấy ví dụ: bạn có một tool viết bằng Python, bên dưới gọi NumPy hay Pandas. Nếu một người dùng đang dùng Claude Desktop, làm sao bạn biết họ đã cài các package đó và có quyền truy cập đúng? Bạn có thể đặt những yêu cầu và resource đó trên một remote MCP server, và một lần nữa người dùng không phải lo chuyện đó. Mọi thứ được host tập trung, và bạn quản lý được (theo Matt, video đăng ngày 30/09/2026).
Tiếp theo là khi bạn có credential không muốn chia sẻ. Matt lấy một ví dụ ở chính Posit: anh và đồng nghiệp dùng Zendesk làm help desk, và truy cập nó qua một API key. Có thể nhiều developer cần quyền truy cập để xem xét các issue khác nhau và xem code cùng lúc. Anh và đồng nghiệp không muốn phải phát API key cho từng người rồi quản lý và rotate chúng. Anh và nhóm có thể đặt API key phía sau một MCP server, theo dõi việc sử dụng và cấp quyền qua MCP server, và không ai cần biết là có một API key đang được dùng (theo Matt, video đăng ngày 30/09/2026).
Cuối cùng, MCP tỏa sáng khi tool trả về kết quả nhỏ, có mục tiêu. Matt nói phần "chỗ cần cẩn thận" sẽ giải thích vì sao điều này quan trọng. Ví dụ: tổ chức của bạn có dataset của hàng trăm nghiên cứu lâm sàng, và bạn chỉ muốn biết: mình có dataset nào chứa loại thông tin này không? Nếu bạn đã lưu metadata về các dataset ở đâu đó, đây sẽ là use case tốt để một MCP đi ra tìm và trả lời: có, bạn có quyền truy cập ba dataset này. Rồi bạn tự đi xem dữ liệu đó (theo Matt, video đăng ngày 30/09/2026). Đó là những chỗ MCP hoạt động tốt; một lần nữa, không phải danh sách đầy đủ, nhưng là vài ví dụ tốt.
Còn chỗ cần thật sự cẩn thận, Matt nhấn mạnh: bạn đang dùng một AI client, tức một large language model ở phía front end. Vì vậy mỗi tool call và mỗi tool bạn đưa vào context sẽ ăn token và ăn context window. Bạn vừa mất chỗ trong context window, vừa phải trả tiền cho phần đó (theo Matt, video đăng ngày 30/09/2026).
Anh nhắc lại chuyện kết quả nhỏ và có mục tiêu: MCP không giỏi việc chuyển lượng lớn dữ liệu. Lý do là dữ liệu sẽ đi qua token, và một lần nữa, việc đó có chi phí. Đó thật sự không phải cách hiệu quả (theo Matt, video đăng ngày 30/09/2026).
Điểm cuối: tùy việc bạn đang làm, nếu bạn đang dạy hay chỉ dẫn một AI client cách làm một việc, thì một skill thường rẻ hơn và nhanh hơn. Matt lấy ví dụ coding standard: nếu tổ chức của bạn dùng CamelCase và muốn document function theo một cách nhất định, bạn có thể truyền 500 dòng code tới một MCP server, nhưng cách đó rất kém hiệu quả và chậm. Một skill có lẽ hiệu quả hơn ở đây, để AI client biết cách sinh code đạt chuẩn của công ty bạn (theo Matt, video đăng ngày 30/09/2026).
Cuối cùng Matt nhắc lại một điểm anh thấy đáng nhấn mạnh: remote server cho bạn dùng chung tài nguyên tính toán, dễ cập nhật hơn, và người dùng cuối không phải lo gì. Quan trọng hơn, chúng cho bạn logging tập trung và cái nhìn về cách chúng đang được dùng. Nếu mọi thứ đều chạy ở local, hay mỗi người tự tải skill về máy mình, bạn không thật sự có được cái nhìn đó về cách chúng được dùng (theo Matt, video đăng ngày 30/09/2026).
5. Connect làm gì cho remote MCP server
Matt chuyển sang việc anh và nhóm ở Posit đã làm để Connect thành một nơi tốt để host remote MCP server, và liệt kê những gì đã làm cho việc đó (theo video đăng ngày 30/09/2026).

Thứ nhất, Connect tự phát hiện MCP server dựa trên các framework phổ biến và liệt kê chúng trong tab riêng, để dễ tìm và dễ khám phá. Anh và nhóm cũng đặt một minimum process, để khi ai đó kết nối tới MCP server thì nó đã "warm up" sẵn, không có độ trễ 10 giây trong lúc nó khởi động. Theo Matt, độ trễ đó có thể khiến người dùng thấy lạ khi không hiểu vì sao phản hồi lâu thế (theo video đăng ngày 30/09/2026).
Thứ hai, Connect có một landing page tương tác. Nếu bạn build MCP bằng FastMCP, theo Matt là một framework Python rất phổ biến, Connect tự sinh một landing page tương tác với thông tin về cách kết nối tới server và các tool đang có. Anh nói sẽ cho xem phần này sau. Việc này làm được vì, như anh đã nói, MCP là một tiêu chuẩn được định nghĩa rõ, nên Connect có thể kiểm tra các tool và lấy thông tin đó ra. Matt nói anh rất hào hứng với tính năng này: nó giúp thấy nhanh những thông tin trước đây khó lấy nếu bạn không tự build một landing page riêng; bạn vẫn có thể tự build, nhưng anh và nhóm muốn có sẵn phần đó cho bạn (theo video đăng ngày 30/09/2026).
Ngoài ra, Connect đi kèm một OAuth 2.1 server tích hợp sẵn. Nó cho phép bạn authenticate tới một MCP server host trên Connect qua một luồng trên trình duyệt; Matt nói sẽ cho xem ở slide sau. Điều đó nghĩa là không có API key nào phải quản lý và rotate. Theo Matt, đó là thứ đội bảo mật của bạn sẽ đánh giá cao, và đó là luồng anh và nhóm khuyến nghị (theo video đăng ngày 30/09/2026).
Connect cũng có sẵn usage monitoring: bạn xem nhanh được bao nhiêu người đang dùng MCP của mình và dùng thường xuyên ra sao. Matt nói anh và nhóm nghĩ điều đó rất có giá trị, vì bạn thấy được giá trị mọi người nhận được từ MCP (theo video đăng ngày 30/09/2026).
Nói tới quyền truy cập: bạn quản lý quyền vào MCP qua access control list và các group đã có sẵn trong Connect. Bạn có thể tích hợp Connect với identity provider, như Entra ID, Okta và nhiều cái khác, giúp quản lý quyền bằng chính các group mà tổ chức bạn đang dùng (theo Matt, video đăng ngày 30/09/2026).
Cuối cùng, Matt nói anh và nhóm đã dành nhiều thời gian xây integration với các dịch vụ bên thứ ba phổ biến như AWS, Azure, Databricks, Snowflake, và bạn có thể dùng chúng để kết nối tới các resource đó một cách an toàn. Anh lưu ý rằng rất nhiều thứ trong số này, OAuth server, ACL, usage dashboard, không chỉ dành cho MCP server. Chúng được xây sẵn trong Connect và dùng được với các loại content khác (theo video đăng ngày 30/09/2026). Đó là một số cách Posit đang làm để Connect thành nơi tốt để host MCP server.
6. Demo: kết nối tới MCP server trên Connect qua OAuth
Ở slide cuối trước khi chuyển cho Samiul, Matt muốn cho xem cách kết nối tới một MCP server trên Connect bằng luồng trên trình duyệt. Trong ví dụ, anh dùng Posit Assistant trong Positron. Anh có một repo và hỏi: những MCP server nào được cấu hình trong project này? Anh biết trước câu trả lời: hiện chưa có cái nào, nên nó sẽ trả lời rằng anh chưa cấu hình gì. Trên màn hình, Posit Assistant trả lời rằng file .posit/assistant/settings.json có tồn tại nhưng trống, chưa có MCP nào được cấu hình trong project (demo trong video đăng ngày 30/09/2026).
Theo Matt, một cách rất tiêu chuẩn để cấu hình và kết nối MCP server là dùng một file settings.json (theo video đăng ngày 30/09/2026). Anh mở settings.json của Posit Assistant và dán vào khoảng chín dòng, nói rằng: đây là URL, tôi muốn kết nối tới nó. Nội dung file trên màn hình (phần giữa của URL được che trong video):
{
"mcpServers": {
"feedback-mcp": {
"type": "remote",
"url": "https…/feedback-mcp/mcp",
"auth": "oauth"
}
}
}
feedback-mcp, type remote, auth oauth.Tiếp theo là luồng trên trình duyệt: anh đi vào, authenticate tới Connect và tới MCP server qua OAuth; cửa sổ trình duyệt hiện "Authorization Successful" và báo có thể đóng cửa sổ để quay lại Posit Assistant (demo trong video đăng ngày 30/09/2026). Matt nhắc lại ý nghĩa: không có API key nào bị hard-code mà anh phải quản lý và giữ an toàn. Đó là luồng anh và nhóm khuyến nghị để kết nối MCP server, và theo anh đội bảo mật của bạn có lẽ cũng thích cách đó hơn (theo video đăng ngày 30/09/2026).
Anh hỏi lại đúng câu hỏi cũ về các MCP đang có, và lần này nó liệt kê ra tất cả các tool; giờ anh đã kết nối được tới MCP server (demo trong video đăng ngày 30/09/2026). Theo Matt, đây là thứ rất được ưa chuộng và là một cách rất hay để kết nối tới MCP server host trên Connect (theo video đăng ngày 30/09/2026). Anh dừng chia sẻ màn hình, cảm ơn mọi người vì thời gian cho phần tổng quan, nói sẵn sàng trả lời thêm câu hỏi ở cuối, rồi chuyển lời cho Samiul.
7. Samiul: build một MCP server bằng FastMCP
Samiul cảm ơn Matt. Anh nói Matt đã cho một cái nhìn tổng quan rất tốt về cách deploy và dùng MCP, giờ hãy xem việc đó được làm ra sao, bắt đầu từ câu hỏi: làm sao build được một MCP server ngay từ đầu?
Theo Samiul, nếu bạn quen build API thì việc này khá đơn giản, vì FastMCP cung cấp một wrapper rất gọn. Bạn build nó gần giống như tool calling với FastAPI, rồi deploy (theo video đăng ngày 30/09/2026). Nơi anh thích bắt đầu là trang tài liệu về MCP server trong docs của Posit, vì nó dẫn bạn đi qua nhiều khía cạnh. Ví dụ, nếu bạn đã có một MCP server chạy local và muốn chuyển nó thành remote MCP server để phục vụ cả tổ chức, trang đó có tài liệu rất chi tiết, kèm những ví dụ get-started (theo Samiul, video đăng ngày 30/09/2026).

server.py dùng FastMCP, một tool greet gắn decorator @mcp.tool(), và đoạn tạo ASGI app với stateless_http, json_response, host_origin_protection.Theo Samiul, với phần lớn tool calling, bạn chỉ cần thêm một decorator, hoặc có một lựa chọn khác là thêm custom tool bằng định nghĩa; rồi định nghĩa các hàm Python của bạn thành tool. Về cơ bản chỉ có vậy (theo video đăng ngày 30/09/2026). Ví dụ trên trang tài liệu mà anh cuộn qua (theo docs Connect, đọc ngày 03/11/2026):
import os
from urllib.parse import urlparse
from fastmcp import FastMCP
mcp = FastMCP("My MCP Server")
@mcp.tool()
def greet(name: str) -> str:
"""Greet someone by name."""
return f"Hello, {name}!"
# On Connect, derive the allowed host from the CONNECT_SERVER environment variable.
allowed_hosts = []
connect_server = os.environ.get("CONNECT_SERVER", "")
if connect_server:
parsed = urlparse(connect_server)
host = parsed.hostname or (parsed.netloc or parsed.path).rstrip("/").split(":")[0]
if host:
allowed_hosts.append(host)
# Create the ASGI app for deployment.
# stateless_http: handle each request independently
# json_response: return JSON responses
app = mcp.http_app(
stateless_http=True,
json_response=True,
host_origin_protection=True,
allowed_hosts=allowed_hosts,
)Trên cùng trang, ngay trước đó, màn hình cho thấy mục "Deploying": theo docs, bạn deploy MCP server bằng rsconnect-python ở chế độ fastapi và chỉ định entrypoint, hoặc dùng extension Posit Publisher cho VS Code hay Positron để deploy thẳng từ editor (theo docs Connect, đọc ngày 03/11/2026). Lệnh mẫu trong docs:
rsconnect deploy fastapi \
-n my-connect-server \
--entrypoint server:app \
./Sau đó, Samiul nói, anh vào Posit Workbench. Với ai chưa quen hệ sinh thái Posit: Connect là nơi anh và đồng nghiệp host application, API và MCP server, còn Workbench là nơi anh và đồng nghiệp làm phần lớn việc phát triển (theo Samiul, video đăng ngày 30/09/2026). Nếu anh mở một session Positron trong Workbench, anh có thể vào thẳng Posit Assistant, đưa mô tả của MCP server mình muốn build và nhờ nó bắt đầu. Theo Samiul, cách làm này đã trở nên rất phổ biến với những người build MCP trong Positron (theo video đăng ngày 30/09/2026).
8. MCP server nói chuyện với Snowflake, và deploy một click bằng Posit Publisher
Samiul nói hai người sẽ đi qua vài ví dụ, nhưng trước đó anh muốn cho xem một MCP server anh đã build, một server nói chuyện với Snowflake. Ý tưởng là: nếu bạn làm trong life sciences, đôi khi dữ liệu lâm sàng hay dữ liệu EHR của bạn được đổ vào Snowflake, và có thể được cập nhật rất thường xuyên. Bạn có thể muốn đưa ra vài insight chính từ nguồn dữ liệu đó, có thể là adverse event mới hay tổng số serious adverse event đang ghi nhận, và bạn muốn AI tool của mình lấy được những kết quả đó (theo Samiul, video đăng ngày 30/09/2026).
Nhưng bạn không muốn AI tool tự đi chạy những câu SQL ngẫu nhiên. Vậy ý tưởng là: nếu bạn đã biết có những câu SQL có cấu trúc hay những function mà bạn tin, hoặc đã được data scientist của bạn kiểm định, bạn chỉ cần chuyển chúng thành MCP tool rồi deploy MCP server lên Connect (theo Samiul, video đăng ngày 30/09/2026).
Anh muốn nhấn mạnh phần tích hợp role-based access control cho Snowflake: đó là chỗ OAuth trên Connect phát huy tác dụng. Qua Posit SDK, Posit cung cấp vài công cụ để việc authentication diễn ra liền mạch (theo Samiul, video đăng ngày 30/09/2026). Trên màn hình, phần docstring đầu file server.py ghi rằng file này theo đúng pattern Posit dùng nội bộ, như mô tả trong hai bài blog về host MCP server trên Connect, và dùng posit.connect.external.snowflake.PositAuthenticator để trao đổi credential với Snowflake (demo trong video đăng ngày 30/09/2026).

server.py: import snowflake.connector, FastMCP, PositAuthenticator, và các biến SNOWFLAKE_ACCOUNT, SNOWFLAKE_WAREHOUSE, SNOWFLAKE_DATABASE đọc từ môi trường.Vậy khi đã build xong một MCP server, deploy nó thế nào? Theo Samiul, chỉ một click. Tùy chọn deploy trong Positron là Posit Publisher: bạn deploy project, chọn deployment Connect muốn dùng, và deploy lên đó (theo video đăng ngày 30/09/2026).
Sang phía Connect, Samiul mở deployment Connect của anh, nơi có rất nhiều thứ đã deploy. Anh muốn xem những MCP server đang có, và Connect lọc riêng ra các MCP server anh đã deploy. Trên màn hình, trang Content có các tab My Work, Bookmarks, Datasets, MCP và All, và bộ lọc theo loại có mục "MCP" (demo trong video đăng ngày 30/09/2026). Vì anh có quyền admin và một số MCP được chia sẻ với anh, anh còn thấy được các đồng đội khác đang deploy gì trên instance Connect này.
9. Tab MCP và landing page: thử tool phân loại adverse event
Điều Samiul thật sự thích khi deploy lên Connect: trước khi có tính năng này, anh phải debug rất nhiều. Anh deploy, rồi phải thử xem mình có nhận đúng kết quả không. Điều anh thích ở đây là landing page (theo Samiul, video đăng ngày 30/09/2026).

Anh mở một adverse event MCP server, theo anh là ví dụ đầu tiên Matt đã nhắc. Nếu bạn có một đoạn tường thuật adverse event dạng free text, anh và nhóm đã tạo một SLM harness tùy biến làm tool call, về cơ bản biến đoạn đó thành định nghĩa có cấu trúc theo MedDRA. Với ai chưa quen MedDRA: theo Samiul, đó là một bộ thuật ngữ có kiểm soát để chia sẻ các tường thuật adverse event khác nhau trong cả hệ sinh thái y tế và life sciences (theo video đăng ngày 30/09/2026).
Anh nói ở đây anh có một cái nhìn gọn về các tool đang có trong adverse event summary, rồi nhận ra mình mở nhầm. Server đúng là pharmacovigilance, nơi có tool classify adverse event; anh có ba tool call ở đây (demo trong video đăng ngày 30/09/2026). Trên màn hình, tool "Classify Adverse Event" (classify_adverse_event) được mô tả là phân loại một mô tả adverse event dạng free text thành thuật ngữ MedDRA có cấu trúc, gán cấp độ nặng CTCAE và xác định mức nghiêm trọng theo ICH E2A; input gồm description, suspect_drug và patient_age.
Anh đã copy-paste một đoạn tường thuật mẫu, một đoạn bệnh nhân kể lại; trên màn hình, ô description ghi "I've noticed my eyes are really dry and irritated, especially in the morning. Light bothers me more than usual. Is this related to my medic…". Anh bấm chạy, và nếu API token hay credential anh đang dùng ở đây hợp lệ thì nó trả về một kết quả phân loại gọn gàng, vì tool được xây như vậy (demo trong video đăng ngày 30/09/2026). Kết quả trên màn hình là một khối JSON với "meddra_system_organ_class": "Eye Disorders", "meddra_preferred_term": "Dry eye", "ctcae_grade": 1, "ctcae_grade_label": "Mild", "is_serious": false, một lý do về mức nghiêm trọng, một hành động được khuyến nghị và "confidence": "High".
Samiul mời mọi người hình dung việc dùng tool này từ bất kỳ client nào. Nó không nhất thiết phải là Posit Assistant; có thể là Claude Desktop của bạn, hay một AI client tùy biến bạn đang build (theo video đăng ngày 30/09/2026).
10. Bedrock qua token, Snowflake qua viewer integration
Có nhiều pattern khác nhau để dùng cách này. Samiul giải thích chuyện gì xảy ra bên dưới: tool này gọi một model khác trên Bedrock. Bạn có thể hỏi: làm sao MCP server đã deploy kết nối được tới Bedrock? Theo anh có hai cách. Ở ví dụ này, anh và nhóm xét kịch bản bạn có một service account và muốn dùng chính service account đó. Khi đó bạn có thể nhúng token AWS vào; đó là một cách (theo Samiul, video đăng ngày 30/09/2026). Trên màn hình, tab Runtime của pharmacovigilance-mcp có các biến môi trường AWS_ACCESS_KEY_ID, AWS_REGION, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN (chỉ hiện tên, không hiện giá trị), mục Integrations ghi chưa có integration nào, và Min Processes đặt là 1 (demo trong video đăng ngày 30/09/2026).
Nhưng có thể có một cách tốt hơn, khi bạn cần role-based access control. Đó là ví dụ thứ hai, nơi anh lấy adverse event summary và chi tiết adverse event; ở đây server thật sự kết nối tới một instance Snowflake. Anh nhắc lại: MCP server này có sáu tool call. Một cái cho overview của AE, một cái cho summary của AE. Nếu bạn muốn mô tả một bảng, nó mô tả được các bảng đó. Bạn có thể xem preview của một bảng; như Matt đã nói, không nên kéo về một bảng thật lớn ở đây, nhưng nếu muốn liếc nhanh, chỉ năm dòng hay cỡ đó, bạn xem được. Và nếu bạn chỉ quan tâm tới danh sách serious AE, bạn lấy được chúng (theo Samiul, demo trong video đăng ngày 30/09/2026).
Vậy integration này hoạt động ra sao? Trên MCP pharmacovigilance, mọi người đã thấy anh dùng token. Còn ở đây, anh dùng một OAuth integration có sẵn. Anh có thể có nhiều loại integration tùy biến khác nhau, trong đó có Snowflake và Databricks (theo Samiul, video đăng ngày 30/09/2026). Trên màn hình, bảng "Add Integrations" liệt kê Connect Visitor API Key, Snowflake, Databricks AWS, Databricks Azure và Microsoft Fabric, với Snowflake được tick chọn (demo trong video đăng ngày 30/09/2026).
Samiul mời mọi người hình dung một kịch bản bạn có những nguồn dữ liệu rời rạc, hay những tool rời rạc, và bạn muốn MCP server của mình kết nối tới nhiều tool cùng lúc. Theo anh việc đó làm được, nên bạn có thể dựa vào use case và trí tưởng tượng của mình để sáng tạo (theo video đăng ngày 30/09/2026). Khi anh đăng nhập, tức kết nối qua OAuth, tới MCP server này, nó cũng kích hoạt luôn việc authenticate với Snowflake, vì khi đó server sẽ gọi Snowflake với tư cách user role của anh, không phải với một service account. Nhờ vậy role-based access control được giữ nguyên (theo Samiul, video đăng ngày 30/09/2026).
Anh thử hỏi AE overview của một nghiên cứu đang diễn ra; ở đây nghiên cứu đó là CDISCPILOT01, vì đó là nghiên cứu anh có quyền truy cập. Lần đầu anh nhận ra mình làm sai gì đó: có một lỗi gõ nên không tìm thấy study. Lần sau, nó thật sự đi tới Snowflake và mang kết quả về trực tiếp (demo trong video đăng ngày 30/09/2026). Trên màn hình, kết quả là một mảng JSON theo từng arm, ví dụ arm "Placebo" có N_TOTAL 86, 65 subject có AE (75.6%), 281 AE event và 0 SAE event.
Samiul nói hiện tại anh chỉ deploy để thử; anh chưa chia sẻ nó với cả tổ chức, nhưng ở đây anh thử được rất gọn những gì đang diễn ra (demo trong video đăng ngày 30/09/2026).
11. Landing page mặc định và landing page riêng: CDISC SDTM Validator
Samiul hỏi Matt có muốn nói gì không. Matt xin nói thêm vì anh rất thích tính năng này: theo anh, đây là một tính năng mới trong Connect, ra khoảng hai tháng trước, đúng như Samiul đang nói (theo video đăng ngày 30/09/2026). Anh và nhóm thêm nó vào vì điều anh và nhóm nghe được là: bạn deploy một MCP server, rồi quay lại MCP client để kết nối, và việc debug có thể hơi khó.
Vì thế, theo Matt, anh và nhóm đặt rất nhiều thông tin hữu ích lên trang này, nơi bạn thử được và xem được phản hồi. Các connection string ở trên cùng giúp bạn không phải nhớ kiểu: tôi đang dùng Claude Code ở đây, format là gì? Giờ tôi dùng Positron thì sao? Nó giúp kết nối rất dễ (theo video đăng ngày 30/09/2026).
Matt lưu ý: nếu bạn muốn làm landing page riêng, bạn làm được. Trang này chỉ tự động hiển thị nếu bạn chưa có landing page của mình. Vậy bạn vẫn có quyền kiểm soát, nhưng rất tiện là nó có sẵn những thông tin này mà không cần làm gì thêm. Anh nói anh thấy nó rất hữu ích, đúng như Samiul nói, để thử và chắc rằng mọi thứ đang chạy (theo video đăng ngày 30/09/2026).
Samiul nói đó cũng là điều anh định cho xem: đây là landing page mặc định, nhưng vài tuần trước Matt cũng đã tạo một landing page riêng cho use case hai người đang làm, một CDISC SDTM validator. Theo Samiul, trong trường hợp của bạn, có lẽ bạn đang gọi một API chuẩn hóa mà tổ chức đã dùng để kiểm định dataset. Giờ bạn có thể đưa cả những tool đó tới AI client qua MCP server. Nếu bạn tạo CDISC SDTM validator của riêng mình, bạn cũng có thể tạo landing page riêng (theo video đăng ngày 30/09/2026).

validate_dataset (chạy cả bộ kiểm định trong một lần gọi) và check_required_variables (kiểm tra ba biến định danh STUDYID, DOMAIN, USUBJID).Đó là những gì mọi người đang thấy. Trang này hơi khác trang anh cho xem lúc trước vì đây là landing page riêng. Theo Samiul, bạn có cả hai lựa chọn, và nó rất linh hoạt (theo video đăng ngày 30/09/2026).
12. Dùng MCP tool trong Posit Assistant
Giờ đã có MCP server, dùng nó thế nào? Samiul cho xem trước cách kết nối từ Posit Assistant trong Positron và trải nghiệm trông ra sao. Anh mở Posit Assistant và cho xem settings.json, vì trong project này anh đang kết nối tới ba MCP server: MCP pharmacovigilance anh đã nói, MCP CDISC, và MCP adverse event. Nội dung file trên màn hình (demo trong video đăng ngày 30/09/2026):
{
"mcpServers": {
"pharmacovigilance-mcp": {
"type": "remote",
"url": "https://pct.demo.soleng.posit.it/content/c0d4aedf-8d53-4479-8950-4a743b9913a9/mcp",
"auth": "oauth"
},
"cdisc-mcp": {
"type": "remote",
"url": "https://pub.workshop.posit.team/cdisc-mcp/mcp"
},
"adverse-event":{
"type":"remote",
"url":"https://pct.demo.soleng.posit.it/content/c10d8485-846e-42f7-a5b4-039f4fee1855/mcp",
"auth":"oauth"
}
}
}Anh chỉ ra rằng MCP CDISC nằm trên một instance Connect khác, instance workshop (trong file là pub.workshop.posit.team). Vậy không nhất thiết mọi thứ phải trên cùng một Connect server; bạn có thể có nhiều instance Connect trong tổ chức và kết nối tới chúng (theo Samiul, video đăng ngày 30/09/2026).
Anh chuyển sang toàn màn hình rồi hỏi Posit Assistant về adverse event trong nghiên cứu CDISCPILOT01, sau đó muốn cụ thể hơn: anh muốn biết số adverse event. Câu trên màn hình là "tell me about the number of adverse events in the CDISCPILOT01 study". Ngay lập tức nó kích hoạt MCP tool call và hỏi anh có cho phép lệnh gọi này không. Trên màn hình, hộp hỏi "Can Posit Assistant use mcp__adverse-event__ae_overview?" có các lựa chọn Allow once, cho phép tool đó trong session này, và luôn cho phép trong project này. Anh nói có thể cho phép một lần, nhưng anh chọn cho phép server MCP adverse event trong session này (demo trong video đăng ngày 30/09/2026).
Lúc này, về cơ bản, nó đi tới Snowflake và chạy một câu query trực tiếp thay mặt anh, rồi lấy kết quả về. Và đây là tóm tắt các adverse event đã được báo cáo (demo trong video đăng ngày 30/09/2026).

mcp__adverse-event__ae_overview, Posit Assistant trả lời rằng CDISCPILOT01 có 1,122 treatment-emergent AE trên 254 subject, 217 subject (85.4%) có ít nhất một AE, kèm bảng theo arm (Placebo, Xanomeline Low Dose, Xanomeline High Dose) và vài nhận xét như tỷ lệ tăng theo liều, serious AE hiếm.Để xác nhận mình là ai, anh hỏi tiếp "who am I". Nó lại xin gọi một tool khác, tên là whoami, và lần này anh cho phép trong cả project. Nó báo rằng Snowflake nhận anh là tài khoản người dùng Posit của chính anh, đang dùng role đúng như anh được cấp, là role mặc định của anh, và dùng đúng warehouse anh yêu cầu (demo trong video đăng ngày 30/09/2026). Trên màn hình, câu trả lời ghi thêm rằng các adverse-event tool truy vấn dữ liệu với tư cách người dùng, không qua một service account dùng chung.
Theo Samiul, như vậy bạn có thể kiểm soát quyền truy cập ở mức rất chi tiết trên việc gọi tool, và đó là cái hay của nó. Đó là lý do anh và nhóm muốn dùng cách này cho các use case doanh nghiệp (theo video đăng ngày 30/09/2026).
13. Phân loại adverse event từ data đang load
Một điều nữa Samiul thích: theo anh, Posit Assistant là context-aware (theo video đăng ngày 30/09/2026). Ở đây anh có một dataset tường thuật adverse event. Có thể bạn đang làm việc với dữ liệu này và muốn load nó lên. Anh tìm lại file, source một file R, rồi mở danh sách biến. Data AE đã được load; dataset có một số biến, và anh đang xem các subject ID khác nhau cùng các báo cáo adverse event của họ (demo trong video đăng ngày 30/09/2026).
Anh mở một chat mới và nhờ phân loại adverse event cho một subject ID; có thể anh đang quan tâm tới đúng subject này và chỉ muốn xem phân loại MedDRA sẽ trông thế nào. Việc đầu tiên nó làm là lấy dữ liệu và lọc adverse event. Rồi sau khi đã lọc ra dữ liệu của subject đó, nó gọi MCP pharmacovigilance. Anh cho phép lệnh gọi, và nó trả về phân loại MedDRA giống như mọi người đã thấy ở phía Connect khi thử các tool call (demo trong video đăng ngày 30/09/2026).
Đây là output của classifier, đúng những gì đi ra từ MCP tool. Samiul nói, vì lý do nào đó, Opus cũng nghĩ nó cần đưa ra nhận xét riêng của mình, điều đó cũng không sao, anh không phiền. Nhưng đây là output thật sự của classifier, còn kia là phần Opus tự giải thích về model anh và nhóm đang dùng (demo trong video đăng ngày 30/09/2026). Trên màn hình, câu trả lời là một bảng ba cột "Field", "Classifier output" và "My read": ví dụ classifier ghi MedDRA preferred term là "Nail infection" trong khi cột "My read" cho rằng "Paronychia" hợp hơn; classifier ghi CTCAE grade "3 (Severe)" còn cột kia cho rằng nhiều khả năng là Grade 2; classifier ghi serious "Yes" còn cột kia ghi "Probably not serious".
14. Gọi cùng MCP server từ Claude Desktop
Samiul đoán mọi người có thể nói: hay đấy, nhưng không phải mọi người dùng bên kinh doanh đều sẽ dùng Posit Assistant, vì bạn có thể có gói doanh nghiệp của một desktop client nào đó. Vậy dùng thế nào? Anh nhắc rằng trên trang landing page, Connect đưa hướng dẫn kết nối tới nhiều client khác nhau, gồm Claude Desktop, Claude Code hay bất kỳ client tùy biến nào bạn nghĩ ra (theo video đăng ngày 30/09/2026).
Tiếp theo anh cho xem cách làm trên Claude Desktop, bằng một đoạn quay ngắn. Bạn copy URL của MCP server; bạn có thể tạo một vanity URL rồi copy URL đó. Đây là MCP CDISC validator đã nói ở trên (demo trong video đăng ngày 30/09/2026).
Rồi trong Claude Desktop, về cơ bản bạn thêm nó như một custom connector. Để làm vậy, bạn đặt cho nó một cái tên, vì đây là custom connector, rồi đưa URL của MCP server. Tùy loại authentication bạn dùng sẽ có những lựa chọn khác nhau. Trong ví dụ này anh và nhóm không yêu cầu đăng nhập; theo Samiul đây là một MCP tool linh hoạt hơn mà ai cũng dùng được (demo trong video đăng ngày 30/09/2026).

cdisc-validator và URL https://pub.workshop.posit.team/cdisc-mcp/mcp, trước khi bấm Continue.Bạn cũng thấy được danh sách tool ngay trong Claude Desktop. Khi đã có connector này, bạn chỉ việc bắt đầu đặt câu hỏi. Ví dụ, nếu bạn có dữ liệu hay metadata CDISC, bạn kéo nó vào Claude Desktop và nhờ nó kiểm định dataset cho bạn. Pattern rất giống lúc trước: bạn cho phép Claude gọi tới MCP tool tùy biến này, rồi nó tìm các tool đang có, xem có gì, và mang kết quả về Claude Desktop (demo trong video đăng ngày 30/09/2026). Trên màn hình, sau câu "validate this dataset", Claude báo dataset không qua kiểm định: 1 trên 3 check đạt, 2 không đạt; STUDYID bị thiếu, và validator đánh dấu thêm chín biến DM khác là thiếu.
Theo Samiul, việc này cho thấy cách bạn bắt đầu phân phối các tool tùy biến tự build tới các AI client dùng trong cả doanh nghiệp, bằng cách host chúng trên Connect (theo video đăng ngày 30/09/2026). Anh nói như vậy đã đi qua những phần chính hai người muốn trình bày hôm nay, và mời Matt nói thêm nếu muốn.
Matt cảm ơn Samiul. Anh nói anh thích việc Samiul cho xem bản Claude Desktop, vì theo anh nó làm nổi bật một trong những lý do chính khiến MCP server có thể rất hữu ích với bạn: một lần nữa, nó kết nối được tới các client khác nhau, Claude Desktop, Positron. Bạn có thể đáp ứng những người dùng đang dùng các công cụ khác nhau theo một cách chuẩn hóa như vậy (theo Matt, video đăng ngày 30/09/2026).
15. Theo dõi ai đang dùng MCP server
Samiul nói anh muốn nói thêm một điều anh đã quên: chỉ dùng thôi là chưa đủ, bạn còn muốn biết ai đang dùng và dùng ra sao. Anh quay lại trang của server trên Connect. Nếu bạn bấm vào phần settings, sẽ có các tùy chọn monitoring. Bạn theo dõi được tổng số lượt truy cập và ai là người truy cập. Trong trường hợp này anh là người duy nhất, nên có một unique visitor (demo trong video đăng ngày 30/09/2026).

pharmacovigilance-mcp (demo trong video đăng ngày 30/09/2026): khoảng thời gian 1 Week, 39 Total Visits, 1 Unique Visitors, biểu đồ Daily Visits từ 24 tới 30 tháng 9, các tab Usage Pattern, Top Visitors, List of Visits, và danh sách log bên dưới.Theo Samiul, như vậy bạn có khả năng theo dõi chuyện gì đang diễn ra với MCP server của mình. Là admin, bạn còn vào được admin dashboard. Nếu bạn là Connect admin, bạn có cái nhìn rộng hơn về tất cả MCP đã deploy và ai đang dùng chúng, và có thể đi sâu xem pattern sử dụng của từng MCP server (theo video đăng ngày 30/09/2026).
Matt nói đúng lúc, vì vừa có một câu hỏi về việc theo dõi các lệnh gọi của người dùng, và đó chính là thứ Samiul vừa cho xem: bạn thấy được tần suất sử dụng. Còn nếu câu hỏi là về việc xem từng tool riêng lẻ và chúng đang làm gì, thì phần đó chưa có trong usage monitor, nhưng anh và nhóm đang xem xét và tìm cách giúp mọi người dễ có cái nhìn ở mức chi tiết đó hơn (theo Matt, video đăng ngày 30/09/2026).
16. Q&A: mcptools cho R, memory và minimum process
Matt bắt đầu phần Q&A, cảm ơn mọi người đã gửi câu hỏi, và đi theo danh sách.
Câu hỏi đầu tiên: package R mcptools có được khuyến nghị để deploy FastMCP lên Posit Connect bằng R không? Matt chỉ ra một sắc thái nhỏ. FastMCP là một framework Python mà bạn hoàn toàn deploy được lên Posit Connect. mcptools là một package Posit build cho R, và đúng vậy, bạn có thể deploy MCP viết bằng R lên Connect bằng package mcptools. Nó còn có vài thành phần khác để làm những việc khác quanh MCP, như giúp build một MCP client dễ hơn. Tóm lại theo Matt: FastMCP là framework Python rất, rất phổ biến và được dùng nhiều cho MCP server; mcptools là package R làm được nhiều việc quanh MCP, trong đó có deploy một MCP lên Posit Connect (theo video đăng ngày 30/09/2026).
Samiul thêm một ý nhanh: việc này được hỗ trợ, và nó dùng tool calling dựa trên ellmer. Nếu bạn đã dùng ellmer và đã có sẵn các tool ellmer, bạn có thể đưa chúng sang hệ sinh thái mcptools khá dễ dàng (theo Samiul, video đăng ngày 30/09/2026).
Câu hỏi tiếp theo, Matt nói anh sẽ trả lời trước nhưng rất muốn nghe góc nhìn thực tế của Samiul: memory footprint tối thiểu của một MCP là bao nhiêu? Vì MCP được khuyến nghị luôn bật, người hỏi tò mò chi phí sẽ là bao nhiêu (câu hỏi trong video đăng ngày 30/09/2026).
Matt trả lời: Connect tự phát hiện MCP và bật nó với minimum process là một. Nhưng có thể có use case bạn muốn chỉnh lại. Bạn có thể giảm xuống không. Có thể bạn chỉ đang thử, hoặc kiểu "tôi dùng MCP này một lần mỗi tuần", thì có lẽ bạn không cần đặt là một. Anh và nhóm cũng xây một logic thông minh trong Posit Connect: tới một ngưỡng nào đó, nó sẽ không tiếp tục đặt mọi MCP thành một nữa, vì rốt cuộc bạn sẽ dùng hết số process theo kiểu đó (theo Matt, video đăng ngày 30/09/2026).
Vì thế, theo Matt, trong hầu hết trường hợp có lẽ nên để chúng bật, nhưng đó là thứ bạn cấu hình được theo use case. Còn về việc cấp bao nhiêu tài nguyên, anh cũng nói là tùy. Nếu bạn có một tool chỉ vài người trong nhóm dùng, có lẽ bạn không cần nhiều tài nguyên phía sau. Nhưng nó cũng tùy vào việc tool làm gì bên dưới: nó cần nhiều memory hơn nếu đang chạy một phép tính lớn (theo video đăng ngày 30/09/2026).
Theo Matt, điều tiện là có usage dashboard Samiul vừa cho xem: hãy nhìn vào đó. Bạn thấy được có 10 người đang dùng hay 50 người. Họ dùng nó 18 nghìn lần mỗi tháng, như một MCP server nội bộ của Posit, hay 50 người dùng mỗi người hai lần một tháng? Anh nói anh không có câu trả lời trực tiếp kiểu "đây là con số bạn nên đặt"; nó thật sự tùy use case, rồi có lẽ là theo dõi và điều chỉnh dần (theo video đăng ngày 30/09/2026). Anh hỏi Samiul có đồng ý hay muốn thêm gì không.
Samiul đồng ý: đó đúng là điều anh sẽ nói, tùy use case. Nếu bạn có một MCP server rất phổ biến được dùng mỗi ngày, có lẽ bạn cần để nó bật và scale cho phù hợp (theo Samiul, video đăng ngày 30/09/2026).
17. Q&A: IAM role cho Bedrock, OAuth với Workbench, MCP server tự build hay của bên thứ ba
Câu hỏi tiếp, Matt nhờ Samiul giúp: cần đặt những biến môi trường nào nếu instance Connect được authenticate tới Bedrock qua một IAM role policy? Anh hỏi Samiul có phiền nhận câu này không, và Samiul nhận lời.
Samiul nói trong ví dụ của anh, anh dùng một access token sống ngắn hạn, với giới hạn thời gian đặt ở phía Bedrock. Bạn cũng có thể dùng một service account. Một điều anh muốn nhấn mạnh, không liên quan riêng tới MCP mà tới Connect: Connect hỗ trợ thêm IAM integration. Như mọi người đã thấy integration Snowflake của anh, bạn cũng có thể có integration AWS, dưới dạng một IAM role, hoặc dùng AWS service account. Vậy có thể là một luồng rất giống, hoặc dựa trên API token; theo anh cả hai pattern đều được hỗ trợ (theo Samiul, video đăng ngày 30/09/2026).
Matt cảm ơn rồi đọc câu hỏi tiếp, nhưng nói sẽ trả lời trực tiếp người hỏi sau buổi, vì có thể đó là một trao đổi nhiều sắc thái; anh đọc lên phòng khi người khác cũng gặp. Câu hỏi: luồng OAuth giữa MCP host trên Posit Connect với Positron và Posit Assistant hiện có phải chỉ chạy trên Positron desktop không? Người hỏi đang dùng Workbench và gặp vấn đề khi authorize (câu hỏi trong video đăng ngày 30/09/2026).
Matt trả lời: đó là chỗ bạn phải đặt một biến redirect trong các instance để luồng đó chạy đúng. Có tài liệu về việc này, và đã từng có một phiên bản Workbench gặp lỗi ở đây. Anh sẽ liên hệ người hỏi và hỏi thêm vài câu để trả lời được. Nhưng đúng vậy, có thể đó là một thiết lập cấu hình trong instance Workbench và Connect, nơi bạn phải chỉ cho nó redirect đi đâu, và có tài liệu cho việc đó (theo Matt, video đăng ngày 30/09/2026).
Matt nói có một câu hỏi anh thấy thú vị, và để Samiul trả lời trước: về việc dùng MCP server tự build so với MCP server của bên thứ ba. Samiul nghĩ gì?
Samiul nói, một lần nữa, trong ngành dược, có lẽ nên nghĩ về MCP server tự build như những tool tùy biến: thống kê đã kiểm định hay những câu query bạn tin. Vì bạn tự build, bạn kiểm tra được nó, và bạn dễ dàng kéo người khác cùng tham gia. Còn khi dùng của bên thứ ba, hoặc bạn phải tin hoàn toàn bên đã cung cấp nó, hoặc nếu bạn dùng MCP của một vendor khác, có thể bạn đã có thỏa thuận với vendor đó và đủ tin họ để dùng tool của họ trong một môi trường bị quản lý chặt (theo Samiul, video đăng ngày 30/09/2026).
Anh nói thẳng: theo anh, với phần lớn workflow tùy biến, với cách ngành life sciences đã phát triển, có lẽ bạn có những SAS macro tùy biến của riêng mình, những thư viện R mà bạn không công bố ra ngoài; chúng nằm trong repo GitHub nội bộ và có thể được nối với Posit Package Manager. Anh gợi ý nghĩ về các MCP tool tùy biến theo cách đó. Nhưng nếu đã có thứ gì đó từ bên thứ ba mà bạn kiểm tra được hay tin được, thì cứ dùng (theo Samiul, video đăng ngày 30/09/2026).
Anh lấy ví dụ ở Posit: anh và đồng nghiệp tin một số connector. Anh kết nối được Gmail của mình vì Posit có sự tin tưởng đó, có thỏa thuận với Google, và cũng với Anthropic. Nên Posit cho phép Claude đọc Gmail của anh và tóm tắt email. Theo anh, rốt cuộc nó tùy vào chính sách bảo mật, chính sách IT của tổ chức bạn và cách bạn nhìn AI governance nói chung (theo Samiul, video đăng ngày 30/09/2026).
Matt đồng ý hoàn toàn. Anh muốn thêm một điều: một ví dụ hay là GitHub có một MCP. Và đúng như Samiul nói, thường có vẻ tốt hơn khi có một cái có mục tiêu, bạn tự build cái của mình, vì GitHub MCP có thể có tới 100 lệnh gọi. Theo Matt, hồi đầu ai cũng biết là nó có rất nhiều tool khác nhau bạn có thể gọi, và việc đó, một lần nữa, ăn rất nhiều context (theo video đăng ngày 30/09/2026). Có thể bạn muốn AI client đọc được issue nhưng không ghi được issue.
18. Q&A: Microsoft Copilot, PHI, các ngôn ngữ được hỗ trợ và lời kết
Matt nói tiếp: trong trường hợp đó, bạn có thể lấy một cái của bên thứ ba rồi chỉnh lại, như Samiul đã nhắc. Bạn có thể cắt bớt nó. Bạn có thể fork bản đó, nhờ AI client nói kiểu: "này, bỏ hết phần này, chúng tôi chỉ muốn vài skill này thôi". Đó là một điều khác anh đã thấy: lấy một MCP mã nguồn mở của bên thứ ba và chỉ giữ những thành phần bạn cần, vì người ta build MCP đó cho rất nhiều use case khác nhau. Có thể trong tổ chức của bạn chỉ cần bảy tool call này, không cần tất cả những cái còn lại. Vậy bạn có thể lấy những MCP mã nguồn mở của bên thứ ba rồi sửa cho hợp nhu cầu, thêm tool mới hay bỏ bớt, để nó thật sự được tùy biến cho tổ chức của bạn (theo Matt, video đăng ngày 30/09/2026).
Câu hỏi tiếp theo. Matt nói anh không biết nhiều về chuyện này, nhưng đã tìm được vài tài liệu. Có một câu hỏi gửi tới, và anh hỏi Samiul có biết về việc tích hợp MCP server với Microsoft Copilot không; anh đoán ý người hỏi là Copilot 365. Samiul nói anh chưa tìm hiểu, và đó là một câu hỏi hay.
Matt đồng ý là câu hỏi hay. Anh nói anh đã tra ngay khi thấy câu hỏi: có tài liệu trên site của Microsoft về việc mở rộng Copilot bằng MCP. Nhưng anh thừa nhận mình chỉ vừa tìm thấy tài liệu và mới xem qua. Còn về việc triển khai, đội bảo mật của bạn có thể có tiêu chuẩn riêng, hoặc bạn thật sự phải bàn với đội bảo mật (theo Matt, video đăng ngày 30/09/2026).
Matt nói đã sắp hết giờ, có lẽ còn kịp ít nhất một câu nữa, và lại để Samiul trả lời trước: một câu hỏi về Posit Assistant khi dùng với PHI. Có dùng được với PHI không?
Samiul trả lời: Posit Assistant, khi dùng từ sản phẩm chuyên nghiệp của Posit là Posit Workbench, hay cả với bản desktop miễn phí, tự nó không lưu dữ liệu. Nhưng điều quan trọng cần hiểu là khi bạn gửi dữ liệu tới một LLM, LLM đó thấy được một phần dữ liệu, hay metadata, bất cứ thứ gì bạn gửi đi (theo Samiul, video đăng ngày 30/09/2026).
Vậy trong bối cảnh doanh nghiệp, điều được kỳ vọng là gì? Theo Samiul, lý tưởng là bạn có một chính sách và thỏa thuận zero data retention với nhà cung cấp LLM. Anh nói đó là cách phần lớn các tổ chức life sciences vận hành: có lẽ họ đều có một dạng thỏa thuận nào đó với nhà cung cấp LLM, nơi bên cung cấp không giữ lại dữ liệu nào (theo video đăng ngày 30/09/2026).
Anh nói thêm: Posit cũng cung cấp một thứ gọi là Posit AI Pass, cũng đi kèm chính sách zero data retention, và đó là một gói subscription. Bạn có thể dùng nó, và nó sẽ không lưu dữ liệu của bạn. Nhưng LLM vẫn thấy được dữ liệu của bạn, và theo anh đó là điều quan trọng (theo Samiul, video đăng ngày 30/09/2026).
Matt thêm một ý: Posit AI Pass thật ra là dành cho người dùng cá nhân, không phải thứ dành cho tổ chức. Kỳ vọng của Posit, nhất là với tài khoản doanh nghiệp hay tổ chức, là bring your own provider, bring your own key, như Samiul đã nói. Vậy việc đó thật sự tùy bạn: bạn thấy thoải mái tới đâu với các thỏa thuận đang có với nhà cung cấp của mình, so với dùng Posit Assistant trực tiếp (theo Matt, video đăng ngày 30/09/2026).
Matt nói hóa ra vẫn còn thời gian cho một câu nữa: các ngôn ngữ được hỗ trợ cho MCP trên Connect. Hai người đã nhắc R, đã nhắc Python. Ở gói Advanced, Connect còn có Node.js, nên đó cũng là một lựa chọn. Theo Matt đó là phần mới được bổ sung gần đây: bạn có thể build một MCP server bằng Node.js và host nó trên Connect (theo video đăng ngày 30/09/2026).
Matt nói chỉ còn một phút, nên đây là lúc kết thúc. Anh cảm ơn mọi người đã dành thời gian tham dự. Còn vài câu hỏi hai người sẽ trả lời riêng sau buổi, nhất là câu liên quan tới Workbench và việc kết nối tới một MCP server trên Connect, để giúp người hỏi gỡ vướng. Anh cảm ơn mọi người đã dành thời gian hôm nay và chúc mọi người phần còn lại của ngày thứ Tư thật tốt. Buổi webinar khép lại bằng lời cảm ơn mọi người.
Nguồn và liên kết 15 nguồn
- Tên gốc: MCP Servers Explained: Hosting MCP Servers on Posit Connect | Workflow Demo Series
- Sự kiện: YouTube
- Video gốc: https://www.youtube.com/watch?v=ZTJKDJz3ERI youtube.com
- Kênh YouTube Posit PBC (Matt Leary & Samiul Haque): youtube.com/channel/UC3xfbCMLCw1Hh4dWop3XtHg youtube.com
- Trang tài liệu "MCP servers" của Posit Connect, nơi có ví dụ
server.pyvà lệnhrsconnect deploy fastapiở trên (đọc ngày 03/11/2026): docs.posit.co/connect/user/mcp-servers docs.posit.co - Bài blog "Hosting MCP Servers on Posit Connect", một trong hai bài được nhắc trong docstring của
server.pytrong demo: posit.co/blog/hosting-mcp-servers-on-connect posit.co - Bài blog "Hosting MCP Servers on Connect: Authentication, Governance, and Access Control", bài còn lại trong docstring đó: posit.co/blog/mcp-servers-on-connect-managing-credentials-and-access posit.co
- Tài liệu "Publishing from VS Code or Positron" (Posit Publisher): docs.posit.co/connect/user/publishing-positron-vscode docs.posit.co
- Tài liệu "Integrations" của Connect (Snowflake, Databricks và các integration khác, đọc ngày 03/11/2026): docs.posit.co/connect/user/oauth-integrations docs.posit.co
- Posit SDK cho Python, module
connect.external.snowflake: posit-dev.github.io/posit-sdk-py/reference/connect.external.snowflake.html posit-dev.github.io - Posit Assistant trong Positron: positron.posit.co/assistant.html positron.posit.co
- Tài liệu "MCP Servers" của Posit Assistant: assistant.posit.co/docs/reference/mcp-servers assistant.posit.co
- mcptools, package R cho MCP được nhắc trong phần Q&A (đọc ngày 03/11/2026): posit-dev.github.io/mcptools posit-dev.github.io
- FastMCP, framework Python dùng trong demo: gofastmcp.com gofastmcp.com
- Model Context Protocol: modelcontextprotocol.io modelcontextprotocol.io